This is an automated email from the ASF dual-hosted git repository.
karan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/master by this push:
new 80d6763e390 ServerSelector: Synchronize getAllServers(). (#17499)
80d6763e390 is described below
commit 80d6763e390303952db7b4f6a3246d1eccb3e4d5
Author: Gian Merlino <[email protected]>
AuthorDate: Wed Nov 27 00:01:00 2024 -0800
ServerSelector: Synchronize getAllServers(). (#17499)
This method was missing some required synchronization. This patch also
adds GuardedBy annotations to historicalServers and realtimeServers, which
would have caught it.
---
.../druid/client/selector/ServerSelector.java | 31 +++++++++++++---------
1 file changed, 18 insertions(+), 13 deletions(-)
diff --git
a/server/src/main/java/org/apache/druid/client/selector/ServerSelector.java
b/server/src/main/java/org/apache/druid/client/selector/ServerSelector.java
index 30b259b6619..99d883c3301 100644
--- a/server/src/main/java/org/apache/druid/client/selector/ServerSelector.java
+++ b/server/src/main/java/org/apache/druid/client/selector/ServerSelector.java
@@ -19,6 +19,7 @@
package org.apache.druid.client.selector;
+import com.google.errorprone.annotations.concurrent.GuardedBy;
import it.unimi.dsi.fastutil.ints.Int2ObjectRBTreeMap;
import org.apache.druid.client.DataSegmentInterner;
import org.apache.druid.query.Query;
@@ -40,9 +41,10 @@ import java.util.concurrent.atomic.AtomicReference;
*/
public class ServerSelector implements Overshadowable<ServerSelector>
{
-
+ @GuardedBy("this")
private final Int2ObjectRBTreeMap<Set<QueryableDruidServer>>
historicalServers;
+ @GuardedBy("this")
private final Int2ObjectRBTreeMap<Set<QueryableDruidServer>> realtimeServers;
private final TierSelectorStrategy strategy;
@@ -145,18 +147,21 @@ public class ServerSelector implements
Overshadowable<ServerSelector>
public List<DruidServerMetadata> getAllServers()
{
- List<DruidServerMetadata> servers = new ArrayList<>();
- historicalServers.values()
- .stream()
- .flatMap(Collection::stream)
- .map(server -> server.getServer().getMetadata())
- .forEach(servers::add);
-
- realtimeServers.values()
- .stream()
- .flatMap(Collection::stream)
- .map(server -> server.getServer().getMetadata())
- .forEach(servers::add);
+ final List<DruidServerMetadata> servers = new ArrayList<>();
+
+ synchronized (this) {
+ historicalServers.values()
+ .stream()
+ .flatMap(Collection::stream)
+ .map(server -> server.getServer().getMetadata())
+ .forEach(servers::add);
+
+ realtimeServers.values()
+ .stream()
+ .flatMap(Collection::stream)
+ .map(server -> server.getServer().getMetadata())
+ .forEach(servers::add);
+ }
return servers;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]