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

Backlinks to renamed objects are broken #1377

Closed
jadar opened this issue May 5, 2023 · 2 comments
Closed

Backlinks to renamed objects are broken #1377

jadar opened this issue May 5, 2023 · 2 comments

Comments

@jadar
Copy link

jadar commented May 5, 2023

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.

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

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

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

@lukaspieper
Copy link

Can confirm this issue, also running into it using an encrypted Realm without sync.

@clementetb
Copy link
Contributor

Fixed by #1385

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Mar 18, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

3 participants