Skip to content

Commit ff14368

Browse files
committed
Move to per-cluster service referenced by Ingress
1 parent 2e1fc6e commit ff14368

File tree

8 files changed

+534
-657
lines changed

8 files changed

+534
-657
lines changed

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

Lines changed: 135 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -936,14 +936,18 @@ else if (StartupControlConstants.AUTO_STARTUPCONTROL.equals(sc)) {
936936

937937
info.setServerStartupInfo(ssic);
938938
LOGGER.exiting();
939-
return doNext(scaleDownIfNecessary(info, servers, new ManagedServerUpIteratorStep(ssic, next)), packet);
939+
return doNext(scaleDownIfNecessary(info, servers,
940+
checkServerServices(info, new ManagedServerUpIteratorStep(ssic, next))),
941+
packet);
940942
case StartupControlConstants.ADMIN_STARTUPCONTROL:
941943
case StartupControlConstants.NONE_STARTUPCONTROL:
942944
default:
943945

944946
info.setServerStartupInfo(null);
945947
LOGGER.exiting();
946-
return doNext(scaleDownIfNecessary(info, servers, next), packet);
948+
return doNext(scaleDownIfNecessary(info, servers,
949+
checkServerServices(info, next)),
950+
packet);
947951
}
948952
}
949953
}
@@ -979,6 +983,94 @@ private static List<V1EnvVar> startInAdminMode(List<V1EnvVar> env) {
979983
return env;
980984
}
981985

986+
private static Step checkServerServices(DomainPresenceInfo info, Step next) {
987+
Collection<String> allServers = new ArrayList<>();
988+
Collection<ServerStartupInfo> ssic = new ArrayList<>();
989+
990+
WlsDomainConfig scan = info.getScan();
991+
992+
// Iterate all servers
993+
for (WlsClusterConfig wlsClusterConfig : scan.getClusterConfigs().values()) {
994+
for (WlsServerConfig wlsServerConfig : wlsClusterConfig.getServerConfigs()) {
995+
String serverName = wlsServerConfig.getListenAddress();
996+
if (!allServers.contains(serverName)) {
997+
allServers.add(serverName);
998+
ssic.add(new ServerStartupInfo(wlsServerConfig, wlsClusterConfig, null, null));
999+
}
1000+
}
1001+
}
1002+
for (Map.Entry<String, WlsServerConfig> wlsServerConfig : scan.getServerConfigs().entrySet()) {
1003+
String serverName = wlsServerConfig.getKey();
1004+
if (!allServers.contains(serverName)) {
1005+
allServers.add(serverName);
1006+
ssic.add(new ServerStartupInfo(wlsServerConfig.getValue(), null, null, null));
1007+
}
1008+
}
1009+
1010+
return new ManagedServerServicesStep(info, ssic,
1011+
IngressHelper.createClusterStep(next));
1012+
}
1013+
1014+
private static class ManagedServerServicesStep extends Step {
1015+
private final DomainPresenceInfo info;
1016+
private final Collection<ServerStartupInfo> ssic;
1017+
1018+
public ManagedServerServicesStep(DomainPresenceInfo info, Collection<ServerStartupInfo> ssic, Step next) {
1019+
super(next);
1020+
this.info = info;
1021+
this.ssic = ssic;
1022+
}
1023+
1024+
@Override
1025+
public NextAction apply(Packet packet) {
1026+
Collection<StepAndPacket> startDetails = new ArrayList<>();
1027+
1028+
for (ServerStartupInfo ssi : ssic) {
1029+
Packet p = packet.clone();
1030+
WlsServerConfig serverConfig = ssi.serverConfig;
1031+
ServerStartup ss = ssi.serverStartup;
1032+
p.put(ProcessingConstants.SERVER_SCAN, serverConfig);
1033+
p.put(ProcessingConstants.CLUSTER_SCAN, ssi.clusterConfig);
1034+
p.put(ProcessingConstants.ENVVARS, ssi.envVars);
1035+
Integer nodePort = null;
1036+
if (ss != null) {
1037+
nodePort = ss.getNodePort();
1038+
}
1039+
1040+
p.put(ProcessingConstants.SERVER_NAME, serverConfig.getName());
1041+
if (ssi.clusterConfig != null) {
1042+
p.put(ProcessingConstants.CLUSTER_NAME, ssi.clusterConfig.getClusterName());
1043+
}
1044+
p.put(ProcessingConstants.PORT, serverConfig.getListenPort());
1045+
p.put(ProcessingConstants.NODE_PORT, nodePort);
1046+
1047+
startDetails.add(new StepAndPacket(ServiceHelper.createForServerStep(null), p));
1048+
}
1049+
1050+
// Add cluster services
1051+
WlsDomainConfig scan = info.getScan();
1052+
if (scan != null) {
1053+
for (Map.Entry<String, WlsClusterConfig> entry : scan.getClusterConfigs().entrySet()) {
1054+
Packet p = packet.clone();
1055+
WlsClusterConfig clusterConfig = entry.getValue();
1056+
p.put(ProcessingConstants.CLUSTER_SCAN, clusterConfig);
1057+
p.put(ProcessingConstants.CLUSTER_NAME, clusterConfig.getClusterName());
1058+
for (WlsServerConfig serverConfig : clusterConfig.getServerConfigs()) {
1059+
p.put(ProcessingConstants.PORT, serverConfig.getListenPort());
1060+
break;
1061+
}
1062+
1063+
startDetails.add(new StepAndPacket(ServiceHelper.createForClusterStep(null), p));
1064+
}
1065+
}
1066+
1067+
if (startDetails.isEmpty()) {
1068+
return doNext(packet);
1069+
}
1070+
return doForkJoin(next, packet, startDetails);
1071+
}
1072+
}
1073+
9821074
private static Step scaleDownIfNecessary(DomainPresenceInfo info, Collection<String> servers, Step next) {
9831075
Domain dom = info.getDomain();
9841076
DomainSpec spec = dom.getSpec();
@@ -1128,9 +1220,7 @@ public ServerDownStep(String serverName, ServerKubernetesObjects sko, Step next)
11281220

11291221
@Override
11301222
public NextAction apply(Packet packet) {
1131-
return doNext(IngressHelper.createRemoveServerStep(serverName,
1132-
ServiceHelper.deleteServicesStep(sko,
1133-
PodHelper.deletePodStep(sko, new ServerDownFinalizeStep(serverName, next)))), packet);
1223+
return doNext(PodHelper.deletePodStep(sko, new ServerDownFinalizeStep(serverName, next)), packet);
11341224
}
11351225
}
11361226

