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

Realm not opening when offline #7883

Open
hkchakladar opened this issue Apr 9, 2024 · 7 comments
Open

Realm not opening when offline #7883

hkchakladar opened this issue Apr 9, 2024 · 7 comments
Assignees

Comments

@hkchakladar
Copy link

How frequently does the bug occur?

Always

Description

Expectation :
Realm.getInstance() to load faster whether online/offline like any other offline library and continue read/write ops. And Realm check network connection, sync in background.

What actually happened :
Realm not behaving like offline-first. Works like online-only. Realm is not opening in Offline mode and taking very long in online.

When online, Realm.getInstanceAsync takes long time to load, based on network speed. On fast network it takes ~1000ms and on slow network it takes almost 10-20 seconds.

This freeze the UI and makes it unsable.

Stacktrace & log output

2023-11-21 19:58:57.841 26613-26796 REALM_SYNC              com.in                   E  Failed to resolve 'ws.asia-south1.gcp.realm.mongodb.com:443': Host not found (authoritative)
2023-11-21 19:58:57.845 26613-26796 REALM_JAVA              com.in                   W  Unknown error code: 'unknown:1999'
2023-11-21 19:58:57.845 26613-26796 REALM_JAVA              com.in                   W  Unknown error code: 'unknown:1999'
2023-11-21 19:58:57.846 26613-26796 REALM_JAVA              com.in                   E  Session Error[wss://realm.mongodb.com/]: UNKNOWN(unknown:1999): WebSocket: Resolve Failed
2023-11-21 19:58:58.634 26613-26796 REALM_SYNC              com.in                   E  Failed to resolve 'ws.asia-south1.gcp.realm.mongodb.com:443': Host not found (authoritative)
2023-11-21 19:58:58.634 26613-26796 REALM_JAVA              com.in                   W  Unknown error code: 'unknown:1999'
2023-11-21 19:58:58.635 26613-26796 REALM_JAVA              com.in                   W  Unknown error code: 'unknown:1999'
2023-11-21 19:58:58.635 26613-26796 REALM_JAVA              com.in                   E  Session Error[wss://realm.mongodb.com/]: UNKNOWN(unknown:1999): WebSocket: Resolve Failed
2023-11-21 19:59:00.191 26613-26796 REALM_SYNC              com.in                   E  Failed to resolve 'ws.asia-south1.gcp.realm.mongodb.com:443': Host not found (authoritative)
2023-11-21 19:59:00.193 26613-26796 REALM_JAVA              com.in                   W  Unknown error code: 'unknown:1999'
2023-11-21 19:59:00.194 26613-26796 REALM_JAVA              com.in                   W  Unknown error code: 'unknown:1999'
2023-11-21 19:59:00.194 26613-26796 REALM_JAVA              com.in                   E  Session Error[wss://realm.mongodb.com/]: UNKNOWN(unknown:1999): WebSocket: Resolve Failed

Can you reproduce the bug?

Always

Reproduction Steps

Here is my code:

long startTime = System.currentTimeMillis();

app = new App(new AppConfiguration.Builder("app-id").build());

if (app.currentUser() != null) {

    Log.e(TAG, "onCreate: Realm user already logged in uid -> " + app.currentUser().getIdentities());

    SyncConfiguration config = new SyncConfiguration.Builder(app.currentUser())
            .initialSubscriptions(new SyncConfiguration.InitialFlexibleSyncSubscriptions() {
                @Override
                public void configure(Realm realm, MutableSubscriptionSet subscriptions) {
                    subscriptions.addOrUpdate(Subscription.create(
                            realm.where(RealmCustomerModel.class).equalTo("uid", app.currentUser().getId()))
                    );

                    subscriptions.addOrUpdate(Subscription.create(
                            realm.where(RealmTxnModel.class).equalTo("uid", app.currentUser().getId()))
                    );
                }
            }).build();

    Log.e(TAG, "Realm getInstance/Async started");

    Realm.getInstanceAsync(config, new Realm.Callback() {
        @Override
        public void onSuccess(Realm realm) {
            uiThreadRealm = realm;
            Log.e(TAG, "onSuccess: Realm getInstanceAsync success in " + (System.currentTimeMillis() - startTime) + "ms");
            populateUi();
            Realm.setDefaultConfiguration(config);
        }
    });
}

Is the configuration correct or am I doing something wrong?

Version

10.15.1

What Atlas App Services are you using?

Both Atlas Device Sync and Atlas App Services

Are you using encryption?

No

Platform OS and version(s)

Android 12

Build environment

Android Studio version: Android Studio Giraffe | 2022.3.1 Patch 2
Android Build Tools version: ...
Gradle version: 8.1.2

Copy link

sync-by-unito bot commented Apr 9, 2024

➤ PM Bot commented:

Jira ticket: RJAVA-1256

@kneth
Copy link
Contributor

kneth commented Apr 12, 2024

A bug in Realm Core v13.26.0 preventing open a Realm when offline has been fixed in v14.4.0. The fix hasn't yet been release for Realm Java. Said that, I don't believe that you are affected by this bug but it might have been introduced earlier than Realm Core v13.26.0.

About the slow downloads: if you have many backlinks, poor performance can be observed. There is an enhancement for it in Realm Java v10.18.0

@sync-by-unito sync-by-unito bot added the Waiting-For-Reporter Waiting for more information from the reporter before we can proceed label Apr 12, 2024
@hkchakladar
Copy link
Author

So what's the solution of Offline issue?

@github-actions github-actions bot added Needs-Attention and removed Waiting-For-Reporter Waiting for more information from the reporter before we can proceed labels Apr 12, 2024
@nirinchev
Copy link
Member

Can you share trace-level logs from a run where you're seeing slow open speeds?

@sync-by-unito sync-by-unito bot added Waiting-For-Reporter Waiting for more information from the reporter before we can proceed More-information-needed More information needed from the reporter. The issue will autoclose if no more information is given. Needs-Attention and removed Needs-Attention labels Apr 16, 2024
@hkchakladar
Copy link
Author

Let's forget the slow download for now.

How to solve the not opening in offline?

@github-actions github-actions bot removed More-information-needed More information needed from the reporter. The issue will autoclose if no more information is given. Waiting-For-Reporter Waiting for more information from the reporter before we can proceed labels Apr 22, 2024
@hkchakladar
Copy link
Author

update?

@rorbech
Copy link
Contributor

rorbech commented May 21, 2024

Hi @hkchakladar. I didn't find anything that should block opening the realm in your snippets. One alternative could be to try to created a named subscription instead of the initialSubscriptions with

SyncConfiguration config = new SyncConfiguration.Builder(app.currentUser())
    .build();

    Log.e(TAG, "Realm getInstance/Async started");

    Realm.getInstanceAsync(config, new Realm.Callback() {
        @Override
        public void onSuccess(Realm realm) {
            uiThreadRealm = realm;
            uiThreadRealm.subscriptions.update {
                    addOrUpdate("subscription1", Subscription.create(
                            realm.where(RealmCustomerModel.class).equalTo("uid", app.currentUser().getId()))
                    );
                    addOrUpdate("subscription2", Subscription.create(
                            realm.where(RealmTxnModel.class).equalTo("uid", app.currentUser().getId()))
                    );
           }
           Log.e(TAG, "onSuccess: Realm getInstanceAsync success in " + (System.currentTimeMillis() - startTime) + "ms");
           populateUi();
           Realm.setDefaultConfiguration(config);
        }
    });

It would probably require some additional insights to know exactly where it is stalling, so if you could supply the trace level logs we might be able to get an idea about the root cause.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants