Ensure the storage manifest has all inserts and deletes.
A user hit a fishy case where not all inserts were present in the full keyset. It's unclear how that would happen, so I'm being even more explicit here.
This commit is contained in:
parent
a103c7dcb6
commit
6ecff5bce9
1 changed files with 12 additions and 10 deletions
|
@ -330,21 +330,23 @@ public final class StorageSyncHelper {
|
||||||
@NonNull List<StorageId> currentLocalStorageKeys,
|
@NonNull List<StorageId> currentLocalStorageKeys,
|
||||||
@NonNull MergeResult mergeResult)
|
@NonNull MergeResult mergeResult)
|
||||||
{
|
{
|
||||||
Set<StorageId> completeKeys = new HashSet<>(currentLocalStorageKeys);
|
|
||||||
|
|
||||||
completeKeys.addAll(Stream.of(mergeResult.getAllNewRecords()).map(SignalRecord::getId).toList());
|
|
||||||
completeKeys.removeAll(Stream.of(mergeResult.getAllRemovedRecords()).map(SignalRecord::getId).toList());
|
|
||||||
|
|
||||||
SignalStorageManifest manifest = new SignalStorageManifest(currentManifestVersion + 1, new ArrayList<>(completeKeys));
|
|
||||||
|
|
||||||
List<SignalStorageRecord> inserts = new ArrayList<>();
|
List<SignalStorageRecord> inserts = new ArrayList<>();
|
||||||
inserts.addAll(mergeResult.getRemoteInserts());
|
inserts.addAll(mergeResult.getRemoteInserts());
|
||||||
inserts.addAll(Stream.of(mergeResult.getRemoteUpdates()).map(RecordUpdate::getNew).toList());
|
inserts.addAll(Stream.of(mergeResult.getRemoteUpdates()).map(RecordUpdate::getNew).toList());
|
||||||
|
|
||||||
List<byte[]> deletes = Stream.of(mergeResult.getRemoteUpdates()).map(RecordUpdate::getOld).map(SignalStorageRecord::getId).map(StorageId::getRaw).toList();
|
List<StorageId> deletes = new ArrayList<>();
|
||||||
deletes.addAll(Stream.of(mergeResult.getRemoteDeletes()).map(SignalRecord::getId).map(StorageId::getRaw).toList());
|
deletes.addAll(Stream.of(mergeResult.getRemoteDeletes()).map(SignalRecord::getId).toList());
|
||||||
|
deletes.addAll(Stream.of(mergeResult.getRemoteUpdates()).map(RecordUpdate::getOld).map(SignalStorageRecord::getId).toList());
|
||||||
|
|
||||||
return new WriteOperationResult(manifest, inserts, deletes);
|
Set<StorageId> completeKeys = new HashSet<>(currentLocalStorageKeys);
|
||||||
|
completeKeys.addAll(Stream.of(mergeResult.getAllNewRecords()).map(SignalRecord::getId).toList());
|
||||||
|
completeKeys.removeAll(Stream.of(mergeResult.getAllRemovedRecords()).map(SignalRecord::getId).toList());
|
||||||
|
completeKeys.addAll(Stream.of(inserts).map(SignalStorageRecord::getId).toList());
|
||||||
|
completeKeys.removeAll(deletes);
|
||||||
|
|
||||||
|
SignalStorageManifest manifest = new SignalStorageManifest(currentManifestVersion + 1, new ArrayList<>(completeKeys));
|
||||||
|
|
||||||
|
return new WriteOperationResult(manifest, inserts, Stream.of(deletes).map(StorageId::getRaw).toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @NonNull byte[] generateKey() {
|
public static @NonNull byte[] generateKey() {
|
||||||
|
|
Loading…
Add table
Reference in a new issue