@@ -1156,40 +1246,9 @@ public NextAction apply(Packet packet) {
11561246
// "clusterScan"
11571247
// "envVars"
11581248
private static Step bringManagedServerUp(ServerStartupInfo ssi, Step next) {
1159-
return PodHelper.createManagedPodStep(
1160-
new BeforeManagedServerStep(
1161-
ssi,
1162-
ServiceHelper.createForServerStep(
1163-
IngressHelper.createAddServerStep(next))));
1249+
return PodHelper.createManagedPodStep(next);
11641250
}
11651251

1166-
private static class BeforeManagedServerStep extends Step {
1167-
private final ServerStartupInfo ssi;
1168-
1169-
public BeforeManagedServerStep(ServerStartupInfo ssi, Step next) {
1170-
super(next);
1171-
this.ssi = ssi;
1172-
}
1173-
1174-
@Override
1175-
public NextAction apply(Packet packet) {
1176-
WlsServerConfig scan = ssi.serverConfig;
1177-
ServerStartup ss = ssi.serverStartup;
1178-
Integer nodePort = null;
1179-
if (ss != null) {
1180-
nodePort = ss.getNodePort();
1181-
}
1182-
1183-
packet.put(ProcessingConstants.SERVER_NAME, scan.getName());
1184-
if (ssi.clusterConfig != null) {
1185-
packet.put(ProcessingConstants.CLUSTER_NAME, ssi.clusterConfig.getClusterName());
1186-
}
1187-
packet.put(ProcessingConstants.PORT, scan.getListenPort());
1188-
packet.put(ProcessingConstants.NODE_PORT, nodePort);
1189-
return doNext(packet);
1190-
}
1191-
}
1192-
11931252
private static void deleteDomainPresence(Domain dom) {
11941253
V1ObjectMeta meta = dom.getMetadata();
11951254
DomainSpec spec = dom.getSpec();
@@ -1510,22 +1569,30 @@ private static void dispatchServiceWatch(Watch.Response<V1Service> item) {
15101569
String domainUID = metadata.getLabels().get(LabelConstants.DOMAINUID_LABEL);
15111570
String serverName = metadata.getLabels().get(LabelConstants.SERVERNAME_LABEL);
15121571
String channelName = metadata.getLabels().get(LabelConstants.CHANNELNAME_LABEL);
1572+
String clusterName = metadata.getLabels().get(LabelConstants.CLUSTERNAME_LABEL);
15131573
if (domainUID != null) {
15141574
DomainPresenceInfo info = domains.get(domainUID);
1515-
if (info != null && serverName != null) {
1516-
ServerKubernetesObjects created = new ServerKubernetesObjects();
1517-
ServerKubernetesObjects current = info.getServers().putIfAbsent(serverName, created);
1518-
ServerKubernetesObjects sko = current != null ? current : created;
1519-
if (sko != null) {
1520-
switch (item.type) {
1521-
case "ADDED":
1575+
ServerKubernetesObjects sko = null;
1576+
if (info != null) {
1577+
if (serverName != null) {
1578+
ServerKubernetesObjects created = new ServerKubernetesObjects();
1579+
ServerKubernetesObjects current = info.getServers().putIfAbsent(serverName, created);
1580+
sko = current != null ? current : created;
1581+
}
1582+
switch (item.type) {
1583+
case "ADDED":
1584+
if (sko != null) {
15221585
if (channelName != null) {
15231586
sko.getChannels().put(channelName, s);
15241587
} else {
15251588
sko.getService().set(s);
15261589
}
1527-
break;
1528-
case "MODIFIED":
1590+
} else if (clusterName != null) {
1591+
info.getClusters().put(clusterName, s);
1592+
}
1593+
break;
1594+
case "MODIFIED":
1595+
if (sko != null) {
15291596
if (channelName != null) {
15301597
V1Service skoService = sko.getChannels().get(channelName);
15311598
if (skoService != null) {
@@ -1537,28 +1604,42 @@ private static void dispatchServiceWatch(Watch.Response<V1Service> item) {
15371604
sko.getService().compareAndSet(skoService, s);
15381605
}
15391606
}
1540-
break;
1541-
case "DELETED":
1607+
} else if (clusterName != null) {
1608+
V1Service clusterService = info.getClusters().get(clusterName);
1609+
if (clusterService != null) {
1610+
info.getClusters().replace(clusterName, clusterService, s);
1611+
}
1612+
}
1613+
break;
1614+
case "DELETED":
1615+
if (sko != null) {
15421616
if (channelName != null) {
15431617
V1Service oldService = sko.getChannels().put(channelName, null);
15441618
if (oldService != null) {
15451619
// Service was deleted, but sko still contained a non-null entry
1546-
LOGGER.info(MessageKeys.SERVICE_DELETED, domainUID, metadata.getNamespace(), serverName);
1620+
LOGGER.info(MessageKeys.SERVER_SERVICE_DELETED, domainUID, metadata.getNamespace(), serverName);
15471621
doCheckAndCreateDomainPresence(info.getDomain(), true);
15481622
}
15491623
} else {
15501624
V1Service oldService = sko.getService().getAndSet(null);
15511625
if (oldService != null) {
15521626
// Service was deleted, but sko still contained a non-null entry
1553-
LOGGER.info(MessageKeys.SERVICE_DELETED, domainUID, metadata.getNamespace(), serverName);
1627+
LOGGER.info(MessageKeys.SERVER_SERVICE_DELETED, domainUID, metadata.getNamespace(), serverName);
15541628
doCheckAndCreateDomainPresence(info.getDomain(), true);
15551629
}
15561630
}
1557-
break;
1631+
} else if (clusterName != null) {
1632+
V1Service oldService = info.getClusters().put(clusterName, null);
1633+
if (oldService != null) {
1634+
// Service was deleted, but clusters still contained a non-null entry
1635+
LOGGER.info(MessageKeys.CLUSTER_SERVICE_DELETED, domainUID, metadata.getNamespace(), clusterName);
1636+
doCheckAndCreateDomainPresence(info.getDomain(), true);
1637+
}
1638+
}
1639+
break;
15581640

1559-
case "ERROR":
1560-
default:
1561-
}
1641+
case "ERROR":
1642+
default:
15621643
}
15631644
}
15641645
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
import io.kubernetes.client.models.V1EnvVar;
1515
import io.kubernetes.client.models.V1PersistentVolumeClaimList;
16+
import io.kubernetes.client.models.V1Service;
1617
import io.kubernetes.client.models.V1beta1Ingress;
1718
import oracle.kubernetes.operator.domain.model.oracle.kubernetes.weblogic.domain.v1.Domain;
1819
import oracle.kubernetes.operator.domain.model.oracle.kubernetes.weblogic.domain.v1.DomainSpec;
@@ -32,6 +33,7 @@ public class DomainPresenceInfo {
3233
private final AtomicReference<Collection<ServerStartupInfo>> serverStartupInfo;
3334

3435
private final ConcurrentMap<String, ServerKubernetesObjects> servers = new ConcurrentHashMap<>();
36+
private final ConcurrentMap<String, V1Service> clusters = new ConcurrentHashMap<>();
3537
private final ConcurrentMap<String, V1beta1Ingress> ingresses = new ConcurrentHashMap<>();
3638

3739
private V1PersistentVolumeClaimList claims = null;
@@ -139,6 +141,14 @@ public ConcurrentMap<String, ServerKubernetesObjects> getServers() {
139141
return servers;
140142
}
141143

144+
/**
145+
* Map from cluster name to Service objects
146+
* @return Cluster object map
147+
*/
148+
public ConcurrentMap<String, V1Service> getClusters() {
149+
return clusters;
150+
}
151+
142152
/**
143153
* Map from cluster name to Ingress
144154
* @return Cluster object map

0 commit comments

Comments
 (0)