-
Notifications
You must be signed in to change notification settings - Fork 3.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[broker] Avoid unnecessary recalculation of maxSubscriptionsPerTopic in AbstractTopic #12658
[broker] Avoid unnecessary recalculation of maxSubscriptionsPerTopic in AbstractTopic #12658
Conversation
} | ||
|
||
private void updateValue() { | ||
VALUE_UPDATER.updateAndGet(this, (preValue) -> { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We might need to handle the delete policies? Such as the topic level policy being removed, we should use the namespace level policy if present.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, in this case, updateTopicValue(null)
should be called, and the value
will be updated to namespaceValue
if it's presented.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Checked with org.apache.pulsar.broker.admin.v2.PersistentTopics#removeMaxSubscriptionsPerTopic
, internalSetMaxSubscriptionsPerTopic(null)
is called to update the policy.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good job
* up/master: [Doc] Add explanations for setting geo-replication at topic level (apache#12633) commit chapter Tiered Storage (apache#12592) [pulsar-admin] Add remove-subscription-types-enabled command for namespace (apache#12392) Enable CLI to publish non-batched messages (apache#12641) [Doc] Add doc for tokenSettingPrefix (apache#12662) [pulsar-admin] Add corresponding get command for namespace (apache#12322) [pulsar-admin] Perfect judgment conditions of pulsar-admin (apache#12315) [broker] Avoid unnecessary recalculation of maxSubscriptionsPerTopic in AbstractTopic (apache#12658) [Transaction]Stop TB recovering with exception (apache#12636) [website][upgrade]feat: docs migration - 2.7.1 / client (apache#12612) [website][upgrade]feat: docs migration - 2.7.1 / performance (apache#12611) [website][upgrade]feat: docs migration - 2.7.1 / security (apache#12610) [Modernizer] Apply Modernizer plugin for pulsar broker common module and fix violation. (apache#12657) [Authorization] Support GET_METADATA topic op after enable auth (apache#12656) Fix StringIndexOutOfBoundsException in org.apache.pulsar.broker.resources.NamespaceResources#pathIsFromNamespace (apache#12659)
* up/master: [Doc] Add explanations for setting geo-replication at topic level (apache#12633) commit chapter Tiered Storage (apache#12592) [pulsar-admin] Add remove-subscription-types-enabled command for namespace (apache#12392) Enable CLI to publish non-batched messages (apache#12641) [Doc] Add doc for tokenSettingPrefix (apache#12662) [pulsar-admin] Add corresponding get command for namespace (apache#12322) [pulsar-admin] Perfect judgment conditions of pulsar-admin (apache#12315) [broker] Avoid unnecessary recalculation of maxSubscriptionsPerTopic in AbstractTopic (apache#12658) [Transaction]Stop TB recovering with exception (apache#12636) [website][upgrade]feat: docs migration - 2.7.1 / client (apache#12612) [website][upgrade]feat: docs migration - 2.7.1 / performance (apache#12611) [website][upgrade]feat: docs migration - 2.7.1 / security (apache#12610) [Modernizer] Apply Modernizer plugin for pulsar broker common module and fix violation. (apache#12657) [Authorization] Support GET_METADATA topic op after enable auth (apache#12656) Fix StringIndexOutOfBoundsException in org.apache.pulsar.broker.resources.NamespaceResources#pathIsFromNamespace (apache#12659) # Conflicts: # site2/website-next/versioned_sidebars/version-2.7.2-sidebars.json
…in AbstractTopic (apache#12658) ### Motivation Currently, `AbstractTopic#maxSubscriptionsPerTopic` stores the value of namespace level policy, but we have broker level setting in `org.apache.pulsar.broker.ServiceConfiguration#maxSubscriptionsPerTopic` and topic level setting in `org.apache.pulsar.common.policies.data.TopicPolicies#maxSubscriptionsPerTopic`. And the real value we used of `maxSubscriptionsPerTopic` is calculated every time in `org.apache.pulsar.broker.service.persistent.PersistentTopic#checkMaxSubscriptionsPerTopicExceed`. It can be avoided by cache maxSubscriptionsPerTopic result locally. As we have already registered listeners to namespace policy and topic policy updates, so we can cache the value locally in AbstractTopic to avoid the recalculation. Finally, as some of other policies value have similar issues, I am introducing `PolicyHierarchyValue` to solve the hierarchy value storage and calculation. ### Modifications Introduce `PolicyHierarchyValue` to store policy value in broker, namespace and topic level. It provides corresponding `updateXX` methods, and recalculate real value in it. And the `get()` method returns the policy value we should use directly.
Motivation
Currently,
AbstractTopic#maxSubscriptionsPerTopic
stores the value of namespace level policy, but we have broker level setting inorg.apache.pulsar.broker.ServiceConfiguration#maxSubscriptionsPerTopic
and topic level setting inorg.apache.pulsar.common.policies.data.TopicPolicies#maxSubscriptionsPerTopic
.And the real value we used of
maxSubscriptionsPerTopic
is calculated every time inorg.apache.pulsar.broker.service.persistent.PersistentTopic#checkMaxSubscriptionsPerTopicExceed
. It can be avoided by cache maxSubscriptionsPerTopic result locally.As we have already registered listeners to namespace policy and topic policy updates, so we can cache the value locally in AbstractTopic to avoid the recalculation.
Finally, as some of other policies value have similar issues, I am introducing
PolicyHierarchyValue
to solve the hierarchy value storage and calculation.Modifications
Introduce
PolicyHierarchyValue
to store policy value in broker, namespace and topic level.It provides corresponding
updateXX
methods, and recalculate real value in it. And theget()
method returns the policy value we should use directly.Verifying this change
This change is already covered by existing tests, such as
org.apache.pulsar.broker.admin.TopicPoliciesTest#testMaxSubscriptionsPerTopic
And added PolicyHierarchyValueTest for new class.
Does this pull request potentially affect one of the following parts:
If
yes
was chosen, please highlight the changesDocumentation
Check the box below and label this PR (if you have committer privilege).
Need to update docs?
doc
New class PolicyHierarchyValue comes with docs.
The rest is internal optimization, no user behavior changed.