Skip to content

Commit dce7aef

Browse files
authored
Merge pull request #860 from oracle/owls-71734
WIP: cache the JobWatcher by namespace
2 parents d42eaff + f84f67e commit dce7aef

File tree

4 files changed

+71
-24
lines changed

4 files changed

+71
-24
lines changed

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import io.kubernetes.client.util.Watch;
1616
import java.util.ArrayList;
1717
import java.util.List;
18+
import java.util.Map;
1819
import java.util.Objects;
1920
import java.util.concurrent.ConcurrentHashMap;
2021
import java.util.concurrent.ConcurrentMap;
@@ -656,6 +657,8 @@ public void makeRightDomainPresence(
656657
}
657658
}
658659

660+
private static final Map<String, JobWatcher> jws = new ConcurrentHashMap<>();
661+
659662
private void internalMakeRightDomainPresence(
660663
@Nullable DomainPresenceInfo info, boolean isDeleting, boolean isWillInterrupt) {
661664
String ns = info.getNamespace();
@@ -999,7 +1002,11 @@ private static Step[] domainIntrospectionSteps(DomainPresenceInfo info, Step nex
9991002
JobHelper.deleteDomainIntrospectorJobStep(
10001003
dom.getDomainUID(), dom.getMetadata().getNamespace(), null));
10011004
resources.add(
1002-
JobHelper.createDomainIntrospectorJobStep(Main.tuningAndConfig.getWatchTuning(), next));
1005+
JobHelper.createDomainIntrospectorJobStep(
1006+
Main.tuningAndConfig.getWatchTuning(),
1007+
next,
1008+
jws,
1009+
Main.isNamespaceStopping(dom.getMetadata().getNamespace())));
10031010
return resources.toArray(new Step[resources.size()]);
10041011
}
10051012

