Skip to content

Commit a2b3a78

Browse files
committed
Merge remote-tracking branch 'origin/endless_status_updates' into release/3.0.0-rc1
2 parents adf1d64 + 6ed4fe7 commit a2b3a78

File tree

3 files changed

+114
-23
lines changed

3 files changed

+114
-23
lines changed

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

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import java.util.stream.Collectors;
1515
import java.util.stream.Stream;
1616
import javax.annotation.Nonnull;
17+
import javax.json.Json;
18+
import javax.json.JsonPatchBuilder;
1719

1820
import io.kubernetes.client.openapi.ApiException;
1921
import io.kubernetes.client.openapi.models.V1ObjectMeta;
@@ -181,6 +183,9 @@ public NextAction apply(Packet packet) {
181183

182184
private Step createDomainStatusReplaceStep(DomainStatusUpdaterContext context, DomainStatus newStatus) {
183185
LOGGER.fine(MessageKeys.DOMAIN_STATUS, context.getDomainUid(), newStatus);
186+
if (LOGGER.isFinerEnabled()) {
187+
LOGGER.finer("status change: " + createPatchString(context, newStatus));
188+
}
184189
Domain oldDomain = context.getDomain();
185190
Domain newDomain = new Domain()
186191
.withKind(KubernetesConstants.DOMAIN)
@@ -196,6 +201,12 @@ private Step createDomainStatusReplaceStep(DomainStatusUpdaterContext context, D
196201
createResponseStep(context, getNext()));
197202
}
198203

204+
private String createPatchString(DomainStatusUpdaterContext context, DomainStatus newStatus) {
205+
JsonPatchBuilder builder = Json.createPatchBuilder();
206+
newStatus.createPatchFrom(builder, context.getStatus());
207+
return builder.build().toString();
208+
}
209+
199210
private ResponseStep<Domain> createResponseStep(DomainStatusUpdaterContext context, Step next) {
200211
return new StatusReplaceResponseStep(this, context, next);
201212
}
@@ -415,10 +426,7 @@ private ServerStatus createServerStatus(String serverName, boolean isAdminServer
415426
}
416427

417428
private String getRunningState(String serverName) {
418-
if (serverState != null) {
419-
return serverState.getOrDefault(serverName, SHUTDOWN_STATE);
420-
}
421-
return SHUTDOWN_STATE;
429+
return Optional.ofNullable(serverState).map(m -> m.get(serverName)).orElse(null);
422430
}
423431

424432
private String getDesiredState(String serverName, String clusterName, boolean isAdminServer) {

operator/src/main/java/oracle/kubernetes/weblogic/domain/model/DomainStatus.java

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.apache.commons.lang3.builder.ToStringBuilder;
2626
import org.joda.time.DateTime;
2727

28+
import static oracle.kubernetes.operator.WebLogicConstants.SHUTDOWN_STATE;
2829
import static oracle.kubernetes.weblogic.domain.model.ObjectPatch.createObjectPatch;
2930

3031
/**
@@ -51,7 +52,7 @@ public class DomainStatus {
5152
@Description("Status of WebLogic Servers in this domain.")
5253
@Valid
5354
// sorted list of ServerStatus
54-
List<ServerStatus> servers = new ArrayList<>();
55+
private final List<ServerStatus> servers;
5556

5657
@Description("Status of WebLogic clusters in this domain.")
5758
@Valid
@@ -72,6 +73,7 @@ public class DomainStatus {
7273
private Integer replicas;
7374

7475
public DomainStatus() {
76+
servers = new ArrayList<>();
7577
}
7678

7779
/**
@@ -293,28 +295,48 @@ public List<ServerStatus> getServers() {
293295
*/
294296
public void setServers(List<ServerStatus> servers) {
295297
synchronized (this.servers) {
296-
if (isServersEqualIgnoringOrder(servers, this.servers)) {
298+
if (this.servers.equals(servers)) {
297299
return;
298300
}
299-
List<ServerStatus> sortedServers = new ArrayList<>(servers);
300-
sortedServers.sort(Comparator.naturalOrder());
301301

302-
this.servers = sortedServers;
302+
List<ServerStatus> newServers = servers
303+
.stream()
304+
.map(ServerStatus::new)
305+
.map(this::adjust)
306+
.sorted(Comparator.naturalOrder())
307+
.collect(Collectors.toList());
308+
309+
this.servers.clear();
310+
this.servers.addAll(newServers);
303311
}
304312
}
305313

306-
private boolean isServersEqualIgnoringOrder(List<ServerStatus> servers1, List<ServerStatus> servers2) {
307-
return new HashSet<>(servers1).equals(new HashSet<>(servers2));
314+
private ServerStatus adjust(ServerStatus server) {
315+
if (server.getState() == null) {
316+
ServerStatus oldServer = getMatchingServer(server);
317+
server.setState(oldServer == null ? SHUTDOWN_STATE : oldServer.getState());
318+
}
319+
return server;
308320
}
309321

322+
private ServerStatus getMatchingServer(ServerStatus server) {
323+
return getServers()
324+
.stream()
325+
.filter(s -> Objects.equals(s.getClusterName(), server.getClusterName()))
326+
.filter(s -> Objects.equals(s.getServerName(), server.getServerName()))
327+
.findFirst()
328+
.orElse(null);
329+
}
330+
331+
310332
/**
311333
* Status of WebLogic servers in this domain.
312334
*
313335
* @param servers servers
314336
* @return this
315337
*/
316338
public DomainStatus withServers(List<ServerStatus> servers) {
317-
this.servers = servers;
339+
setServers(servers);
318340
return this;
319341
}
320342

operator/src/test/java/oracle/kubernetes/weblogic/domain/model/DomainStatusTest.java

Lines changed: 72 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.util.ArrayList;
77
import java.util.Arrays;
88
import java.util.List;
9+
import java.util.Objects;
910

1011
import com.meterware.simplestub.Memento;
1112
import oracle.kubernetes.utils.SystemClockTestSupport;
@@ -14,6 +15,7 @@
1415
import org.junit.Before;
1516
import org.junit.Test;
1617

18+
import static oracle.kubernetes.operator.WebLogicConstants.SHUTDOWN_STATE;
1719
import static oracle.kubernetes.weblogic.domain.model.DomainConditionMatcher.hasCondition;
1820
import static oracle.kubernetes.weblogic.domain.model.DomainConditionType.Available;
1921
import static oracle.kubernetes.weblogic.domain.model.DomainConditionType.Failed;
@@ -259,25 +261,86 @@ public void verifyThat_addServers_serverSortedInExpectedOrdering() {
259261
domainStatus.addServer(cluster1Server1).addServer(cluster2Server1)
260262
.addServer(cluster1Server2).addServer(standAloneServerA).addServer(adminServer);
261263

262-
assertThat(domainStatus.servers,
264+
assertThat(domainStatus.getServers(),
263265
contains(adminServer, standAloneServerA, cluster1Server1, cluster1Server2, cluster2Server1));
264266
}
265267

266268
@Test
267269
public void verifyThat_setServers_serverSortedInExpectedOrdering() {
268-
ServerStatus cluster1Server1 = new ServerStatus().withClusterName("cluster-1").withServerName("cluster1-server1");
269-
ServerStatus cluster1Server2 = new ServerStatus().withClusterName("cluster-1").withServerName("cluster1-server2");
270-
ServerStatus cluster2Server1 = new ServerStatus().withClusterName("cluster-2").withServerName("cluster2-server1");
271-
ServerStatus adminServer = new ServerStatus().withServerName("admin-server").withIsAdminServer(true);
272-
ServerStatus standAloneServerA = new ServerStatus().withServerName("a");
270+
ServerStatus cluster1Server1 = createStatus().withClusterName("cluster-1").withServerName("cluster1-server1");
271+
ServerStatus cluster1Server2 = createStatus().withClusterName("cluster-1").withServerName("cluster1-server2");
272+
ServerStatus cluster2Server1 = createStatus().withClusterName("cluster-2").withServerName("cluster2-server1");
273+
ServerStatus adminServer = createStatus().withServerName("admin-server").withIsAdminServer(true);
274+
ServerStatus standAloneServerA = createStatus().withServerName("a");
273275

274276
domainStatus.setServers(Arrays.asList(cluster1Server1,
275277
cluster2Server1, cluster1Server2, standAloneServerA, adminServer));
276278

277-
assertThat(domainStatus.servers,
279+
assertThat(domainStatus.getServers(),
278280
contains(adminServer, standAloneServerA, cluster1Server1, cluster1Server2, cluster2Server1));
279281
}
280282

283+
private ServerStatus createStatus() {
284+
return new ServerStatus().withState("a");
285+
}
286+
287+
@Test
288+
public void whenMatchingServersExist_setServersUpdatesState() {
289+
domainStatus.addServer(new ServerStatus().withClusterName("1").withServerName("1").withState("state1"));
290+
domainStatus.addServer(new ServerStatus().withClusterName("1").withServerName("2").withState("state1"));
291+
domainStatus.addServer(new ServerStatus().withClusterName("1").withServerName("3").withState("state1"));
292+
293+
domainStatus.setServers(Arrays.asList(
294+
new ServerStatus().withClusterName("1").withServerName("1").withState("state1"),
295+
new ServerStatus().withClusterName("1").withServerName("2").withState("state1"),
296+
new ServerStatus().withServerName("admin").withIsAdminServer(true).withState("state2")
297+
));
298+
299+
assertThat(getServer("1", "1").getState(), equalTo("state1"));
300+
assertThat(getServer("1", "2").getState(), equalTo("state1"));
301+
assertThat(getServer(null, "admin").getState(), equalTo("state2"));
302+
}
303+
304+
@Test
305+
public void whenSetServerIncludesServerWithoutStateAndNoExistingState_defaultToSHUTDOWN() {
306+
domainStatus.addServer(new ServerStatus().withClusterName("1").withServerName("1").withState("state1"));
307+
domainStatus.addServer(new ServerStatus().withClusterName("1").withServerName("2").withState("state1"));
308+
domainStatus.addServer(new ServerStatus().withClusterName("1").withServerName("3").withState("state1"));
309+
310+
domainStatus.setServers(Arrays.asList(
311+
new ServerStatus().withClusterName("1").withServerName("1").withState("state1"),
312+
new ServerStatus().withClusterName("1").withServerName("2").withState("state1"),
313+
new ServerStatus().withClusterName("1").withServerName("3").withState("state2"),
314+
new ServerStatus().withClusterName("2").withServerName("1")
315+
));
316+
317+
assertThat(getServer("2", "1").getState(), equalTo(SHUTDOWN_STATE));
318+
}
319+
320+
@Test
321+
public void whenSetServerIncludesServerWithoutStateAndHasExistingState_preserveIt() {
322+
domainStatus.addServer(new ServerStatus().withClusterName("1").withServerName("1").withState("state1"));
323+
domainStatus.addServer(new ServerStatus().withClusterName("1").withServerName("2").withState("state1"));
324+
domainStatus.addServer(new ServerStatus().withClusterName("1").withServerName("3").withState("state1"));
325+
326+
domainStatus.setServers(Arrays.asList(
327+
new ServerStatus().withClusterName("1").withServerName("1").withState("state1"),
328+
new ServerStatus().withClusterName("1").withServerName("2").withState("state1"),
329+
new ServerStatus().withClusterName("1").withServerName("3")
330+
));
331+
332+
assertThat(getServer("1", "3").getState(), equalTo("state1"));
333+
}
334+
335+
private ServerStatus getServer(String clusterName, String serverName) {
336+
return domainStatus.getServers()
337+
.stream()
338+
.filter(s -> Objects.equals(clusterName, s.getClusterName()))
339+
.filter(s -> Objects.equals(serverName, s.getServerName()))
340+
.findFirst()
341+
.orElse(null);
342+
}
343+
281344
@Test
282345
public void verifyThat_getServers_serverInExpectedOrdering() {
283346
ServerStatus cluster1Server1 = new ServerStatus().withClusterName("cluster-1").withServerName("cluster1-server1");
@@ -303,7 +366,7 @@ public void verifyThat_addClusters_clustersSortedInExpectedOrdering() {
303366

304367
domainStatus.addCluster(cluster10).addCluster(cluster1).addCluster(cluster2);
305368

306-
assertThat(domainStatus.clusters, contains(cluster1, cluster2, cluster10));
369+
assertThat(domainStatus.getClusters(), contains(cluster1, cluster2, cluster10));
307370
}
308371

309372
@Test
@@ -314,9 +377,7 @@ public void verifyThat_setClusters_clustersSortedInExpectedOrdering() {
314377

315378
domainStatus.setClusters(Arrays.asList(cluster10, cluster1, cluster2));
316379

317-
List<ClusterStatus> clusterStatuses = domainStatus.clusters;
318-
319-
assertThat(clusterStatuses, contains(cluster1, cluster2, cluster10));
380+
assertThat(domainStatus.getClusters(), contains(cluster1, cluster2, cluster10));
320381
}
321382

322383
@Test

0 commit comments

Comments
 (0)