@@ -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 }
0 commit comments