Uploaded image for project: 'Realm Kotlin'
  1. Realm Kotlin
  2. RKOTLIN-804

Backlinks to renamed objects are broken

      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: ...

            Assignee:
            clemente.tort@mongodb.com Clemente Tort Barbero
            Reporter:
            unitosyncbot Unito Sync Bot
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: