Skip to content

Commit f838d3d

Browse files
authored
Merge pull request #845 from oracle/OWLS-71453
Owls 71453: Operator logs NPE after (correctly) logging introspector validation errors.
2 parents c1f88d4 + e0a30ee commit f838d3d

File tree

2 files changed

+50
-7
lines changed

2 files changed

+50
-7
lines changed

operator/src/main/java/oracle/kubernetes/operator/helpers/ConfigMapHelper.java

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java.io.BufferedReader;
1515
import java.io.IOException;
1616
import java.io.StringReader;
17+
import java.util.ArrayList;
1718
import java.util.Collections;
1819
import java.util.HashMap;
1920
import java.util.List;
@@ -269,11 +270,10 @@ public NextAction apply(Packet packet) {
269270
if (topologyYaml != null) {
270271
LOGGER.fine("topology.yaml: " + topologyYaml);
271272
DomainTopology domainTopology = parseDomainTopologyYaml(topologyYaml);
272-
if (!domainTopology.getValidationErrors().isEmpty()) {
273-
for (String err : domainTopology.getValidationErrors()) {
274-
LOGGER.severe(err);
275-
}
276-
doNext(null, packet);
273+
if (!domainTopology.getDomainValid()) {
274+
// If introspector determines Domain is invalid then log erros and terminate the fiber
275+
logValidationErrors(domainTopology.getValidationErrors());
276+
return doNext(null, packet);
277277
}
278278
WlsDomainConfig wlsDomainConfig = domainTopology.getDomain();
279279
ScanCache.INSTANCE.registerScan(
@@ -294,6 +294,14 @@ public NextAction apply(Packet packet) {
294294
return doNext(getNext(), packet);
295295
}
296296

297+
private void logValidationErrors(List<String> validationErrors) {
298+
if (!validationErrors.isEmpty()) {
299+
for (String err : validationErrors) {
300+
LOGGER.severe(err);
301+
}
302+
}
303+
}
304+
297305
private static String getOperatorNamespace() {
298306
String namespace = System.getenv("OPERATOR_NAMESPACE");
299307
if (namespace == null) {
@@ -582,7 +590,11 @@ public static class DomainTopology {
582590
private List<String> validationErrors;
583591

584592
public boolean getDomainValid() {
585-
return this.domainValid;
593+
// domainValid = true AND no validation errors exist
594+
if (domainValid && getValidationErrors().isEmpty()) {
595+
return true;
596+
}
597+
return false;
586598
}
587599

588600
public void setDomainValid(boolean domainValid) {
@@ -599,11 +611,30 @@ public void setDomain(WlsDomainConfig domain) {
599611
}
600612

601613
public List<String> getValidationErrors() {
602-
return validationErrors == null ? Collections.emptyList() : validationErrors;
614+
if (validationErrors == null) {
615+
validationErrors = Collections.emptyList();
616+
}
617+
618+
if (!domainValid && validationErrors.isEmpty()) {
619+
// add a log message that domain was marked invalid since we have no validation
620+
// errors from introspector.
621+
validationErrors = new ArrayList<>();
622+
validationErrors.add(
623+
"Error, domain is invalid although there are no validation errors from introspector job.");
624+
}
625+
626+
return validationErrors;
603627
}
604628

605629
public void setValidationErrors(List<String> validationErrors) {
606630
this.validationErrors = validationErrors;
607631
}
632+
633+
public String toString() {
634+
if (domainValid) {
635+
return "domain: " + domain;
636+
}
637+
return "domainValid: " + domainValid + ", validationErrors: " + validationErrors;
638+
}
608639
}
609640
}

operator/src/test/java/oracle/kubernetes/operator/helpers/ConfigMapHelperTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,9 @@ public boolean containsAll(V1ConfigMap actual, V1ConfigMap expected) {
472472
+ "validationErrors:\n"
473473
+ " - \"The dynamic cluster \\\"mycluster\\\"'s dynamic servers use calculated listen ports.\"";
474474

475+
private static final String DOMAIN_INVALID_NO_ERRORS =
476+
"domainValid: false\n" + "validationErrors:\n";
477+
475478
@Test
476479
public void parseDomainTopologyYaml() {
477480
ConfigMapHelper.DomainTopology domainTopology =
@@ -654,4 +657,13 @@ public void parseInvalidTopologyYamlWithValidationErrors() {
654657
"The dynamic cluster \"mycluster\"'s dynamic servers use calculated listen ports.",
655658
domainTopology.getValidationErrors().get(0));
656659
}
660+
661+
@Test
662+
public void parseInvalidTopologyYamlWithNoValidationErrors() {
663+
ConfigMapHelper.DomainTopology domainTopology =
664+
ConfigMapHelper.parseDomainTopologyYaml(DOMAIN_INVALID_NO_ERRORS);
665+
666+
assertFalse(domainTopology.getValidationErrors().isEmpty());
667+
assertFalse(domainTopology.getDomainValid());
668+
}
657669
}

0 commit comments

Comments
 (0)