use of org.opensearch.cluster.service.ClusterService in project anomaly-detection by opensearch-project.
the class AnomalyResultTests method nodeNotConnectedExceptionTemplate.
/**
* Test whether we can handle NodeNotConnectedException when sending requests to
* remote nodes.
*
* @param isRCF whether RCF model node throws node connection
* exception or not
* @param temporary whether node has only temporary connection issue. If
* yes, we should not trigger hash ring rebuilding.
* @param numberOfBuildCall the number of expected hash ring build call
*/
private void nodeNotConnectedExceptionTemplate(boolean isRCF, boolean temporary, int numberOfBuildCall) {
ClusterService hackedClusterService = spy(clusterService);
TransportService exceptionTransportService = spy(transportService);
DiscoveryNode rcfNode = clusterService.state().nodes().getLocalNode();
DiscoveryNode thresholdNode = testNodes[1].discoveryNode();
if (isRCF) {
doThrow(new NodeNotConnectedException(rcfNode, "rcf node not connected")).when(exceptionTransportService).getConnection(same(rcfNode));
} else {
when(hashRing.getOwningNodeWithSameLocalAdVersionForRealtimeAD(eq(thresholdModelID))).thenReturn(Optional.of(thresholdNode));
when(hashRing.getNodeByAddress(any())).thenReturn(Optional.of(thresholdNode));
doThrow(new NodeNotConnectedException(rcfNode, "rcf node not connected")).when(exceptionTransportService).getConnection(same(thresholdNode));
}
if (!temporary) {
when(hackedClusterService.state()).thenReturn(ClusterState.builder(new ClusterName("test")).build());
}
// These constructors register handler in transport service
new RCFResultTransportAction(new ActionFilters(Collections.emptySet()), exceptionTransportService, normalModelManager, adCircuitBreakerService, hashRing);
AnomalyResultTransportAction action = new AnomalyResultTransportAction(new ActionFilters(Collections.emptySet()), exceptionTransportService, settings, client, stateManager, featureQuery, normalModelManager, hashRing, hackedClusterService, indexNameResolver, adCircuitBreakerService, adStats, threadPool, NamedXContentRegistry.EMPTY, adTaskManager);
AnomalyResultRequest request = new AnomalyResultRequest(adID, 100, 200);
PlainActionFuture<AnomalyResultResponse> listener = new PlainActionFuture<>();
action.doExecute(null, request, listener);
assertException(listener, AnomalyDetectionException.class);
if (!temporary) {
verify(hashRing, times(numberOfBuildCall)).buildCirclesForRealtimeAD();
verify(stateManager, never()).addPressure(any(String.class), any(String.class));
} else {
verify(hashRing, never()).buildCirclesForRealtimeAD();
verify(stateManager, times(numberOfBuildCall)).addPressure(any(String.class), any(String.class));
}
}
use of org.opensearch.cluster.service.ClusterService in project anomaly-detection by opensearch-project.
the class DeleteAnomalyDetectorActionTests method setUp.
@Override
@Before
public void setUp() throws Exception {
super.setUp();
ClusterService clusterService = mock(ClusterService.class);
ClusterSettings clusterSettings = new ClusterSettings(Settings.EMPTY, Collections.unmodifiableSet(new HashSet<>(Arrays.asList(AnomalyDetectorSettings.FILTER_BY_BACKEND_ROLES))));
when(clusterService.getClusterSettings()).thenReturn(clusterSettings);
adTaskManager = mock(ADTaskManager.class);
action = new DeleteAnomalyDetectorTransportAction(mock(TransportService.class), mock(ActionFilters.class), client(), clusterService, Settings.EMPTY, xContentRegistry(), adTaskManager);
response = new ActionListener<DeleteResponse>() {
@Override
public void onResponse(DeleteResponse deleteResponse) {
Assert.assertTrue(true);
}
@Override
public void onFailure(Exception e) {
Assert.assertTrue(true);
}
};
}
use of org.opensearch.cluster.service.ClusterService in project anomaly-detection by opensearch-project.
the class RCFPollingTests method setUp.
@Override
@Before
public void setUp() throws Exception {
super.setUp();
clusterService = mock(ClusterService.class);
hashRing = mock(HashRing.class);
transportAddress1 = new TransportAddress(new InetSocketAddress(InetAddress.getByName("1.2.3.4"), 9300));
manager = mock(ModelManager.class);
transportService = new TransportService(Settings.EMPTY, mock(Transport.class), null, TransportService.NOOP_TRANSPORT_INTERCEPTOR, x -> null, null, Collections.emptySet());
future = new PlainActionFuture<>();
request = new RCFPollingRequest(detectorId);
model0Id = SingleStreamModelIdMapper.getRcfModelId(detectorId, 0);
doAnswer(invocation -> {
Object[] args = invocation.getArguments();
@SuppressWarnings("unchecked") ActionListener<Long> listener = (ActionListener<Long>) args[2];
listener.onResponse(totalUpdates);
return null;
}).when(manager).getTotalUpdates(any(String.class), any(String.class), any());
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 (RCFPollingAction.NAME.equals(action)) {
sender.sendRequest(connection, action, request, options, rcfRollingHandler(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 (RCFPollingAction.NAME.equals(action)) {
sender.sendRequest(connection, action, request, options, rcfFailureRollingHandler(handler));
} else {
sender.sendRequest(connection, action, request, options, handler);
}
}
};
}
};
}
use of org.opensearch.cluster.service.ClusterService in project anomaly-detection by opensearch-project.
the class DeleteModelTransportActionTests method setUp.
@Override
@Before
public void setUp() throws Exception {
super.setUp();
ThreadPool threadPool = mock(ThreadPool.class);
ClusterService clusterService = mock(ClusterService.class);
localNodeID = "foo";
when(clusterService.localNode()).thenReturn(new DiscoveryNode(localNodeID, buildNewFakeTransportAddress(), Version.CURRENT));
when(clusterService.getClusterName()).thenReturn(new ClusterName("test"));
TransportService transportService = mock(TransportService.class);
ActionFilters actionFilters = mock(ActionFilters.class);
NodeStateManager nodeStateManager = mock(NodeStateManager.class);
ModelManager modelManager = mock(ModelManager.class);
FeatureManager featureManager = mock(FeatureManager.class);
CacheProvider cacheProvider = mock(CacheProvider.class);
EntityCache entityCache = mock(EntityCache.class);
when(cacheProvider.get()).thenReturn(entityCache);
ADTaskCacheManager adTaskCacheManager = mock(ADTaskCacheManager.class);
NodeStateManager stateManager = mock(NodeStateManager.class);
action = new DeleteModelTransportAction(threadPool, clusterService, transportService, actionFilters, nodeStateManager, modelManager, featureManager, cacheProvider, adTaskCacheManager);
}
use of org.opensearch.cluster.service.ClusterService in project anomaly-detection by opensearch-project.
the class DeleteTests method setUp.
@Override
@Before
public void setUp() throws Exception {
super.setUp();
node1 = "node1";
node2 = "node2";
nodename1 = "nodename1";
nodename2 = "nodename2";
DiscoveryNode discoveryNode1 = new DiscoveryNode(nodename1, node1, new TransportAddress(TransportAddress.META_ADDRESS, 9300), emptyMap(), emptySet(), Version.CURRENT);
DiscoveryNode discoveryNode2 = new DiscoveryNode(nodename2, node2, new TransportAddress(TransportAddress.META_ADDRESS, 9301), emptyMap(), emptySet(), Version.CURRENT);
List<DiscoveryNode> discoveryNodes = new ArrayList<DiscoveryNode>(2);
discoveryNodes.add(discoveryNode1);
discoveryNodes.add(discoveryNode2);
DeleteModelNodeResponse nodeResponse1 = new DeleteModelNodeResponse(discoveryNode1);
DeleteModelNodeResponse nodeResponse2 = new DeleteModelNodeResponse(discoveryNode2);
deleteModelResponse = new ArrayList<>();
deleteModelResponse.add(nodeResponse1);
deleteModelResponse.add(nodeResponse2);
failures = new ArrayList<>();
failures.add(new FailedNodeException("node3", "blah", new OpenSearchException("foo")));
response = new DeleteModelResponse(new ClusterName("Cluster"), deleteModelResponse, failures);
clusterService = mock(ClusterService.class);
when(clusterService.localNode()).thenReturn(discoveryNode1);
when(clusterService.state()).thenReturn(ClusterCreation.state(new ClusterName("test"), discoveryNode2, discoveryNode1, discoveryNodes));
transportService = mock(TransportService.class);
threadPool = mock(ThreadPool.class);
actionFilters = mock(ActionFilters.class);
Settings settings = Settings.builder().put("plugins.anomaly_detection.request_timeout", TimeValue.timeValueSeconds(10)).build();
task = mock(Task.class);
when(task.getId()).thenReturn(1000L);
client = mock(Client.class);
when(client.settings()).thenReturn(settings);
when(client.threadPool()).thenReturn(threadPool);
}
Aggregations