Database corrupted while inserting big string
Wednesday, 7 January 2015 · 2 messages · last reply 8 Jan 2015
JM
jean-marc Mercier7 Jan 2015 08:15 #
Hello,
I am trying to insert big string into BaseX, and ended corrupting the whole database. Here a test code , can you reproduce it ?
declare updating function local:dbtest($db as xs:string) {
db:replace($db,"map",<map>{fn:serialize(1 to 10000000)}</map>)
};
local:dbtest("MyDataBase")output :
Improper use? Potential bug? Your feedback is welcome:
Contact: basex-talk at mailman.uni-konstanz.de
Version: BaseX 8.0 beta 769b53b
Java: Oracle Corporation, 1.8.0_25
OS: Windows 7, amd64
Stack Trace:
java.lang.IndexOutOfBoundsException
at java.io.RandomAccessFile.writeBytes(Native Method)
at java.io.RandomAccessFile.write(Unknown Source)
at org.basex.io.random.DataAccess.writeBlock(DataAccess.java:448)
at org.basex.io.random.DataAccess.flush(DataAccess.java:49)
at org.basex.io.random.DataAccess.close(DataAccess.java:61)
at org.basex.data.DiskData.close(DiskData.java:151)
at org.basex.core.cmd.Close.close(Close.java:45)
at org.basex.query.QueryResources.close(QueryResources.java:110)
at org.basex.query.QueryContext.close(QueryContext.java:564)
at org.basex.query.QueryProcessor.close(QueryProcessor.java:235)
at org.basex.core.cmd.AQuery.query(AQuery.java:129)
at org.basex.core.cmd.XQuery.run(XQuery.java:22)
at org.basex.core.Command.run(Command.java:379)
at org.basex.core.Command.execute(Command.java:95)
at org.basex.api.client.LocalSession.execute(LocalSession.java:132)
at org.basex.api.client.Session.execute(Session.java:36)
at org.basex.core.CLI.execute(CLI.java:106)
at org.basex.BaseX.<init>(BaseX.java:124)
at org.basex.BaseX.main(BaseX.java:42)CG
Christian Grün8 Jan 2015 16:19 #
The bug (which occur in some instances if very large strings were stored) has been fixed in the latest snapshot [1].
Thanks,
Christian
[1] http://files.basex.org/releases/latest
Quoted text · jean-marc Mercier · 43 lines
On Wed, Jan 7, 2015 at 8:15 AM, jean-marc Mercier <jeanmarc.mercier at gmail.com> wrote: > Hello, > > I am trying to insert big string into BaseX, and ended corrupting the whole > database. Here a test code , can you reproduce it ? > > declare updating function local:dbtest($db as xs:string) { > db:replace($db,"map",<map>{fn:serialize(1 to 10000000)}</map>) > }; > > local:dbtest("MyDataBase") > > output : > > Improper use? Potential bug? Your feedback is welcome: > Contact: basex-talk at mailman.uni-konstanz.de > Version: BaseX 8.0 beta 769b53b > Java: Oracle Corporation, 1.8.0_25 > OS: Windows 7, amd64 > Stack Trace: > java.lang.IndexOutOfBoundsException > at java.io.RandomAccessFile.writeBytes(Native Method) > at java.io.RandomAccessFile.write(Unknown Source) > at org.basex.io.random.DataAccess.writeBlock(DataAccess.java:448) > at org.basex.io.random.DataAccess.flush(DataAccess.java:49) > at org.basex.io.random.DataAccess.close(DataAccess.java:61) > at org.basex.data.DiskData.close(DiskData.java:151) > at org.basex.core.cmd.Close.close(Close.java:45) > at org.basex.query.QueryResources.close(QueryResources.java:110) > at org.basex.query.QueryContext.close(QueryContext.java:564) > at org.basex.query.QueryProcessor.close(QueryProcessor.java:235) > at org.basex.core.cmd.AQuery.query(AQuery.java:129) > at org.basex.core.cmd.XQuery.run(XQuery.java:22) > at org.basex.core.Command.run(Command.java:379) > at org.basex.core.Command.execute(Command.java:95) > at org.basex.api.client.LocalSession.execute(LocalSession.java:132) > at org.basex.api.client.Session.execute(Session.java:36) > at org.basex.core.CLI.execute(CLI.java:106) > at org.basex.BaseX.<init>(BaseX.java:124) > at org.basex.BaseX.main(BaseX.java:42) > >
Written for BaseX 7.9. BaseX may have changed since: please check the current documentation.
⚡Generated with XQuery