pulsar icon indicating copy to clipboard operation
pulsar copied to clipboard

[improve][broker] PIP-215 Added TopicCompactionStrategy for StrategicTwoPhaseCompactor and TableView.

Open heesung-sohn opened this issue 3 years ago • 0 comments

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 StrategicTwoPhaseCompactor that extends TwoPhaseCompactor.
  • Added TopicCompactionStrategy interface.
  • Added TopicCompactionStrategy logic in StrategicTwoPhaseCompactor and TableViewImpl.
  • Added CompactionReaderImpl to scan topic messages in StrategicTwoPhaseCompactor. It cumulatively acknowledges the read messages at the end of StrategicTwoPhaseCompactor.
  • Added SubscriptionMode and SubscriptionInitialPosition parameters in ReaderConfigurationData since the CompactionReaderImpl reader's subscription needs to be durable and needs to read from the earliest position.
  • Added RawBatchMessageContainerImpl to batch and serialize messages in StrategicTwoPhaseCompactor.

This PR updates the TableViewImpl to use TopicCompactionStrategy in its data K,V map update logic.

  • Added the topicCompactionStrategy member variable in TableViewConfigurationData
  • Added the listen() interface in TableView to provide an option to call the listener actions only for the tail messages.
  • Updated TableViewImpl and its handleMessage() function to consider TopicCompactionStrategy when 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

heesung-sohn avatar Oct 25 '22 21:10 heesung-sohn