@@ -10,7 +10,6 @@ import org.opensearch.ExceptionsHelper
10
10
import org.opensearch.Version
11
11
import org.opensearch.action.ActionListenerResponseHandler
12
12
import org.opensearch.action.support.GroupedActionListener
13
- import org.opensearch.alerting.listener.TimeOutWrappedListener
14
13
import org.opensearch.alerting.util.IndexUtils
15
14
import org.opensearch.cluster.metadata.IndexMetadata
16
15
import org.opensearch.cluster.node.DiscoveryNode
@@ -37,9 +36,9 @@ import org.opensearch.core.rest.RestStatus
37
36
import org.opensearch.index.IndexNotFoundException
38
37
import org.opensearch.index.seqno.SequenceNumbers
39
38
import org.opensearch.node.NodeClosedException
40
- import org.opensearch.threadpool.ThreadPool
41
39
import org.opensearch.transport.ActionNotFoundTransportException
42
40
import org.opensearch.transport.ConnectTransportException
41
+ import org.opensearch.transport.ReceiveTimeoutTransportException
43
42
import org.opensearch.transport.RemoteTransportException
44
43
import org.opensearch.transport.TransportException
45
44
import org.opensearch.transport.TransportRequestOptions
@@ -292,38 +291,37 @@ class DocumentLevelMonitorRunner : MonitorRunner() {
292
291
concreteIndicesSeenSoFar,
293
292
workflowRunContext
294
293
)
295
- val timeout = monitorCtx.docLevelMonitorExecutionMaxDuration
296
- val timeoutWrappedListener = TimeOutWrappedListener .wrapScheduledTimeout(
297
- threadPool = monitorCtx.threadPool!! ,
298
- timeout = timeout,
299
- executor = ThreadPool .Names .SAME ,
300
- actionListener = listener,
301
- timeoutConsumer = { timeoutListener ->
302
- logger.error(
303
- " Node ${node.key} timed out for doc level monitor id" +
304
- " ${monitor.id} named ${monitor.name} in fanout after {${timeout.minutes} } minutes"
305
- )
306
- listener.onResponse(
307
- DocLevelMonitorFanOutResponse (
308
- nodeId = node.key,
309
- executionId = executionId,
310
- monitorId = monitor.id,
311
- mutableMapOf ()
312
- )
313
- )
314
- }
315
- )
316
294
317
295
transportService.sendRequest(
318
296
node.value,
319
297
DocLevelMonitorFanOutAction .NAME ,
320
298
docLevelMonitorFanOutRequest,
321
- TransportRequestOptions .EMPTY ,
299
+ TransportRequestOptions
300
+ .builder()
301
+ .withTimeout(monitorCtx.docLevelMonitorExecutionMaxDuration)
302
+ .build(),
322
303
object : ActionListenerResponseHandler <DocLevelMonitorFanOutResponse >(
323
- timeoutWrappedListener ,
304
+ listener ,
324
305
responseReader
325
306
) {
326
307
override fun handleException (e : TransportException ) {
308
+ if (
309
+ e is ReceiveTimeoutTransportException
310
+ ) {
311
+ logger.warn(
312
+ " fan_out timed out in node ${localNode.id} for doc level monitor ${monitor.id} ," +
313
+ " attempting to collect partial results from other nodes. ExecutionId: $executionId "
314
+ )
315
+ listener.onResponse(
316
+ DocLevelMonitorFanOutResponse (
317
+ localNode.id,
318
+ executionId,
319
+ monitor.id,
320
+ mutableMapOf ()
321
+ )
322
+ )
323
+ return
324
+ }
327
325
val cause = e.unwrapCause()
328
326
if (cause is ConnectTransportException ||
329
327
(
@@ -341,19 +339,18 @@ class DocumentLevelMonitorRunner : MonitorRunner() {
341
339
localNode,
342
340
DocLevelMonitorFanOutAction .NAME ,
343
341
docLevelMonitorFanOutRequest,
344
- TransportRequestOptions .EMPTY ,
342
+ TransportRequestOptions
343
+ .builder()
344
+ .withTimeout(monitorCtx.docLevelMonitorExecutionMaxDuration)
345
+ .build(),
345
346
object :
346
347
ActionListenerResponseHandler <DocLevelMonitorFanOutResponse >(
347
- timeoutWrappedListener ,
348
+ listener ,
348
349
responseReader
349
350
) {
350
351
override fun handleException (e : TransportException ) {
351
- logger.error(
352
- " Fan out retry failed in node ${localNode.id} " +
353
- " for doc level monitor $monitor .id" ,
354
- e
355
- )
356
- timeoutWrappedListener.onResponse(
352
+ logger.error(" Fan out retry failed in node ${localNode.id} " , e)
353
+ listener.onResponse(
357
354
DocLevelMonitorFanOutResponse (
358
355
" " ,
359
356
" " ,
@@ -369,13 +366,13 @@ class DocumentLevelMonitorRunner : MonitorRunner() {
369
366
}
370
367
371
368
override fun handleResponse (response : DocLevelMonitorFanOutResponse ) {
372
- timeoutWrappedListener .onResponse(response)
369
+ listener .onResponse(response)
373
370
}
374
371
}
375
372
)
376
373
} else {
377
374
logger.error(" Fan out failed in node ${node.key} " , e)
378
- timeoutWrappedListener .onResponse(
375
+ listener .onResponse(
379
376
DocLevelMonitorFanOutResponse (
380
377
" " ,
381
378
" " ,
@@ -392,7 +389,7 @@ class DocumentLevelMonitorRunner : MonitorRunner() {
392
389
}
393
390
394
391
override fun handleResponse (response : DocLevelMonitorFanOutResponse ) {
395
- timeoutWrappedListener .onResponse(response)
392
+ listener .onResponse(response)
396
393
}
397
394
}
398
395
)
0 commit comments