Random crashes with exception "Fatal Exception: java.lang.IllegalStateException: Chunk 55267 not found"
I randomly get below exceptions reported in my android app which uses nitrite 3.3.0.
Fatal Exception: java.lang.IllegalStateException: Chunk 55267 not found [1.4.200/9]
at org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:950)
at org.h2.mvstore.MVStore.getChunk(MVStore.java:1230)
at org.h2.mvstore.MVStore.readBufferForPage(MVStore.java:1214)
at org.h2.mvstore.MVStore.readPage(MVStore.java:2209)
at org.h2.mvstore.MVMap.readPage(MVMap.java:672)
at org.h2.mvstore.Page$NonLeaf.getChildPage(Page.java:1043)
at org.h2.mvstore.CursorPos.traverseDown(CursorPos.java:58)
at org.h2.mvstore.MVMap.operate(MVMap.java:1804)
at org.h2.mvstore.MVMap.putIfAbsent(MVMap.java:564)
at org.dizitart.no2.store.NitriteMVMap.putIfAbsent(NitriteMVMap.java:105)
at org.dizitart.no2.internals.DataService.insert(DataService.java:84)
at org.dizitart.no2.internals.DataService.update(DataService.java:135)
at org.dizitart.no2.internals.NitriteService.update(NitriteService.java:373)
at org.dizitart.no2.internals.DefaultNitriteCollection.update(DefaultNitriteCollection.java:322)
at org.dizitart.no2.objects.DefaultObjectRepository.update(DefaultObjectRepository.java:141)
at org.dizitart.no2.objects.DefaultObjectRepository.update(DefaultObjectRepository.java:126)
at com.my.app.DatabaseHelper.persistReceipt(DatabaseHelper.java:619)
...
...
Caused by java.lang.IllegalStateException: Chunk 55194 not found [1.4.200/9]
at org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:950)
at org.h2.mvstore.MVStore.getChunk(MVStore.java:1230)
at org.h2.mvstore.MVStore.readBufferForPage(MVStore.java:1214)
at org.h2.mvstore.MVStore.readPage(MVStore.java:2209)
at org.h2.mvstore.MVMap.readPage(MVMap.java:672)
at org.h2.mvstore.Page$NonLeaf.getChildPage(Page.java:1043)
at org.h2.mvstore.Cursor.hasNext(Cursor.java:53)
at java.util.LinkedHashSet.<init>(LinkedHashSet.java:81)
at org.dizitart.no2.filters.NotFilter.matchedSet(NotFilter.java:41)
at org.dizitart.no2.filters.NotFilter.apply(NotFilter.java:52)
at org.dizitart.no2.objects.filters.NotObjectFilter.apply(NotObjectFilter.java:51)
at org.dizitart.no2.internals.SearchService.find(SearchService.java:67)
at org.dizitart.no2.internals.DataService.remove(DataService.java:211)
at org.dizitart.no2.internals.NitriteService.remove(NitriteService.java:384)
at org.dizitart.no2.internals.DefaultNitriteCollection.remove(DefaultNitriteCollection.java:360)
at org.dizitart.no2.objects.DefaultObjectRepository.remove(DefaultObjectRepository.java:176)
at org.dizitart.no2.objects.DefaultObjectRepository.remove(DefaultObjectRepository.java:170)
at com.my.app.DatabaseHelper.removeReceipts(DatabaseHelper.java:666)
...
...
I reported this issue in h2-database in following issue. The response from them was this could be due to not using registerVersionUsage() and deregisterVersionUsage(). I couldn't find these methods when I searched nitrite code, so this is a possibility.
h2database/h2database#2590 (comment)
If using registerVersionUsage() and deregisterVersionUsage() could affect performance, let the uses of nitrite configure whether it could be used or not.