Skip to content

Commit beedb44

Browse files
authored
Merge pull request #580 from oracle/domain-introspection-run
Domain introspection run
2 parents 1a39b22 + 6c5482c commit beedb44

File tree

8 files changed

+152
-20
lines changed

8 files changed

+152
-20
lines changed

model/src/main/java/oracle/kubernetes/weblogic/domain/v2/DomainSpec.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,17 @@ public class DomainSpec extends BaseConfiguration {
196196
@Description("Configuration for the clusters")
197197
protected Map<String, Cluster> clusters = new HashMap<>();
198198

199+
/**
200+
* Adds a Cluster to the DomainSpec
201+
*
202+
* @param cluster
203+
* @return
204+
*/
205+
public DomainSpec withCluster(Cluster cluster) {
206+
clusters.put(cluster.getClusterName(), cluster);
207+
return this;
208+
}
209+
199210
AdminServer getOrCreateAdminServer(String adminServerName) {
200211
if (adminServer != null) return adminServer;
201212

@@ -676,7 +687,7 @@ private void setAdminServer(AdminServer adminServer) {
676687
this.adminServer = adminServer;
677688
}
678689

679-
Map<String, ManagedServer> getManagedServers() {
690+
public Map<String, ManagedServer> getManagedServers() {
680691
return managedServers;
681692
}
682693

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

Lines changed: 55 additions & 6 deletions
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;
@@ -32,6 +33,8 @@
3233
import oracle.kubernetes.operator.helpers.JobHelper;
3334
import oracle.kubernetes.operator.helpers.PodHelper;
3435
import oracle.kubernetes.operator.helpers.ResponseStep;
36+
import oracle.kubernetes.operator.helpers.Scan;
37+
import oracle.kubernetes.operator.helpers.ScanCache;
3538
import oracle.kubernetes.operator.helpers.ServerKubernetesObjects;
3639
import oracle.kubernetes.operator.helpers.ServiceHelper;
3740
import oracle.kubernetes.operator.helpers.StorageHelper;
@@ -45,6 +48,7 @@
4548
import oracle.kubernetes.operator.steps.ListPersistentVolumeClaimStep;
4649
import oracle.kubernetes.operator.steps.ManagedServersUpStep;
4750
import oracle.kubernetes.operator.steps.WatchPodReadyAdminStep;
51+
import oracle.kubernetes.operator.wlsconfig.WlsDomainConfig;
4852
import oracle.kubernetes.operator.work.Component;
4953
import oracle.kubernetes.operator.work.Fiber;
5054
import oracle.kubernetes.operator.work.Fiber.CompletionCallback;
@@ -645,7 +649,8 @@ public StartPlanStep(DomainPresenceInfo info, Step next) {
645649

646650
@Override
647651
public NextAction apply(Packet packet) {
648-
Step strategy = new RegisterStep(info, getNext());
652+
Step strategy =
653+
Step.chain(readExistingSituConfigMap(info), new RegisterStep(info, getNext()));
649654
if (!info.isPopulated()) {
650655
strategy = Step.chain(readExistingPods(info), readExistingServices(info), strategy);
651656
}
@@ -684,6 +689,14 @@ private static Step readExistingServices(DomainPresenceInfo info) {
684689
.listServiceAsync(info.getNamespace(), new ServiceListStep(info));
685690
}
686691

692+
private static Step readExistingSituConfigMap(DomainPresenceInfo info) {
693+
String situConfigMapName =
694+
ConfigMapHelper.SitConfigMapContext.getConfigMapName(info.getDomainUID());
695+
return new CallBuilder()
696+
.readConfigMapAsync(
697+
situConfigMapName, info.getNamespace(), new ReadSituConfigMapStep(info));
698+
}
699+
687700
private static class PodListStep extends ResponseStep<V1PodList> {
688701
private final DomainPresenceInfo info;
689702

@@ -817,7 +830,7 @@ static Step createDomainUpPlan(DomainPresenceInfo info) {
817830
Domain dom = info.getDomain();
818831
Step managedServerStrategy =
819832
bringManagedServersUp(DomainStatusUpdater.createEndProgressingStep(new TailStep()));
820-
Step adminServerStrategy = bringAdminServerUp(dom, managedServerStrategy);
833+
Step adminServerStrategy = bringAdminServerUp(info, managedServerStrategy);
821834

822835
return new UpHeadStep(
823836
info,
@@ -893,17 +906,53 @@ public NextAction apply(Packet packet) {
893906

894907
// pre-conditions: DomainPresenceInfo SPI
895908
// "principal"
896-
private static Step bringAdminServerUp(Domain dom, Step next) {
897-
return StorageHelper.insertStorageSteps(dom, Step.chain(bringAdminServerUpSteps(dom, next)));
909+
private static Step bringAdminServerUp(DomainPresenceInfo info, Step next) {
910+
return StorageHelper.insertStorageSteps(
911+
info.getDomain(), Step.chain(bringAdminServerUpSteps(info, next)));
898912
}
899913

900-
private static Step[] bringAdminServerUpSteps(Domain dom, Step next) {
914+
private static class ReadSituConfigMapStep extends ResponseStep<V1ConfigMap> {
915+
private final DomainPresenceInfo info;
916+
917+
ReadSituConfigMapStep(DomainPresenceInfo info) {
918+
this.info = info;
919+
}
920+
921+
@Override
922+
public NextAction onFailure(Packet packet, CallResponse<V1ConfigMap> callResponse) {
923+
return callResponse.getStatusCode() == CallBuilder.NOT_FOUND
924+
? onSuccess(packet, callResponse)
925+
: super.onFailure(packet, callResponse);
926+
}
927+
928+
@Override
929+
public NextAction onSuccess(Packet packet, CallResponse<V1ConfigMap> callResponse) {
930+
V1ConfigMap result = callResponse.getResult();
931+
if (result != null) {
932+
Map<String, String> data = result.getData();
933+
String topologyYaml = data.get("topology.yaml");
934+
if (topologyYaml != null) {
935+
ConfigMapHelper.DomainTopology domainTopology =
936+
ConfigMapHelper.parseDomainTopologyYaml(topologyYaml);
937+
WlsDomainConfig wlsDomainConfig = domainTopology.getDomain();
938+
ScanCache.INSTANCE.registerScan(
939+
info.getNamespace(), info.getDomainUID(), new Scan(wlsDomainConfig, new DateTime()));
940+
}
941+
}
942+
943+
return doNext(packet);
944+
}
945+
}
946+
947+
private static Step[] bringAdminServerUpSteps(DomainPresenceInfo info, Step next) {
948+
Domain dom = info.getDomain();
901949
List<Step> resources = new ArrayList<>();
902950
resources.add(new ListPersistentVolumeClaimStep(null));
903951
resources.add(
904952
JobHelper.deleteDomainIntrospectorJobStep(
905953
dom.getDomainUID(), dom.getMetadata().getNamespace(), null));
906-
resources.add(JobHelper.createDomainIntrospectorJobStep(PodHelper.createAdminPodStep(null)));
954+
resources.add(JobHelper.createDomainIntrospectorJobStep(null));
955+
resources.add(PodHelper.createAdminPodStep(null));
907956
resources.add(new BeforeAdminServiceStep(null));
908957
resources.add(ServiceHelper.createForServerStep(null));
909958
resources.add(new WatchPodReadyAdminStep(Main.podWatchers, null));

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ private static String getOperatorNamespace() {
304304
}
305305
}
306306

307-
static class SitConfigMapContext extends ConfigMapContext {
307+
public static class SitConfigMapContext extends ConfigMapContext {
308308
Map<String, String> data;
309309
String cmName;
310310

@@ -513,7 +513,7 @@ static String extractFilename(String line) {
513513
return fname;
514514
}
515515

516-
static DomainTopology parseDomainTopologyYaml(String topologyYaml) {
516+
public static DomainTopology parseDomainTopologyYaml(String topologyYaml) {
517517
ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
518518

519519
try {

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

Lines changed: 66 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import io.kubernetes.client.models.V1PodList;
1212
import java.util.ArrayList;
1313
import java.util.List;
14+
import java.util.Map;
1415
import oracle.kubernetes.operator.JobWatcher;
1516
import oracle.kubernetes.operator.LabelConstants;
1617
import oracle.kubernetes.operator.ProcessingConstants;
@@ -20,10 +21,15 @@
2021
import oracle.kubernetes.operator.logging.LoggingFactory;
2122
import oracle.kubernetes.operator.logging.MessageKeys;
2223
import oracle.kubernetes.operator.steps.DefaultResponseStep;
24+
import oracle.kubernetes.operator.steps.ManagedServersUpStep;
2325
import oracle.kubernetes.operator.steps.WatchDomainIntrospectorJobReadyStep;
2426
import oracle.kubernetes.operator.work.NextAction;
2527
import oracle.kubernetes.operator.work.Packet;
2628
import oracle.kubernetes.operator.work.Step;
29+
import oracle.kubernetes.weblogic.domain.v2.Cluster;
30+
import oracle.kubernetes.weblogic.domain.v2.Domain;
31+
import oracle.kubernetes.weblogic.domain.v2.DomainSpec;
32+
import oracle.kubernetes.weblogic.domain.v2.ManagedServer;
2733

2834
public class JobHelper {
2935

@@ -89,8 +95,9 @@ List<V1EnvVar> getEnvironmentVariables(TuningParameters tuningParameters) {
8995
*/
9096
public static Step createDomainIntrospectorJobStep(Step next) {
9197

92-
return new DomainIntrospectorJobStep(
93-
readDomainIntrospectorPodLogStep(ConfigMapHelper.createSitConfigMapStep(next)));
98+
// return new DomainIntrospectorJobStep(
99+
// readDomainIntrospectorPodLogStep(ConfigMapHelper.createSitConfigMapStep(next)));
100+
return new DomainIntrospectorJobStep(next);
94101
}
95102

96103
static class DomainIntrospectorJobStep extends Step {
@@ -100,12 +107,66 @@ public DomainIntrospectorJobStep(Step next) {
100107

101108
@Override
102109
public NextAction apply(Packet packet) {
103-
JobStepContext context = new DomainIntrospectorJobStepContext(packet);
110+
DomainPresenceInfo info = packet.getSPI(DomainPresenceInfo.class);
111+
if (runIntrospector(info)) {
112+
JobStepContext context = new DomainIntrospectorJobStepContext(packet);
113+
114+
packet.putIfAbsent(START_TIME, Long.valueOf(System.currentTimeMillis()));
115+
116+
return doNext(
117+
context.createNewJob(
118+
readDomainIntrospectorPodLogStep(
119+
ConfigMapHelper.createSitConfigMapStep(getNext()))),
120+
packet);
121+
}
122+
123+
return doNext(getNext(), packet);
124+
}
125+
}
126+
127+
private static boolean runIntrospector(DomainPresenceInfo info) {
128+
Domain dom = info.getDomain();
129+
Scan scan = ScanCache.INSTANCE.lookupScan(dom.getMetadata().getNamespace(), dom.getDomainUID());
130+
LOGGER.fine("runIntrospector scan: " + scan);
131+
LOGGER.fine("runningServersCount: " + runningServersCount(info));
132+
LOGGER.fine("creatingServers: " + creatingServers(info));
133+
if (scan == null || (runningServersCount(info) == 0 && creatingServers(info))) {
134+
return true;
135+
}
136+
return false;
137+
}
104138

105-
packet.putIfAbsent(START_TIME, Long.valueOf(System.currentTimeMillis()));
139+
private static int runningServersCount(DomainPresenceInfo info) {
140+
return ManagedServersUpStep.getRunningServers(info).size();
141+
}
106142

107-
return doNext(context.createNewJob(getNext()), packet);
143+
/**
144+
* TODO: Enhance determination of when we believe we're creating WLS managed server pods
145+
*
146+
* @param info
147+
* @return
148+
*/
149+
private static boolean creatingServers(DomainPresenceInfo info) {
150+
Domain dom = info.getDomain();
151+
DomainSpec spec = dom.getSpec();
152+
Map<String, Cluster> clusters = spec.getClusters();
153+
Map<String, ManagedServer> servers = spec.getManagedServers();
154+
155+
// Are we starting a cluster?
156+
for (Cluster cluster : clusters.values()) {
157+
int replicaCount = cluster.getReplicas();
158+
LOGGER.fine("creatingServers replicaCount: " + replicaCount + " for cluster: " + cluster);
159+
if (replicaCount > 0) {
160+
return true;
161+
}
108162
}
163+
164+
// Are we starting a standalone managed server?
165+
// for (ManagedServer server : servers.values()) {
166+
// if (server.)
167+
// }
168+
169+
return false;
109170
}
110171

111172
/**

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ public NextAction apply(Packet packet) {
122122
packet);
123123
}
124124

125-
private Collection<String> getRunningServers(DomainPresenceInfo info) {
125+
public static Collection<String> getRunningServers(DomainPresenceInfo info) {
126126
Collection<String> runningList = new ArrayList<>();
127127
for (Map.Entry<String, ServerKubernetesObjects> entry : info.getServers().entrySet()) {
128128
ServerKubernetesObjects sko = entry.getValue();

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package oracle.kubernetes.operator;
66

77
import static oracle.kubernetes.operator.KubernetesConstants.DOMAIN_CONFIG_MAP_NAME;
8+
import static oracle.kubernetes.operator.KubernetesConstants.INTROSPECTOR_CONFIG_MAP_NAME_SUFFIX;
89
import static oracle.kubernetes.operator.LabelConstants.CHANNELNAME_LABEL;
910
import static oracle.kubernetes.operator.LabelConstants.CREATEDBYOPERATOR_LABEL;
1011
import static oracle.kubernetes.operator.LabelConstants.DOMAINUID_LABEL;
@@ -358,6 +359,11 @@ private void createCannedListDomainResponses() {
358359
.withName(DOMAIN_CONFIG_MAP_NAME)
359360
.ignoringBody()
360361
.returning(domainConfigMap);
362+
testSupport
363+
.createCannedResponse("readConfigMap")
364+
.withNamespace(NS)
365+
.withName(UID + INTROSPECTOR_CONFIG_MAP_NAME_SUFFIX)
366+
.returning(createEmptyConfigMap());
361367
}
362368

363369
private DomainList createEmptyDomainList() {

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -114,12 +114,12 @@ public void useSequenceBeforeAdminServerStep() {
114114
"ProgressingHookStep",
115115
"DomainPresenceStep",
116116
"ListPersistentVolumeClaimStep",
117-
"DeleteIntrospectorJobStep",
117+
// "DeleteIntrospectorJobStep",
118118
"DomainIntrospectorJobStep",
119-
"WatchDomainIntrospectorJobReadyStep",
120-
"ReadDomainIntrospectorPodStep",
121-
"ReadDomainIntrospectorPodLogStep",
122-
"SitConfigMapStep",
119+
// "WatchDomainIntrospectorJobReadyStep",
120+
// "ReadDomainIntrospectorPodStep",
121+
// "ReadDomainIntrospectorPodLogStep",
122+
// "SitConfigMapStep",
123123
"AdminPodStep",
124124
"BeforeAdminServiceStep",
125125
"ForServerStep",

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import oracle.kubernetes.operator.VersionConstants;
3030
import oracle.kubernetes.operator.work.FiberTestSupport;
3131
import oracle.kubernetes.operator.work.TerminalStep;
32+
import oracle.kubernetes.weblogic.domain.v2.Cluster;
3233
import oracle.kubernetes.weblogic.domain.v2.Domain;
3334
import oracle.kubernetes.weblogic.domain.v2.DomainSpec;
3435
import org.hamcrest.Matcher;
@@ -156,6 +157,9 @@ private DomainPresenceInfo createDomainPresenceInfo(Domain domain) {
156157

157158
@SuppressWarnings("deprecation")
158159
private DomainSpec createDomainSpec() {
160+
Cluster cluster = new Cluster();
161+
cluster.setClusterName("cluster-1");
162+
cluster.setReplicas(1);
159163
DomainSpec spec =
160164
new DomainSpec()
161165
.withDomainName(DOMAIN_NAME)
@@ -164,6 +168,7 @@ private DomainSpec createDomainSpec() {
164168
.withAsPort(ADMIN_PORT)
165169
.withAdminSecret(new V1SecretReference().name(ADMIN_SECRET_NAME))
166170
.withConfigOverrides(OVERRIDES_CM)
171+
.withCluster(cluster)
167172
.withImage(LATEST_IMAGE);
168173

169174
List<String> overrideSecrets = new ArrayList();

0 commit comments

Comments
 (0)