Skip to content

Commit 2da03a5

Browse files
authored
Merge pull request kroxylicious#2032 from SamBarker/require-last-transition-time
Require last transition time
2 parents 5c2f79a + 1754421 commit 2da03a5

File tree

68 files changed

+189
-117
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+189
-117
lines changed

kroxylicious-operator/src/main/java/io/kroxylicious/kubernetes/api/common/Condition.java

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@
66

77
package io.kroxylicious.kubernetes.api.common;
88

9+
import java.util.Objects;
10+
11+
import com.fasterxml.jackson.annotation.Nulls;
12+
13+
import edu.umd.cs.findbugs.annotations.NonNull;
14+
915
/**
1016
* A common Condition type, used in CR statuses.
1117
*/
@@ -43,16 +49,17 @@ public ConditionBuilder edit() {
4349
*/
4450
@com.fasterxml.jackson.annotation.JsonProperty("lastTransitionTime")
4551
@com.fasterxml.jackson.annotation.JsonPropertyDescription("lastTransitionTime is the last time the condition transitioned from one status to another. \nThis should be when the underlying condition changed. \nIf that is not known, then using the time when the API field changed is acceptable.\n")
46-
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SKIP)
52+
@com.fasterxml.jackson.annotation.JsonSetter(nulls = Nulls.FAIL)
4753
@com.fasterxml.jackson.annotation.JsonFormat(shape = com.fasterxml.jackson.annotation.JsonFormat.Shape.STRING)
54+
@NonNull
4855
private java.time.Instant lastTransitionTime;
4956

5057
public java.time.Instant getLastTransitionTime() {
5158
return lastTransitionTime;
5259
}
5360

54-
public void setLastTransitionTime(java.time.Instant lastTransitionTime) {
55-
this.lastTransitionTime = lastTransitionTime;
61+
public void setLastTransitionTime(@NonNull java.time.Instant lastTransitionTime) {
62+
this.lastTransitionTime = Objects.requireNonNull(lastTransitionTime);
5663
}
5764

5865
/**
@@ -80,15 +87,16 @@ public void setMessage(String message) {
8087
*/
8188
@com.fasterxml.jackson.annotation.JsonProperty("observedGeneration")
8289
@com.fasterxml.jackson.annotation.JsonPropertyDescription("observedGeneration represents the .metadata.generation that the condition was set based upon. \nFor instance, if .metadata.generation is currently 12, but the \n.status.conditions[x].observedGeneration is 9, the condition is out of date with \nrespect to the current state of the instance.\n")
83-
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SKIP)
90+
@com.fasterxml.jackson.annotation.JsonSetter(nulls = Nulls.FAIL)
91+
@NonNull
8492
private Long observedGeneration;
8593

8694
public Long getObservedGeneration() {
8795
return observedGeneration;
8896
}
8997

