Skip to content

Commit 94e8ffd

Browse files
committed
wip
Signed-off-by: Attila Mészáros <[email protected]>
1 parent 3f95ac2 commit 94e8ffd

File tree

2 files changed

+47
-23
lines changed

2 files changed

+47
-23
lines changed

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

Lines changed: 46 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.javaoperatorsdk.operator.processing.event.source.informer;
22

3+
import java.util.Map;
34
import java.util.Optional;
45
import java.util.Set;
56
import java.util.UUID;
@@ -58,10 +59,11 @@ public class InformerEventSource<R extends HasMetadata, P extends HasMetadata>
5859
extends ManagedInformerEventSource<R, P, InformerEventSourceConfiguration<R>>
5960
implements ResourceEventHandler<R> {
6061

62+
public static final String PRIMARY_TO_SECONDARY_INDEX_NAME = "primaryToSecondary";
63+
6164
public static final String PREVIOUS_ANNOTATION_KEY = "javaoperatorsdk.io/previous";
6265
private static final Logger log = LoggerFactory.getLogger(InformerEventSource.class);
6366
// we need direct control for the indexer to propagate the just update resource also to the index
64-
private final PrimaryToSecondaryIndex<R> primaryToSecondaryIndex;
6567
private final PrimaryToSecondaryMapper<P> primaryToSecondaryMapper;
6668
private final String id = UUID.randomUUID().toString();
6769

@@ -96,11 +98,13 @@ private InformerEventSource(
9698
// If there is a primary to secondary mapper there is no need for primary to secondary index.
9799
primaryToSecondaryMapper = configuration.getPrimaryToSecondaryMapper();
98100
if (primaryToSecondaryMapper == null) {
99-
primaryToSecondaryIndex =
100-
// The index uses the secondary to primary mapper (always present) to build the index
101-
new DefaultPrimaryToSecondaryIndex<>(configuration.getSecondaryToPrimaryMapper());
102-
} else {
103-
primaryToSecondaryIndex = NOOPPrimaryToSecondaryIndex.getInstance();
101+
addIndexers(
102+
Map.of(
103+
PRIMARY_TO_SECONDARY_INDEX_NAME,
104+
(R r) ->
105+
configuration.getSecondaryToPrimaryMapper().toPrimaryResourceIDs(r).stream()
106+
.map(InformerEventSource::resourceIdToString)
107+
.toList()));
104108
}
105109

106110
final var informerConfig = configuration.getInformerConfig();
@@ -119,7 +123,7 @@ public void onAdd(R newResource) {
119123
resourceType().getSimpleName(),
120124
newResource.getMetadata().getResourceVersion());
121125
}
122-
primaryToSecondaryIndex.onAddOrUpdate(newResource);
126+
123127
onAddOrUpdate(
124128
Operation.ADD, newResource, null, () -> InformerEventSource.super.onAdd(newResource));
125129
}
@@ -134,7 +138,7 @@ public void onUpdate(R oldObject, R newObject) {
134138
newObject.getMetadata().getResourceVersion(),
135139
oldObject.getMetadata().getResourceVersion());
136140
}
137-
primaryToSecondaryIndex.onAddOrUpdate(newObject);
141+
138142
onAddOrUpdate(
139143
Operation.UPDATE,
140144
newObject,
@@ -150,7 +154,7 @@ public void onDelete(R resource, boolean b) {
150154
ResourceID.fromResource(resource),
151155
resourceType().getSimpleName());
152156
}
153-
primaryToSecondaryIndex.onDelete(resource);
157+
154158
super.onDelete(resource, b);
155159
if (acceptedByDeleteFilters(resource, b)) {
156160
propagateEvent(resource);
@@ -244,27 +248,42 @@ private void propagateEvent(R object) {
244248

245249
@Override
246250
public Set<R> getSecondaryResources(P primary) {
247-
Set<ResourceID> secondaryIDs;
251+
248252
if (useSecondaryToPrimaryIndex()) {
249-
var primaryResourceID = ResourceID.fromResource(primary);
250-
secondaryIDs = primaryToSecondaryIndex.getSecondaryResources(primaryResourceID);
253+
254+
var resources =
255+
byIndex(
256+
PRIMARY_TO_SECONDARY_INDEX_NAME,
257+
resourceIdToString(ResourceID.fromResource(primary)));
258+
251259
log.debug(
252-
"Using PrimaryToSecondaryIndex to find secondary resources for primary: {}. Found"
253-
+ " secondary ids: {} ",
254-
primaryResourceID,
255-
secondaryIDs);
260+
"Using informer primary to secondary index to find secondary resources for primary name:"
261+
+ " {} namespace: {}. Found {}",
262+
primary.getMetadata().getName(),
263+
primary.getMetadata().getNamespace(),
264+
resources.size());
265+
266+
return resources.stream()
267+
.map(
268+
r -> {
269+
Optional<R> resource =
270+
temporaryResourceCache.getResourceFromCache(ResourceID.fromResource(r));
271+
return resource.orElse(r);
272+
})
273+
.collect(Collectors.toSet());
274+
256275
} else {
257-
secondaryIDs = primaryToSecondaryMapper.toSecondaryResourceIDs(primary);
276+
Set<ResourceID> secondaryIDs = primaryToSecondaryMapper.toSecondaryResourceIDs(primary);
258277
log.debug(
259278
"Using PrimaryToSecondaryMapper to find secondary resources for primary: {}. Found"
260279
+ " secondary ids: {} ",
261280
primary,
262281
secondaryIDs);
282+
return secondaryIDs.stream()
283+
.map(this::get)
284+
.flatMap(Optional::stream)
285+
.collect(Collectors.toSet());
263286
}
264-
return secondaryIDs.stream()
265-
.map(this::get)
266-
.flatMap(Optional::stream)
267-
.collect(Collectors.toSet());
268287
}
269288

270289
@Override
@@ -279,7 +298,8 @@ public synchronized void handleRecentResourceCreate(ResourceID resourceID, R res
279298
}
280299

281300
private void handleRecentCreateOrUpdate(Operation operation, R newResource, R oldResource) {
282-
primaryToSecondaryIndex.onAddOrUpdate(newResource);
301+
// todo
302+
// primaryToSecondaryIndex.onAddOrUpdate(newResource);
283303
temporaryResourceCache.putResource(
284304
newResource,
285305
Optional.ofNullable(oldResource)
@@ -332,4 +352,8 @@ private enum Operation {
332352
ADD,
333353
UPDATE
334354
}
355+
356+
private static String resourceIdToString(ResourceID resourceID) {
357+
return resourceID.getName() + "#" + resourceID.getNamespace().orElse("$na");
358+
}
335359
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/startsecondaryaccess/StartupSecondaryAccessIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
class StartupSecondaryAccessIT {
1818

19-
public static final int SECONDARY_NUMBER = 100;
19+
public static final int SECONDARY_NUMBER = 200;
2020

2121
@RegisterExtension
2222
static LocallyRunOperatorExtension extension =

0 commit comments

Comments
 (0)