mirror of https://github.com/apache/kafka.git
Implement controller-side snapshot generation.Implement QuorumController snapshot generation. Note that this PR does not handle KRaft integration, just the internal snapshot record generation and consumption logic. Reading a snapshot is relatively straightforward. When the QuorumController starts up, it loads the most recent snapshot. This is just a series of records that we replay, plus a log offset ("snapshot epoch") that we advance to. Writing a snapshot is more complex. There are several components: the SnapshotWriter which persists the snapshot, the SnapshotGenerator which manages writing each batch of records, and the SnapshotGeneratorManager which interfaces the preceding two classes with the event queue. Controller snapshots are done incrementally. In order to avoid blocking the controller thread for a long time, we pull a few record batches at a time from our record batch iterators. These iterators are implemented by controller manager classes such as ReplicationControlManager, ClusterControlManager, etc. Finally, this PR adds ControllerTestUtils#deepSortRecords and ControllerTestUtils#assertBatchIteratorContains, which make it easier to write unit tests. Since records are often constructed from unsorted data structures, it is often useful to sort them before comparing them. Reviewers: David Arthur <mumrah@gmail.com> |
||
---|---|---|
.. | ||
.scalafmt.conf | ||
checkstyle.xml | ||
import-control-core.xml | ||
import-control-jmh-benchmarks.xml | ||
import-control.xml | ||
java.header | ||
suppressions.xml |