lhotari commented on code in PR #23152:
URL: https://github.com/apache/pulsar/pull/23152#discussion_r1714292826
##########
pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/channel/ServiceUnitStateChannelImpl.java:
##########
@@ -325,6 +325,16 @@ public synchronized void start() throws
PulsarServerException {
ServiceUnitStateCompactionStrategy.class.getName()))
.create();
tableview.listen((key, value) -> handle(key, value));
+ tableview.forEach((serviceUnit, data) -> {
+ if (debug) {
+ log.info("Loaded the service unit state data. serviceUnit:
{}, data: {}", serviceUnit, data);
+ }
+ ServiceUnitState state = state(data);
+ if (state.equals(Owned) && isTargetBroker(data.dstBroker())) {
+ pulsar.getNamespaceService()
+
.onNamespaceBundleOwned(LoadManagerShared.getNamespaceBundle(pulsar,
serviceUnit));
+ }
+ });
Review Comment:
> I agree. Ideally, the table view constructor should accept the listeners
to register them before receiving messages. I think forEachAndListen interface
has the same problem too.
@heesung-sn How do the changes in this PR fix the issue?
It seems odd to have some code duplication in the `.forEach` handler and
only handle a specific case instead of all possible cases.
Why don't we fix the root cause in the table view?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]