From 644d153d075c87b4e821dad6efae2f8f92d92b56 Mon Sep 17 00:00:00 2001 From: Ryan Eberhard Date: Tue, 27 Feb 2018 17:10:57 -0500 Subject: [PATCH 1/3] Async review --- .../oracle/kubernetes/operator/work/FiberGate.java | 11 ++++++----- .../java/oracle/kubernetes/operator/work/Packet.java | 6 +++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/main/java/oracle/kubernetes/operator/work/FiberGate.java b/src/main/java/oracle/kubernetes/operator/work/FiberGate.java index bbab7179eae..d3b25cd02d1 100644 --- a/src/main/java/oracle/kubernetes/operator/work/FiberGate.java +++ b/src/main/java/oracle/kubernetes/operator/work/FiberGate.java @@ -55,17 +55,18 @@ public void onThrowable(Packet packet, Throwable throwable) { private static class WaitForOldFiberStep extends Step { private final AtomicReference old; - private WaitForOldFiberStep current; + private final AtomicReference current; public WaitForOldFiberStep(Fiber old, Step next) { super(next); this.old = new AtomicReference<>(old); - current = this; + current = new AtomicReference<>(this); } @Override public NextAction apply(Packet packet) { - Fiber o = current != null ? current.old.getAndSet(null) : null; + WaitForOldFiberStep c = current.get(); + Fiber o = c != null ? c.old.getAndSet(null) : null; if (o == null) { return doNext(packet); } @@ -74,13 +75,13 @@ public NextAction apply(Packet packet) { boolean isWillCall = o.cancelAndExitCallback(true, new ExitCallback() { @Override public void onExit() { - current = o.getSPI(WaitForOldFiberStep.class); + current.set(o.getSPI(WaitForOldFiberStep.class)); fiber.resume(packet); } }); if (!isWillCall) { - current = o.getSPI(WaitForOldFiberStep.class); + current.set(o.getSPI(WaitForOldFiberStep.class)); fiber.resume(packet); } }); diff --git a/src/main/java/oracle/kubernetes/operator/work/Packet.java b/src/main/java/oracle/kubernetes/operator/work/Packet.java index 0a0bd7bccda..e278be4d309 100644 --- a/src/main/java/oracle/kubernetes/operator/work/Packet.java +++ b/src/main/java/oracle/kubernetes/operator/work/Packet.java @@ -5,17 +5,17 @@ import java.util.AbstractMap; import java.util.Collections; -import java.util.HashMap; import java.util.Map; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; /** * Context of a single processing flow. Acts as a map and as a registry of components. * */ public class Packet extends AbstractMap implements ComponentRegistry, ComponentEx { - private final Map components = new HashMap(); - private final Map delegate = new HashMap(); + private final Map components = new ConcurrentHashMap(); + private final Map delegate = new ConcurrentHashMap(); public Packet() {} From 30c2c909c7ec6453204d606a02afa12b3c9a6777 Mon Sep 17 00:00:00 2001 From: Ryan Eberhard Date: Wed, 28 Feb 2018 08:35:32 -0500 Subject: [PATCH 2/3] Replicas fix --- src/main/java/oracle/kubernetes/operator/Main.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/oracle/kubernetes/operator/Main.java b/src/main/java/oracle/kubernetes/operator/Main.java index a905675764d..340def5fbf2 100644 --- a/src/main/java/oracle/kubernetes/operator/Main.java +++ b/src/main/java/oracle/kubernetes/operator/Main.java @@ -814,12 +814,12 @@ public NextAction apply(Packet packet) { WlsClusterConfig wlsClusterConfig = scan.getClusterConfig(clusterName); if (wlsClusterConfig != null) { for (WlsServerConfig wlsServerConfig : wlsClusterConfig.getServerConfigs()) { + // done with the current cluster + if (startedCount >= cs.getReplicas() && !startAll) + continue cluster; + String serverName = wlsServerConfig.getName(); if (!serverName.equals(asName) && !servers.contains(serverName)) { - // done with the current cluster - if (startedCount >= cs.getReplicas() && !startAll) - continue cluster; - List env = cs.getEnv(); ServerStartup ssi = null; ssl = spec.getServerStartup(); @@ -874,15 +874,15 @@ else if (StartupControlConstants.AUTO_STARTUPCONTROL.equals(sc)) { int startedCount = 0; WlsClusterConfig config = wlsClusterConfig.getValue(); for (WlsServerConfig wlsServerConfig : config.getServerConfigs()) { + if (startedCount >= spec.getReplicas()) + break; String serverName = wlsServerConfig.getName(); if (!serverName.equals(asName) && !servers.contains(serverName)) { // start server servers.add(serverName); ssic.add(new ServerStartupInfo(wlsServerConfig, config, null, null)); + startedCount++; } - // outside the serverName check because these servers are already running - if (++startedCount >= spec.getReplicas()) - break; } } } From 3b6d5726539fcf71708e7a28dff3ce246206397f Mon Sep 17 00:00:00 2001 From: Ryan Eberhard Date: Wed, 28 Feb 2018 09:52:22 -0500 Subject: [PATCH 3/3] No null values in ConcurrentMap --- .../java/oracle/kubernetes/operator/work/Packet.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/java/oracle/kubernetes/operator/work/Packet.java b/src/main/java/oracle/kubernetes/operator/work/Packet.java index e278be4d309..c8e0a5aafe7 100644 --- a/src/main/java/oracle/kubernetes/operator/work/Packet.java +++ b/src/main/java/oracle/kubernetes/operator/work/Packet.java @@ -8,14 +8,15 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; /** * Context of a single processing flow. Acts as a map and as a registry of components. * */ public class Packet extends AbstractMap implements ComponentRegistry, ComponentEx { - private final Map components = new ConcurrentHashMap(); - private final Map delegate = new ConcurrentHashMap(); + private final ConcurrentMap components = new ConcurrentHashMap(); + private final ConcurrentMap delegate = new ConcurrentHashMap(); public Packet() {} @@ -33,9 +34,6 @@ public Packet clone() { } public S getSPI(Class spiType) { - if (components == null) { - return null; - } for (Component c : components.values()) { S s = c.getSPI(spiType); if (s != null) { @@ -66,6 +64,6 @@ public Set> entrySet() { @Override public Object put(String key, Object value) { - return delegate.put(key, value); + return value != null ? delegate.put(key, value) : delegate.remove(key); } }