Description
The bug is occurred in an Android Project.
Description of the bug
During a manual conflict resolution, the objectbox-models/default.json
file may accidentally contain duplicated indexId
entries. During the build time, we don't have any errors. The project builds successfully, and the build output is cached to the Gradle Build Cache. Only at runtime, when we build BoxStore
instance, an error occurred: io.objectbox.exception.DbSchemaException: Duplicate index ID 2 found for property ...
. Moreover, when a developer fixes duplicated indexId
entries in the objectbox-models/default.json
file and rebuilds the project, the error is still in place due to the result of the previous build is used from the Gradle Build Cache. It incurs hard-to-debug problems for our dev team.
Basic info:
- ObjectBox version: 3.5.1
- Reproducibility: always
- Device: any device
- OS: reproduced on Android 11, 13
Steps to reproduce the behavior:
- Activate the Gradle Build Cache: add
org.gradle.caching=true
in thegradle.properties
file. - Add two ObjectBox entities (e.g.
User
andCompany
) with the uniquename
property. - Build the project to generate a
objectbox-models/default.json
file. - Make changes to the
objectbox-models/default.json
file: set the same value to bothindexId
entries (Company.name
andUser.name
). - Rebuild the project.
- Install APK and launch the app. There is the error:
io.objectbox.exception.DbSchemaException: Duplicate index ID 2 found for property ...
- Fix duplicated
indexId
in theobjectbox-models/default.json
file. - Rebuild the project.
- Install APK and launch the app. There is still the same error. The result of the previous build is used.
Expected behavior
- The
Duplicate index ID
error should occur during the build time, not at runtime. - Any change to the
objectbox-models/default.json
file should lead to the invalidation of the Gradle Build Cache to prevent the usage of stale data from the previous build.
Code
I've prepared the demo project to reproduce the problem with the described above steps:
https://github.com/rAseri/ObjectBoxDemo
Logs, stack traces
Process: com.example.myapplication, PID: 24377
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.MainActivity}: io.objectbox.exception.DbSchemaException: Duplicate index ID 2 found for property User.name
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)