9
9
import java .util .HashSet ;
10
10
import java .util .List ;
11
11
import java .util .Map ;
12
- import java .util .Objects ;
13
12
import java .util .Optional ;
14
13
import java .util .Set ;
15
14
import java .util .concurrent .ConcurrentHashMap ;
28
27
import io .kubernetes .client .openapi .models .V1ServiceList ;
29
28
import oracle .kubernetes .operator .helpers .ClusterPresenceInfo ;
30
29
import oracle .kubernetes .operator .helpers .DomainPresenceInfo ;
31
- import oracle .kubernetes .operator .helpers .EventHelper ;
32
30
import oracle .kubernetes .operator .helpers .EventHelper .EventData ;
33
31
import oracle .kubernetes .operator .helpers .EventHelper .EventItem ;
34
32
import oracle .kubernetes .operator .helpers .PodDisruptionBudgetHelper ;
39
37
import oracle .kubernetes .weblogic .domain .model .ClusterResource ;
40
38
import oracle .kubernetes .weblogic .domain .model .DomainList ;
41
39
import oracle .kubernetes .weblogic .domain .model .DomainResource ;
42
- import org .jetbrains .annotations .Nullable ;
40
+ import org .jetbrains .annotations .NotNull ;
43
41
42
+ import static oracle .kubernetes .operator .helpers .EventHelper .EventItem .CLUSTER_CHANGED ;
43
+ import static oracle .kubernetes .operator .helpers .EventHelper .EventItem .CLUSTER_CREATED ;
44
+ import static oracle .kubernetes .operator .helpers .EventHelper .EventItem .CLUSTER_DELETED ;
44
45
import static oracle .kubernetes .operator .helpers .EventHelper .EventItem .DOMAIN_CHANGED ;
45
46
import static oracle .kubernetes .operator .helpers .EventHelper .EventItem .DOMAIN_CREATED ;
46
47
@@ -53,6 +54,8 @@ class DomainResourcesValidation {
53
54
private final String namespace ;
54
55
private final DomainProcessor processor ;
55
56
private ClusterList activeClusterResources ;
57
+ private final Set <String > modifiedClusterNames = new HashSet <>();
58
+ private final Set <String > newClusterNames = new HashSet <>();
56
59
private final Set <String > modifiedDomainNames = new HashSet <>();
57
60
private final Set <String > newDomainNames = new HashSet <>();
58
61
@@ -99,19 +102,25 @@ public void completeProcessing(Packet packet) {
99
102
getStrandedDomainPresenceInfos (dp ).forEach (info -> removeStrandedDomainPresenceInfo (dp , info ));
100
103
Optional .ofNullable (activeClusterResources ).ifPresent (c -> getActiveDomainPresenceInfos ()
101
104
.forEach (info -> adjustClusterResources (c , info )));
102
- executeMakeRightForDeletedClusters (dp );
105
+ executeMakeRightForClusterEvents (dp );
103
106
getActiveDomainPresenceInfos ().forEach (info -> activateDomain (dp , info ));
104
107
}
105
108
};
106
109
}
107
110
108
- private void executeMakeRightForDeletedClusters (DomainProcessor dp ) {
109
- List <String > clusterNamesFromList = Optional . ofNullable ( activeClusterResources ). map ( ClusterList :: getItems )
110
- . orElse ( new ArrayList <>() ).stream ().map (ClusterResource ::getMetadata ).map (V1ObjectMeta ::getName )
111
+ private void executeMakeRightForClusterEvents (DomainProcessor dp ) {
112
+ List <String > clusterNamesFromList =
113
+ getActiveClusterResources ( ).stream ().map (ClusterResource ::getMetadata ).map (V1ObjectMeta ::getName )
111
114
.collect (Collectors .toList ());
112
115
getClusterPresenceInfoMap ().values ().stream ()
113
116
.filter (cpi -> !clusterNamesFromList .contains (cpi .getResourceName ())).collect (Collectors .toList ())
114
- .forEach (info -> deActivateCluster (dp , info ));
117
+ .forEach (info -> updateCluster (dp , info .getCluster (), CLUSTER_DELETED ));
118
+ getActiveClusterResources ().forEach (cluster -> updateCluster (dp , cluster , getEventItem (cluster )));
119
+ }
120
+
121
+ @ NotNull
122
+ private List <ClusterResource > getActiveClusterResources () {
123
+ return Optional .ofNullable (activeClusterResources ).map (ClusterList ::getItems ).orElse (new ArrayList <>());
115
124
}
116
125
117
126
private void adjustClusterResources (ClusterList clusters , DomainPresenceInfo info ) {
@@ -222,7 +231,7 @@ private void addDomain(DomainResource domain) {
222
231
DomainPresenceInfo cachedInfo = getDomainPresenceInfoMap ().get (domain .getDomainUid ());
223
232
if (cachedInfo == null ) {
224
233
newDomainNames .add (domain .getDomainUid ());
225
- } else if (generationChanged (cachedInfo , domain )) {
234
+ } else if (domain . isGenerationChanged (cachedInfo . getDomain () )) {
226
235
modifiedDomainNames .add (domain .getDomainUid ());
227
236
}
228
237
getOrComputeDomainPresenceInfo (domain .getDomainUid ()).setDomain (domain );
@@ -234,7 +243,14 @@ private void addClusterList(ClusterList list) {
234
243
}
235
244
236
245
private void addCluster (ClusterResource cluster ) {
237
- getClusterPresenceInfoMap ().put (cluster .getClusterName (), new ClusterPresenceInfo (cluster .getNamespace (), cluster ));
246
+ ClusterPresenceInfo cachedInfo = getClusterPresenceInfoMap ().get (cluster .getClusterName ());
247
+ if (cachedInfo == null ) {
248
+ newClusterNames .add (cluster .getClusterName ());
249
+ } else if (cluster .isGenerationChanged (cachedInfo .getCluster ())) {
250
+ modifiedClusterNames .add (cluster .getClusterName ());
251
+ }
252
+
253
+ getClusterPresenceInfoMap ().put (cluster .getClusterName (), new ClusterPresenceInfo (cluster ));
238
254
}
239
255
240
256
private Stream <DomainPresenceInfo > getStrandedDomainPresenceInfos (DomainProcessor dp ) {
@@ -288,21 +304,35 @@ private EventItem getEventItem(DomainPresenceInfo info) {
288
304
return null ;
289
305
}
290
306
291
- private boolean generationChanged (DomainPresenceInfo cachedInfo , DomainResource domain ) {
292
- return !Objects .equals (getGeneration (cachedInfo ), domain .getMetadata ().getGeneration ());
307
+ private EventItem getEventItem (ClusterResource cluster ) {
308
+ if (newClusterNames .contains (cluster .getClusterName ()) || cluster .getStatus () == null ) {
309
+ return CLUSTER_CREATED ;
310
+ }
311
+ if (modifiedClusterNames .contains (cluster .getClusterName ())) {
312
+ return CLUSTER_CHANGED ;
313
+ }
314
+ return null ;
293
315
}
294
316
295
- @ Nullable
296
- private Long getGeneration (DomainPresenceInfo cachedInfo ) {
297
- return Optional .ofNullable (cachedInfo )
298
- .map (DomainPresenceInfo ::getDomain )
299
- .map (DomainResource ::getMetadata )
300
- .map (V1ObjectMeta ::getGeneration )
301
- .orElse (null );
317
+ private void updateCluster (DomainProcessor dp , ClusterResource cluster , EventItem eventItem ) {
318
+ List <DomainPresenceInfo > list =
319
+ dp .getExistingDomainPresenceInfoForCluster (cluster .getNamespace (), cluster .getClusterName ());
320
+ if (list .isEmpty ()) {
321
+ createAndExecuteMakeRightOperation (dp , cluster , eventItem , null );
322
+ } else {
323
+ for (DomainPresenceInfo info : list ) {
324
+ createAndExecuteMakeRightOperation (dp , cluster , eventItem , info .getDomainUid ());
325
+ }
326
+ }
302
327
}
303
328
304
- private void deActivateCluster (DomainProcessor dp , ClusterPresenceInfo info ) {
305
- dp .createMakeRightOperationForClusterEvent (EventHelper .EventItem .CLUSTER_DELETED , info .getCluster ()).execute ();
329
+ private void createAndExecuteMakeRightOperation (
330
+ DomainProcessor dp , ClusterResource cluster , EventItem eventItem , String domainUid ) {
331
+ MakeRightClusterOperation makeRight = dp .createMakeRightOperationForClusterEvent (
332
+ eventItem , cluster , domainUid ).withExplicitRecheck ();
333
+ if (eventItem != null ) {
334
+ makeRight .interrupt ();
335
+ }
336
+ makeRight .execute ();
306
337
}
307
-
308
338
}
0 commit comments