diff --git a/fdbserver/ConfigDatabaseUnitTests.actor.cpp b/fdbserver/ConfigDatabaseUnitTests.actor.cpp index f32f3efd2b..e58889abcc 100644 --- a/fdbserver/ConfigDatabaseUnitTests.actor.cpp +++ b/fdbserver/ConfigDatabaseUnitTests.actor.cpp @@ -206,6 +206,7 @@ TEST_CASE("/fdbserver/ConfigDB/ConfigBroadcaster/CheckpointedUpdates") { actors.add(localConfigurationA.consume(cfi)); actors.add(localConfigurationB.consume(cfi)); while (version <= 10) { + versionedMutations = Standalone>{}; appendVersionedMutation(versionedMutations, version, "class-A"_sr, "test_long"_sr, versionToValue(version)); appendVersionedMutation( versionedMutations, version, "class-B"_sr, "test_long"_sr, versionToValue(version * 10)); @@ -221,3 +222,34 @@ TEST_CASE("/fdbserver/ConfigDB/ConfigBroadcaster/CheckpointedUpdates") { } return Void(); } + +TEST_CASE("/fdbserver/ConfigDB/ConfigBroadcaster/Compact") { + state DummyConfigSource dummyConfigSource; + state ConfigBroadcaster broadcaster(dummyConfigSource.getInterface(), deterministicRandom()->randomUniqueID()); + state Reference> cfi = + IDependentAsyncVar::create(makeReference>()); + state LocalConfiguration localConfiguration("class-A", testManualKnobOverrides); + state Version version = 1; + state ActorCollection actors(false); + state Standalone> versionedMutations; + wait(localConfiguration.initialize("./", deterministicRandom()->randomUniqueID())); + TraceEvent("StartedTestBroadcasterAndLocalConfigs") + .detail("Broadcaster", broadcaster.getID()) + .detail("LocalConfiguration", localConfiguration.getID()); + actors.add(dummyConfigSource.serve()); + actors.add(broadcaster.serve(cfi->get())); + while (version <= 10) { + versionedMutations = Standalone>{}; + appendVersionedMutation(versionedMutations, version, "class-A"_sr, "test_long"_sr, versionToValue(version)); + wait(broadcaster.addVersionedMutations(versionedMutations, version)); + ++version; + } + wait(cfi->get().compact.getReply(ConfigFollowerCompactRequest{ version })); + actors.add(localConfiguration.consume(cfi)); + loop { + if (localConfiguration.getTestKnobs().TEST_LONG == 10) { + return Void(); + } + wait(delayJittered(1.0)); + } +} diff --git a/fdbserver/ConfigFollowerInterface.h b/fdbserver/ConfigFollowerInterface.h index a497c8d1aa..8f2f7138b5 100644 --- a/fdbserver/ConfigFollowerInterface.h +++ b/fdbserver/ConfigFollowerInterface.h @@ -149,9 +149,12 @@ struct ConfigFollowerGetChangesRequest { struct ConfigFollowerCompactRequest { static constexpr FileIdentifier file_identifier = 568910; - Version version; + Version version{ 0 }; ReplyPromise reply; + ConfigFollowerCompactRequest() = default; + explicit ConfigFollowerCompactRequest(Version version) : version(version) {} + template void serialize(Ar& ar) { serializer(ar, version, reply);