cmccabe opened a new pull request, #12513:
URL: https://github.com/apache/kafka/pull/12513

   The main changes here are ensuring that we always have a metadata.version 
record in the log, making
   sure that the bootstrap file can be used for records other than the 
metadata.version record (for
   example, we will want to put SCRAM initialization records there), and fixing 
some bugs.
   
   In order to ensure that we always have a metadata.version record in the log, 
we have to make the
   minimum KRaft version 3.3IV0, since this is the first version that supports 
that. Older KRaft
   clusters that were on a pre-production version will be auto-upgraded to 
3.3IV0.
   
   Fix some issues related to initializing new clusters. If there are no 
records in the log at all,
   then insert the bootstrap records in a single batch. If there are records, 
but no metadata version,
   process the existing records as though they were metadata.version 3.3IV0 and 
then append a metadata
   version record setting version 3.3IV0.  Previously, we were not clearly 
distinguishing between the
   case where the metadata log was empty, and the case where we just needed to 
add a metadata.version
   record.
   
   Refactor BootstrapMetadata into an immutable class which contains a 3-tuple 
of metadata version,
   record list, and source. The source field is used to log where the bootstrap 
metadata was obtained
   from. This could be a bootstrap file, the static configuration, or just the 
software defaults.
   Move the logic for reading and writing bootstrap files into 
BootstrapDirectory.java.
   
   Add LogReplayTracker, which tracks whether the log is empty, whether we've 
seen a metadata version
   record, and the number of bytes we've replayed since the last snapshot.
   
   Fix a bug in FeatureControlManager where it was possible to use a 
"downgrade" operation to
   transition to a newer version. Do not store whether we have seen a metadata 
version or not in
   FeatureControlManager, since that is now handled by LogReplayTracker.
   
   Introduce BatchFileReader, which is a simple way of reading a file 
containing batches of snapshots
   that does not require spawning a thread. Rename SnapshotFileWriter to 
BatchFileWriter to be
   consistent, and to reflect the fact that bootstrap files aren't snapshots.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to