Skip to content

Commit 6b9f071

Browse files
committed
Merge branch 'master' into retry-experiment
# Conflicts: # operator-framework/src/main/java/io/javaoperatorsdk/operator/Operator.java # operator-framework/src/main/java/io/javaoperatorsdk/operator/processing/DefaultEventHandler.java # operator-framework/src/main/java/io/javaoperatorsdk/operator/processing/EventBuffer.java # operator-framework/src/main/java/io/javaoperatorsdk/operator/processing/EventDispatcher.java # operator-framework/src/main/java/io/javaoperatorsdk/operator/processing/ExecutionConsumer.java # operator-framework/src/main/java/io/javaoperatorsdk/operator/processing/PostExecutionControl.java # operator-framework/src/main/java/io/javaoperatorsdk/operator/processing/event/DefaultEventSourceManager.java # operator-framework/src/main/java/io/javaoperatorsdk/operator/processing/retry/GenericRetry.java # operator-framework/src/main/java/io/javaoperatorsdk/operator/processing/retry/GenericRetryExecution.java # operator-framework/src/test/java/io/javaoperatorsdk/operator/EventDispatcherTest.java # operator-framework/src/test/java/io/javaoperatorsdk/operator/processing/DefaultEventHandlerTest.java # operator-framework/src/test/java/io/javaoperatorsdk/operator/processing/event/DefaultEventSourceManagerTest.java # operator-framework/src/test/java/io/javaoperatorsdk/operator/processing/retry/GenericRetryExecutionTest.java
2 parents 1883727 + cfbbac3 commit 6b9f071

File tree

113 files changed

+3551
-3194
lines changed

Some content is hidden

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

113 files changed

+3551
-3194
lines changed

.github/workflows/pr.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ jobs:
2121
uses: actions/setup-java@v1
2222
with:
2323
java-version: ${{ matrix.java }}
24+
- name: Check code format
25+
run: mvn fmt:check --file pom.xml
2426
- name: Run unit tests
2527
run: mvn -B test -P no-integration-tests --file pom.xml
2628
- name: Set up Minikube

operator-framework/pom.xml

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>io.javaoperatorsdk</groupId>
88
<artifactId>java-operator-sdk</artifactId>
9-
<version>1.3.1-SNAPSHOT</version>
9+
<version>1.4.1-SNAPSHOT</version>
1010
<relativePath>../pom.xml</relativePath>
1111
</parent>
1212

@@ -45,6 +45,17 @@
4545
<groupId>org.slf4j</groupId>
4646
<artifactId>slf4j-api</artifactId>
4747
</dependency>
48+
<dependency>
49+
<groupId>com.google.auto.service</groupId>
50+
<artifactId>auto-service</artifactId>
51+
<version>1.0-rc7</version>
52+
</dependency>
53+
54+
<dependency>
55+
<groupId>com.squareup</groupId>
56+
<artifactId>javapoet</artifactId>
57+
<version>1.13.0</version>
58+
</dependency>
4859
<dependency>
4960
<groupId>org.junit.jupiter</groupId>
5061
<artifactId>junit-jupiter-api</artifactId>
@@ -85,19 +96,5 @@
8596
<version>0.19</version>
8697
<scope>test</scope>
8798
</dependency>
88-
89-
<dependency>
90-
<groupId>com.google.auto.service</groupId>
91-
<artifactId>auto-service</artifactId>
92-
<version>1.0-rc2</version>
93-
<scope>compile</scope>
94-
</dependency>
95-
96-
<dependency>
97-
<groupId>com.squareup</groupId>
98-
<artifactId>javapoet</artifactId>
99-
<version>1.13.0</version>
100-
<scope>compile</scope>
101-
</dependency>
10299
</dependencies>
103100
</project>
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package io.javaoperatorsdk.operator;
2+
3+
import java.io.BufferedReader;
4+
import java.io.IOException;
5+
import java.io.InputStreamReader;
6+
import java.net.URL;
7+
import java.util.*;
8+
import java.util.stream.Collectors;
9+
import org.apache.commons.lang3.ClassUtils;
10+
import org.slf4j.Logger;
11+
import org.slf4j.LoggerFactory;
12+
13+
class ClassMappingProvider {
14+
private static final Logger log = LoggerFactory.getLogger(ClassMappingProvider.class);
15+
16+
static <T, V> Map<T, V> provide(final String resourcePath, T key, V value) {
17+
Map<T, V> result = new HashMap();
18+
try {
19+
final var classLoader = Thread.currentThread().getContextClassLoader();
20+
final Enumeration<URL> customResourcesMetadataList = classLoader.getResources(resourcePath);
21+
for (Iterator<URL> it = customResourcesMetadataList.asIterator(); it.hasNext(); ) {
22+
URL url = it.next();
23+
24+
List<String> classNamePairs = retrieveClassNamePairs(url);
25+
classNamePairs.forEach(
26+
clazzPair -> {
27+
try {
28+
final String[] classNames = clazzPair.split(",");
29+
if (classNames.length != 2) {
30+
throw new IllegalStateException(
31+
String.format(
32+
"%s is not valid Mapping metadata, defined in %s",
33+
clazzPair, url.toString()));
34+
}
35+
36+
result.put(
37+
(T) ClassUtils.getClass(classNames[0]), (V) ClassUtils.getClass(classNames[1]));
38+
} catch (ClassNotFoundException e) {
39+
throw new RuntimeException(e);
40+
}
41+
});
42+
}
43+
log.debug("Loaded Controller to CustomResource mappings {}", result);
44+
return result;
45+
} catch (IOException e) {
46+
throw new RuntimeException(e);
47+
}
48+
}
49+
50+
private static List<String> retrieveClassNamePairs(URL url) throws IOException {
51+
return new BufferedReader(new InputStreamReader(url.openStream()))
52+
.lines()
53+
.collect(Collectors.toList());
54+
}
55+
}

