what could be the possible operation causing a java.lang.ArrayIndexOutOfBoundsException?

36 views
Skip to first unread message

Yuanzhe Yang

unread,
Jul 5, 2016, 9:48:00 AM7/5/16
to MapDB

Hi all,


Has anyone experienced ArrayIndexOutOfBoundsException? It happens randomly and I cannot find a pattern to recreate the same issue. Therefore I have no clue about the potential reason which can cause it.


I use a tree map to store logs with keys in integer and values in custom class with combination of integers, strings, dates and byte arrays. Two secondary keys are also created to index types and timestamps. The database is initialized as follows, which is pretty straightforward in my opinion...


db = DBMaker.fileDB(dbFile).closeOnJvmShutdown().transactionDisable().make();
            logMap = db.treeMap("log");
            properties = db.hashMap("properties");
            triggerIndex = db.treeSetCreate("triggerIndex").comparator(Fun.COMPARABLE_ARRAY_COMPARATOR).makeOrGet();
            Bind.secondaryKey(logMap, triggerIndex, new Fun.Function2<SearchTrigger, Integer, Log>() {
                @Override
                public SearchTrigger run(Integer key, Log value) {
                    return value.getSearchTrigger();
                }
            });
            dateIndex = db.treeSetCreate("dateIndex").comparator(Fun.COMPARABLE_ARRAY_COMPARATOR).makeOrGet();
            Bind.secondaryKey(logMap, dateIndex, new Fun.Function2<Long, Integer, Log>() {
                @Override
                public Long run(Integer key, Log value) {
                    return value.getTimestamp().getTime();
                }
            });

After running properly for some period, something is broken and I am not able to call any method, for example: 


I cannot put new data into the map:


java.lang.ArrayIndexOutOfBoundsException: 1
        at org.mapdb.DataIO$DataInputByteArray.readChar(DataIO.java:475)
        at org.mapdb.DataIO$DataInputByteArray.readUnsignedShort(DataIO.java:469)
        at org.mapdb.BTreeMap$NodeSerializer.deserialize(BTreeMap.java:847)
        at org.mapdb.BTreeMap$NodeSerializer.deserialize(BTreeMap.java:760)
        at org.mapdb.Store.deserialize(Store.java:415)
        at org.mapdb.StoreDirect.getFromOffset(StoreDirect.java:328)
        at org.mapdb.StoreDirect.get2(StoreDirect.java:312)
        at org.mapdb.Store.get(Store.java:253)
        at org.mapdb.Engine$CloseOnJVMShutdown.get(Engine.java:455)
        at org.mapdb.BTreeMap.put2(BTreeMap.java:1098)
        at org.mapdb.BTreeMap.put(BTreeMap.java:1086)



I cannot get the size of a map:


java.lang.ArrayIndexOutOfBoundsException: 1
org.mapdb.DataIO$DataInputByteArray.readChar(DataIO.java:475)
org.mapdb.DataIO$DataInputByteArray.readUnsignedShort(DataIO.java:469)
org.mapdb.BTreeMap$NodeSerializer.deserialize(BTreeMap.java:847)
org.mapdb.BTreeMap$NodeSerializer.deserialize(BTreeMap.java:760)
org.mapdb.Store.deserialize(Store.java:415)
org.mapdb.StoreDirect.getFromOffset(StoreDirect.java:328)
org.mapdb.StoreDirect.get2(StoreDirect.java:312)
org.mapdb.Store.get(Store.java:253)
org.mapdb.Engine$CloseOnJVMShutdown.get(Engine.java:455)
org.mapdb.BTreeMap$BTreeIterator.pointToStart(BTreeMap.java:1347)
org.mapdb.BTreeMap$BTreeIterator.<init>(BTreeMap.java:1312)
org.mapdb.BTreeMap.sizeLong(BTreeMap.java:1858)
org.mapdb.BTreeMap.size(BTreeMap.java:1849)



I cannot iterate the map:


java.lang.ArrayIndexOutOfBoundsException: 1
org.mapdb.DataIO$DataInputByteArray.readChar(DataIO.java:475)
org.mapdb.DataIO$DataInputByteArray.readUnsignedShort(DataIO.java:469)
org.mapdb.BTreeMap$NodeSerializer.deserialize(BTreeMap.java:847)
org.mapdb.BTreeMap$NodeSerializer.deserialize(BTreeMap.java:760)
org.mapdb.Store.deserialize(Store.java:415)
org.mapdb.StoreDirect.getFromOffset(StoreDirect.java:328)
org.mapdb.StoreDirect.get2(StoreDirect.java:312)
org.mapdb.Store.get(Store.java:253)
org.mapdb.Engine$CloseOnJVMShutdown.get(Engine.java:455)
org.mapdb.BTreeMap.findLargerNode(BTreeMap.java:2203)
org.mapdb.BTreeMap$BTreeIterator.<init>(BTreeMap.java:1323)
org.mapdb.BTreeMap$BTreeEntryIterator.<init>(BTreeMap.java:1759)
org.mapdb.BTreeMap$SubMap.entryIterator(BTreeMap.java:3053)
org.mapdb.BTreeMap$EntrySet.iterator(BTreeMap.java:2569)
java.util.AbstractMap$2$1.<init>(AbstractMap.java:378)
java.util.AbstractMap$2.iterator(AbstractMap.java:377)



I cannot reopen the map:


java.lang.ArrayIndexOutOfBoundsException: 1
        at org.mapdb.DataIO$DataInputByteArray.readChar(DataIO.java:475)
        at org.mapdb.DataIO$DataInputByteArray.readUnsignedShort(DataIO.java:469)
        at org.mapdb.BTreeMap$NodeSerializer.deserialize(BTreeMap.java:847)
        at org.mapdb.BTreeMap$NodeSerializer.deserialize(BTreeMap.java:760)
        at org.mapdb.Store.deserialize(Store.java:415)
        at org.mapdb.StoreDirect.getFromOffset(StoreDirect.java:328)
        at org.mapdb.StoreDirect.get2(StoreDirect.java:312)
        at org.mapdb.Store.get(Store.java:253)
        at org.mapdb.Engine$CloseOnJVMShutdown.get(Engine.java:455)
        at org.mapdb.BTreeMap.<init>(BTreeMap.java:989)
        at org.mapdb.DB.treeMap(DB.java:1491)
        at org.mapdb.DB.treeMap(DB.java:1445)


Has anyone experienced something similar before? Is there anything I should improve?

Thank you very much and have a nice day!

Regards,
Yang

Yuanzhe Yang

unread,
Jul 5, 2016, 9:50:18 AM7/5/16
to MapDB
Forgot to mention, I use 2.0-beta13.
Reply all
Reply to author
Forward
0 new messages