90-
public void setObservedGeneration(Long observedGeneration) {
91-
this.observedGeneration = observedGeneration;
98+
public void setObservedGeneration(@NonNull Long observedGeneration) {
99+
this.observedGeneration = Objects.requireNonNull(observedGeneration);
92100
}
93101

94102
/**
@@ -191,4 +199,4 @@ public String getValue() {
191199
return value;
192200
}
193201
}
194-
}
202+
}

kroxylicious-operator/src/main/java/io/kroxylicious/kubernetes/operator/ProxyConfigConfigMap.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,4 +273,4 @@ private static VirtualCluster getVirtualCluster(VirtualKafkaCluster cluster,
273273
filterNamesForCluster(cluster));
274274
}
275275

276-
}
276+
}

kroxylicious-operator/src/main/java/io/kroxylicious/kubernetes/operator/ProxyConfigData.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ public class ProxyConfigData {
3838

3939
private static String toYaml(Object filterDefs) {
4040
try {
41-
return CONFIG_OBJECT_MAPPER.writeValueAsString(filterDefs);
41+
// .stripTrailing() is required to standardise the trailing white space. Standardising ensures that we don't trigger Jackson/SnakeYaml magic for enabling
42+
// or disabling the chomp operator when appending this string to a YAML document. stripTrailing in preference to strip as its fractionally cheaper.
43+
return CONFIG_OBJECT_MAPPER.writeValueAsString(filterDefs).stripTrailing();
4244
}
4345
catch (IOException e) {
4446
throw new UncheckedIOException(e);

kroxylicious-operator/src/main/java/io/kroxylicious/kubernetes/operator/ResourcesUtil.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.stream.Stream;
2222

2323
import io.fabric8.kubernetes.api.model.HasMetadata;
24+
import io.fabric8.kubernetes.api.model.ObjectMeta;
2425
import io.fabric8.kubernetes.api.model.OwnerReference;
2526
import io.fabric8.kubernetes.api.model.OwnerReferenceBuilder;
2627
import io.javaoperatorsdk.operator.api.reconciler.Context;
@@ -102,8 +103,18 @@ public static String namespace(@NonNull HasMetadata resource) {
102103
return resource.getMetadata().getNamespace();
103104
}
104105

105-
public static Long generation(@NonNull HasMetadata resource) {
106-
return resource.getMetadata().getGeneration();
106+
/**
107+
* Extract generation from a MetaData object.
108+
*
109+
* @param resource the object from which to extract the metadata generation.
110+
* @return the metadata generation of <code>0</code> of te metadata or the generation itself is null in alignment with @see <a href="https://github.com/kubernetes/enhancements/tree/master/keps/sig-api-machinery/1623-standardize-conditions#kep-1623-standardize-conditions">KEP 1623</a>.
111+
*/
112+
public static @NonNull Long generation(@NonNull HasMetadata resource) {
113+
ObjectMeta metadata = resource.getMetadata();
114+
if (metadata.getGeneration() == null) {
115+
return 0L;
116+
}
117+
return metadata.getGeneration();
107118
}
108119

109120
public static String uid(@NonNull HasMetadata resource) {

kroxylicious-operator/src/main/java/io/kroxylicious/kubernetes/operator/StatusFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ ConditionBuilder newConditionBuilder(HasMetadata observedGenerationSource) {
2626
var now = clock.instant();
2727
return new ConditionBuilder()
2828
.withLastTransitionTime(now)
29-
.withObservedGeneration(observedGenerationSource.getMetadata().getGeneration());
29+
.withObservedGeneration(ResourcesUtil.generation(observedGenerationSource));
3030
}
3131

3232
Condition newTrueCondition(HasMetadata observedGenerationSource, Condition.Type type) {

kroxylicious-operator/src/main/resources/META-INF/fabric8/kafkaprotocolfilters.filter.kroxylicious.io-v1.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,3 +102,6 @@ spec:
102102
type:
103103
description: type of condition in CamelCase or in foo.example.com/CamelCase.
104104
type: string
105+
required:
106+
- lastTransitionTime
107+
- observedGeneration

kroxylicious-operator/src/main/resources/META-INF/fabric8/kafkaproxies.kroxylicious.io-v1.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ spec:
9999
type:
100100
description: type of condition in CamelCase or in foo.example.com/CamelCase.
101101
type: string
102+
required:
103+
- lastTransitionTime
104+
- observedGeneration
102105
clusters:
103106
type: array
104107
x-kubernetes-list-type: map

kroxylicious-operator/src/main/resources/META-INF/fabric8/kafkaproxyingresses.kroxylicious.io-v1.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,3 +108,6 @@ spec:
108108
type:
109109
description: type of condition in CamelCase or in foo.example.com/CamelCase.
110110
type: string
111+
required:
112+
- lastTransitionTime
113+
- observedGeneration

kroxylicious-operator/src/main/resources/META-INF/fabric8/kafkaservices.kroxylicious.io-v1.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,6 @@ spec:
9090
type:
9191
description: type of condition in CamelCase or in foo.example.com/CamelCase.
9292
type: string
93+
required:
94+
- lastTransitionTime
95+
- observedGeneration

kroxylicious-operator/src/main/resources/META-INF/fabric8/virtualkafkaclusters.kroxylicious.io-v1.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,4 +133,7 @@ spec:
133133
enum: [ "True", "False", "Unknown" ]
134134
type:
135135
description: type of condition in CamelCase or in foo.example.com/CamelCase.
136-
type: string
136+
type: string
137+
required:
138+
- lastTransitionTime
139+
- observedGeneration

0 commit comments

Comments
 (0)