@@ -890,14 +890,18 @@ else if (StartupControlConstants.AUTO_STARTUPCONTROL.equals(sc)) {
890
890
891
891
info .setServerStartupInfo (ssic );
892
892
LOGGER .exiting ();
893
- return doNext (scaleDownIfNecessary (info , servers , new ManagedServerUpIteratorStep (ssic , next )), packet );
893
+ return doNext (scaleDownIfNecessary (info , servers ,
894
+ checkServerServices (info , new ManagedServerUpIteratorStep (ssic , next ))),
895
+ packet );
894
896
case StartupControlConstants .ADMIN_STARTUPCONTROL :
895
897
case StartupControlConstants .NONE_STARTUPCONTROL :
896
898
default :
897
899
898
900
info .setServerStartupInfo (null );
899
901
LOGGER .exiting ();
900
- return doNext (scaleDownIfNecessary (info , servers , next ), packet );
902
+ return doNext (scaleDownIfNecessary (info , servers ,
903
+ checkServerServices (info , next )),
904
+ packet );
901
905
}
902
906
}
903
907
}
@@ -933,6 +937,113 @@ private static List<V1EnvVar> startInAdminMode(List<V1EnvVar> env) {
933
937
return env ;
934
938
}
935
939
940
+ private static Step checkServerServices (DomainPresenceInfo info , Step next ) {
941
+ Collection <String > allServers = new ArrayList <>();
942
+ Collection <ServerStartupInfo > ssic = new ArrayList <>();
943
+
944
+ WlsDomainConfig scan = info .getScan ();
945
+
946
+ // Iterate all servers
947
+ for (WlsClusterConfig wlsClusterConfig : scan .getClusterConfigs ().values ()) {
948
+ for (WlsServerConfig wlsServerConfig : wlsClusterConfig .getServerConfigs ()) {
949
+ String serverName = wlsServerConfig .getListenAddress ();
950
+ if (!allServers .contains (serverName )) {
951
+ allServers .add (serverName );
952
+ ssic .add (new ServerStartupInfo (wlsServerConfig , wlsClusterConfig , null , null ));
953
+ }
954
+ }
955
+ }
956
+ for (Map .Entry <String , WlsServerConfig > wlsServerConfig : scan .getServerConfigs ().entrySet ()) {
957
+ String serverName = wlsServerConfig .getKey ();
958
+ if (!allServers .contains (serverName )) {
959
+ allServers .add (serverName );
960
+ ssic .add (new ServerStartupInfo (wlsServerConfig .getValue (), null , null , null ));
961
+ }
962
+ }
963
+
964
+ return new ManagedServerServicesStep (info , ssic , next );
965
+ }
966
+
967
+ private static class ManagedServerServicesStep extends Step {
968
+ private final DomainPresenceInfo info ;
969
+ private final Collection <ServerStartupInfo > ssic ;
970
+
971
+ public ManagedServerServicesStep (DomainPresenceInfo info , Collection <ServerStartupInfo > ssic , Step next ) {
972
+ super (next );
973
+ this .info = info ;
974
+ this .ssic = ssic ;
975
+ }
976
+
977
+ @ Override
978
+ public NextAction apply (Packet packet ) {
979
+ Collection <StepAndPacket > startDetails = new ArrayList <>();
980
+
981
+ for (ServerStartupInfo ssi : ssic ) {
982
+ Packet p = packet .clone ();
983
+ WlsServerConfig serverConfig = ssi .serverConfig ;
984
+ ServerStartup serverStartup = ssi .serverStartup ;
985
+ String serverName = serverConfig .getName ();
986
+ p .put (ProcessingConstants .SERVER_SCAN , serverConfig );
987
+ p .put (ProcessingConstants .CLUSTER_SCAN , ssi .clusterConfig );
988
+ p .put (ProcessingConstants .ENVVARS , ssi .envVars );
989
+
990
+ DomainSpec spec = info .getDomain ().getSpec ();
991
+ Integer nodePort = null ;
992
+ if (serverStartup == null ) {
993
+ List <ServerStartup > ssl = spec .getServerStartup ();
994
+ if (ssl != null ) {
995
+ for (ServerStartup ss : ssl ) {
996
+ if (serverName .equals (ss .getServerName ())) {
997
+ serverStartup = ss ;
998
+ break ;
999
+ }
1000
+ }
1001
+ }
1002
+ }
1003
+
1004
+ if (serverStartup != null ) {
1005
+ nodePort = serverStartup .getNodePort ();
1006
+ }
1007
+ if (nodePort == null && serverName .equals (spec .getAsName ())) {
1008
+ nodePort = spec .getAsNodePort ();
1009
+ }
1010
+
1011
+ p .put (ProcessingConstants .SERVER_NAME , serverName );
1012
+ if (ssi .clusterConfig != null ) {
1013
+ p .put (ProcessingConstants .CLUSTER_NAME , ssi .clusterConfig .getClusterName ());
1014
+ }
1015
+ p .put (ProcessingConstants .PORT , serverConfig .getListenPort ());
1016
+ p .put (ProcessingConstants .NODE_PORT , nodePort );
1017
+
1018
+ startDetails .add (new StepAndPacket (ServiceHelper .createForServerStep (null ), p ));
1019
+ }
1020
+
1021
+ // Add cluster services
1022
+ WlsDomainConfig scan = info .getScan ();
1023
+ if (scan != null ) {
1024
+ for (Map .Entry <String , WlsClusterConfig > entry : scan .getClusterConfigs ().entrySet ()) {
1025
+ Packet p = packet .clone ();
1026
+ WlsClusterConfig clusterConfig = entry .getValue ();
1027
+ p .put (ProcessingConstants .CLUSTER_SCAN , clusterConfig );
1028
+ p .put (ProcessingConstants .CLUSTER_NAME , clusterConfig .getClusterName ());
1029
+ for (WlsServerConfig serverConfig : clusterConfig .getServerConfigs ()) {
1030
+ p .put (ProcessingConstants .PORT , serverConfig .getListenPort ());
1031
+ break ;
1032
+ }
1033
+
1034
+ startDetails .add (new StepAndPacket (
1035
+ ServiceHelper .createForClusterStep (
1036
+ IngressHelper .createClusterStep (null )), p ));
1037
+ }
1038
+ }
1039
+
1040
+ if (startDetails .isEmpty ()) {
1041
+ return doNext (packet );
1042
+ }
1043
+ return doForkJoin (next , packet , startDetails );
1044
+ }
1045
+ }
1046
+
936
1047
private static Step scaleDownIfNecessary (DomainPresenceInfo info , Collection <String > servers , Step next ) {
937
1048
Domain dom = info .getDomain ();
938
1049
DomainSpec spec = dom .getSpec ();
@@ -1082,9 +1193,7 @@ public ServerDownStep(String serverName, ServerKubernetesObjects sko, Step next)
1082
1193
1083
1194
@ Override
1084
1195
public NextAction apply (Packet packet ) {
1085
- return doNext (IngressHelper .createRemoveServerStep (serverName ,
1086
- ServiceHelper .deleteServicesStep (sko ,
1087
- PodHelper .deletePodStep (sko , new ServerDownFinalizeStep (serverName , next )))), packet );
1196
+ return doNext (PodHelper .deletePodStep (sko , new ServerDownFinalizeStep (serverName , next )), packet );
1088
1197
}
1089
1198
}
1090
1199
@@ -1110,40 +1219,9 @@ public NextAction apply(Packet packet) {
1110
1219
// "clusterScan"
1111
1220
// "envVars"
1112
1221
private static Step bringManagedServerUp (ServerStartupInfo ssi , Step next ) {
1113
- return PodHelper .createManagedPodStep (
1114
- new BeforeManagedServerStep (
1115
- ssi ,
1116
- ServiceHelper .createForServerStep (
1117
- IngressHelper .createAddServerStep (next ))));
1222
+ return PodHelper .createManagedPodStep (next );
1118
1223
}
1119
1224
1120
- private static class BeforeManagedServerStep extends Step {
1121
- private final ServerStartupInfo ssi ;
1122
-
1123
- public BeforeManagedServerStep (ServerStartupInfo ssi , Step next ) {
1124
- super (next );
1125
- this .ssi = ssi ;
1126
- }
1127
-
1128
- @ Override
1129
- public NextAction apply (Packet packet ) {
1130
- WlsServerConfig scan = ssi .serverConfig ;
1131
- ServerStartup ss = ssi .serverStartup ;
1132
- Integer nodePort = null ;
1133
- if (ss != null ) {
1134
- nodePort = ss .getNodePort ();
1135
- }
1136
-
1137
- packet .put (ProcessingConstants .SERVER_NAME , scan .getName ());
1138
- if (ssi .clusterConfig != null ) {
1139
- packet .put (ProcessingConstants .CLUSTER_NAME , ssi .clusterConfig .getClusterName ());
1140
- }
1141
- packet .put (ProcessingConstants .PORT , scan .getListenPort ());
1142
- packet .put (ProcessingConstants .NODE_PORT , nodePort );
1143
- return doNext (packet );
1144
- }
1145
- }
1146
-
1147
1225
private static void deleteDomainPresence (Domain dom ) {
1148
1226
V1ObjectMeta meta = dom .getMetadata ();
1149
1227
DomainSpec spec = dom .getSpec ();
@@ -1464,22 +1542,30 @@ private static void dispatchServiceWatch(Watch.Response<V1Service> item) {
1464
1542
String domainUID = metadata .getLabels ().get (LabelConstants .DOMAINUID_LABEL );
1465
1543
String serverName = metadata .getLabels ().get (LabelConstants .SERVERNAME_LABEL );
1466
1544
String channelName = metadata .getLabels ().get (LabelConstants .CHANNELNAME_LABEL );
1545
+ String clusterName = metadata .getLabels ().get (LabelConstants .CLUSTERNAME_LABEL );
1467
1546
if (domainUID != null ) {
1468
1547
DomainPresenceInfo info = domains .get (domainUID );
1469
- if (info != null && serverName != null ) {
1470
- ServerKubernetesObjects created = new ServerKubernetesObjects ();
1471
- ServerKubernetesObjects current = info .getServers ().putIfAbsent (serverName , created );
1472
- ServerKubernetesObjects sko = current != null ? current : created ;
1473
- if (sko != null ) {
1474
- switch (item .type ) {
1475
- case "ADDED" :
1548
+ ServerKubernetesObjects sko = null ;
1549
+ if (info != null ) {
1550
+ if (serverName != null ) {
1551
+ ServerKubernetesObjects created = new ServerKubernetesObjects ();
1552
+ ServerKubernetesObjects current = info .getServers ().putIfAbsent (serverName , created );
1553
+ sko = current != null ? current : created ;
1554
+ }
1555
+ switch (item .type ) {
1556
+ case "ADDED" :
1557
+ if (sko != null ) {
1476
1558
if (channelName != null ) {
1477
1559
sko .getChannels ().put (channelName , s );
1478
1560
} else {
1479
1561
sko .getService ().set (s );
1480
1562
}
1481
- break ;
1482
- case "MODIFIED" :
1563
+ } else if (clusterName != null ) {
1564
+ info .getClusters ().put (clusterName , s );
1565
+ }
1566
+ break ;
1567
+ case "MODIFIED" :
1568
+ if (sko != null ) {
1483
1569
if (channelName != null ) {
1484
1570
V1Service skoService = sko .getChannels ().get (channelName );
1485
1571
if (skoService != null ) {
@@ -1491,28 +1577,42 @@ private static void dispatchServiceWatch(Watch.Response<V1Service> item) {
1491
1577
sko .getService ().compareAndSet (skoService , s );
1492
1578
}
1493
1579
}
1494
- break ;
1495
- case "DELETED" :
1580
+ } else if (clusterName != null ) {
1581
+ V1Service clusterService = info .getClusters ().get (clusterName );
1582
+ if (clusterService != null ) {
1583
+ info .getClusters ().replace (clusterName , clusterService , s );
1584
+ }
1585
+ }
1586
+ break ;
1587
+ case "DELETED" :
1588
+ if (sko != null ) {
1496
1589
if (channelName != null ) {
1497
1590
V1Service oldService = sko .getChannels ().put (channelName , null );
1498
1591
if (oldService != null ) {
1499
1592
// Service was deleted, but sko still contained a non-null entry
1500
- LOGGER .info (MessageKeys .SERVICE_DELETED , domainUID , metadata .getNamespace (), serverName );
1593
+ LOGGER .info (MessageKeys .SERVER_SERVICE_DELETED , domainUID , metadata .getNamespace (), serverName );
1501
1594
doCheckAndCreateDomainPresence (info .getDomain (), true );
1502
1595
}
1503
1596
} else {
1504
1597
V1Service oldService = sko .getService ().getAndSet (null );
1505
1598
if (oldService != null ) {
1506
1599
// Service was deleted, but sko still contained a non-null entry
1507
- LOGGER .info (MessageKeys .SERVICE_DELETED , domainUID , metadata .getNamespace (), serverName );
1600
+ LOGGER .info (MessageKeys .SERVER_SERVICE_DELETED , domainUID , metadata .getNamespace (), serverName );
1508
1601
doCheckAndCreateDomainPresence (info .getDomain (), true );
1509
1602
}
1510
1603
}
1511
- break ;
1604
+ } else if (clusterName != null ) {
1605
+ V1Service oldService = info .getClusters ().put (clusterName , null );
1606
+ if (oldService != null ) {
1607
+ // Service was deleted, but clusters still contained a non-null entry
1608
+ LOGGER .info (MessageKeys .CLUSTER_SERVICE_DELETED , domainUID , metadata .getNamespace (), clusterName );
1609
+ doCheckAndCreateDomainPresence (info .getDomain (), true );
1610
+ }
1611
+ }
1612
+ break ;
1512
1613
1513
- case "ERROR" :
1514
- default :
1515
- }
1614
+ case "ERROR" :
1615
+ default :
1516
1616
}
1517
1617
}
1518
1618
}
0 commit comments