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

[RLM_ERR_SYSTEM_ERROR]: posix_fallocate() failed: Operation not supported on transport endpoint

      How frequently does the bug occur?

      Always

      Description

      Hi,
      We've got a crash on Samsung devices, might be related to secure folder feature of Samsung.

      This crash seems to be the same as the one on RealmJS and the one on RealmDotNet which seems to be a problem with the core codebase. According to RealmJS release note Handle EOPNOTSUPP when using posix_fallocate() and fallback to manually consume space. This should enable android users to open a Realm on restrictive file systems.. On their last release, they target Realm Core v13.26.0 (which is the one of the next version of this lib).

      The exception is raised when calling io.realm.kotlin.Realm.open(configuration).

      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
      Fatal Exception: java.lang.RuntimeException: Unable to create application com.xxxxxxxx.xxxxxxxx.app.xxxxxxxxApplication: java.lang.IllegalStateException: [RLM_ERR_SYSTEM_ERROR]: posix_fallocate() failed: Operation not supported on transport endpoint: Operation not supported on transport endpoint (95)
             at android.app.ActivityThread.handleMakeApplication(ActivityThread.java:7189)
             at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7134)
             at android.app.ActivityThread.access$1600(ActivityThread.java:274)
             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2102)
             at android.os.Handler.dispatchMessage(Handler.java:107)
             at android.os.Looper.loop(Looper.java:237)
             at android.app.ActivityThread.main(ActivityThread.java:8167)
             at java.lang.reflect.Method.invoke(Method.java)
             at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
      
      Caused by java.lang.IllegalStateException: [RLM_ERR_SYSTEM_ERROR]: posix_fallocate() failed: Operation not supported on transport endpoint: Operation not supported on transport endpoint (95)
             at io.realm.kotlin.internal.interop.CoreErrorConverter.asThrowable(CoreErrorConverter.kt:47)
             at io.realm.kotlin.internal.interop.realmcJNI.realm_open(realmcJNI.java)
             at io.realm.kotlin.internal.interop.realmc.realm_open(realmc.java:426)
             at io.realm.kotlin.internal.interop.RealmInterop.realm_open(RealmInterop.kt:235)
             at io.realm.kotlin.internal.ConfigurationImpl$openRealm$2.invoke(ConfigurationImpl.kt:115)
             at io.realm.kotlin.internal.ConfigurationImpl$openRealm$2.invoke(ConfigurationImpl.kt:114)
             at io.realm.kotlin.internal.interop.NativePointerKt.use(NativePointer.kt:53)
             at io.realm.kotlin.internal.ConfigurationImpl.openRealm$suspendImpl(ConfigurationImpl.kt:114)
             at io.realm.kotlin.internal.ConfigurationImpl.openRealm()
             at io.realm.kotlin.internal.RealmImpl$1.invokeSuspend(RealmImpl.kt:130)
             at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
             at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:108)
             at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:280)
             at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:85)
             at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:59)
             at kotlinx.coroutines.BuildersKt.runBlocking(:1)
             at io.realm.kotlin.internal.platform.CoroutineUtilsSharedJvmKt.runBlocking(CoroutineUtilsSharedJvm.kt:22)
             at io.realm.kotlin.internal.platform.CoroutineUtilsSharedJvmKt.runBlocking$default(CoroutineUtilsSharedJvm.kt:21)
             at io.realm.kotlin.internal.RealmImpl.<init>(RealmImpl.kt:112)
             at io.realm.kotlin.internal.RealmImpl.<init>()
             at io.realm.kotlin.internal.RealmImpl$Companion.create$io_realm_kotlin_library(RealmImpl.kt:308)
             at io.realm.kotlin.Realm$Companion.open(Realm.kt:83)
             at com.xxxxxxxx.xxxxxxxx.data.common.libs.realm.RealmModule.providesRealm(RealmModule.kt:107)
             at com.xxxxxxxx.xxxxxxxx.data.common.libs.realm.RealmModule_ProvidesRealmFactory.providesRealm(RealmModule_ProvidesRealmFactory.java:41)
             at com.xxxxxxxx.xxxxxxxx.app.DaggerxxxxxxxxApplication_HiltComponents_SingletonC$SingletonCImpl$SwitchingProvider.get0(DaggerxxxxxxxxApplication_HiltComponents_SingletonC.java:7729)
             at com.xxxxxxxx.xxxxxxxx.app.DaggerxxxxxxxxApplication_HiltComponents_SingletonC$SingletonCImpl$SwitchingProvider.get(DaggerxxxxxxxxApplication_HiltComponents_SingletonC.java:8015)
             at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
             at com.xxxxxxxx.xxxxxxxx.app.DaggerxxxxxxxxApplication_HiltComponents_SingletonC$SingletonCImpl$SwitchingProvider.get0(DaggerxxxxxxxxApplication_HiltComponents_SingletonC.java:7726)
             at com.xxxxxxxx.xxxxxxxx.app.DaggerxxxxxxxxApplication_HiltComponents_SingletonC$SingletonCImpl$SwitchingProvider.get(DaggerxxxxxxxxApplication_HiltComponents_SingletonC.java:8015)
             at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
             at com.xxxxxxxx.xxxxxxxx.app.DaggerxxxxxxxxApplication_HiltComponents_SingletonC$SingletonCImpl$SwitchingProvider.get0(DaggerxxxxxxxxApplication_HiltComponents_SingletonC.java:7720)
             at com.xxxxxxxx.xxxxxxxx.app.DaggerxxxxxxxxApplication_HiltComponents_SingletonC$SingletonCImpl$SwitchingProvider.get(DaggerxxxxxxxxApplication_HiltComponents_SingletonC.java:8015)
             at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
             at com.xxxxxxxx.xxxxxxxx.app.DaggerxxxxxxxxApplication_HiltComponents_SingletonC$SingletonCImpl.shouldUseAntelopScaProviderUseCase(DaggerxxxxxxxxApplication_HiltComponents_SingletonC.java:6398)
             at com.xxxxxxxx.xxxxxxxx.app.DaggerxxxxxxxxApplication_HiltComponents_SingletonC$SingletonCImpl.getScaProvidersEnrolmentStatusUseCase(DaggerxxxxxxxxApplication_HiltComponents_SingletonC.java:6402)
             at com.xxxxxxxx.xxxxxxxx.app.DaggerxxxxxxxxApplication_HiltComponents_SingletonC$SingletonCImpl.isUserEnrolledForScaUseCase(DaggerxxxxxxxxApplication_HiltComponents_SingletonC.java:6406)
             at com.xxxxxxxx.xxxxxxxx.app.DaggerxxxxxxxxApplication_HiltComponents_SingletonC$SingletonCImpl.shouldAuthenticateUserForScaUseCase(DaggerxxxxxxxxApplication_HiltComponents_SingletonC.java:6410)
             at com.xxxxxxxx.xxxxxxxx.app.DaggerxxxxxxxxApplication_HiltComponents_SingletonC$SingletonCImpl.scaAuthenticationLifecycleObserver(DaggerxxxxxxxxApplication_HiltComponents_SingletonC.java:6414)
             at com.xxxxxxxx.xxxxxxxx.app.DaggerxxxxxxxxApplication_HiltComponents_SingletonC$SingletonCImpl.appLifecycleObserverContainer(DaggerxxxxxxxxApplication_HiltComponents_SingletonC.java:6614)
             at com.xxxxxxxx.xxxxxxxx.app.DaggerxxxxxxxxApplication_HiltComponents_SingletonC$SingletonCImpl.injectxxxxxxxxApplication2(DaggerxxxxxxxxApplication_HiltComponents_SingletonC.java:7564)
             at com.xxxxxxxx.xxxxxxxx.app.DaggerxxxxxxxxApplication_HiltComponents_SingletonC$SingletonCImpl.injectxxxxxxxxApplication(DaggerxxxxxxxxApplication_HiltComponents_SingletonC.java:7538)
             at com.xxxxxxxx.xxxxxxxx.app.Hilt_xxxxxxxxApplication.hiltInternalInject(Hilt_xxxxxxxxApplication.java:52)
             at com.xxxxxxxx.xxxxxxxx.app.Hilt_xxxxxxxxApplication.onCreate(Hilt_xxxxxxxxApplication.java:43)
             at com.xxxxxxxx.xxxxxxxx.app.xxxxxxxxApplication.onCreate(xxxxxxxxApplication.kt:118)
             at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1190)
             at android.app.ActivityThread.handleMakeApplication(ActivityThread.java:7184)
             at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7134)
             at android.app.ActivityThread.access$1600(ActivityThread.java:274)
             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2102)
             at android.os.Handler.dispatchMessage(Handler.java:107)
             at android.os.Looper.loop(Looper.java:237)
             at android.app.ActivityThread.main(ActivityThread.java:8167)
             at java.lang.reflect.Method.invoke(Method.java)
             at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
      

      Can you reproduce the bug?

      No

      Reproduction Steps

      I've no Samsung device with Secure Folder to test on it specifically. But reproduction step seems to be:

      • enable Samsung secure folder on device
      • launch an app with a basic Realm configuration
      • wait for the crash at opening

      Version

      1.13.0

      What Atlas App Services are you using?

      Local Database only

      Are you using encryption?

      No

      Platform OS and version(s)

      Samsung devices, for now only on Galaxy Note9, Galaxy S9+, Galaxy S8 running Android 9/10 but not exhaustive

      Build environment

      Android Studio version: Hedgehog 2023.1.1 Patch 2
      Android Build Tools version: 34.0.0
      Gradle version: 8.2.2
      androidMinSdk = "23"
      androidTargetSdk = "34"
      androidCompileSdk = "34"
      kotlin = "1.9.21"

            Assignee:
            Unassigned Unassigned
            Reporter:
            unitosyncbot Unito Sync Bot
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: