Fixed
Pinned fields
Click on the next to a field label to start pinning.
Details
Assignee
Adam FraserAdam FraserReporter
Adam FraserAdam FraserStory Points
1Components
Sprint
NoneFix versions
Priority
CriticalInstabug
Open Instabug
Details
Details
Assignee
Adam Fraser
Adam FraserReporter
Adam Fraser
Adam FraserStory Points
1
Components
Sprint
None
Fix versions
Priority
Instabug
Open Instabug
PagerDuty
PagerDuty
PagerDuty
Sentry
Sentry
Sentry
Zendesk Support
Zendesk Support
Zendesk Support
Created May 9, 2023 at 3:42 PM
Updated August 31, 2024 at 11:00 AM
Resolved May 31, 2023 at 4:26 PM
proveAttachment only checks for existence of an attachment using just the digest and the legacy attachment storage format (base.AttPrefix + digest).
This breaks replication of attachments stored in the new format, at least for ISGR, when the attachment already exists on the remote peer.
Sample failing use case:
1. ISGR replication between SG 3.0.x and SG 2.8.x. Can be running in any configuration that replicates data from 3.0.x to 2.8.x (pull from 2.8.x, or push from 3.0.x)
2. Create a document with an attachment on 3.0.x. This will replicate successfully (as the attachment doesn't exist on 2.8.x, and so won't try to proveAttachment)
3. Create another document with the same attachment on 3.0.x. This will be stored in the new format on 3.0.x. Since the attachment already exists for that digest on 2.8.x, 2.8.x will send a proveAttachment request with just the digest
4. SG 3.0.x will look for the attachment in the old format and not find it, and then return "attachment not found".
5. SG 2.8.x doesn't fall back to getAttachment for "attachment not found" - it only falls back on NoBlipHandlerError
6. This results in a fatal error and the revision isn't replicated.
There are a few possible fixes here:
a. Have 3.0.x return NoBlipHandlerError when receiving a proveAttachment request from a replication using BlipCBMobileReplicationV2. Legacy peers will then fall through to getAttachment.
b. Have the 3.0.x proveAttachment code perform the same docID lookup that getAttachment is doing (using the docID in allowedAttachments, since legacy clients won't include it in the proveAttachments message)
c. Have 2.8.x recognize "attachment not found" and fall through to getAttachment.
I think (b) would be the preferred option, but it needs additional testing to ensure it works as expected.