blob: eb2b8ac6ab272eef34631d71e3f78526f75a2967 [file] [log] [blame] [view]
# PIP-301: Separate load data storage from configuration metadata store
# Background knowledge
The following z-nodes store the load and quota data about loadbalance. And the CRUD about them are handled by `localMetadataStore`, not `configurationMetadataStore`.
* `/loadbalance/bundle-data`
* `/loadbalance/broker-time-average`
* `/loadbalance/resource-quota`
Currently, the access about the above z-nodes are distributed everywhere. It's very easy to call the the wrong `configurationMetadataStore` to handle them, e.g.:
* [[fix] [broker] remove bundle-data in local metadata store.](https://github.com/apache/pulsar/pull/21078)
# Motivation
Refactor the access code about balance/load data
# Goals
## In Scope
Introduce `LoadBalanceResources` to unify the CRUD about balance/load data.
## Out of Scope
None
# High Level Design
Introduce `LoadBalanceResources` which has three inner class:
* `BundleDataResources`
* `BrokerTimeAverageResources`
* `QuotaResources`
# Detailed Design
## Design & Implementation Details
```java
public class LoadBalanceResources {
public static final String BUNDLE_DATA_BASE_PATH = "/loadbalance/bundle-data";
public static final String BROKER_TIME_AVERAGE_BASE_PATH = "/loadbalance/broker-time-average";
public static final String RESOURCE_QUOTA_BASE_PATH = "/loadbalance/resource-quota";
private final BundleDataResources bundleDataResources;
public LoadBalanceResources(MetadataStore store, int operationTimeoutSec) {
bundleDataResources = new BundleDataResources(store, operationTimeoutSec);
}
public static class BundleDataResources extends BaseResources<BundleData> {
public BundleDataResources(MetadataStore store, int operationTimeoutSec) {
super(store, BundleData.class, operationTimeoutSec);
}
// ...
}
public static class BrokerTimeAverageResources extends BaseResources<TimeAverageBrokerData> {
public BrokerTimeAverageResources(MetadataStore store, int operationTimeoutSec) {
super(store, TimeAverageBrokerData.class, operationTimeoutSec);
}
// ...
}
public static class QuotaResources extends BaseResources<ResourceQuota> {
public QuotaResources(MetadataStore store, int operationTimeoutSec) {
super(store, ResourceQuota.class, operationTimeoutSec);
}
// ...
}
}
```
## Public-facing Changes
None
### Public API
None
# Backward & Forward Compatibility
None
# Links
* Mailing List discussion thread: https://lists.apache.org/thread/7ngw9dc62tj2c4c5484dgsnlwgtstpbj
* Mailing List voting thread: https://lists.apache.org/thread/26dc8r6hnp7owdsq1hpzb48g8vlfrtxt