-
Type:
Bug
-
Resolution: Fixed
-
Priority:
Major - P3
-
None
-
Affects Version/s: None
-
Component/s: None
How frequently does the bug occur?
Always
Description
I created a backlink from one class to another class, which exist in a one-to-many relationship. I also have these classes using the @PersistedName attribute. The schema fails to validate with this setup.
Unable to find source-code formatter for language: kotlin. Available languages are: actionscript, ada, applescript, bash, c, c#, c++, cpp, css, erlang, go, groovy, haskell, html, java, javascript, js, json, lua, none, nyan, objc, perl, php, python, r, rainbow, ruby, scala, sh, sql, swift, visualbasic, xml, yaml
@PersistedName(name="Grower") class RlmGrower(): RealmObject { @PrimaryKey var _id: String = RealmUUID.random().toString() val farms: RealmResults<RlmFarm> by backlinks(RlmFarm::grower) // ... } @PersistedName(name="Farm") class RlmFarm(): RealmObject { @PrimaryKey var _id: String = RealmUUID.random().toString() @PersistedName(name="growerId") var grower: RlmGrower? = null // ...
And the configuration code:
Unable to find source-code formatter for language: kotlin. Available languages are: actionscript, ada, applescript, bash, c, c#, c++, cpp, css, erlang, go, groovy, haskell, html, java, javascript, js, json, lua, none, nyan, objc, perl, php, python, r, rainbow, ruby, scala, sh, sql, swift, visualbasic, xml, yaml
config = SyncConfiguration.Builder(currentUser, setOf(RlmGrower::class, RlmFarm::class)) .initialSubscriptions { realm -> add(getQuery<RlmGrower>(realm), "Grower Subscription") add(getQuery<RlmFarm>(realm), "Farm Subscription") }
Stacktrace & log output
Unable to find source-code formatter for language: shell. Available languages are: actionscript, ada, applescript, bash, c, c#, c++, cpp, css, erlang, go, groovy, haskell, html, java, javascript, js, json, lua, none, nyan, objc, perl, php, python, r, rainbow, ruby, scala, sh, sql, swift, visualbasic, xml, yaml
Function doesn't have or inherit @Throws annotation and thus exception isn't propagated from Kotlin to Objective-C/Swift as NSError. It is considered unexpected and unhandled instead. Program will be terminated. Uncaught Kotlin exception: kotlin.IllegalStateException: [RLM_ERR_SCHEMA_VALIDATION_FAILED]: Schema validation failed due to the following errors: - Property 'Farm.growerId' of type 'object' has unknown object type 'RlmGrower' - Property 'Farm.growerId' declared as origin of linking objects property 'Grower.farms' links to type 'RlmGrower' at 0 TractionMPShared 0x106e04127 kfun:kotlin.Throwable#<init>(kotlin.String?){} + 123 at 1 TractionMPShared 0x106dfc4a7 kfun:kotlin.Exception#<init>(kotlin.String?){} + 119 at 2 TractionMPShared 0x106dfc8eb kfun:kotlin.RuntimeException#<init>(kotlin.String?){} + 119 at 3 TractionMPShared 0x106dfcf5f kfun:kotlin.IllegalStateException#<init>(kotlin.String?){} + 119 at 4 TractionMPShared 0x1070ee503 kfun:io.realm.kotlin.internal.interop.CoreErrorConverter#asThrowable(kotlin.Int;kotlin.Int;kotlin.String?;kotlin.String?;kotlin.Throwable?){}kotlin.Throwable + 1559 at 5 TractionMPShared 0x107170c47 kfun:io.realm.kotlin.internal.interop.throwOnError#internal + 1195 at 6 TractionMPShared 0x10716f4cf kfun:io.realm.kotlin.internal.interop.checkedPointerResult#internal + 131 at 7 TractionMPShared 0x10716e9c3 kfun:io.realm.kotlin.internal.interop.CPointerWrapper#<init>(kotlinx.cinterop.CPointer<out|kotlinx.cinterop.CPointed>?;kotlin.Boolean){} + 251 at 8 TractionMPShared 0x10716eb97 kfun:io.realm.kotlin.internal.interop.CPointerWrapper#<init>(kotlinx.cinterop.CPointer<out|kotlinx.cinterop.CPointed>?;kotlin.Boolean;kotlin.Int;kotlin.native.internal.DefaultConstructorMarker?){} + 203 at 9 TractionMPShared 0x10711a337 kfun:io.realm.kotlin.internal.interop.RealmInterop#realm_open(io.realm.kotlin.internal.interop.NativePointer<io.realm.kotlin.internal.interop.RealmConfigT>;kotlinx.coroutines.CoroutineDispatcher?){}kotlin.Pair<io.realm.kotlin.internal.interop.NativePointer<io.realm.kotlin.internal.interop.LiveRealmT>,kotlin.Boolean> + 1451 at 10 TractionMPShared 0x10711a763 kfun:io.realm.kotlin.internal.interop.RealmInterop#realm_open$default(io.realm.kotlin.internal.interop.NativePointer<io.realm.kotlin.internal.interop.RealmConfigT>;kotlinx.coroutines.CoroutineDispatcher?;kotlin.Int){}kotlin.Pair<io.realm.kotlin.internal.interop.NativePointer<io.realm.kotlin.internal.interop.LiveRealmT>,kotlin.Boolean> + 275 at 11 TractionMPShared 0x1071a128f kfun:io.realm.kotlin.internal.ConfigurationImpl#openRealm(io.realm.kotlin.internal.RealmImpl){}kotlin.Pair<io.realm.kotlin.internal.FrozenRealmReference,kotlin.Boolean> + 463 at 12 TractionMPShared 0x1073f16b7 kfun:io.realm.kotlin.mongodb.internal.SyncConfigurationImpl.$openRealmCOROUTINE$34#invokeSuspend(kotlin.Result<kotlin.Any?>){}kotlin.Any? + 2623 at 13 TractionMPShared 0x1073f198b kfun:io.realm.kotlin.mongodb.internal.SyncConfigurationImpl#openRealm(io.realm.kotlin.internal.RealmImpl){}kotlin.Pair<io.realm.kotlin.internal.FrozenRealmReference,kotlin.Boolean> + 291 at 14 TractionMPShared 0x1071cb1cb kfun:io.realm.kotlin.internal.RealmImpl.$<init>$lambda$0COROUTINE$203.invokeSuspend#internal + 727 at 15 TractionMPShared 0x106e0866b kfun:kotlin.coroutines.native.internal.BaseContinuationImpl#resumeWith(kotlin.Result<kotlin.Any?>){} + 599 at 16 TractionMPShared 0x1070bc1b3 kfun:kotlinx.coroutines.DispatchedTask#run(){} + 2831 at 17 TractionMPShared 0x10704ec4f kfun:kotlinx.coroutines.EventLoopImplBase#processNextEvent(){}kotlin.Long + 1279 at 18 TractionMPShared 0x1070e186b kfun:kotlinx.coroutines.BlockingCoroutine.joinBlocking#internal + 467 at 19 TractionMPShared 0x1070e1143 kfun:kotlinx.coroutines#runBlocking(kotlin.coroutines.CoroutineContext;kotlin.coroutines.SuspendFunction1<kotlinx.coroutines.CoroutineScope,0:0>){0§<kotlin.Any?>}0:0 + 1719 at 20 TractionMPShared 0x1072684cf kfun:io.realm.kotlin.internal.platform#runBlocking(kotlin.coroutines.CoroutineContext;kotlin.coroutines.SuspendFunction1<kotlinx.coroutines.CoroutineScope,0:0>){0§<kotlin.Any?>}0:0 + 127 at 21 TractionMPShared 0x107268657 kfun:io.realm.kotlin.internal.platform#runBlocking$default(kotlin.coroutines.CoroutineContext?;kotlin.coroutines.SuspendFunction1<kotlinx.coroutines.CoroutineScope,0:0>;kotlin.Int){0§<kotlin.Any?>}0:0 + 339 at 22 TractionMPShared 0x1071c7a67 kfun:io.realm.kotlin.internal.RealmImpl.<init>#internal + 2459 at 23 TractionMPShared 0x1071ca7df kfun:io.realm.kotlin.internal.RealmImpl.Companion#create(io.realm.kotlin.internal.InternalConfiguration){}io.realm.kotlin.internal.RealmImpl + 139 at 24 TractionMPShared 0x10719609f kfun:io.realm.kotlin.Realm.Companion#open(io.realm.kotlin.Configuration){}io.realm.kotlin.Realm + 259 at 25 TractionMPShared 0x10744edf7 kfun:com.********ag.********mp.repository.repo.impl.RealmSyncRepository#<init>(io.realm.kotlin.mongodb.User;kotlin.Function2<io.realm.kotlin.mongodb.sync.SyncSession,io.realm.kotlin.mongodb.exceptions.SyncException,kotlin.Unit>){} + 771 at 26 TractionMPShared 0x10744d073 kfun:com.********ag.********mp.repository.factory.impl.RealmRepositoryFactory#syncRepository(){}com.********ag.********mp.repository.repo.SyncRepository? + 351 at 27 TractionMPShared 0x10749fac7 objc2kotlin_virtual_kfun:com.********ag.********mp.repository.factory.RepositoryFactory#syncRepository(){}com.********ag.********mp.repository.repo.SyncRepository? + 223
Can you reproduce the bug?
Always
Reproduction Steps
No response
Version
1.8.0
What Atlas App Services are you using?
Atlas Device Sync
Are you using encryption?
No
Platform OS and version(s)
iOS 16.4
Build environment
Android Studio version: 2022.1.1 Patch 2
Android Build Tools version:
Gradle version: ...