[improve][broker] PIP-215 Added TopicCompactionStrategy for StrategicTwoPhaseCompactor and TableView.
Master Issue: https://github.com/apache/pulsar/issues/18099
Motivation
This PR supports TopicCompactionStrategy in StrategicTwoPhaseCompactor and TableView for the internal system topics, as proposed in PIP-215.
This PR does not expose StrategicTwoPhaseCompactor for customer topics yet. We want to expose this feature to users after proven to be stable on the new system topic in the new broker load balancer(in PIP-192) first.
Modifications
This PR adds the following classes to implement `StrategicTwoPhaseCompactor.
- Added
StrategicTwoPhaseCompactorthat extendsTwoPhaseCompactor. - Added
TopicCompactionStrategyinterface. - Added
TopicCompactionStrategylogic inStrategicTwoPhaseCompactorandTableViewImpl. - Added
CompactionReaderImplto scan topic messages in StrategicTwoPhaseCompactor. It cumulatively acknowledges the read messages at the end of StrategicTwoPhaseCompactor. - Added
SubscriptionModeandSubscriptionInitialPositionparameters inReaderConfigurationDatasince theCompactionReaderImplreader's subscription needs to be durable and needs to read from the earliest position. - Added
RawBatchMessageContainerImplto batch and serialize messages inStrategicTwoPhaseCompactor.
This PR updates the TableViewImpl to use TopicCompactionStrategy in its data K,V map update logic.
- Added the
topicCompactionStrategymember variable inTableViewConfigurationData - Added the
listen()interface inTableViewto provide an option to call the listener actions only for the tail messages. - Updated
TableViewImpland itshandleMessage()function to considerTopicCompactionStrategywhen updating the data K,V map.
This PR updated the compaction test classes to reuse the test cases.
This PR updated the modifiers of the parent classes of the added classes to access the member variables and member functions.
Verifying this change
- [x] Make sure that the change passes the CI checks.
This change added tests and can be verified as follows:
- Extended the compaction tests to cover the same logic passes with the
StrategicTwoPhaseCompactor. - Added other unit tests for the added classes.
Does this pull request potentially affect one of the following parts:
If the box was checked, please highlight the changes
- [] Dependencies (add or upgrade a dependency)
- [x] The public API (table-view.listen() addition and reader and table-view configuration update)
- [ ] The schema
- [ ] The default values of configurations
- [ ] The threading model
- [ ] The binary protocol
- [ ] The REST endpoints
- [ ] The admin CLI options
- [ ] Anything that affects deployment
Documentation
- [ ]
doc - [ ]
doc-required - [x]
doc-not-needed - [ ]
doc-complete
This PR does not enable strategic compaction for the customer topics. We will update the doc when enabling this compaction for the customer topics.
Matching PR in forked repository
PR in forked repository: https://github.com/heesung-sn/pulsar/pull/12