Skip to content

Commit b6db6ab

Browse files
committed
fix: only throw MissingCRDException if we get a 404 on the target CRD
Fixes #552
1 parent ec61f51 commit b6db6ab

File tree

4 files changed

+14
-6
lines changed

4 files changed

+14
-6
lines changed

Diff for: operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/EventDispatcher.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
/**
2525
* Dispatches events to the Controller and handles Finalizers for a single type of Custom Resource.
2626
*/
27-
class EventDispatcher<R extends CustomResource<?, ?>> {
27+
public class EventDispatcher<R extends CustomResource<?, ?>> {
2828

2929
private static final Logger log = LoggerFactory.getLogger(EventDispatcher.class);
3030

Diff for: operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/DefaultEventSourceManager.java

+9-3
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,21 @@ public class DefaultEventSourceManager<R extends CustomResource<?, ?>>
3535
private final Map<String, EventSource> eventSources = new ConcurrentHashMap<>();
3636
private final DefaultEventHandler<R> defaultEventHandler;
3737
private TimerEventSource<R> retryTimerEventSource;
38+
private final String targetCRDName;
3839

39-
DefaultEventSourceManager(DefaultEventHandler<R> defaultEventHandler, boolean supportRetry) {
40+
DefaultEventSourceManager(DefaultEventHandler<R> defaultEventHandler, boolean supportRetry,
41+
String targetCRDName) {
4042
this.defaultEventHandler = defaultEventHandler;
4143
defaultEventHandler.setEventSourceManager(this);
4244
if (supportRetry) {
4345
this.retryTimerEventSource = new TimerEventSource<>();
4446
registerEventSource(RETRY_TIMER_EVENT_SOURCE_NAME, retryTimerEventSource);
4547
}
48+
this.targetCRDName = targetCRDName;
4649
}
4750

4851
public DefaultEventSourceManager(ConfiguredController<R> controller) {
49-
this(new DefaultEventHandler<>(controller), true);
52+
this(new DefaultEventHandler<>(controller), true, controller.getConfiguration().getCRDName());
5053
registerEventSource(CUSTOM_RESOURCE_EVENT_SOURCE_NAME,
5154
new CustomResourceEventSource<>(controller));
5255
}
@@ -92,7 +95,10 @@ public final void registerEventSource(String name, EventSource eventSource)
9295
if (e instanceof KubernetesClientException) {
9396
KubernetesClientException ke = (KubernetesClientException) e;
9497
if (404 == ke.getCode()) {
95-
throw new MissingCRDException(null, null);
98+
// only throw MissingCRDException if the 404 error occurs on the target CRD
99+
if (targetCRDName.equals(ke.getFullResourceName())) {
100+
throw new MissingCRDException(targetCRDName, null);
101+
}
96102
}
97103
}
98104
throw new OperatorException("Couldn't register event source named '" + name + "'", e);

Diff for: operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/DefaultEventSourceManagerTest.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import io.javaoperatorsdk.operator.TestUtils;
1010
import io.javaoperatorsdk.operator.processing.DefaultEventHandler;
1111
import io.javaoperatorsdk.operator.processing.KubernetesResourceUtils;
12+
import io.javaoperatorsdk.operator.sample.simple.TestCustomResource;
1213

1314
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getUID;
1415
import static org.assertj.core.api.Assertions.assertThat;
@@ -24,7 +25,8 @@ class DefaultEventSourceManagerTest {
2425

2526
private DefaultEventHandler defaultEventHandlerMock = mock(DefaultEventHandler.class);
2627
private DefaultEventSourceManager defaultEventSourceManager =
27-
new DefaultEventSourceManager(defaultEventHandlerMock, false);
28+
new DefaultEventSourceManager(defaultEventHandlerMock, false,
29+
CustomResource.getCRDName(TestCustomResource.class));
2830

2931
@Test
3032
public void registersEventSource() {

Diff for: pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
<maven.compiler.target>${java.version}</maven.compiler.target>
4242

4343
<junit.version>5.8.1</junit.version>
44-
<fabric8-client.version>5.7.2</fabric8-client.version>
44+
<fabric8-client.version>5.8.0</fabric8-client.version>
4545
<slf4j.version>1.7.32</slf4j.version>
4646
<log4j.version>2.14.1</log4j.version>
4747
<mokito.version>3.12.4</mokito.version>

0 commit comments

Comments
 (0)