operator-framework/src/main/java/io/javaoperatorsdk/operator/ControllerToCustomResourceMappingsProvider.java

Lines changed: 0 additions & 57 deletions
This file was deleted.

operator-framework/src/main/java/io/javaoperatorsdk/operator/ControllerUtils.java

Lines changed: 57 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -4,69 +4,76 @@
44
import io.fabric8.kubernetes.client.CustomResourceDoneable;
55
import io.javaoperatorsdk.operator.api.Controller;
66
import io.javaoperatorsdk.operator.api.ResourceController;
7-
import org.apache.commons.lang3.ClassUtils;
8-
97
import java.util.Map;
108

11-
129
public class ControllerUtils {
1310

14-
private static final String FINALIZER_NAME_SUFFIX = "/finalizer";
15-
public static final String CONTROLLERS_RESOURCE_PATH = "javaoperatorsdk/controllers";
16-
private static Map<Class<? extends ResourceController>, Class<? extends CustomResource>> controllerToCustomResourceMappings;
11+
private static final String FINALIZER_NAME_SUFFIX = "/finalizer";
12+
public static final String CONTROLLERS_RESOURCE_PATH = "javaoperatorsdk/controllers";
13+
public static final String DONEABLES_RESOURCE_PATH = "javaoperatorsdk/doneables";
14+
private static Map<Class<? extends ResourceController>, Class<? extends CustomResource>>
15+
controllerToCustomResourceMappings;
16+
private static Map<Class<? extends CustomResource>, Class<? extends CustomResourceDoneable>>
17+
resourceToDoneableMappings;
1718

18-
static {
19-
controllerToCustomResourceMappings =
20-
ControllerToCustomResourceMappingsProvider
21-
.provide(CONTROLLERS_RESOURCE_PATH);
22-
}
19+
static {
20+
controllerToCustomResourceMappings =
21+
ClassMappingProvider.provide(
22+
CONTROLLERS_RESOURCE_PATH, ResourceController.class, CustomResource.class);
23+
resourceToDoneableMappings =
24+
ClassMappingProvider.provide(
25+
DONEABLES_RESOURCE_PATH, CustomResource.class, CustomResourceDoneable.class);
26+
}
2327

24-
static String getFinalizer(ResourceController controller) {
25-
final String annotationFinalizerName = getAnnotation(controller).finalizerName();
26-
if (!Controller.NULL.equals(annotationFinalizerName)) {
27-
return annotationFinalizerName;
28-
}
29-
return getAnnotation(controller).crdName() + FINALIZER_NAME_SUFFIX;
28+
static String getFinalizer(ResourceController controller) {
29+
final String annotationFinalizerName = getAnnotation(controller).finalizerName();
30+
if (!Controller.NULL.equals(annotationFinalizerName)) {
31+
return annotationFinalizerName;
3032
}
33+
return getAnnotation(controller).crdName() + FINALIZER_NAME_SUFFIX;
34+
}
3135

32-
static boolean getGenerationEventProcessing(ResourceController<?> controller) {
33-
return getAnnotation(controller).generationAwareEventProcessing();
34-
}
36+
static boolean getGenerationEventProcessing(ResourceController<?> controller) {
37+
return getAnnotation(controller).generationAwareEventProcessing();
38+
}
3539

36-
static <R extends CustomResource> Class<R> getCustomResourceClass(ResourceController<R> controller) {
37-
final Class<? extends CustomResource> customResourceClass = controllerToCustomResourceMappings
38-
.get(controller.getClass());
39-
if (customResourceClass == null) {
40-
throw new IllegalArgumentException(
41-
String.format(
42-
"No custom resource has been found for controller %s",
43-
controller.getClass().getCanonicalName()
44-
)
45-
);
46-
}
47-
return (Class<R>) customResourceClass;
40+
static <R extends CustomResource> Class<R> getCustomResourceClass(
41+
ResourceController<R> controller) {
42+
final Class<? extends CustomResource> customResourceClass =
43+
controllerToCustomResourceMappings.get(controller.getClass());
44+
if (customResourceClass == null) {
45+
throw new IllegalArgumentException(
46+
String.format(
47+
"No custom resource has been found for controller %s",
48+
controller.getClass().getCanonicalName()));
4849
}
50+
return (Class<R>) customResourceClass;
51+
}
4952

50-
static String getCrdName(ResourceController controller) {
51-
return getAnnotation(controller).crdName();
52-
}
53+
static String getCrdName(ResourceController controller) {
54+
return getAnnotation(controller).crdName();
55+
}
5356

54-
public static <T extends CustomResource> Class<? extends CustomResourceDoneable<T>>
55-
getCustomResourceDoneableClass(ResourceController<T> controller) {
56-
try {
57-
final Class<T> customResourceClass = getCustomResourceClass(controller);
58-
return (Class<? extends CustomResourceDoneable<T>>) ClassUtils.getClass(customResourceClass.getCanonicalName() + "Doneable");
59-
} catch (ClassNotFoundException e) {
60-
e.printStackTrace();
61-
return null;
62-
}
57+
public static <T extends CustomResource>
58+
Class<? extends CustomResourceDoneable<T>> getCustomResourceDoneableClass(
59+
ResourceController<T> controller) {
60+
final Class<T> customResourceClass = getCustomResourceClass(controller);
61+
final Class<? extends CustomResourceDoneable<T>> doneableClass =
62+
(Class<? extends CustomResourceDoneable<T>>)
63+
resourceToDoneableMappings.get(customResourceClass);
64+
if (doneableClass == null) {
65+
throw new RuntimeException(
66+
String.format("No matching Doneable class found for %s", customResourceClass));
6367
}
68+
return doneableClass;
69+
}
6470

65-
private static Controller getAnnotation(ResourceController<?> controller) {
66-
return controller.getClass().getAnnotation(Controller.class);
67-
}
71+
private static Controller getAnnotation(ResourceController<?> controller) {
72+
return controller.getClass().getAnnotation(Controller.class);
73+
}
6874

69-
public static boolean hasGivenFinalizer(CustomResource resource, String finalizer) {
70-
return resource.getMetadata().getFinalizers() != null && resource.getMetadata().getFinalizers().contains(finalizer);
71-
}
75+
public static boolean hasGivenFinalizer(CustomResource resource, String finalizer) {
76+
return resource.getMetadata().getFinalizers() != null
77+
&& resource.getMetadata().getFinalizers().contains(finalizer);
78+
}
7279
}
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
package io.javaoperatorsdk.operator;
22

3-
import io.fabric8.kubernetes.api.model.HasMetadata;
43
import io.fabric8.kubernetes.client.Watcher;
54
import io.javaoperatorsdk.operator.processing.event.Event;
65
import io.javaoperatorsdk.operator.processing.event.internal.CustomResourceEvent;
7-
86
import java.util.List;
97

108
public class EventListUtils {
119

12-
public static boolean containsCustomResourceDeletedEvent(List<Event> events) {
13-
return events.stream().anyMatch(e -> {
14-
if (e instanceof CustomResourceEvent) {
10+
public static boolean containsCustomResourceDeletedEvent(List<Event> events) {
11+
return events.stream()
12+
.anyMatch(
13+
e -> {
14+
if (e instanceof CustomResourceEvent) {
1515
return ((CustomResourceEvent) e).getAction() == Watcher.Action.DELETED;
16-
} else {
16+
} else {
1717
return false;
18-
}
19-
});
20-
}
18+
}
19+
});
20+
}
2121
}

0 commit comments

Comments
 (0)