eolivelli commented on code in PR #17922:
URL: https://github.com/apache/pulsar/pull/17922#discussion_r994742293
##########
pulsar-metadata/src/main/java/org/apache/pulsar/metadata/bookkeeper/PulsarRegistrationClient.java:
##########
@@ -153,4 +212,56 @@ private static Set<BookieId>
convertToBookieAddresses(List<String> children) {
}
return newBookieAddrs;
}
+
+ @Override
+ public CompletableFuture<Versioned<BookieServiceInfo>>
getBookieServiceInfo(BookieId bookieId) {
+ // this method cannot perform blocking calls to the MetadataStore
+ // or return a CompletableFuture that is completed on the
MetadataStore main thread
+ // this is because there are a few cases in which some operations on
the main thread
+ // wait for the result. This is due to the fact that resolving the
address of a bookie
+ // is needed in many code paths.
+ Versioned<BookieServiceInfo> resultFromCache =
bookieServiceInfoCache.get(bookieId);
+ if (log.isDebugEnabled()) {
+ log.debug("getBookieServiceInfo {} -> {}", bookieId,
resultFromCache);
+ }
+ if (resultFromCache != null) {
+ return CompletableFuture.completedFuture(resultFromCache);
+ } else {
+ return FutureUtils.exception(new
BKException.BKBookieHandleNotAvailableException());
+ }
+ }
+
+ public CompletableFuture<Versioned<BookieServiceInfo>>
readBookieServiceInfoAsync(BookieId bookieId) {
+ String asWritable = bookieRegistrationPath + "/" + bookieId;
+ return bookieServiceInfoMetadataCache.get(asWritable)
Review Comment:
`AsyncLoadingCache#get`
this is nasty, I know, because even if it seems "async" the "completion" of
the CompletableFuture is executed on the main metadata store thread.
In another operation that runs on the same thread you cannot wait for the
completion of a CompletableFuture that wills be only completed on the same
thread.
--
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]