use of org.opensearch.transport.TransportResponse in project anomaly-detection by opensearch-project.
the class AnomalyResultTests method thresholdExceptionTestTemplate.
public void thresholdExceptionTestTemplate(Exception thrownException, String adID, Class<? extends Exception> expectedExceptionType, String error) {
TransportInterceptor failureTransportInterceptor = new TransportInterceptor() {
@Override
public AsyncSender interceptSender(AsyncSender sender) {
return new AsyncSender() {
@Override
public <T extends TransportResponse> void sendRequest(Transport.Connection connection, String action, TransportRequest request, TransportRequestOptions options, TransportResponseHandler<T> handler) {
if (ThresholdResultAction.NAME.equals(action)) {
sender.sendRequest(connection, action, request, options, rcfFailureHandler(handler, thrownException));
} else if (RCFResultAction.NAME.equals(action)) {
sender.sendRequest(connection, action, request, options, rcfResponseHandler(handler));
} else {
sender.sendRequest(connection, action, request, options, handler);
}
}
};
}
};
// need to close nodes created in the setUp nodes and create new nodes
// for the failure interceptor. Otherwise, we will get thread leak error.
tearDownTestNodes();
setupTestNodes(failureTransportInterceptor, Settings.EMPTY, AnomalyDetectorSettings.MAX_ENTITIES_PER_QUERY, AnomalyDetectorSettings.PAGE_SIZE);
// mock hashing ring response. This has to happen after setting up test nodes with the failure interceptor
Optional<DiscoveryNode> discoveryNode = Optional.of(testNodes[1].discoveryNode());
when(hashRing.getOwningNodeWithSameLocalAdVersionForRealtimeAD(any(String.class))).thenReturn(discoveryNode);
when(hashRing.getNodeByAddress(any(TransportAddress.class))).thenReturn(discoveryNode);
// register handlers on testNodes[1]
ActionFilters actionFilters = new ActionFilters(Collections.emptySet());
new RCFResultTransportAction(actionFilters, testNodes[1].transportService, normalModelManager, adCircuitBreakerService, hashRing);
new ThresholdResultTransportAction(actionFilters, testNodes[1].transportService, normalModelManager);
TransportService realTransportService = testNodes[0].transportService;
ClusterService realClusterService = testNodes[0].clusterService;
AnomalyResultTransportAction action = new AnomalyResultTransportAction(new ActionFilters(Collections.emptySet()), realTransportService, settings, client, stateManager, featureQuery, normalModelManager, hashRing, realClusterService, indexNameResolver, adCircuitBreakerService, adStats, threadPool, NamedXContentRegistry.EMPTY, adTaskManager);
AnomalyResultRequest request = new AnomalyResultRequest(adID, 100, 200);
PlainActionFuture<AnomalyResultResponse> listener = new PlainActionFuture<>();
action.doExecute(null, request, listener);
Throwable exception = assertException(listener, expectedExceptionType);
assertTrue("actual message: " + exception.getMessage(), exception.getMessage().contains(error));
}
use of org.opensearch.transport.TransportResponse in project anomaly-detection by opensearch-project.
the class EntityProfileTests method setUp.
@Override
public void setUp() throws Exception {
super.setUp();
state = new HashSet<EntityProfileName>();
state.add(EntityProfileName.STATE);
all = new HashSet<EntityProfileName>();
all.add(EntityProfileName.INIT_PROGRESS);
all.add(EntityProfileName.ENTITY_INFO);
all.add(EntityProfileName.MODELS);
model = new HashSet<EntityProfileName>();
model.add(EntityProfileName.MODELS);
hashRing = mock(HashRing.class);
actionFilters = mock(ActionFilters.class);
transportService = new TransportService(Settings.EMPTY, mock(Transport.class), null, TransportService.NOOP_TRANSPORT_INTERCEPTOR, x -> null, null, Collections.emptySet());
settings = Settings.EMPTY;
modelId = "yecrdnUBqurvo9uKU_d8_entity_app_0";
clusterService = mock(ClusterService.class);
cacheProvider = mock(CacheProvider.class);
EntityCache cache = mock(EntityCache.class);
updates = 1L;
when(cache.getTotalUpdates(anyString(), anyString())).thenReturn(updates);
when(cache.isActive(anyString(), anyString())).thenReturn(isActive);
when(cache.getLastActiveMs(anyString(), anyString())).thenReturn(lastActiveTimestamp);
Map<String, Long> modelSizeMap = new HashMap<>();
modelSizeMap.put(modelId, modelSize);
when(cache.getModelSize(anyString())).thenReturn(modelSizeMap);
when(cacheProvider.get()).thenReturn(cache);
action = new EntityProfileTransportAction(actionFilters, transportService, settings, hashRing, clusterService, cacheProvider);
future = new PlainActionFuture<>();
transportAddress1 = new TransportAddress(new InetSocketAddress(InetAddress.getByName("1.2.3.4"), 9300));
entity = Entity.createSingleAttributeEntity(categoryName, entityValue);
request = new EntityProfileRequest(detectorId, entity, state);
normalTransportInterceptor = new TransportInterceptor() {
@Override
public AsyncSender interceptSender(AsyncSender sender) {
return new AsyncSender() {
@Override
public <T extends TransportResponse> void sendRequest(Transport.Connection connection, String action, TransportRequest request, TransportRequestOptions options, TransportResponseHandler<T> handler) {
if (EntityProfileAction.NAME.equals(action)) {
sender.sendRequest(connection, action, request, options, entityProfileHandler(handler));
} else {
sender.sendRequest(connection, action, request, options, handler);
}
}
};
}
};
failureTransportInterceptor = new TransportInterceptor() {
@Override
public AsyncSender interceptSender(AsyncSender sender) {
return new AsyncSender() {
@Override
public <T extends TransportResponse> void sendRequest(Transport.Connection connection, String action, TransportRequest request, TransportRequestOptions options, TransportResponseHandler<T> handler) {
if (EntityProfileAction.NAME.equals(action)) {
sender.sendRequest(connection, action, request, options, entityFailureProfileandler(handler));
} else {
sender.sendRequest(connection, action, request, options, handler);
}
}
};
}
};
}
use of org.opensearch.transport.TransportResponse in project OpenSearch by opensearch-project.
the class ClearScrollController method cleanAllScrolls.
void cleanAllScrolls() {
for (final DiscoveryNode node : nodes) {
try {
Transport.Connection connection = searchTransportService.getConnection(null, node);
searchTransportService.sendClearAllScrollContexts(connection, new ActionListener<TransportResponse>() {
@Override
public void onResponse(TransportResponse response) {
onFreedContext(true);
}
@Override
public void onFailure(Exception e) {
onFailedFreedContext(e, node);
}
});
} catch (Exception e) {
onFailedFreedContext(e, node);
}
}
}
use of org.opensearch.transport.TransportResponse in project OpenSearch by opensearch-project.
the class TransportReplicationActionTests method testRetryOnReplicaWithRealTransport.
public void testRetryOnReplicaWithRealTransport() throws Exception {
final ShardId shardId = new ShardId("test", "_na_", 0);
final ClusterState initialState = state(shardId.getIndexName(), true, ShardRoutingState.STARTED, ShardRoutingState.STARTED);
final ShardRouting replica = initialState.getRoutingTable().shardRoutingTable(shardId).replicaShards().get(0);
final long primaryTerm = initialState.metadata().index(shardId.getIndexName()).primaryTerm(shardId.id());
// simulate execution of the node holding the replica
final ClusterState stateWithNodes = ClusterState.builder(initialState).nodes(DiscoveryNodes.builder(initialState.nodes()).localNodeId(replica.currentNodeId())).build();
setState(clusterService, stateWithNodes);
AtomicBoolean throwException = new AtomicBoolean(true);
final ReplicationTask task = maybeTask();
NamedWriteableRegistry namedWriteableRegistry = new NamedWriteableRegistry(Collections.emptyList());
final Transport transport = new MockNioTransport(Settings.EMPTY, Version.CURRENT, threadPool, new NetworkService(Collections.emptyList()), PageCacheRecycler.NON_RECYCLING_INSTANCE, namedWriteableRegistry, new NoneCircuitBreakerService());
transportService = new MockTransportService(Settings.EMPTY, transport, threadPool, TransportService.NOOP_TRANSPORT_INTERCEPTOR, x -> clusterService.localNode(), null, Collections.emptySet());
transportService.start();
transportService.acceptIncomingRequests();
AtomicBoolean calledSuccessfully = new AtomicBoolean(false);
TestAction action = new TestAction(Settings.EMPTY, "internal:testActionWithExceptions", transportService, clusterService, shardStateAction, threadPool) {
@Override
protected void shardOperationOnReplica(Request shardRequest, IndexShard replica, ActionListener<ReplicaResult> listener) {
ActionListener.completeWith(listener, () -> {
assertPhase(task, "replica");
if (throwException.get()) {
throw new RetryOnReplicaException(shardId, "simulation");
}
calledSuccessfully.set(true);
return new ReplicaResult();
});
}
};
final PlainActionFuture<TransportResponse> listener = new PlainActionFuture<>();
final Request request = new Request(shardId);
final long checkpoint = randomNonNegativeLong();
final long maxSeqNoOfUpdates = randomNonNegativeLong();
action.handleReplicaRequest(new TransportReplicationAction.ConcreteReplicaRequest<>(request, replica.allocationId().getId(), primaryTerm, checkpoint, maxSeqNoOfUpdates), createTransportChannel(listener), task);
if (listener.isDone()) {
// fail with the exception if there
listener.get();
fail("listener shouldn't be done");
}
// release the waiting
throwException.set(false);
// publish a new state (same as the old state with the version incremented)
setState(clusterService, stateWithNodes);
// Assert that the request was retried, this time successful
assertTrue("action should have been successfully called on retry but was not", calledSuccessfully.get());
transportService.stop();
}
use of org.opensearch.transport.TransportResponse in project OpenSearch by opensearch-project.
the class TransportReplicationActionTests method testRetryOnReplica.
/**
* test throwing a {@link org.opensearch.action.support.replication.TransportReplicationAction.RetryOnReplicaException}
* causes a retry
*/
public void testRetryOnReplica() throws Exception {
final ShardId shardId = new ShardId("test", "_na_", 0);
ClusterState state = state(shardId.getIndexName(), true, ShardRoutingState.STARTED, ShardRoutingState.STARTED);
final ShardRouting replica = state.getRoutingTable().shardRoutingTable(shardId).replicaShards().get(0);
final long primaryTerm = state.metadata().index(shardId.getIndexName()).primaryTerm(shardId.id());
// simulate execution of the node holding the replica
state = ClusterState.builder(state).nodes(DiscoveryNodes.builder(state.nodes()).localNodeId(replica.currentNodeId())).build();
setState(clusterService, state);
AtomicBoolean throwException = new AtomicBoolean(true);
final ReplicationTask task = maybeTask();
TestAction action = new TestAction(Settings.EMPTY, "internal:testActionWithExceptions", transportService, clusterService, shardStateAction, threadPool) {
@Override
protected void shardOperationOnReplica(Request shardRequest, IndexShard replica, ActionListener<ReplicaResult> listener) {
ActionListener.completeWith(listener, () -> {
assertPhase(task, "replica");
if (throwException.get()) {
throw new RetryOnReplicaException(shardId, "simulation");
}
return new ReplicaResult();
});
}
};
final PlainActionFuture<TransportResponse> listener = new PlainActionFuture<>();
final Request request = new Request(shardId);
final long checkpoint = randomNonNegativeLong();
final long maxSeqNoOfUpdatesOrDeletes = randomNonNegativeLong();
action.handleReplicaRequest(new TransportReplicationAction.ConcreteReplicaRequest<>(request, replica.allocationId().getId(), primaryTerm, checkpoint, maxSeqNoOfUpdatesOrDeletes), createTransportChannel(listener), task);
if (listener.isDone()) {
// fail with the exception if there
listener.get();
fail("listener shouldn't be done");
}
// no retry yet
List<CapturingTransport.CapturedRequest> capturedRequests = transport.getCapturedRequestsByTargetNodeAndClear().get(replica.currentNodeId());
assertThat(capturedRequests, nullValue());
// release the waiting
throwException.set(false);
setState(clusterService, state);
capturedRequests = transport.getCapturedRequestsByTargetNodeAndClear().get(replica.currentNodeId());
assertThat(capturedRequests, notNullValue());
assertThat(capturedRequests.size(), equalTo(1));
final CapturingTransport.CapturedRequest capturedRequest = capturedRequests.get(0);
assertThat(capturedRequest.action, equalTo("internal:testActionWithExceptions[r]"));
assertThat(capturedRequest.request, instanceOf(TransportReplicationAction.ConcreteReplicaRequest.class));
assertThat(((TransportReplicationAction.ConcreteReplicaRequest) capturedRequest.request).getGlobalCheckpoint(), equalTo(checkpoint));
assertThat(((TransportReplicationAction.ConcreteReplicaRequest) capturedRequest.request).getMaxSeqNoOfUpdatesOrDeletes(), equalTo(maxSeqNoOfUpdatesOrDeletes));
assertConcreteShardRequest(capturedRequest.request, request, replica.allocationId());
}
Aggregations