Skip to content

Commit c83df53

Browse files
authored
[8.12] [Transform] Do not log warning when triggering an ABORTING transform (#105234) (#105307)
* [Transform] Do not log warning when triggering an `ABORTING` transform (#105234) (cherry picked from commit 0cbc745) # Conflicts: # x-pack/plugin/transform/src/test/java/org/elasticsearch/xpack/transform/transforms/TransformTaskTests.java * Adapt to 8.12
1 parent 4ec35be commit c83df53

File tree

3 files changed

+131
-3
lines changed

3 files changed

+131
-3
lines changed

docs/changelog/105234.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
pr: 105234
2+
summary: Do not log warning when triggering an `ABORTING` transform
3+
area: Transform
4+
type: bug
5+
issues:
6+
- 105233

x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/transforms/TransformTask.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -426,11 +426,12 @@ public void triggered(TransformScheduler.Event event) {
426426
return;
427427
}
428428

429-
// ignore trigger if indexer is running or completely stopped
429+
// ignore trigger if indexer is running, stopping, stopped or aborting
430430
IndexerState indexerState = getIndexer().getState();
431431
if (IndexerState.INDEXING.equals(indexerState)
432432
|| IndexerState.STOPPING.equals(indexerState)
433-
|| IndexerState.STOPPED.equals(indexerState)) {
433+
|| IndexerState.STOPPED.equals(indexerState)
434+
|| IndexerState.ABORTING.equals(indexerState)) {
434435
logger.debug("[{}] indexer for transform has state [{}]. Ignoring trigger.", getTransformId(), indexerState);
435436
return;
436437
}
@@ -557,7 +558,12 @@ TransformTask setAuthState(AuthorizationState authState) {
557558
}
558559

559560
void initializeIndexer(ClientTransformIndexerBuilder indexerBuilder) {
560-
indexer.set(indexerBuilder.build(getThreadPool(), context));
561+
initializeIndexer(indexerBuilder.build(getThreadPool(), context));
562+
}
563+
564+
/** Visible for testing. */
565+
void initializeIndexer(ClientTransformIndexer indexer) {
566+
this.indexer.set(indexer);
561567
}
562568

563569
ThreadPool getThreadPool() {

x-pack/plugin/transform/src/test/java/org/elasticsearch/xpack/transform/transforms/TransformTaskTests.java

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.elasticsearch.xpack.transform.transforms.scheduling.TransformScheduler;
4949
import org.junit.After;
5050
import org.junit.Before;
51+
import org.mockito.verification.VerificationMode;
5152

5253
import java.time.Clock;
5354
import java.util.Collections;
@@ -58,14 +59,18 @@
5859
import static java.util.stream.Collectors.toList;
5960
import static org.hamcrest.Matchers.contains;
6061
import static org.hamcrest.Matchers.containsInAnyOrder;
62+
import static org.hamcrest.Matchers.containsString;
6163
import static org.hamcrest.Matchers.empty;
6264
import static org.hamcrest.Matchers.equalTo;
6365
import static org.hamcrest.Matchers.is;
6466
import static org.hamcrest.Matchers.nullValue;
6567
import static org.mockito.ArgumentMatchers.any;
68+
import static org.mockito.ArgumentMatchers.anyLong;
6669
import static org.mockito.Mockito.mock;
70+
import static org.mockito.Mockito.never;
6771
import static org.mockito.Mockito.times;
6872
import static org.mockito.Mockito.verify;
73+
import static org.mockito.Mockito.verifyNoInteractions;
6974
import static org.mockito.Mockito.when;
7075

7176
public class TransformTaskTests extends ESTestCase {
@@ -449,6 +454,117 @@ public void testApplyNewAuthState() {
449454
assertThat(transformTask.getContext().getAuthState(), is(nullValue()));
450455
}
451456

457+
private TransformTask createTransformTask(TransformConfig transformConfig, MockTransformAuditor auditor) {
458+
var threadPool = mock(ThreadPool.class);
459+
460+
var transformState = new TransformState(
461+
TransformTaskState.STARTED,
462+
IndexerState.STARTED,
463+
null,
464+
0L,
465+
"because",
466+
null,
467+
null,
468+
false,
469+
null
470+
);
471+
472+
return new TransformTask(
473+
42,
474+
"some_type",
475+
"some_action",
476+
TaskId.EMPTY_TASK_ID,
477+
createTransformTaskParams(transformConfig.getId()),
478+
transformState,
479+
new TransformScheduler(Clock.systemUTC(), threadPool, Settings.EMPTY),
480+
auditor,
481+
threadPool,
482+
Collections.emptyMap()
483+
);
484+
}
485+
486+
public void testInitializeIndexerWhenAlreadyInitialized() {
487+
var transformTask = createTransformTask(
488+
TransformConfigTests.randomTransformConfigWithoutHeaders(),
489+
MockTransformAuditor.createMockAuditor()
490+
);
491+
transformTask.initializeIndexer(mock(ClientTransformIndexerBuilder.class));
492+
IllegalStateException e = expectThrows(
493+
IllegalStateException.class,
494+
() -> transformTask.initializeIndexer(mock(ClientTransformIndexerBuilder.class))
495+
);
496+
assertThat(e.getMessage(), containsString("The object cannot be set twice!"));
497+
}
498+
499+
public void testTriggeredIsNoOpWhenTransformIdMismatch() {
500+
var transformId = randomAlphaOfLengthBetween(1, 10);
501+
var transformTask = createTransformTask(
502+
TransformConfigTests.randomTransformConfigWithoutHeaders(transformId),
503+
MockTransformAuditor.createMockAuditor()
504+
);
505+
var indexer = mock(ClientTransformIndexer.class);
506+
transformTask.initializeIndexer(indexer);
507+
transformTask.triggered(new TransformScheduler.Event("not-" + transformId, randomNonNegativeLong(), randomNonNegativeLong()));
508+
verifyNoInteractions(indexer);
509+
}
510+
511+
public void testTriggeredIsNoOpWhenIndexerIsUninitialized() {
512+
var transformId = randomAlphaOfLengthBetween(1, 10);
513+
var transformTask = createTransformTask(
514+
TransformConfigTests.randomTransformConfigWithoutHeaders(transformId),
515+
MockTransformAuditor.createMockAuditor()
516+
);
517+
transformTask.triggered(new TransformScheduler.Event(transformId, randomNonNegativeLong(), randomNonNegativeLong()));
518+
}
519+
520+
public void testTriggeredIsNoOpWhenStateIsWrong() {
521+
testTriggered(TransformTaskState.STOPPED, IndexerState.INDEXING, never());
522+
testTriggered(TransformTaskState.STOPPED, IndexerState.STOPPING, never());
523+
testTriggered(TransformTaskState.STOPPED, IndexerState.STOPPED, never());
524+
testTriggered(TransformTaskState.STOPPED, IndexerState.ABORTING, never());
525+
testTriggered(TransformTaskState.STOPPED, IndexerState.STARTED, never());
526+
testTriggered(TransformTaskState.FAILED, IndexerState.INDEXING, never());
527+
testTriggered(TransformTaskState.FAILED, IndexerState.STOPPING, never());
528+
testTriggered(TransformTaskState.FAILED, IndexerState.STOPPED, never());
529+
testTriggered(TransformTaskState.FAILED, IndexerState.ABORTING, never());
530+
testTriggered(TransformTaskState.FAILED, IndexerState.STARTED, never());
531+
testTriggered(TransformTaskState.STARTED, IndexerState.INDEXING, never());
532+
testTriggered(TransformTaskState.STARTED, IndexerState.STOPPING, never());
533+
testTriggered(TransformTaskState.STARTED, IndexerState.STOPPED, never());
534+
testTriggered(TransformTaskState.STARTED, IndexerState.ABORTING, never());
535+
}
536+
537+
public void testTriggeredActuallyTriggersIndexer() {
538+
testTriggered(TransformTaskState.STARTED, IndexerState.STARTED, times(1));
539+
}
540+
541+
private void testTriggered(TransformTaskState taskState, IndexerState indexerState, VerificationMode indexerVerificationMode) {
542+
String transformId = randomAlphaOfLengthBetween(1, 10);
543+
TransformState transformState = new TransformState(taskState, indexerState, null, 0L, "because", null, null, false, null);
544+
ThreadPool threadPool = mock(ThreadPool.class);
545+
TransformAuditor auditor = mock(TransformAuditor.class);
546+
TransformTask transformTask = new TransformTask(
547+
42,
548+
"some_type",
549+
"some_action",
550+
TaskId.EMPTY_TASK_ID,
551+
createTransformTaskParams(transformId),
552+
transformState,
553+
new TransformScheduler(mock(Clock.class), threadPool, Settings.EMPTY),
554+
auditor,
555+
threadPool,
556+
Collections.emptyMap()
557+
);
558+
559+
ClientTransformIndexer indexer = mock(ClientTransformIndexer.class);
560+
when(indexer.getState()).thenReturn(indexerState);
561+
transformTask.initializeIndexer(indexer);
562+
transformTask.triggered(new TransformScheduler.Event(transformId, randomNonNegativeLong(), randomNonNegativeLong()));
563+
564+
verify(indexer, indexerVerificationMode).maybeTriggerAsyncJob(anyLong());
565+
verifyNoInteractions(auditor, threadPool);
566+
}
567+
452568
private static TransformTaskParams createTransformTaskParams(String transformId) {
453569
return new TransformTaskParams(transformId, TransformConfigVersion.CURRENT, TimeValue.timeValueSeconds(10), false);
454570
}

0 commit comments

Comments
 (0)