merlimat commented on code in PR #22846:
URL: https://github.com/apache/pulsar/pull/22846#discussion_r1628179439
##########
pulsar-broker-common/src/main/java/org/apache/pulsar/bookie/rackawareness/BookieRackAffinityMapping.java:
##########
@@ -116,25 +115,32 @@ public synchronized void setConf(Configuration conf) {
super.setConf(conf);
MetadataStore store;
try {
- store = createMetadataStore(conf);
- bookieMappingCache =
store.getMetadataCache(BookiesRackConfiguration.class);
- store.registerListener(this::handleUpdates);
- racksWithHost = bookieMappingCache.get(BOOKIE_INFO_ROOT_PATH).get()
- .orElseGet(BookiesRackConfiguration::new);
- for (Map<String, BookieInfo> bookieMapping :
racksWithHost.values()) {
- for (String address : bookieMapping.keySet()) {
- bookieAddressListLastTime.add(BookieId.parse(address));
- }
- if (LOG.isDebugEnabled()) {
- LOG.debug("BookieRackAffinityMapping init,
bookieAddressListLastTime {}",
- bookieAddressListLastTime);
- }
- }
- updateRacksWithHost(racksWithHost);
- watchAvailableBookies();
- } catch (InterruptedException | ExecutionException | MetadataException
e) {
+ store = getMetadataStore(conf);
+ } catch (MetadataException e) {
throw new RuntimeException(METADATA_STORE_INSTANCE + " failed to
init BookieId list");
}
+
+ bookieMappingCache =
store.getMetadataCache(BookiesRackConfiguration.class);
+ store.registerListener(this::handleUpdates);
+ bookieMappingCache.get(BOOKIE_INFO_ROOT_PATH)
Review Comment:
I think it does not solve the problem completely because the calling thread
is still blocked.
The BK client creation is moved to a background thread and it's ok, thought
the thread waiting for the BK client to be created is still blocked.
eg:
1. IO thread is initiating the creation of topic
2. We trigger creation of BK client
3. background-thread is creating BK client
4. IO thread is still blocked waiting for completion.
I'm working on a change to return future from BK client factory that would
avoid the problem.
--
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]