Skip to content

[BUG] "Continue Your Session" sometimes partially works #494

@trav3ll3r

Description

@trav3ll3r

Code of conduct

Self-training on how to write a bug report

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

When restoring an existing Session account (by using the Recovery Phrase), sometimes the data is synced with partial success.

Example:
Alice and Bob start a conversation (AKA Thread) and exchange 10 messages.
When Alice tries to restore their account, the conversation only shows 7 messages, with 3 non-consecutive messages missing. If that happens, it's always the same 3 messages.
However, if Alice leaves the application running, after (roughly) 15 minutes the missing 3 messages get synced up and the conversation is then fully synced.

Technical details

The swarm that I observed consists of 7 SNodes.
I'll list them in their masked form but if need be I can provide full IPs.

SNode IP (masked) Has an issue
1 178.xxx.xxx.30 Y
2 209.xxx.xxx.xxx N
3 10x.xxx.xxx.xxx N
4 192.xxx.xxx.238 Y
5 188.xxx.xxx.32 Y
6 8x.xxx.xxx.xxx N
7 2.xxx.xxx.xxx N

As the app will cycle through them to avoid hitting the same one repeatedly, the issue gives an appearance of randomness. By modifying the application code you can remove randomness of the behaviour. To achieve that change the method getSwarm (in LokiAPIDatabase.kt) to always return the same SNode.

Once the randomness is out of the way, it becomes apparent that if the client app is asking SNode oxen-io/session-android#1 for the account information, the response will not contain any messages that are stored on SNode oxen-io/session-android#4 or SNode oxen-io/session-android#5.

Expected Behavior

When restoring an existing account via "Continue Your Session" all data should be synced on the first launch. Granted if there is heaps of data to sync (over 512) the chunking will happen but the process should be one continuous stream of data until all is done, without the need to wait for 15min windows or relaunching the app (somewhat a workaround).

Steps To Reproduce

  1. Create 2 accounts (i.e. Alice and Bob)
  2. Record their Recover Phrases
  3. Exchange a few messages between them
  4. Modify the app to only use SNode#4 (or SNode#5) as explained above
  5. Launch the app and send at least one message from Alice to Bob (or vice-versa)
  6. Modify the app again to only use SNode#1
  7. Launch the app and clear the data (Settings -> Clear Data -> Clear Device Only)
  8. Launch the app again, use Continue Your Session and notice if messages (from step 5) are missing in the Thread

Android Version

Android 13

Session Version

1.17.4

Anything else?

This looks like an SNode issue rather than the Client app. I'm unsure which "back-end" project exactly to log this issue against, hence I created it here.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions