Skip to content

Commit 6006c28

Browse files
authored
fix: Increment sequence when accepting new manifests (#6059)
The `ManifestCache::applyManifest` function was returning early without incrementing `seq_`. `OverlayImpl `uses this sequence to identify/invalidate a cached `TMManifests` message, which is exchanged with peers on connection. Depending on network size, startup sequencing, and topology, this can cause syncing issues. This change therefore increments `seq_` when a new manifest is accepted.
1 parent e79673c commit 6006c28

File tree

2 files changed

+9
-0
lines changed

2 files changed

+9
-0
lines changed

src/test/app/Manifest_test.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -827,8 +827,13 @@ class Manifest_test : public beast::unit_test::suite
827827

828828
// applyManifest should accept new manifests with
829829
// higher sequence numbers
830+
auto const seq0 = cache.sequence();
830831
BEAST_EXPECT(cache.applyManifest(clone(s_a0)) == ManifestDisposition::accepted);
832+
BEAST_EXPECT(cache.sequence() > seq0);
833+
834+
auto const seq1 = cache.sequence();
831835
BEAST_EXPECT(cache.applyManifest(clone(s_a0)) == ManifestDisposition::stale);
836+
BEAST_EXPECT(cache.sequence() == seq1);
832837

833838
BEAST_EXPECT(cache.applyManifest(clone(s_a1)) == ManifestDisposition::accepted);
834839
BEAST_EXPECT(cache.applyManifest(clone(s_a1)) == ManifestDisposition::stale);

src/xrpld/app/misc/detail/Manifest.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,10 @@ ManifestCache::applyManifest(Manifest m)
459459

460460
auto masterKey = m.masterKey;
461461
map_.emplace(std::move(masterKey), std::move(m));
462+
463+
// Something has changed. Keep track of it.
464+
seq_++;
465+
462466
return ManifestDisposition::accepted;
463467
}
464468

0 commit comments

Comments
 (0)