@@ -936,14 +936,18 @@ else if (StartupControlConstants.AUTO_STARTUPCONTROL.equals(sc)) {
936
936
937
937
info .setServerStartupInfo (ssic );
938
938
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 );
940
942
case StartupControlConstants .ADMIN_STARTUPCONTROL :
941
943
case StartupControlConstants .NONE_STARTUPCONTROL :
942
944
default :
943
945
944
946
info .setServerStartupInfo (null );
945
947
LOGGER .exiting ();
946
- return doNext (scaleDownIfNecessary (info , servers , next ), packet );
948
+ return doNext (scaleDownIfNecessary (info , servers ,
949
+ checkServerServices (info , next )),
950
+ packet );
947
951
}
948
952
}
949
953
}
@@ -979,6 +983,94 @@ private static List<V1EnvVar> startInAdminMode(List<V1EnvVar> env) {
979
983
return env ;
980
984
}
981
985
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
+
982
1074
private static Step scaleDownIfNecessary (DomainPresenceInfo info , Collection <String > servers , Step next ) {
983
1075
Domain dom = info .getDomain ();
984
1076
DomainSpec spec = dom .getSpec ();
@@ -1128,9 +1220,7 @@ public ServerDownStep(String serverName, ServerKubernetesObjects sko, Step next)
1128
1220
1129
1221
@ Override
1130
1222
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 );
1134
1224
}
1135
1225
}
1136
1226
@@ -1156,40 +1246,9 @@ public NextAction apply(Packet packet) {
1156
1246
// "clusterScan"
1157
1247
// "envVars"
1158
1248
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 );
1164
1250
}
1165
1251
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
-
1193
1252
private static void deleteDomainPresence (Domain dom ) {
1194
1253
V1ObjectMeta meta = dom .getMetadata ();
1195
1254
DomainSpec spec = dom .getSpec ();
@@ -1510,22 +1569,30 @@ private static void dispatchServiceWatch(Watch.Response<V1Service> item) {
1510
1569
String domainUID = metadata .getLabels ().get (LabelConstants .DOMAINUID_LABEL );
1511
1570
String serverName = metadata .getLabels ().get (LabelConstants .SERVERNAME_LABEL );
1512
1571
String channelName = metadata .getLabels ().get (LabelConstants .CHANNELNAME_LABEL );
1572
+ String clusterName = metadata .getLabels ().get (LabelConstants .CLUSTERNAME_LABEL );
1513
1573
if (domainUID != null ) {
1514
1574
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 ) {
1522
1585
if (channelName != null ) {
1523
1586
sko .getChannels ().put (channelName , s );
1524
1587
} else {
1525
1588
sko .getService ().set (s );
1526
1589
}
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 ) {
1529
1596
if (channelName != null ) {
1530
1597
V1Service skoService = sko .getChannels ().get (channelName );
1531
1598
if (skoService != null ) {
@@ -1537,28 +1604,42 @@ private static void dispatchServiceWatch(Watch.Response<V1Service> item) {
1537
1604
sko .getService ().compareAndSet (skoService , s );
1538
1605
}
1539
1606
}
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 ) {
1542
1616
if (channelName != null ) {
1543
1617
V1Service oldService = sko .getChannels ().put (channelName , null );
1544
1618
if (oldService != null ) {
1545
1619
// 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 );
1547
1621
doCheckAndCreateDomainPresence (info .getDomain (), true );
1548
1622
}
1549
1623
} else {
1550
1624
V1Service oldService = sko .getService ().getAndSet (null );
1551
1625
if (oldService != null ) {
1552
1626
// 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 );
1554
1628
doCheckAndCreateDomainPresence (info .getDomain (), true );
1555
1629
}
1556
1630
}
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 ;
1558
1640
1559
- case "ERROR" :
1560
- default :
1561
- }
1641
+ case "ERROR" :
1642
+ default :
1562
1643
}
1563
1644
}
1564
1645
}
0 commit comments