change handlers from CHM to volatile Immutable Map
This commit is contained in:
parent
3679efa840
commit
2f5dd85bd5
|
@ -21,6 +21,8 @@ package org.elasticsearch.transport;
|
||||||
|
|
||||||
import org.elasticsearch.ElasticSearchException;
|
import org.elasticsearch.ElasticSearchException;
|
||||||
import org.elasticsearch.cluster.node.DiscoveryNode;
|
import org.elasticsearch.cluster.node.DiscoveryNode;
|
||||||
|
import org.elasticsearch.common.collect.ImmutableMap;
|
||||||
|
import org.elasticsearch.common.collect.MapBuilder;
|
||||||
import org.elasticsearch.common.component.AbstractLifecycleComponent;
|
import org.elasticsearch.common.component.AbstractLifecycleComponent;
|
||||||
import org.elasticsearch.common.inject.Inject;
|
import org.elasticsearch.common.inject.Inject;
|
||||||
import org.elasticsearch.common.io.stream.Streamable;
|
import org.elasticsearch.common.io.stream.Streamable;
|
||||||
|
@ -34,13 +36,11 @@ import org.elasticsearch.threadpool.ThreadPool;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ConcurrentMap;
|
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
import java.util.concurrent.ScheduledFuture;
|
import java.util.concurrent.ScheduledFuture;
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
import static org.elasticsearch.common.settings.ImmutableSettings.Builder.*;
|
import static org.elasticsearch.common.settings.ImmutableSettings.Builder.*;
|
||||||
import static org.elasticsearch.common.util.concurrent.ConcurrentCollections.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kimchy (shay.banon)
|
* @author kimchy (shay.banon)
|
||||||
|
@ -51,7 +51,8 @@ public class TransportService extends AbstractLifecycleComponent<TransportServic
|
||||||
|
|
||||||
private final ThreadPool threadPool;
|
private final ThreadPool threadPool;
|
||||||
|
|
||||||
final ConcurrentMap<String, TransportRequestHandler> serverHandlers = newConcurrentMap();
|
volatile ImmutableMap<String, TransportRequestHandler> serverHandlers = ImmutableMap.of();
|
||||||
|
final Object serverHandlersMutex = new Object();
|
||||||
|
|
||||||
final ConcurrentMapLong<RequestHolder> clientHandlers = ConcurrentCollections.newConcurrentMapLong();
|
final ConcurrentMapLong<RequestHolder> clientHandlers = ConcurrentCollections.newConcurrentMapLong();
|
||||||
|
|
||||||
|
@ -212,14 +213,19 @@ public class TransportService extends AbstractLifecycleComponent<TransportServic
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerHandler(String action, TransportRequestHandler handler) {
|
public void registerHandler(String action, TransportRequestHandler handler) {
|
||||||
TransportRequestHandler handlerReplaced = serverHandlers.put(action, handler);
|
synchronized (serverHandlersMutex) {
|
||||||
|
TransportRequestHandler handlerReplaced = serverHandlers.get(action);
|
||||||
|
serverHandlers = MapBuilder.newMapBuilder(serverHandlers).put(action, handler).immutableMap();
|
||||||
if (handlerReplaced != null) {
|
if (handlerReplaced != null) {
|
||||||
logger.warn("Registered two transport handlers for action {}, handlers: {}, {}", action, handler, handlerReplaced);
|
logger.warn("Registered two transport handlers for action {}, handlers: {}, {}", action, handler, handlerReplaced);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void removeHandler(String action) {
|
public void removeHandler(String action) {
|
||||||
serverHandlers.remove(action);
|
synchronized (serverHandlersMutex) {
|
||||||
|
serverHandlers = MapBuilder.newMapBuilder(serverHandlers).remove(action).immutableMap();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Adapter implements TransportServiceAdapter {
|
class Adapter implements TransportServiceAdapter {
|
||||||
|
|
Loading…
Reference in New Issue