Skip to content

Commit 8107d51

Browse files
committed
addressing comments
1 parent fd8ef57 commit 8107d51

File tree

2 files changed

+35
-18
lines changed

2 files changed

+35
-18
lines changed

util/src/main/java/io/kubernetes/client/util/ModelMapper.java

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,12 @@ public class ModelMapper {
5353
// Model's api-version midfix to kubernetes api-version
5454
private static List<String> preBuiltApiVersions = new ArrayList<>();
5555

56-
private static Map<GroupVersionKind, Class<?>> classesByGVK = new ConcurrentHashMap<>();
57-
private static Map<GroupVersionResource, Class<?>> classesByGVR = new ConcurrentHashMap<>();
56+
private static BiDirectionalMap<GroupVersionKind, Class<?>> classesByGVK =
57+
new BiDirectionalMap<>();
58+
59+
private static BiDirectionalMap<GroupVersionResource, Class<?>> classesByGVR =
60+
new BiDirectionalMap<>();
5861

59-
private static Map<Class<?>, GroupVersionKind> gvkByClasses = new ConcurrentHashMap<>();
60-
private static Map<Class<?>, GroupVersionResource> gvrByClasses = new ConcurrentHashMap<>();
6162
private static Map<Class<?>, Boolean> isNamespacedByClasses = new ConcurrentHashMap<>();
6263

6364
private static Set<Discovery.APIResource> lastAPIDiscovery = new HashSet<>();
@@ -116,11 +117,8 @@ public static void addModelMap(String group, String version, String kind, Class<
116117
public static void addModelMap(
117118
String group, String version, String kind, String resourceNamePlural, Class<?> clazz) {
118119
// TODO(yue9944882): consistency between bi-directional maps
119-
classesByGVK.put(new GroupVersionKind(group, version, kind), clazz);
120-
gvkByClasses.put(clazz, new GroupVersionKind(group, version, kind));
121-
122-
classesByGVR.put(new GroupVersionResource(group, version, resourceNamePlural), clazz);
123-
gvrByClasses.put(clazz, new GroupVersionResource(group, version, resourceNamePlural));
120+
classesByGVK.add(new GroupVersionKind(group, version, kind), clazz);
121+
classesByGVR.add(new GroupVersionResource(group, version, resourceNamePlural), clazz);
124122
}
125123

126124
/**
@@ -176,7 +174,7 @@ public static Class<?> getApiTypeClass(String apiGroupVersion, String kind) {
176174
* @return the api type class
177175
*/
178176
public static Class<?> getApiTypeClass(String group, String version, String kind) {
179-
Class<?> clazz = classesByGVK.get(new GroupVersionKind(group, version, kind));
177+
Class<?> clazz = classesByGVK.getByK(new GroupVersionKind(group, version, kind));
180178
if (clazz != null) {
181179
return clazz;
182180
}
@@ -190,7 +188,7 @@ public static Class<?> getApiTypeClass(String group, String version, String kind
190188
* @return the group version kind by class
191189
*/
192190
public static GroupVersionKind getGroupVersionKindByClass(Class<?> clazz) {
193-
return gvkByClasses.get(clazz);
191+
return classesByGVK.getByV(clazz);
194192
}
195193

196194
/**
@@ -200,7 +198,7 @@ public static GroupVersionKind getGroupVersionKindByClass(Class<?> clazz) {
200198
* @return the group version kind by class
201199
*/
202200
public static GroupVersionResource getGroupVersionResourceByClass(Class<?> clazz) {
203-
return gvrByClasses.get(clazz);
201+
return classesByGVR.getByV(clazz);
204202
}
205203

206204
/**
@@ -364,4 +362,22 @@ private static Pair<String, String> getApiVersion(String name) {
364362
.findFirst()
365363
.orElse(new MutablePair(null, name));
366364
}
365+
366+
static class BiDirectionalMap<K, V> {
367+
private Map<K, V> kvMap = new HashMap<>();
368+
private Map<V, K> vkMap = new HashMap<>();
369+
370+
synchronized void add(K k, V v) {
371+
kvMap.put(k, v);
372+
vkMap.put(v, k);
373+
}
374+
375+
synchronized V getByK(K k) {
376+
return kvMap.get(k);
377+
}
378+
379+
synchronized K getByV(V v) {
380+
return vkMap.get(v);
381+
}
382+
}
367383
}

util/src/test/java/io/kubernetes/client/util/ModelMapperTest.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,17 +54,18 @@ public void testAddingModel() {
5454
}
5555

5656
@Test
57-
public void testGetClassByKind() {
57+
public void testPreBuiltGetClassByKind() {
5858
assertEquals(
59-
new GroupVersionKind("", "v1", "Pod"), ModelMapper.getGroupVersionKindByClass(V1Pod.class));
60-
59+
new GroupVersionKind("", "v1", "Pod"),
60+
ModelMapper.preBuiltGetGroupVersionKindByClass(V1Pod.class));
6161
assertEquals(
62-
new GroupVersionKind("", "v1", "Pod"), ModelMapper.getGroupVersionKindByClass(V1Pod.class));
62+
new GroupVersionKind("", "v1", "Pod"),
63+
ModelMapper.preBuiltGetGroupVersionKindByClass(V1Pod.class));
6364
assertEquals(
6465
new GroupVersionKind("", "v1", "Deployment"),
65-
ModelMapper.getGroupVersionKindByClass(V1Deployment.class));
66+
ModelMapper.preBuiltGetGroupVersionKindByClass(V1Deployment.class));
6667
assertEquals(
6768
new GroupVersionKind("", "v1beta1", "CustomResourceDefinition"),
68-
ModelMapper.getGroupVersionKindByClass(V1beta1CustomResourceDefinition.class));
69+
ModelMapper.preBuiltGetGroupVersionKindByClass(V1beta1CustomResourceDefinition.class));
6970
}
7071
}

0 commit comments

Comments
 (0)