in flink-kubernetes-operator-api/src/main/java/org/apache/flink/kubernetes/operator/api/validation/CrdCompatibilityChecker.java [160:190]
protected static void checkStringTypeCompatibility(
String path, JsonNode oldNode, JsonNode newNode) {
if (!oldNode.has("enum") && newNode.has("enum")) {
// We make an exception here for jobstatus.state, this is a backward compatible change
if (!path.equals(".status.jobStatus.state")) {
err("Cannot turn string into enum for " + path);
}
}
if (oldNode.has("enum")) {
if (!newNode.has("enum")) {
return;
}
List<String> newElements = new ArrayList<>();
newNode.get("enum").elements().forEachRemaining(jn -> newElements.add(jn.asText()));
oldNode.get("enum")
.elements()
.forEachRemaining(
jn -> {
if (!newElements.contains(jn.asText())) {
err(
"Enum value "
+ jn.asText()
+ " has been removed for "
+ path);
}
});
}
}