@Override public List<T> executeOnRegion(Object arguments, String regionName, Object... keyFilters) throws IOException { List<BasicTypes.EncodedValue> encodedFilters = Arrays.asList(keyFilters).stream() .map(valueEncoder::encodeValue).collect(Collectors.toList()); ClientProtocol.Message request = ClientProtocol.Message.newBuilder() .setExecuteFunctionOnRegionRequest(FunctionAPI.ExecuteFunctionOnRegionRequest.newBuilder() .setRegion(regionName).addAllKeyFilter(encodedFilters).setFunctionID(functionId)) .build(); final FunctionAPI.ExecuteFunctionOnRegionResponse response = channel .sendRequest(request, ClientProtocol.Message.MessageTypeCase.EXECUTEFUNCTIONONREGIONRESPONSE) .getExecuteFunctionOnRegionResponse(); return response.getResultsList().stream().map(value -> (T) valueEncoder.decodeValue(value)) .collect(Collectors.toList()); }
/** * <code>.org.apache.geode.internal.protocol.protobuf.v1.ExecuteFunctionOnRegionRequest executeFunctionOnRegionRequest = 18;</code> */ public Builder mergeExecuteFunctionOnRegionRequest(org.apache.geode.internal.protocol.protobuf.v1.FunctionAPI.ExecuteFunctionOnRegionRequest value) { if (executeFunctionOnRegionRequestBuilder_ == null) { if (messageTypeCase_ == 18 && messageType_ != org.apache.geode.internal.protocol.protobuf.v1.FunctionAPI.ExecuteFunctionOnRegionRequest.getDefaultInstance()) { messageType_ = org.apache.geode.internal.protocol.protobuf.v1.FunctionAPI.ExecuteFunctionOnRegionRequest.newBuilder((org.apache.geode.internal.protocol.protobuf.v1.FunctionAPI.ExecuteFunctionOnRegionRequest) messageType_) .mergeFrom(value).buildPartial(); } else { messageType_ = value; } onChanged(); } else { if (messageTypeCase_ == 18) { executeFunctionOnRegionRequestBuilder_.mergeFrom(value); } executeFunctionOnRegionRequestBuilder_.setMessage(value); } messageTypeCase_ = 18; return this; } /**
@Test public void requiresPermissions() throws Exception { final FunctionAPI.ExecuteFunctionOnRegionRequest request = FunctionAPI.ExecuteFunctionOnRegionRequest.newBuilder().setFunctionID(TEST_FUNCTION_ID) .setRegion(TEST_REGION).build(); SecurityService securityService = mock(SecurityService.class); when(securityService.isIntegratedSecurity()).thenReturn(true); doThrow(new NotAuthorizedException("we should catch this")).when(securityService) .authorize(Mockito.eq(ResourcePermissions.DATA_WRITE), any()); ServerMessageExecutionContext context = new ServerMessageExecutionContext(cacheStub, mock(ProtobufClientStatistics.class), securityService); expectedException.expect(NotAuthorizedException.class); operationHandler.process(serializationService, request, context); }
@java.lang.Override public Builder newBuilderForType() { return newBuilder(); } public static Builder newBuilder() {
@Test public void functionNotFound() throws Exception { final FunctionAPI.ExecuteFunctionOnRegionRequest request = FunctionAPI.ExecuteFunctionOnRegionRequest.newBuilder().setFunctionID(TEST_FUNCTION_ID) .setRegion(TEST_REGION).build(); FunctionService.unregisterFunction(TEST_FUNCTION_ID); expectedException.expect(IllegalArgumentException.class); final Result<FunctionAPI.ExecuteFunctionOnRegionResponse> result = operationHandler.process(serializationService, request, mockedMessageExecutionContext()); }
@Test public void failsOnUnknownRegion() throws Exception { final FunctionAPI.ExecuteFunctionOnRegionRequest request = FunctionAPI.ExecuteFunctionOnRegionRequest.newBuilder().setFunctionID(TEST_FUNCTION_ID) .setRegion(NOT_A_REGION).build(); expectedException.expect(RegionDestroyedException.class); final Result<FunctionAPI.ExecuteFunctionOnRegionResponse> result = operationHandler.process(serializationService, request, mockedMessageExecutionContext()); }