Skip to content

Commit 4455206

Browse files
authored
Pass resourceType instead of resourceIndex to resourceSharingClient (#4333)
* Pass resourceType instead of resourceIndex to resourceSharingClient Signed-off-by: Craig Perkins <[email protected]> * Get all instances Signed-off-by: Craig Perkins <[email protected]> * Adapt to changes Signed-off-by: Craig Perkins <[email protected]> * Fix test Signed-off-by: Craig Perkins <[email protected]> * Fix test Signed-off-by: Craig Perkins <[email protected]> --------- Signed-off-by: Craig Perkins <[email protected]>
1 parent 7d25d56 commit 4455206

File tree

7 files changed

+34
-11
lines changed

7 files changed

+34
-11
lines changed

plugin/src/main/java/org/opensearch/ml/action/handler/MLSearchHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ public void search(SdkClient sdkClient, SearchRequest request, String tenantId,
155155
&& hasModelGroupIndex) {
156156
// RSC fast-path: get accessible group IDs → gate models (IDs or missing)
157157
var rsc = ResourceSharingClientAccessor.getInstance().getResourceSharingClient();
158-
rsc.getAccessibleResourceIds(CommonValue.ML_MODEL_GROUP_INDEX, ActionListener.wrap(ids -> {
158+
rsc.getAccessibleResourceIds(ML_MODEL_GROUP_RESOURCE_TYPE, ActionListener.wrap(ids -> {
159159
SearchSourceBuilder gated = Optional.ofNullable(request.source()).orElseGet(SearchSourceBuilder::new);
160160
gated.query(rewriteQueryBuilderRSC(gated.query(), ids)); // ids may be empty → "missing only"
161161
request.source(gated);

plugin/src/main/java/org/opensearch/ml/action/model_group/SearchModelGroupTransportAction.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
package org.opensearch.ml.action.model_group;
77

88
import static org.opensearch.ml.action.handler.MLSearchHandler.wrapRestActionListener;
9-
import static org.opensearch.ml.common.CommonValue.ML_MODEL_GROUP_INDEX;
109
import static org.opensearch.ml.common.CommonValue.ML_MODEL_GROUP_RESOURCE_TYPE;
1110
import static org.opensearch.ml.helper.ModelAccessControlHelper.shouldUseResourceAuthz;
1211
import static org.opensearch.ml.utils.RestActionUtils.wrapListenerToHandleSearchIndexNotFound;
@@ -116,7 +115,7 @@ private void addAccessibleModelGroupsFilterAndSearch(
116115
SearchSourceBuilder sourceBuilder = request.source() != null ? request.source() : new SearchSourceBuilder();
117116
var rsc = ResourceSharingClientAccessor.getInstance().getResourceSharingClient();
118117
// filter by accessible model-groups
119-
rsc.getAccessibleResourceIds(ML_MODEL_GROUP_INDEX, ActionListener.wrap(ids -> {
118+
rsc.getAccessibleResourceIds(ML_MODEL_GROUP_RESOURCE_TYPE, ActionListener.wrap(ids -> {
120119
sourceBuilder.query(modelAccessControlHelper.mergeWithAccessFilter(sourceBuilder.query(), ids));
121120
request.source(sourceBuilder);
122121
search(tenantId, request, wrappedListener);

plugin/src/main/java/org/opensearch/ml/helper/ModelAccessControlHelper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public void validateModelGroupAccess(User user, String modelGroupId, String acti
100100
}
101101
if (shouldUseResourceAuthz(ML_MODEL_GROUP_RESOURCE_TYPE)) {
102102
var resourceSharingClient = ResourceSharingClientAccessor.getInstance().getResourceSharingClient();
103-
resourceSharingClient.verifyAccess(modelGroupId, ML_MODEL_GROUP_INDEX, action, ActionListener.wrap(isAuthorized -> {
103+
resourceSharingClient.verifyAccess(modelGroupId, ML_MODEL_GROUP_RESOURCE_TYPE, action, ActionListener.wrap(isAuthorized -> {
104104
if (!isAuthorized) {
105105
listener
106106
.onFailure(
@@ -175,7 +175,7 @@ public void validateModelGroupAccess(
175175
}
176176
if (shouldUseResourceAuthz(ML_MODEL_GROUP_RESOURCE_TYPE)) {
177177
var resourceSharingClient = ResourceSharingClientAccessor.getInstance().getResourceSharingClient();
178-
resourceSharingClient.verifyAccess(modelGroupId, ML_MODEL_GROUP_INDEX, action, ActionListener.wrap(isAuthorized -> {
178+
resourceSharingClient.verifyAccess(modelGroupId, ML_MODEL_GROUP_RESOURCE_TYPE, action, ActionListener.wrap(isAuthorized -> {
179179
if (!isAuthorized) {
180180
listener
181181
.onFailure(

plugin/src/main/java/org/opensearch/ml/resources/MLResourceSharingExtension.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,22 @@
1717

1818
public class MLResourceSharingExtension implements ResourceSharingExtension {
1919

20+
private static final ResourceProvider MODEL_GROUP_PROVIDER = new ResourceProvider() {
21+
22+
@Override
23+
public String resourceType() {
24+
return ML_MODEL_GROUP_RESOURCE_TYPE;
25+
}
26+
27+
@Override
28+
public String resourceIndexName() {
29+
return ML_MODEL_GROUP_INDEX;
30+
}
31+
};
32+
2033
@Override
2134
public Set<ResourceProvider> getResourceProviders() {
22-
return Set.of(new ResourceProvider(ML_MODEL_GROUP_RESOURCE_TYPE, ML_MODEL_GROUP_INDEX));
35+
return Set.of(MODEL_GROUP_PROVIDER);
2336
}
2437

2538
@Override

plugin/src/test/java/org/opensearch/ml/action/model_group/SearchModelGroupTransportActionTests.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import static org.mockito.Mockito.never;
1313
import static org.mockito.Mockito.verify;
1414
import static org.mockito.Mockito.when;
15+
import static org.opensearch.ml.common.CommonValue.ML_MODEL_GROUP_RESOURCE_TYPE;
1516

1617
import java.util.Collections;
1718
import java.util.Set;
@@ -283,7 +284,7 @@ public void testResourceSharingEnabled_successPath_filtersByAccessibleIds_andCal
283284

284285
searchModelGroupTransportAction.doExecute(null, req, actionListener);
285286

286-
verify(rsc).getAccessibleResourceIds(eq(CommonValue.ML_MODEL_GROUP_INDEX), rscListenerCaptor.capture());
287+
verify(rsc).getAccessibleResourceIds(eq(ML_MODEL_GROUP_RESOURCE_TYPE), rscListenerCaptor.capture());
287288
rscListenerCaptor.getValue().onResponse(Set.of("idA", "idB"));
288289
future.complete(emptySearchDataObjectResponse());
289290

@@ -317,7 +318,7 @@ public void testResourceSharingEnabled_failSafePath_usesEmptySet_andCallsSdkClie
317318
searchModelGroupTransportAction.doExecute(null, req, actionListener);
318319

319320
// Simulate failure -> deny-all (empty set)
320-
verify(rsc).getAccessibleResourceIds(eq(CommonValue.ML_MODEL_GROUP_INDEX), rscListenerCaptor.capture());
321+
verify(rsc).getAccessibleResourceIds(eq(ML_MODEL_GROUP_RESOURCE_TYPE), rscListenerCaptor.capture());
321322
rscListenerCaptor.getValue().onFailure(new RuntimeException("boom"));
322323

323324
future.complete(emptySearchDataObjectResponse());

plugin/src/test/java/org/opensearch/ml/action/models/SearchModelTransportActionTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ public void test_RSC_featureEnabled_typeEnabled_callsGetAccessibleIds() throws E
370370
// Simulate async success with some accessible IDs
371371
l.onResponse(Set.of("model_group_IT"));
372372
return null;
373-
}).when(rsc).getAccessibleResourceIds(eq(CommonValue.ML_MODEL_GROUP_INDEX), rscListenerCaptor.capture());
373+
}).when(rsc).getAccessibleResourceIds(eq(CommonValue.ML_MODEL_GROUP_RESOURCE_TYPE), rscListenerCaptor.capture());
374374

375375
// The final remote search goes through client.search(...); return a normal response
376376
doAnswer(inv -> {
@@ -385,7 +385,7 @@ public void test_RSC_featureEnabled_typeEnabled_callsGetAccessibleIds() throws E
385385
searchModelTransportAction.doExecute(null, mlSearchActionRequest, actionListener);
386386

387387
// Verify RSC path was taken
388-
verify(rsc, times(1)).getAccessibleResourceIds(eq(CommonValue.ML_MODEL_GROUP_INDEX), any());
388+
verify(rsc, times(1)).getAccessibleResourceIds(eq(CommonValue.ML_MODEL_GROUP_RESOURCE_TYPE), any());
389389

390390
// Verify we executed the final search and returned
391391
verify(client, times(1)).search(any(), any());

plugin/src/test/java/org/opensearch/ml/resources/MLResourceSharingExtensionTests.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,17 @@ public void testGetResourceProviders_returnsUnmodifiableSet() {
6767
Set<ResourceProvider> providers = ext.getResourceProviders();
6868

6969
// Attempt to modify — Set.of(...) should be unmodifiable and throw
70-
providers.add(new ResourceProvider("some.Type", "some-index"));
70+
providers.add(new ResourceProvider() {
71+
@Override
72+
public String resourceType() {
73+
return "exampleType";
74+
}
75+
76+
@Override
77+
public String resourceIndexName() {
78+
return "some-index";
79+
}
80+
});
7181
}
7282

7383
@Test

0 commit comments

Comments
 (0)