Skip to content

Commit ada512c

Browse files
committed
improve: using fabric8 re-list callback to cover event filtering edge cases
Fabric8 client now supports callback onBeforeList in Informers, that allows to enhance edge case support for event filtering: Since on re-list some events could be lost, we will trigger the reconciliation in such scenarios. Signed-off-by: Attila Mészáros <a_meszaros@apple.com>
1 parent 8fff023 commit ada512c

5 files changed

Lines changed: 6 additions & 33 deletions

File tree

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/ManagedInformerEventSource.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -155,16 +155,14 @@ public synchronized void stop() {
155155

156156
@Override
157157
public void onList(String resourceVersion, boolean remainedEmpty) {
158-
// re-list supported by fabric8 client https://github.com/fabric8io/kubernetes-client/pull/7899
159-
// temporaryResourceCache.setRelistFinished(resourceVersion);
158+
temporaryResourceCache.setRelistFinished(resourceVersion);
160159
temporaryResourceCache.checkGhostResources();
161160
}
162161

163-
// @Override (enable when
164-
// re-list supported by fabric8 client https://github.com/fabric8io/kubernetes-client/pull/7899
165-
// public void onBeforeList(String lastSyncResourceVersion) {
166-
// temporaryResourceCache.setOngoingRelist(lastSyncResourceVersion);
167-
// }
162+
@Override
163+
public void onBeforeList(String lastSyncResourceVersion) {
164+
temporaryResourceCache.setOngoingRelist(lastSyncResourceVersion);
165+
}
168166

169167
@Override
170168
public void handleRecentResourceUpdate(

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/EventFilterWindowTest.java

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package io.javaoperatorsdk.operator.processing.event.source.informer;
1717

18-
import org.junit.jupiter.api.Disabled;
1918
import org.junit.jupiter.api.Test;
2019

2120
import io.fabric8.kubernetes.api.model.ConfigMap;
@@ -385,25 +384,6 @@ void additionalEventAndDeleteEvent() {
385384
assertThat(eventFilterWindow.canBeRemoved()).isTrue();
386385
}
387386

388-
@Test
389-
@Disabled("should be part of event filter support")
390-
void additionalEventAndDeleteEventNoUpdate() {
391-
eventFilterWindow.increaseActiveUpdates();
392-
eventFilterWindow.addToOwnUpdateVersions(s(FIRST_OWN_VERSION));
393-
eventFilterWindow.addRelatedEvent(updateEvent(FIRST_OWN_VERSION));
394-
eventFilterWindow.addRelatedEvent(updateEvent(FIRST_OWN_VERSION + 1));
395-
eventFilterWindow.addRelatedEvent(deleteEvent(FIRST_OWN_VERSION + 2));
396-
397-
assertThat(eventFilterWindow.check())
398-
.hasValueSatisfying(e -> assertDeleteEvent(e, FIRST_OWN_VERSION + 2));
399-
assertThat(eventFilterWindow.check()).isEmpty();
400-
401-
assertEmptyState();
402-
eventFilterWindow.decreaseActiveUpdates();
403-
404-
assertThat(eventFilterWindow.canBeRemoved()).isTrue();
405-
}
406-
407387
@Test
408388
void deleteEventInMiddleTwoUpdates() {
409389
eventFilterWindow.increaseActiveUpdates();

operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/readcacheafterwrite/onrelistfilter/OnRelistFilterIT.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import java.time.Duration;
1919

20-
import org.junit.jupiter.api.Disabled;
2120
import org.junit.jupiter.api.Test;
2221
import org.junit.jupiter.api.extension.RegisterExtension;
2322

@@ -37,7 +36,6 @@
3736
* <li>re-list starts WHILE the update window is open — own write is propagated
3837
* </ul>
3938
*/
40-
@Disabled("enable when fabric8 supports relist")
4139
class OnRelistFilterIT {
4240

4341
static final String RESOURCE_NAME = "test-resource";

operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/readcacheafterwrite/onrelistfilter/OnRelistFilterReconciler.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,7 @@ static class RelistAwareInformerEventSource<R extends HasMetadata, P extends Has
160160
}
161161

162162
void simulateOnBeforeList() {
163-
// uncomment when fabric8 supports re-list
164-
// onBeforeList(null);
163+
onBeforeList(null);
165164
}
166165

167166
void simulateOnList() {

operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/readcacheafterwrite/ownsecondaryupdate/OwnSecondaryUpdateIT.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import java.time.Duration;
1919

20-
import org.junit.jupiter.api.Disabled;
2120
import org.junit.jupiter.api.Test;
2221
import org.junit.jupiter.api.extension.RegisterExtension;
2322

@@ -33,7 +32,6 @@
3332
* the secondary are filtered and do NOT trigger additional reconciliations. Counterpart to {@code
3433
* ExternalSecondaryUpdateIT}, which asserts the opposite for third-party updates.
3534
*/
36-
@Disabled("enable if re-list notification supported by fabric8 client")
3735
class OwnSecondaryUpdateIT {
3836

3937
static final String RESOURCE_NAME = "test-resource";

0 commit comments

Comments
 (0)