operator/src/main/java/oracle/kubernetes/operator/helpers/JobHelper.java

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
import io.kubernetes.client.models.V1VolumeMount;
1414
import java.util.ArrayList;
1515
import java.util.List;
16+
import java.util.Map;
17+
import java.util.concurrent.atomic.AtomicBoolean;
18+
import javax.validation.constraints.NotNull;
1619
import oracle.kubernetes.operator.JobWatcher;
1720
import oracle.kubernetes.operator.LabelConstants;
1821
import oracle.kubernetes.operator.ProcessingConstants;
@@ -115,21 +118,30 @@ List<V1EnvVar> getConfiguredEnvVars(TuningParameters tuningParameters) {
115118
*
116119
* @param tuning Watch tuning parameters
117120
* @param next Next processing step
121+
* @param jws Map of JobWatcher objects, keyed by the string value of the name of a namespace
122+
* @param isStopping
118123
* @return Step for creating job
119124
*/
120-
public static Step createDomainIntrospectorJobStep(WatchTuning tuning, Step next) {
125+
public static Step createDomainIntrospectorJobStep(
126+
WatchTuning tuning,
127+
Step next,
128+
@NotNull Map<String, JobWatcher> jws,
129+
@NotNull AtomicBoolean isStopping) {
121130

122-
// return new DomainIntrospectorJobStep(
123-
// readDomainIntrospectorPodLogStep(ConfigMapHelper.createSitConfigMapStep(next)));
124-
return new DomainIntrospectorJobStep(tuning, next);
131+
return new DomainIntrospectorJobStep(tuning, next, jws, isStopping);
125132
}
126133

127134
static class DomainIntrospectorJobStep extends Step {
128135
private final WatchTuning tuning;
136+
private final Map<String, JobWatcher> jws;
137+
private final AtomicBoolean isStopping;
129138

130-
public DomainIntrospectorJobStep(WatchTuning tuning, Step next) {
139+
DomainIntrospectorJobStep(
140+
WatchTuning tuning, Step next, Map<String, JobWatcher> jws, AtomicBoolean isStopping) {
131141
super(next);
132142
this.tuning = tuning;
143+
this.jws = jws;
144+
this.isStopping = isStopping;
133145
}
134146

135147
@Override
@@ -143,7 +155,7 @@ public NextAction apply(Packet packet) {
143155
return doNext(
144156
context.createNewJob(
145157
readDomainIntrospectorPodLogStep(
146-
tuning, ConfigMapHelper.createSitConfigMapStep(getNext()))),
158+
tuning, ConfigMapHelper.createSitConfigMapStep(getNext()), jws, isStopping)),
147159
packet);
148160
}
149161

@@ -269,8 +281,9 @@ private Step deleteJob(Step next) {
269281
}
270282
}
271283

272-
private static Step createWatchDomainIntrospectorJobReadyStep(WatchTuning tuning, Step next) {
273-
return new WatchDomainIntrospectorJobReadyStep(tuning, next);
284+
private static Step createWatchDomainIntrospectorJobReadyStep(
285+
WatchTuning tuning, Step next, Map<String, JobWatcher> jws, AtomicBoolean isStopping) {
286+
return new WatchDomainIntrospectorJobReadyStep(tuning, next, jws, isStopping);
274287
}
275288

276289
/**
@@ -280,9 +293,13 @@ private static Step createWatchDomainIntrospectorJobReadyStep(WatchTuning tuning
280293
* @param next Next processing step
281294
* @return Step for reading WebLogic domain introspector pod log
282295
*/
283-
public static Step readDomainIntrospectorPodLogStep(WatchTuning tuning, Step next) {
296+
static Step readDomainIntrospectorPodLogStep(
297+
WatchTuning tuning, Step next, Map<String, JobWatcher> jws, AtomicBoolean isStopping) {
284298
return createWatchDomainIntrospectorJobReadyStep(
285-
tuning, readDomainIntrospectorPodStep(new ReadDomainIntrospectorPodLogStep(next)));
299+
tuning,
300+
readDomainIntrospectorPodStep(new ReadDomainIntrospectorPodLogStep(next)),
301+
jws,
302+
isStopping);
286303
}
287304

288305
private static class ReadDomainIntrospectorPodLogStep extends Step {

operator/src/main/java/oracle/kubernetes/operator/steps/WatchDomainIntrospectorJobReadyStep.java

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
// Copyright 2017, 2018, Oracle Corporation and/or its affiliates. All rights reserved.
1+
// Copyright 2017, 2019, Oracle Corporation and/or its affiliates. All rights reserved.
22
// Licensed under the Universal Permissive License v 1.0 as shown at
33
// http://oss.oracle.com/licenses/upl.
44

55
package oracle.kubernetes.operator.steps;
66

77
import io.kubernetes.client.models.V1Job;
8+
import java.util.Map;
89
import java.util.concurrent.atomic.AtomicBoolean;
10+
import javax.validation.constraints.NotNull;
911
import oracle.kubernetes.operator.JobWatcher;
1012
import oracle.kubernetes.operator.ProcessingConstants;
1113
import oracle.kubernetes.operator.TuningParameters.WatchTuning;
@@ -17,10 +19,18 @@
1719

1820
public class WatchDomainIntrospectorJobReadyStep extends Step {
1921
private final WatchTuning tuning;
22+
private final Map<String, JobWatcher> jws;
23+
private final AtomicBoolean isStopping;
2024

21-
public WatchDomainIntrospectorJobReadyStep(WatchTuning tuning, Step next) {
25+
public WatchDomainIntrospectorJobReadyStep(
26+
WatchTuning tuning,
27+
Step next,
28+
@NotNull Map<String, JobWatcher> jws,
29+
@NotNull AtomicBoolean isStopping) {
2230
super(next);
2331
this.tuning = tuning;
32+
this.jws = jws;
33+
this.isStopping = isStopping;
2434
}
2535

2636
@Override
@@ -33,15 +43,20 @@ public NextAction apply(Packet packet) {
3343

3444
// No need to spawn a watcher if the job is already complete
3545
if (domainIntrospectorJob != null && !JobWatcher.isComplete(domainIntrospectorJob)) {
36-
JobWatcher jw =
37-
JobWatcher.create(
38-
ThreadFactorySingleton.getInstance(),
39-
namespace,
40-
initialResourceVersion,
41-
tuning,
42-
new AtomicBoolean(false));
43-
44-
return doNext(jw.waitForReady(domainIntrospectorJob, getNext()), packet);
46+
JobWatcher jw = jws.get(namespace);
47+
if (jw == null) {
48+
jw =
49+
JobWatcher.create(
50+
ThreadFactorySingleton.getInstance(),
51+
namespace,
52+
initialResourceVersion,
53+
tuning,
54+
isStopping);
55+
jws.put(namespace, jw);
56+
}
57+
NextAction retVal = doNext(jw.waitForReady(domainIntrospectorJob, getNext()), packet);
58+
59+
return retVal;
4560
}
4661

4762
return doNext(packet);

operator/src/test/java/oracle/kubernetes/operator/helpers/DomainIntrospectorJobTest.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright 2018, Oracle Corporation and/or its affiliates. All rights reserved.
1+
// Copyright 2018, 2019, Oracle Corporation and/or its affiliates. All rights reserved.
22
// Licensed under the Universal Permissive License v 1.0 as shown at
33
// http://oss.oracle.com/licenses/upl.
44

@@ -19,9 +19,12 @@
1919
import java.util.ArrayList;
2020
import java.util.Arrays;
2121
import java.util.List;
22+
import java.util.concurrent.ConcurrentHashMap;
23+
import java.util.concurrent.atomic.AtomicBoolean;
2224
import java.util.logging.Level;
2325
import java.util.logging.LogRecord;
2426
import oracle.kubernetes.TestUtils;
27+
import oracle.kubernetes.operator.JobWatcher;
2528
import oracle.kubernetes.operator.KubernetesConstants;
2629
import oracle.kubernetes.operator.LabelConstants;
2730
import oracle.kubernetes.operator.TuningParameters;
@@ -290,7 +293,12 @@ static String getJobName() {
290293
}
291294

292295
FiberTestSupport.StepFactory getStepFactory() {
293-
return next -> JobHelper.createDomainIntrospectorJobStep(new WatchTuning(30, 0), next);
296+
return next ->
297+
JobHelper.createDomainIntrospectorJobStep(
298+
new WatchTuning(30, 0),
299+
next,
300+
new ConcurrentHashMap<String, JobWatcher>(),
301+
new AtomicBoolean(false));
294302
}
295303

296304
V1PodList createListPods() {

0 commit comments

Comments
 (0)