Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

io.objectbox.exception.FileCorruptException: Corrupt DB, min key size violated: 0 #1143

Open
linge123 opened this issue Jul 19, 2023 · 8 comments
Labels
bug Something isn't working
Milestone

Comments

@linge123
Copy link

hello in my app always

Basic info (please complete the following information):
ObjectBox version : :3.5.1
Reproducibility: occurred once only
Devices: android

init boxStore code:
BoxStoreBuilder storeBuilder = MyObjectBox.builder()
.validateOnOpen(ValidateOnOpenMode.WithLeaves) // Additional DB page validation
.validateOnOpenPageLimit(20)
.androidContext(context.getApplicationContext())

queryData code:
getBox().query().equal(Db_.userId, "4229047", QueryBuilder.StringOrder.CASE_INSENSITIVE).build().find();

Logs, stack traces:
io.objectbox.exception.FileCorruptException: Corrupt DB, min key size violated: 0
at io.objectbox.query.Query.nativeFind(Native Method)
at io.objectbox.query.Query.lambda$find$2$io-objectbox-query-Query(Query.java:252)
at io.objectbox.query.Query$$ExternalSyntheticLambda4.call(Unknown Source:2)
at io.objectbox.BoxStore.callInReadTx(BoxStore.java:940)
at io.objectbox.BoxStore.callInReadTxWithRetry(BoxStore.java:886)
at io.objectbox.query.Query.callInReadTx(Query.java:368)
at io.objectbox.query.Query.find(Query.java:251)

image

@linge123 linge123 added the bug Something isn't working label Jul 19, 2023
@greenrobot
Copy link
Member

greenrobot commented Jul 23, 2023

Reproducibility: occurred once only

That's a little problematic to work with because the stacktrace doesn't help us in this case.

If you see some way to reproduce, please let us know. Otherwise, a next upcoming version will provide validation for this error type, which might be helpful.

Edit: See also related #1090.

@greenrobot greenrobot added the more info required Further information is requested label Jul 23, 2023
@github-actions github-actions bot removed the more info required Further information is requested label Aug 2, 2023
@ldpGitHub
Copy link

i get this error also,in my case ,i found another problem,some data can't been query by isNull, after that i get this error in bugly

@ldpGitHub
Copy link

here is the stackTrace,user already unistall the app,so i can't provide more infomation for this
#2 main

io.objectbox.exception.FileCorruptException

Corrupt DB, min key size violated: 0

io.objectbox.query.Query.nativeFind(Native Method)
io.objectbox.query.Query.lambda$find$2$io-objectbox-query-Query(Query.java:252)
io.objectbox.query.Query$$ExternalSyntheticLambda6.call(Unknown Source:2)
io.objectbox.BoxStore.callInReadTx(BoxStore.java:940)
io.objectbox.BoxStore.callInReadTxWithRetry(BoxStore.java:886)
io.objectbox.query.Query.callInReadTx(Query.java:368)
io.objectbox.query.Query.find(Query.java:251)

@greenrobot-team greenrobot-team added this to the 3.6.1 milestone Aug 23, 2023
@greenrobot-team
Copy link
Member

We have released version 3.7.0 which contains a new validation option to help diagnose this issue.

A new key/value validation option validateOnOpenKv() is available on MyObjectBox.builder(). If enabled, the build() call will throw a FileCorruptException if corruption is detected with details on which key/value is affected in the exception message.

This can be used if the above exception is thrown to re-open the store with additional validation to get more details:

try {
    boxStore = storeBuilder.build();
} catch (FileCorruptException e) {
    try {
        boxStore = MyObjectBox.builder()
                .androidContext(context.getApplicationContext())
                .validateOnOpenKv()
                .build();
    } catch (FileCorruptException ce) {
        // TODO Report the exception message, for example:
        // KV validation failed; key is empty (KV pair number: 1, key size: 0, data size: 112)
    }
}

@linge123
Copy link
Author

We have released version 3.7.0 which contains a new validation option to help diagnose this issue.

A new key/value validation option validateOnOpenKv() is available on MyObjectBox.builder(). If enabled, the build() call will throw a FileCorruptException if corruption is detected with details on which key/value is affected in the exception message.

This can be used if the above exception is thrown to re-open the store with additional validation to get more details:

try {
    boxStore = storeBuilder.build();
} catch (FileCorruptException e) {
    try {
        boxStore = MyObjectBox.builder()
                .androidContext(context.getApplicationContext())
                .validateOnOpenKv()
                .build();
    } catch (FileCorruptException ce) {
        // TODO Report the exception message, for example:
        // KV validation failed; key is empty (KV pair number: 1, key size: 0, data size: 112)
    }
}

FileCorruptException:

io.objectbox.exception.FileCorruptException: KV validation failed; key is empty (KV pair number: 40753, key size: 0, data size: 3145)

@greenrobot-team
Copy link
Member

@linge123 Thanks for this!

If possible, can you send use the corrupted database file? (We have some example code on how to ask users to do this for a production app.)

Also to everyone, would it be helpful if ObjectBox included a repair mode that would delete corrupted keys and values (basically affected objects)?

@linge123
Copy link
Author

Add a repair mode, that would be great。

The database contains user private information, which is best not to do so

@ldpGitHub
Copy link

Add a repair mode, that would be great。

The database contains user private information, which is best not to do so

how many data when crash happens ? i guess it may assosiate with data size , in my case it was about 50W data in one table

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

4 participants