Skip to content

Commit 1debf18

Browse files
committed
apply kubernetes common interface to more extended functionalities
1 parent 3b766f8 commit 1debf18

File tree

8 files changed

+58
-83
lines changed

8 files changed

+58
-83
lines changed

extended/src/main/java/io/kubernetes/client/extended/controller/Controllers.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
import io.kubernetes.client.common.KubernetesObject;
55
import io.kubernetes.client.extended.controller.reconciler.Request;
66
import io.kubernetes.client.openapi.models.V1ObjectMeta;
7-
import io.kubernetes.client.util.ObjectAccessor;
8-
import io.kubernetes.client.util.exception.ObjectMetaReflectException;
97
import java.util.concurrent.ThreadFactory;
108
import java.util.function.Function;
119
import org.slf4j.Logger;
@@ -26,13 +24,8 @@ public class Controllers {
2624
public static <ApiType extends KubernetesObject>
2725
Function<ApiType, Request> defaultReflectiveKeyFunc() {
2826
return (ApiType obj) -> {
29-
try {
30-
V1ObjectMeta objectMeta = ObjectAccessor.objectMetadata(obj);
31-
return new Request(objectMeta.getNamespace(), objectMeta.getName());
32-
} catch (ObjectMetaReflectException e) {
33-
log.error("Fail to access object-meta from {}..", obj.getClass());
34-
return null;
35-
}
27+
V1ObjectMeta objectMeta = obj.getMetadata();
28+
return new Request(objectMeta.getNamespace(), objectMeta.getName());
3629
};
3730
}
3831

extended/src/main/java/io/kubernetes/client/extended/event/legacy/EventRecorder.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
package io.kubernetes.client.extended.event.legacy;
22

3+
import io.kubernetes.client.common.KubernetesObject;
34
import io.kubernetes.client.extended.event.EventType;
45
import io.kubernetes.client.openapi.models.V1ObjectReference;
56
import java.util.Map;
67

78
public interface EventRecorder {
89

9-
void event(Object object, EventType t, String reason, String format, String... args);
10+
void event(KubernetesObject object, EventType t, String reason, String format, String... args);
1011

1112
void event(
12-
Object object,
13+
KubernetesObject object,
1314
Map<String, String> attachedAnnotation,
1415
EventType t,
1516
String reason,

extended/src/main/java/io/kubernetes/client/extended/event/legacy/ObjectReferenceResolvingEventRecorder.java

Lines changed: 25 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.kubernetes.client.extended.event.legacy;
22

33
import com.google.common.base.Strings;
4+
import io.kubernetes.client.common.KubernetesObject;
45
import io.kubernetes.client.extended.event.EventType;
56
import io.kubernetes.client.openapi.models.V1Event;
67
import io.kubernetes.client.openapi.models.V1EventBuilder;
@@ -9,10 +10,6 @@
910
import io.kubernetes.client.openapi.models.V1ObjectMetaBuilder;
1011
import io.kubernetes.client.openapi.models.V1ObjectReference;
1112
import io.kubernetes.client.openapi.models.V1ObjectReferenceBuilder;
12-
import io.kubernetes.client.util.ObjectAccessor;
13-
import io.kubernetes.client.util.TypeAccessor;
14-
import io.kubernetes.client.util.exception.ObjectMetaReflectException;
15-
import io.kubernetes.client.util.exception.TypeMetaReflectException;
1613
import java.util.HashMap;
1714
import java.util.Map;
1815
import java.util.concurrent.BlockingQueue;
@@ -36,25 +33,31 @@ public ObjectReferenceResolvingEventRecorder(
3633
private V1EventSource eventSource;
3734

3835
@Override
39-
public void event(Object object, EventType t, String reason, String format, String... args) {
36+
public void event(
37+
KubernetesObject object, EventType t, String reason, String format, String... args) {
4038
event(object, new HashMap<>(), t, reason, format, args);
4139
}
4240

4341
@Override
4442
public void event(
45-
Object object,
43+
KubernetesObject object,
4644
Map<String, String> attachedAnnotation,
4745
EventType t,
4846
String reason,
4947
String format,
5048
String... args) {
51-
generateEvent(object, attachedAnnotation, t, reason, String.format(format, args));
49+
generateEvent(
50+
constructObjectReference(object),
51+
attachedAnnotation,
52+
t,
53+
reason,
54+
String.format(format, args));
5255
}
5356

5457
@Override
5558
public void event(
5659
V1ObjectReference ref, EventType t, String reason, String format, String... args) {
57-
event((Object) ref, t, reason, format, args);
60+
event(ref, new HashMap<>(), t, reason, format, args);
5861
}
5962

6063
@Override
@@ -65,35 +68,27 @@ public void event(
6568
String reason,
6669
String format,
6770
String... args) {
68-
event((Object) ref, attachedAnnotation, t, reason, format, args);
71+
generateEvent(ref, attachedAnnotation, t, reason, String.format(format, args));
72+
}
73+
74+
private V1ObjectReference constructObjectReference(KubernetesObject eventRefObject) {
75+
V1ObjectMeta meta = eventRefObject.getMetadata();
76+
return new V1ObjectReferenceBuilder()
77+
.withApiVersion(eventRefObject.getApiVersion())
78+
.withKind(eventRefObject.getKind())
79+
.withUid(meta.getUid())
80+
.withNamespace(meta.getNamespace())
81+
.withName(meta.getName())
82+
.withResourceVersion(meta.getResourceVersion())
83+
.build();
6984
}
7085

7186
private void generateEvent(
72-
Object eventRefObject,
87+
V1ObjectReference eventRef,
7388
Map<String, String> annotations,
7489
EventType t,
7590
String reason,
7691
String message) {
77-
V1ObjectReference eventRef;
78-
if (eventRefObject instanceof V1ObjectReference) {
79-
eventRef = (V1ObjectReference) eventRefObject;
80-
} else {
81-
try {
82-
V1ObjectMeta meta = ObjectAccessor.objectMetadata(eventRefObject);
83-
eventRef =
84-
new V1ObjectReferenceBuilder()
85-
.withApiVersion(TypeAccessor.apiVersion(eventRefObject))
86-
.withKind(TypeAccessor.kind(eventRefObject))
87-
.withUid(meta.getUid())
88-
.withNamespace(meta.getNamespace())
89-
.withName(meta.getName())
90-
.withResourceVersion(meta.getResourceVersion())
91-
.build();
92-
} catch (ObjectMetaReflectException | TypeMetaReflectException e) {
93-
logger.error("failed parsing eventRefObject", e);
94-
return;
95-
}
96-
}
9792

9893
// defaulting event namespace for cluster-scoped resources..
9994
String namespace = eventRef.getNamespace();

extended/src/main/java/io/kubernetes/client/extended/generic/GenericKubernetesApi.java

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.google.gson.reflect.TypeToken;
77
import io.kubernetes.client.common.KubernetesListObject;
88
import io.kubernetes.client.common.KubernetesObject;
9+
import io.kubernetes.client.common.KubernetesType;
910
import io.kubernetes.client.custom.V1Patch;
1011
import io.kubernetes.client.extended.generic.options.CreateOptions;
1112
import io.kubernetes.client.extended.generic.options.DeleteOptions;
@@ -19,11 +20,9 @@
1920
import io.kubernetes.client.openapi.apis.CustomObjectsApi;
2021
import io.kubernetes.client.openapi.models.V1ObjectMeta;
2122
import io.kubernetes.client.openapi.models.V1Status;
22-
import io.kubernetes.client.util.ObjectAccessor;
2323
import io.kubernetes.client.util.PatchUtils;
2424
import io.kubernetes.client.util.Watch;
2525
import io.kubernetes.client.util.Watchable;
26-
import io.kubernetes.client.util.exception.ObjectMetaReflectException;
2726
import java.io.IOException;
2827
import okhttp3.Call;
2928
import okhttp3.HttpUrl;
@@ -378,12 +377,7 @@ public KubernetesApiResponse<ApiListType> list(String namespace, final ListOptio
378377
* @return the kubernetes api response
379378
*/
380379
public KubernetesApiResponse<ApiType> create(ApiType object, final CreateOptions createOptions) {
381-
V1ObjectMeta objectMeta;
382-
try {
383-
objectMeta = ObjectAccessor.objectMetadata(object);
384-
} catch (ObjectMetaReflectException e) {
385-
throw new IllegalArgumentException("fail to extract object metadata");
386-
}
380+
V1ObjectMeta objectMeta = object.getMetadata();
387381

388382
return executeCall(
389383
customObjectsApi.getApiClient(),
@@ -424,12 +418,7 @@ public KubernetesApiResponse<ApiType> create(ApiType object, final CreateOptions
424418
* @return the kubernetes api response
425419
*/
426420
public KubernetesApiResponse<ApiType> update(ApiType object, final UpdateOptions updateOptions) {
427-
V1ObjectMeta objectMeta;
428-
try {
429-
objectMeta = ObjectAccessor.objectMetadata(object);
430-
} catch (ObjectMetaReflectException e) {
431-
throw new IllegalArgumentException("fail to extract object metadata");
432-
}
421+
V1ObjectMeta objectMeta = object.getMetadata();
433422
return executeCall(
434423
customObjectsApi.getApiClient(),
435424
apiTypeClass,
@@ -674,13 +663,15 @@ public Watchable<ApiType> watch(String namespace, final ListOptions listOptions)
674663
TypeToken.getParameterized(Watch.Response.class, apiTypeClass).getType());
675664
}
676665

677-
private static <DataType> KubernetesApiResponse<DataType> getKubernetesApiResponse(
678-
Class<DataType> dataClass, JsonElement element, Gson gson) {
666+
private static <DataType extends KubernetesType>
667+
KubernetesApiResponse<DataType> getKubernetesApiResponse(
668+
Class<DataType> dataClass, JsonElement element, Gson gson) {
679669
return getKubernetesApiResponse(dataClass, element, gson, 200);
680670
}
681671

682-
private static <DataType> KubernetesApiResponse<DataType> getKubernetesApiResponse(
683-
Class<DataType> dataClass, JsonElement element, Gson gson, int httpStatusCode) {
672+
private static <DataType extends KubernetesType>
673+
KubernetesApiResponse<DataType> getKubernetesApiResponse(
674+
Class<DataType> dataClass, JsonElement element, Gson gson, int httpStatusCode) {
684675
JsonElement kindElement = element.getAsJsonObject().get("kind");
685676
boolean isStatus = kindElement != null && "Status".equals(kindElement.getAsString());
686677
if (isStatus) {
@@ -689,7 +680,7 @@ private static <DataType> KubernetesApiResponse<DataType> getKubernetesApiRespon
689680
return new KubernetesApiResponse<>(gson.fromJson(element, dataClass));
690681
}
691682

692-
private <DataType> KubernetesApiResponse<DataType> executeCall(
683+
private <DataType extends KubernetesType> KubernetesApiResponse<DataType> executeCall(
693684
ApiClient apiClient, Class<DataType> dataClass, CallBuilder callBuilder) {
694685
try {
695686
Call call = callBuilder.build();

extended/src/main/java/io/kubernetes/client/extended/generic/KubernetesApiResponse.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package io.kubernetes.client.extended.generic;
22

3+
import io.kubernetes.client.common.KubernetesType;
34
import io.kubernetes.client.openapi.models.V1Status;
45

5-
public class KubernetesApiResponse<DataType> {
6+
public class KubernetesApiResponse<DataType extends KubernetesType> {
67

78
private final DataType object;
89
private final V1Status status;

extended/src/main/java/io/kubernetes/client/extended/pager/Pager.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
*/
1313
package io.kubernetes.client.extended.pager;
1414

15+
import io.kubernetes.client.common.KubernetesListObject;
16+
import io.kubernetes.client.common.KubernetesObject;
1517
import io.kubernetes.client.openapi.ApiClient;
1618
import io.kubernetes.client.openapi.ApiException;
17-
import io.kubernetes.client.util.ListAccessor;
18-
import io.kubernetes.client.util.exception.ObjectMetaReflectException;
1919
import java.io.IOException;
2020
import java.lang.reflect.Type;
2121
import java.util.Iterator;
@@ -26,7 +26,8 @@
2626
* Pager encapsulates kubernetes limit/continue-based list pagination into an iterator.
2727
* Note that pager is thread-safe.
2828
*/
29-
public class Pager<ApiType, ApiListType> implements Iterable<ApiType> {
29+
public class Pager<ApiType extends KubernetesObject, ApiListType extends KubernetesListObject>
30+
implements Iterable<ApiType> {
3031
private Integer limit;
3132
private ApiClient client;
3233
private Type listType;
@@ -136,15 +137,15 @@ public ApiType next() {
136137
call = getNextCall(limit, continueToken);
137138

138139
listObjectCurrentPage = executeRequest(call);
139-
continueToken = ListAccessor.listMetadata(listObjectCurrentPage).getContinue();
140+
continueToken = listObjectCurrentPage.getMetadata().getContinue();
140141

141142
offsetCurrentPage = 0;
142-
currentPageSize = ListAccessor.<ApiType>getItems(listObjectCurrentPage).size();
143+
currentPageSize = listObjectCurrentPage.getItems().size();
143144
}
144-
return ListAccessor.<ApiType>getItems(listObjectCurrentPage).get(offsetCurrentPage++);
145+
return (ApiType) listObjectCurrentPage.getItems().get(offsetCurrentPage++);
145146
} catch (ApiException e) {
146147
throw new RuntimeException(e.getResponseBody());
147-
} catch (ObjectMetaReflectException | IOException e) {
148+
} catch (IOException e) {
148149
throw new RuntimeException(e);
149150
}
150151
}

util/src/main/java/io/kubernetes/client/informer/cache/Caches.java

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
import com.google.common.base.Strings;
44
import io.kubernetes.client.common.KubernetesObject;
55
import io.kubernetes.client.openapi.models.V1ObjectMeta;
6-
import io.kubernetes.client.util.ObjectAccessor;
7-
import io.kubernetes.client.util.exception.ObjectMetaReflectException;
86
import java.util.Collections;
97
import java.util.List;
108

@@ -54,16 +52,11 @@ public static String metaNamespaceKeyFunc(KubernetesObject obj) {
5452
* @param obj specific object
5553
* @return the indexed value
5654
*/
57-
public static List<String> metaNamespaceIndexFunc(Object obj) {
58-
try {
59-
V1ObjectMeta metadata = ObjectAccessor.objectMetadata(obj);
60-
if (metadata == null) {
61-
return Collections.emptyList();
62-
}
63-
return Collections.singletonList(metadata.getNamespace());
64-
} catch (ObjectMetaReflectException e) {
65-
// NOTE(yue9944882): might want to handle this as a checked exception
66-
throw new RuntimeException(e);
55+
public static List<String> metaNamespaceIndexFunc(KubernetesObject obj) {
56+
V1ObjectMeta metadata = obj.getMetadata();
57+
if (metadata == null) {
58+
return Collections.emptyList();
6759
}
60+
return Collections.singletonList(metadata.getNamespace());
6861
}
6962
}

util/src/main/java/io/kubernetes/client/informer/cache/ReflectorRunnable.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ public void run() {
4848

4949
ApiListType list = listerWatcher.list(new CallGeneratorParams(Boolean.FALSE, null, null));
5050

51-
V1ListMeta listMeta = ListAccessor.listMetadata(list);
51+
V1ListMeta listMeta = list.getMetadata();
5252
String resourceVersion = listMeta.getResourceVersion();
53-
List<ApiType> items = ListAccessor.getItems(list);
53+
List<? extends KubernetesObject> items = list.getItems();
5454

5555
if (log.isDebugEnabled()) {
5656
log.debug("{}#Extract resourceVersion {} list meta", apiTypeClass, resourceVersion);
@@ -118,7 +118,7 @@ public void stop() {
118118
isActive.set(false);
119119
}
120120

121-
private void syncWith(List<ApiType> items, String resourceVersion) {
121+
private void syncWith(List<? extends KubernetesObject> items, String resourceVersion) {
122122
this.store.replace(
123123
(List<KubernetesObject>) items, resourceVersion); // down-casting is safe here
124124
}

0 commit comments

Comments
 (0)