summaryrefslogtreecommitdiffstats
path: root/container-messagebus
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-05-03 07:30:55 +0200
committerjonmv <venstad@gmail.com>2022-05-03 07:30:55 +0200
commit3592e408848787f75e721bf2d6f99f3f010f6610 (patch)
tree8a41d51e4bbc420bc1dbc65d76e79e3f8ab423d3 /container-messagebus
parente046ae79779261b09f85bcf4c04c906b83075775 (diff)
Revert "Merge pull request #22394 from vespa-engine/revert-22374-jonmv/remove-last-controller-jersey-client"
This reverts commit e046ae79779261b09f85bcf4c04c906b83075775, reversing changes made to d2066c0a0c04e2aa2ada12a5c85f5eae9ff65b02.
Diffstat (limited to 'container-messagebus')
-rw-r--r--container-messagebus/src/main/java/com/yahoo/container/jdisc/messagebus/NetworkMultiplexerHolder.java27
-rw-r--r--container-messagebus/src/main/java/com/yahoo/container/jdisc/messagebus/SessionCache.java19
2 files changed, 16 insertions, 30 deletions
diff --git a/container-messagebus/src/main/java/com/yahoo/container/jdisc/messagebus/NetworkMultiplexerHolder.java b/container-messagebus/src/main/java/com/yahoo/container/jdisc/messagebus/NetworkMultiplexerHolder.java
index cb28807ac73..8b3b2664cd1 100644
--- a/container-messagebus/src/main/java/com/yahoo/container/jdisc/messagebus/NetworkMultiplexerHolder.java
+++ b/container-messagebus/src/main/java/com/yahoo/container/jdisc/messagebus/NetworkMultiplexerHolder.java
@@ -7,6 +7,9 @@ import com.yahoo.messagebus.network.NetworkMultiplexer;
import com.yahoo.messagebus.network.rpc.RPCNetwork;
import com.yahoo.messagebus.network.rpc.RPCNetworkParams;
import com.yahoo.messagebus.shared.NullNetwork;
+import com.yahoo.yolean.concurrent.Memoized;
+
+import java.util.concurrent.atomic.AtomicReference;
/**
* Holds a reference to a singleton {@link NetworkMultiplexer}.
@@ -15,21 +18,17 @@ import com.yahoo.messagebus.shared.NullNetwork;
*/
public class NetworkMultiplexerHolder extends AbstractComponent {
- private final Object monitor = new Object();
- private boolean destroyed = false;
- private NetworkMultiplexer net;
+ private final AtomicReference<RPCNetworkParams> params = new AtomicReference<>();
+ private final Memoized<NetworkMultiplexer, RuntimeException> net = new Memoized<>(() -> NetworkMultiplexer.shared(newNetwork(params.get())),
+ NetworkMultiplexer::disown);
/** Get the singleton RPCNetworkAdapter, creating it if this hasn't yet been done. */
public NetworkMultiplexer get(RPCNetworkParams params) {
- synchronized (monitor) {
- if (destroyed)
- throw new IllegalStateException("Component already destroyed");
-
- return net = net != null ? net : NetworkMultiplexer.shared(newNetwork(params));
- }
+ this.params.set(params);
+ return net.get();
}
- private Network newNetwork(RPCNetworkParams params) {
+ private static Network newNetwork(RPCNetworkParams params) {
return params.getSlobroksConfig() != null && params.getSlobroksConfig().slobrok().isEmpty()
? new NullNetwork() // For LocalApplication, test setup.
: new RPCNetwork(params);
@@ -37,13 +36,7 @@ public class NetworkMultiplexerHolder extends AbstractComponent {
@Override
public void deconstruct() {
- synchronized (monitor) {
- if (net != null) {
- net.disown();
- net = null;
- }
- destroyed = true;
- }
+ net.close();
}
}
diff --git a/container-messagebus/src/main/java/com/yahoo/container/jdisc/messagebus/SessionCache.java b/container-messagebus/src/main/java/com/yahoo/container/jdisc/messagebus/SessionCache.java
index 91a3181cb68..3045247a6d3 100644
--- a/container-messagebus/src/main/java/com/yahoo/container/jdisc/messagebus/SessionCache.java
+++ b/container-messagebus/src/main/java/com/yahoo/container/jdisc/messagebus/SessionCache.java
@@ -29,6 +29,7 @@ import com.yahoo.messagebus.shared.SharedMessageBus;
import com.yahoo.messagebus.shared.SharedSourceSession;
import com.yahoo.vespa.config.content.DistributionConfig;
import com.yahoo.vespa.config.content.LoadTypeConfig;
+import com.yahoo.yolean.concurrent.Memoized;
import java.util.HashMap;
import java.util.Map;
@@ -54,9 +55,7 @@ public final class SessionCache extends AbstractComponent {
private static final Logger log = Logger.getLogger(SessionCache.class.getName());
- private final Object monitor = new Object();
- private Supplier<SharedMessageBus> messageBuses;
- private SharedMessageBus messageBus;
+ private final Memoized<SharedMessageBus, RuntimeException> messageBus;
private final Object intermediateLock = new Object();
private final Map<String, SharedIntermediateSession> intermediates = new HashMap<>();
@@ -96,24 +95,18 @@ public final class SessionCache extends AbstractComponent {
public SessionCache(Supplier<NetworkMultiplexer> net, ContainerMbusConfig containerMbusConfig,
MessagebusConfig messagebusConfig, Protocol protocol) {
- this.messageBuses = () -> createSharedMessageBus(net.get(), containerMbusConfig, messagebusConfig, protocol);
+ this.messageBus = new Memoized<>(() -> createSharedMessageBus(net.get(), containerMbusConfig, messagebusConfig, protocol),
+ SharedMessageBus::release);
}
@Override
public void deconstruct() {
- synchronized (monitor) {
- messageBuses = () -> { throw new IllegalStateException("Session cache already deconstructed"); };
-
- if (messageBus != null)
- messageBus.release();
- }
+ messageBus.close();
}
// Lazily create shared message bus.
private SharedMessageBus bus() {
- synchronized (monitor) {
- return messageBus = messageBus != null ? messageBus : messageBuses.get();
- }
+ return messageBus.get();
}
private static SharedMessageBus createSharedMessageBus(NetworkMultiplexer net,