Skip to content

Commit 51508df

Browse files
committed
Don't share fiber gate across namespaces
1 parent e41de3d commit 51508df

File tree

4 files changed

+53
-8
lines changed

4 files changed

+53
-8
lines changed

operator/src/main/java/oracle/kubernetes/operator/DomainProcessorImpl.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import oracle.kubernetes.operator.work.Fiber;
5050
import oracle.kubernetes.operator.work.Fiber.CompletionCallback;
5151
import oracle.kubernetes.operator.work.FiberGate;
52+
import oracle.kubernetes.operator.work.FiberGateFactory;
5253
import oracle.kubernetes.operator.work.NextAction;
5354
import oracle.kubernetes.operator.work.Packet;
5455
import oracle.kubernetes.operator.work.Step;
@@ -62,7 +63,15 @@ public class DomainProcessorImpl implements DomainProcessor {
6263

6364
private static final LoggingFacade LOGGER = LoggingFactory.getLogger("Operator", "Operator");
6465

65-
private static final FiberGate FIBER_GATE = new FiberGate(Main.engine);
66+
private static final FiberGateFactory FACTORY =
67+
() -> {
68+
return new FiberGate(Main.engine);
69+
};
70+
private static final ConcurrentMap<String, FiberGate> fiberGates = new ConcurrentHashMap<>();
71+
72+
private static FiberGate getFiberGate(String ns) {
73+
return fiberGates.computeIfAbsent(ns, k -> FACTORY.get());
74+
}
6675

6776
// Map from namespace to map of domainUID to Domain
6877
private static final ConcurrentMap<String, ConcurrentMap<String, DomainPresenceInfo>> domains =
@@ -859,6 +868,7 @@ void runDomainPlan(
859868
Step.StepAndPacket plan,
860869
boolean isDeleting,
861870
boolean isWillInterrupt) {
871+
FiberGate gate = getFiberGate(ns);
862872
CompletionCallback cc =
863873
new CompletionCallback() {
864874
@Override
@@ -870,7 +880,7 @@ public void onCompletion(Packet packet) {
870880
public void onThrowable(Packet packet, Throwable throwable) {
871881
LOGGER.severe(MessageKeys.EXCEPTION, throwable);
872882

873-
FIBER_GATE.startFiberIfLastFiberMatches(
883+
gate.startFiberIfLastFiberMatches(
874884
domainUID,
875885
Fiber.getCurrentIfSet(),
876886
DomainStatusUpdater.createFailedStep(throwable, null),
@@ -887,8 +897,7 @@ public void onThrowable(Packet packet, Throwable throwable) {
887897
}
888898
});
889899

890-
FIBER_GATE
891-
.getExecutor()
900+
gate.getExecutor()
892901
.schedule(
893902
() -> {
894903
DomainPresenceInfo existing = getExisting(ns, domainUID);
@@ -903,9 +912,9 @@ public void onThrowable(Packet packet, Throwable throwable) {
903912
};
904913

905914
if (isWillInterrupt) {
906-
FIBER_GATE.startFiber(domainUID, plan.step, plan.packet, cc);
915+
gate.startFiber(domainUID, plan.step, plan.packet, cc);
907916
} else {
908-
FIBER_GATE.startFiberIfNoCurrentFiber(domainUID, plan.step, plan.packet, cc);
917+
gate.startFiberIfNoCurrentFiber(domainUID, plan.step, plan.packet, cc);
909918
}
910919
}
911920

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// Copyright 2018, Oracle Corporation and/or its affiliates. All rights reserved.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at
3+
// http://oss.oracle.com/licenses/upl.
4+
5+
package oracle.kubernetes.operator.work;
6+
7+
import java.util.function.Supplier;
8+
9+
public interface FiberGateFactory extends Supplier<FiberGate> {}

operator/src/test/java/oracle/kubernetes/operator/DomainPresenceTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import oracle.kubernetes.operator.helpers.DomainPresenceInfo;
5555
import oracle.kubernetes.operator.helpers.LegalNames;
5656
import oracle.kubernetes.operator.helpers.ServerKubernetesObjects;
57+
import oracle.kubernetes.operator.work.FiberGateFactoryStub;
5758
import oracle.kubernetes.operator.work.ThreadFactorySingleton;
5859
import oracle.kubernetes.weblogic.domain.v2.Domain;
5960
import oracle.kubernetes.weblogic.domain.v2.DomainList;
@@ -89,8 +90,7 @@ public void setUp() throws Exception {
8990
mementos.add(ClientFactoryStub.install());
9091
mementos.add(StubWatchFactory.install());
9192
mementos.add(installStub(ThreadFactorySingleton.class, "INSTANCE", this));
92-
mementos.add(
93-
installStub(DomainProcessorImpl.class, "FIBER_GATE", testSupport.createFiberGateStub()));
93+
mementos.add(FiberGateFactoryStub.install(testSupport));
9494
testSupport.addContainerComponent("TF", ThreadFactory.class, this);
9595

9696
getStartedVariable();
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// Copyright 2018, Oracle Corporation and/or its affiliates. All rights reserved.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at
3+
// http://oss.oracle.com/licenses/upl.
4+
5+
package oracle.kubernetes.operator.work;
6+
7+
import com.meterware.simplestub.Memento;
8+
import com.meterware.simplestub.StaticStubSupport;
9+
import oracle.kubernetes.operator.DomainProcessorImpl;
10+
11+
public class FiberGateFactoryStub implements FiberGateFactory {
12+
public static Memento install(FiberTestSupport testSupport) throws NoSuchFieldException {
13+
return StaticStubSupport.install(
14+
DomainProcessorImpl.class, "FACTORY", new FiberGateFactoryStub(testSupport));
15+
}
16+
17+
private final FiberTestSupport testSupport;
18+
19+
public FiberGateFactoryStub(FiberTestSupport testSupport) {
20+
this.testSupport = testSupport;
21+
}
22+
23+
@Override
24+
public FiberGate get() {
25+
return testSupport.createFiberGateStub();
26+
}
27+
}

0 commit comments

Comments
 (0)