Re: [PR] Broker Config and Query Blocklist (druid)
abhishekrb19 commented on code in PR #19011:
URL: https://github.com/apache/druid/pull/19011#discussion_r2912642187
##
server/src/main/java/org/apache/druid/client/coordinator/CoordinatorClientImpl.java:
##
@@ -253,6 +254,22 @@ public ListenableFuture
getCoordinatorDynamicConfig()
);
}
+ @Override
+ public ListenableFuture getBrokerDynamicConfig()
+ {
+return FutureUtils.transform(
+client.asyncRequest(
+new RequestBuilder(HttpMethod.GET,
"/druid/coordinator/v1/broker/config"),
+new BytesFullResponseHandler()
+),
+holder -> JacksonUtils.readValue(
Review Comment:
Thanks for the [fix](https://github.com/apache/druid/pull/19120), @jtuglu1!
(And to @kfaraz for adding the backward compatibility embedded 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]
-
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
Re: [PR] Broker Config and Query Blocklist (druid)
jtuglu1 commented on code in PR #19011:
URL: https://github.com/apache/druid/pull/19011#discussion_r2909680451
##
server/src/main/java/org/apache/druid/client/coordinator/CoordinatorClientImpl.java:
##
@@ -253,6 +254,22 @@ public ListenableFuture
getCoordinatorDynamicConfig()
);
}
+ @Override
+ public ListenableFuture getBrokerDynamicConfig()
+ {
+return FutureUtils.transform(
+client.asyncRequest(
+new RequestBuilder(HttpMethod.GET,
"/druid/coordinator/v1/broker/config"),
+new BytesFullResponseHandler()
+),
+holder -> JacksonUtils.readValue(
Review Comment:
Will summarize the changes there
--
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]
-
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
Re: [PR] Broker Config and Query Blocklist (druid)
kfaraz commented on code in PR #19011:
URL: https://github.com/apache/druid/pull/19011#discussion_r2909679042
##
server/src/main/java/org/apache/druid/client/coordinator/CoordinatorClientImpl.java:
##
@@ -253,6 +254,22 @@ public ListenableFuture
getCoordinatorDynamicConfig()
);
}
+ @Override
+ public ListenableFuture getBrokerDynamicConfig()
+ {
+return FutureUtils.transform(
+client.asyncRequest(
+new RequestBuilder(HttpMethod.GET,
"/druid/coordinator/v1/broker/config"),
+new BytesFullResponseHandler()
+),
+holder -> JacksonUtils.readValue(
Review Comment:
Yes, that must be the reason.
Probably just catching the not found exception and continuing with the
Broker start up should suffice.
--
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]
-
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
Re: [PR] Broker Config and Query Blocklist (druid)
jtuglu1 commented on code in PR #19011:
URL: https://github.com/apache/druid/pull/19011#discussion_r2909679411
##
server/src/main/java/org/apache/druid/client/coordinator/CoordinatorClientImpl.java:
##
@@ -253,6 +254,22 @@ public ListenableFuture
getCoordinatorDynamicConfig()
);
}
+ @Override
+ public ListenableFuture getBrokerDynamicConfig()
+ {
+return FutureUtils.transform(
+client.asyncRequest(
+new RequestBuilder(HttpMethod.GET,
"/druid/coordinator/v1/broker/config"),
+new BytesFullResponseHandler()
+),
+holder -> JacksonUtils.readValue(
Review Comment:
Yeah – I have a test branch that I'll raise in a bit to fix this
--
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]
-
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
Re: [PR] Broker Config and Query Blocklist (druid)
abhishekrb19 commented on code in PR #19011:
URL: https://github.com/apache/druid/pull/19011#discussion_r2909658206
##
server/src/main/java/org/apache/druid/client/coordinator/CoordinatorClientImpl.java:
##
@@ -253,6 +254,22 @@ public ListenableFuture
getCoordinatorDynamicConfig()
);
}
+ @Override
+ public ListenableFuture getBrokerDynamicConfig()
+ {
+return FutureUtils.transform(
+client.asyncRequest(
+new RequestBuilder(HttpMethod.GET,
"/druid/coordinator/v1/broker/config"),
+new BytesFullResponseHandler()
+),
+holder -> JacksonUtils.readValue(
Review Comment:
Looks like this change is causing
`org.apache.druid.testing.embedded.docker.IngestionBackwardCompatibilityDockerTest`
to fail consistently (which seems like it would be a legit issue during
rolling upgrades since the Coordinators are typically upgraded in the end).
I haven’t looked closely at the surrounding code yet, but either this code
or the caller likely needs to account for the new
`/druid/coordinator/v1/broker/config` endpoint not being available on
Coordinators during rolling upgrades in a backward compatible manner.
--
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]
-
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
Re: [PR] Broker Config and Query Blocklist (druid)
abhishekrb19 commented on code in PR #19011:
URL: https://github.com/apache/druid/pull/19011#discussion_r2909658206
##
server/src/main/java/org/apache/druid/client/coordinator/CoordinatorClientImpl.java:
##
@@ -253,6 +254,22 @@ public ListenableFuture
getCoordinatorDynamicConfig()
);
}
+ @Override
+ public ListenableFuture getBrokerDynamicConfig()
+ {
+return FutureUtils.transform(
+client.asyncRequest(
+new RequestBuilder(HttpMethod.GET,
"/druid/coordinator/v1/broker/config"),
+new BytesFullResponseHandler()
+),
+holder -> JacksonUtils.readValue(
Review Comment:
Looks like this change is causing
`org.apache.druid.testing.embedded.docker.IngestionBackwardCompatibilityDockerTest`
to fail consistently (which seems like it would be a legit issue during
rolling upgrades since the Coordinators are typically upgraded in the end).
I haven't looked at the surrounding code here, but either this code here or
the caller needs to account for `/druid/coordinator/v1/broker/config` endpoint
not yet available on the Coordinators yet during rolling upgrades in a backward
compatible manner.
--
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]
-
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
Re: [PR] Broker Config and Query Blocklist (druid)
abhishekrb19 commented on PR #19011: URL: https://github.com/apache/druid/pull/19011#issuecomment-4029052713 Yes, I think `getBrokerDynamicConfig()` needs to [account](https://github.com/apache/druid/blob/master/server/src/main/java/org/apache/druid/client/coordinator/CoordinatorClientImpl.java#L262) for `/druid/coordinator/v1/broker/config` endpoint not available on the Coordinator yet during rolling upgrades. -- 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] - To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
Re: [PR] Broker Config and Query Blocklist (druid)
jtuglu1 commented on PR #19011: URL: https://github.com/apache/druid/pull/19011#issuecomment-4029034531 > IngestionBackwardCompatibilityDockerTest.java Yes, I saw that too – looking. My guess is brokers are calling coordinator config endpoint (which doesn't exist) -- 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] - To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
Re: [PR] Broker Config and Query Blocklist (druid)
abhishekrb19 commented on PR #19011: URL: https://github.com/apache/druid/pull/19011#issuecomment-4029014933 Just downloaded the test-report artifacts from GitHub and I see `org.apache.druid.testing.embedded.docker.IngestionBackwardCompatibilityDockerTest` was the last embedded test and the test JVM crashes. Since the test [uses](https://github.com/apache/druid/blob/master/embedded-tests/src/test/java/org/apache/druid/testing/embedded/docker/IngestionBackwardCompatibilityDockerTest.java#L42) an old Coordinator from 31.0.0, would some of the changes here be compatible with that? I’m wondering if the test might actually be uncovering a legitimate backwards compatibility issue with an old Coordinator + new Brokers. cc: @mshahid6 @jtuglu1 -- 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] - To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
Re: [PR] Broker Config and Query Blocklist (druid)
abhishekrb19 commented on PR #19011: URL: https://github.com/apache/druid/pull/19011#issuecomment-4028745869 I think something from this PR is causing one of the embedded tests to consistently fail in master and on all recent PRs: ``` [Execute: .github/scripts/run_unit-tests -Dtest=!QTest,'I*,A*,U*' -Dmaven.test.failure.ignore=true](https://github.com/apache/druid/actions/runs/22832980666/job/66354459774#annotation:6:8087) Process completed with exit code 1. ``` https://github.com/apache/druid/actions/runs/22832980666/job/66354459774 -- 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] - To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
Re: [PR] Broker Config and Query Blocklist (druid)
jtuglu1 merged PR #19011: URL: https://github.com/apache/druid/pull/19011 -- 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] - To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
Re: [PR] Broker Config and Query Blocklist (druid)
maytasm commented on code in PR #19011:
URL: https://github.com/apache/druid/pull/19011#discussion_r2902600360
##
server/src/main/java/org/apache/druid/server/http/BrokerDynamicConfigSyncer.java:
##
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.druid.server.http;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.inject.Inject;
+import org.apache.druid.client.broker.BrokerClient;
+import org.apache.druid.common.config.JacksonConfigManager;
+import org.apache.druid.discovery.DruidNodeDiscoveryProvider;
+import org.apache.druid.guice.annotations.EscalatedGlobal;
+import org.apache.druid.guice.annotations.Json;
+import org.apache.druid.java.util.common.concurrent.Execs;
+import org.apache.druid.java.util.emitter.service.ServiceEmitter;
+import org.apache.druid.rpc.ServiceClientFactory;
+import org.apache.druid.server.broker.BrokerDynamicConfig;
+
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * Syncs broker dynamic configuration to all brokers.
+ */
+public class BrokerDynamicConfigSyncer extends
BaseDynamicConfigSyncer
+{
+ private final AtomicReference currentConfig;
+
+ @Inject
+ public BrokerDynamicConfigSyncer(
+ @EscalatedGlobal final ServiceClientFactory clientFactory,
+ final JacksonConfigManager configManager,
+ @Json final ObjectMapper jsonMapper,
+ final DruidNodeDiscoveryProvider druidNodeDiscoveryProvider,
+ final ServiceEmitter emitter
+ )
+ {
+super(
+clientFactory,
+jsonMapper,
+druidNodeDiscoveryProvider,
+emitter,
+Execs.scheduledSingleThreaded("BrokerDynamicConfigSyncer-%d")
+);
+this.currentConfig = configManager.watch(
+BrokerDynamicConfig.CONFIG_KEY,
+BrokerDynamicConfig.class,
+new BrokerDynamicConfig(null)
Review Comment:
nit: use Builder
--
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]
-
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
Re: [PR] Broker Config and Query Blocklist (druid)
maytasm commented on code in PR #19011:
URL: https://github.com/apache/druid/pull/19011#discussion_r2902600094
##
server/src/main/java/org/apache/druid/server/http/BrokerDynamicConfigSyncer.java:
##
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.druid.server.http;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.inject.Inject;
+import org.apache.druid.client.broker.BrokerClient;
+import org.apache.druid.common.config.JacksonConfigManager;
+import org.apache.druid.discovery.DruidNodeDiscoveryProvider;
+import org.apache.druid.guice.annotations.EscalatedGlobal;
+import org.apache.druid.guice.annotations.Json;
+import org.apache.druid.java.util.common.concurrent.Execs;
+import org.apache.druid.java.util.emitter.service.ServiceEmitter;
+import org.apache.druid.rpc.ServiceClientFactory;
+import org.apache.druid.server.broker.BrokerDynamicConfig;
+
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * Syncs broker dynamic configuration to all brokers.
+ */
+public class BrokerDynamicConfigSyncer extends
BaseDynamicConfigSyncer
+{
+ private final AtomicReference currentConfig;
+
+ @Inject
+ public BrokerDynamicConfigSyncer(
+ @EscalatedGlobal final ServiceClientFactory clientFactory,
+ final JacksonConfigManager configManager,
+ @Json final ObjectMapper jsonMapper,
+ final DruidNodeDiscoveryProvider druidNodeDiscoveryProvider,
+ final ServiceEmitter emitter
+ )
+ {
+super(
+clientFactory,
+jsonMapper,
+druidNodeDiscoveryProvider,
+emitter,
+Execs.scheduledSingleThreaded("BrokerDynamicConfigSyncer-%d")
+);
+this.currentConfig = configManager.watch(
+BrokerDynamicConfig.CONFIG_KEY,
+BrokerDynamicConfig.class,
+new BrokerDynamicConfig(null)
Review Comment:
nit: use Builder
##
server/src/main/java/org/apache/druid/server/http/BrokerDynamicConfigSyncer.java:
##
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.druid.server.http;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.inject.Inject;
+import org.apache.druid.client.broker.BrokerClient;
+import org.apache.druid.common.config.JacksonConfigManager;
+import org.apache.druid.discovery.DruidNodeDiscoveryProvider;
+import org.apache.druid.guice.annotations.EscalatedGlobal;
+import org.apache.druid.guice.annotations.Json;
+import org.apache.druid.java.util.common.concurrent.Execs;
+import org.apache.druid.java.util.emitter.service.ServiceEmitter;
+import org.apache.druid.rpc.ServiceClientFactory;
+import org.apache.druid.server.broker.BrokerDynamicConfig;
+
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * Syncs broker dynamic configuration to all brokers.
+ */
+public class BrokerDynamicConfigSyncer extends
BaseDynamicConfigSyncer
+{
+ private final AtomicReference currentConfig;
+
+ @Inject
+ public BrokerDynamicConfigSyncer(
+ @EscalatedGlobal final ServiceClientFactory clientFactory,
+ final JacksonConfigManager configManager,
+ @Json final ObjectMapper jsonMapper,
+ final DruidNodeDiscoveryProvider druidNodeDiscoveryProvider,
+ final ServiceEmitter emitter
+ )
+ {
+super(
+clientFactory,
+jsonMapper,
+druidNodeDiscoveryProvider,
+emitter,
+Execs.scheduledSingleThreaded
Re: [PR] Broker Config and Query Blocklist (druid)
jtuglu1 commented on code in PR #19011:
URL: https://github.com/apache/druid/pull/19011#discussion_r2898545575
##
server/src/main/java/org/apache/druid/server/http/BaseDynamicConfigSyncer.java:
##
@@ -0,0 +1,275 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.druid.server.http;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.errorprone.annotations.concurrent.GuardedBy;
+import org.apache.druid.client.broker.BrokerClient;
+import org.apache.druid.client.broker.BrokerClientImpl;
+import org.apache.druid.discovery.DiscoveryDruidNode;
+import org.apache.druid.discovery.DruidNodeDiscoveryProvider;
+import org.apache.druid.discovery.NodeRole;
+import org.apache.druid.java.util.common.Stopwatch;
+import org.apache.druid.java.util.common.lifecycle.LifecycleStop;
+import org.apache.druid.java.util.common.logger.Logger;
+import org.apache.druid.java.util.emitter.service.ServiceEmitter;
+import org.apache.druid.java.util.emitter.service.ServiceMetricEvent;
+import org.apache.druid.rpc.FixedServiceLocator;
+import org.apache.druid.rpc.ServiceClientFactory;
+import org.apache.druid.rpc.ServiceLocation;
+import org.apache.druid.rpc.StandardRetryPolicy;
+import org.apache.druid.server.DruidNode;
+import org.apache.druid.server.coordinator.stats.CoordinatorStat;
+import org.apache.druid.server.coordinator.stats.Dimension;
+import org.apache.druid.server.coordinator.stats.RowKey;
+import org.apache.druid.server.coordinator.stats.Stats;
+
+import javax.annotation.Nullable;
+import java.util.Collection;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Future;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * Base class for syncing dynamic configuration to all brokers.
+ * Subclasses must implement:
+ * - {@link #getCurrentConfig()} to provide the latest config
+ * - {@link #pushConfigToBroker(BrokerClient, Object)} to push config via the
appropriate BrokerClient method
+ * - {@link #getConfigTypeName()} for logging
+ *
+ * @param the type of dynamic configuration (e.g.,
CoordinatorDynamicConfig, BrokerDynamicConfig)
+ */
+public abstract class BaseDynamicConfigSyncer
+{
+ private static final Logger log = new Logger(BaseDynamicConfigSyncer.class);
+
+ private final ObjectMapper jsonMapper;
+ private final DruidNodeDiscoveryProvider druidNodeDiscovery;
+ private final ServiceClientFactory clientFactory;
+ private final ScheduledExecutorService exec;
+ private final ServiceEmitter emitter;
+ private @Nullable Future syncFuture = null;
+
+ @GuardedBy("this")
+ private final Set inSyncBrokers;
+ private final AtomicReference lastKnownConfig = new AtomicReference<>();
+
+ protected BaseDynamicConfigSyncer(
+ final ServiceClientFactory clientFactory,
+ final ObjectMapper jsonMapper,
+ final DruidNodeDiscoveryProvider druidNodeDiscoveryProvider,
+ final ServiceEmitter emitter,
+ final ScheduledExecutorService exec
+ )
+ {
+this.clientFactory = clientFactory;
+this.jsonMapper = jsonMapper;
+this.druidNodeDiscovery = druidNodeDiscoveryProvider;
+this.emitter = emitter;
+this.exec = exec;
+this.inSyncBrokers = ConcurrentHashMap.newKeySet();
+ }
+
+ /**
+ * Get the current configuration to broadcast to brokers.
+ */
+ protected abstract T getCurrentConfig();
+
+ /**
+ * Push the config to a broker using the appropriate BrokerClient method.
+ * @return true if the push was successful
+ */
+ protected abstract boolean pushConfigToBroker(BrokerClient brokerClient, T
config) throws Exception;
+
+ /**
+ * Get the name of this config type for logging (e.g., "coordinator dynamic
configuration", "broker dynamic configuration").
+ */
+ protected abstract String getConfigTypeName();
+
+ /**
+ * Queues the configuration sync to the brokers without blocking the calling
thread.
+ */
+ public void queueBroadcastConfigToBrokers()
+ {
+exec.submit(this::broadcastConfigToBrokers);
+ }
+
+ /**
+ * Push the
