blob: 21ce7417dcff87e56c13e6d2ae3069932a1e2def [file] [log] [blame] [view]
# PIP-284: Migrate topic policies implementation to use TableView
# Background knowledge
Apache Pulsar introduced the topic-level policies by [PIP-39](pip-39.md).
It uses the reader API to read messages and relies on compaction to implement table-like logic in the memory.
[PIP-104](https://github.com/apache/pulsar/issues/12356) Introduced new consumer type `TableView` to support the same logic by
Public Stable API.
# Motivation
Due to a lot of problems caused by the complex topic policy logic is as follows. we can use a new stable `TableView` API instead of
previous one.
- https://github.com/apache/pulsar/pull/20763
- https://github.com/apache/pulsar/pull/20613
- https://github.com/apache/pulsar/pull/19746
- etc...
# Goals
## In Scope
- Reduce complex logic.
- Reuse the public stable API to improve the project quality.
## Out of Scope
none.
# High Level Design
```mermaid
sequenceDiagram
participant client
participant topic_policy_service
participant system_event_topic
client ->> topic_policy_service: Hi, what's the topic policy of `persistent://public/default/test`
loop policy update event fetching
topic_policy_service ->> system_event_topic: Do you have new events?;
alt new policy event
system_event_topic ->> topic_policy_service: Yes, Sure. here you are.
else no policy event
system_event_topic ->> topic_policy_service: No, Please wait for a moment.
end;
end
Note right of topic_policy_service: Update the local cache table by keeping the latest one;
topic_policy_service -->> client: Here you are.
```
# Detailed Design
## Design & Implementation Details
The new implementation will continue reuse the previous system topic `namespace/__change_event` to store the topic policy data.
and it will change the reading logic from the raw reader to TableView to enhance the robustness.
## Public-facing Changes
none.
### Public API
none.
### Binary protocol
none.
### Configuration
none.
### CLI
none.
### Metrics
none.
# Monitoring
none.
# Security Considerations
none.
# Backward & Forward Compatibility
Without backward compatibility since we will reuse the same system topic `namesapce/__change_event`.
## Revert
none.
## Upgrade
none.
# Alternatives
none.
# General Notes
none.
# Links
none.
* Mailing List discussion thread: https://lists.apache.org/thread/9v00sfpfxjpm775vgltkjoxwnllsgskg
* Mailing List voting thread: https://lists.apache.org/thread/gx43mzh88xp5ttz2gqghfqpz1yq51k60