Skip to content

Commit bd03a1c

Browse files
authored
fix: properly report missing CRDs from informers (#1540)
Fixes #1539
1 parent 896e2ee commit bd03a1c

File tree

3 files changed

+14
-6
lines changed

3 files changed

+14
-6
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/ReconcilerUtils.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ public static void handleKubernetesClientException(Exception e, String resourceT
133133
// only throw MissingCRDException if the 404 error occurs on the target CRD
134134
if (resourceTypeName.equals(ke.getFullResourceName())
135135
|| matchesResourceType(resourceTypeName, ke)) {
136-
throw new MissingCRDException(resourceTypeName, null, e.getMessage(), e);
136+
throw new MissingCRDException(resourceTypeName, ke.getVersion(), e.getMessage(), e);
137137
}
138138
}
139139
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/Controller.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ public synchronized void start(boolean startEventProcessor) throws OperatorExcep
299299
log.info("'{}' controller started, pending event sources initialization", controllerName);
300300
} catch (MissingCRDException e) {
301301
stop();
302-
throwMissingCRDException(crdName, specVersion, controllerName);
302+
throwMissingCRDException(e.getCrdName(), e.getSpecVersion(), controllerName);
303303
}
304304
}
305305

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

+12-4
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
import java.util.function.Predicate;
88
import java.util.stream.Stream;
99

10+
import org.slf4j.Logger;
11+
import org.slf4j.LoggerFactory;
12+
1013
import io.fabric8.kubernetes.api.model.HasMetadata;
1114
import io.fabric8.kubernetes.client.informers.ResourceEventHandler;
1215
import io.fabric8.kubernetes.client.informers.SharedIndexInformer;
@@ -21,6 +24,8 @@
2124
class InformerWrapper<T extends HasMetadata>
2225
implements LifecycleAware, IndexerResourceCache<T> {
2326

27+
private static final Logger log = LoggerFactory.getLogger(InformerWrapper.class);
28+
2429
private final SharedIndexInformer<T> informer;
2530
private final Cache<T> cache;
2631

@@ -45,8 +50,7 @@ public void start() throws OperatorException {
4550
});
4651
} else {
4752
final var apiTypeClass = informer.getApiTypeClass();
48-
final var fullResourceName =
49-
HasMetadata.getFullResourceName(apiTypeClass);
53+
final var fullResourceName = HasMetadata.getFullResourceName(apiTypeClass);
5054
final var version = HasMetadata.getVersion(apiTypeClass);
5155
throw new IllegalStateException(
5256
"Cannot retrieve 'stopped' callback to listen to informer stopping for informer for "
@@ -55,8 +59,12 @@ public void start() throws OperatorException {
5559
});
5660

5761
} catch (Exception e) {
58-
ReconcilerUtils.handleKubernetesClientException(e,
59-
HasMetadata.getFullResourceName(informer.getApiTypeClass()));
62+
final var apiTypeClass = informer.getApiTypeClass();
63+
final var fullResourceName = HasMetadata.getFullResourceName(apiTypeClass);
64+
final var version = HasMetadata.getVersion(apiTypeClass);
65+
log.error("Couldn't start informer for " + fullResourceName + "/" + version + " resources",
66+
e);
67+
ReconcilerUtils.handleKubernetesClientException(e, fullResourceName);
6068
throw e;
6169
}
6270
}

0 commit comments

Comments
 (0)