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]

Reply via email to