heesung-sn commented on code in PR #23515:
URL: https://github.com/apache/pulsar/pull/23515#discussion_r1826905870


##########
pulsar-broker/src/main/java/org/apache/pulsar/broker/namespace/OwnershipCache.java:
##########
@@ -170,7 +170,17 @@ public CompletableFuture<Optional<NamespaceEphemeralData>> 
getOwnerAsync(Namespa
 
         // If we're not the owner, we need to check if anybody else is
         String path = ServiceUnitUtils.path(suName);
-        return lockManager.readLock(path);
+        return lockManager.readLock(path).thenCompose(owner -> {
+            //If the current broker is the owner, we must try to acquire 
ownership to avoid cache loss.

Review Comment:
   I guess we might see a racing condition here, when the same lock has been 
re-acquired immediately after release.
   
   - locallyAcquiredLocks.put(namespaceBundle, rl) (new lock creation)
   - invalidateLocalOwnerCache(namespaceBundle) (by lock.release deletes the 
ownedBundlesCache later)
   
   ref: 
https://github.com/apache/pulsar/blob/master/pulsar-broker/src/main/java/org/apache/pulsar/broker/namespace/OwnershipCache.java#L100-L107
   
   or, this might be due to the delay until the asyncLoad finishes fully,(until 
filling ownedBundlesCache).
   
   A quick solution might be to add an ownership checks(in waiting loop) in the 
test.



-- 
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