3030import org .elasticsearch .index .reindex .ReindexRequest ;
3131import org .elasticsearch .injection .guice .Inject ;
3232import org .elasticsearch .tasks .Task ;
33+ import org .elasticsearch .tasks .TaskId ;
3334import org .elasticsearch .threadpool .ThreadPool ;
3435import org .elasticsearch .transport .TransportService ;
3536import org .elasticsearch .xpack .core .deprecation .DeprecatedIndexPredicate ;
@@ -76,6 +77,7 @@ protected void doExecute(
7677 ) {
7778 var sourceIndexName = request .getSourceIndex ();
7879 var destIndexName = generateDestIndexName (sourceIndexName );
80+ TaskId taskId = new TaskId (clusterService .localNode ().getId (), task .getId ());
7981 IndexMetadata sourceIndex = clusterService .state ().getMetadata ().index (sourceIndexName );
8082 Settings settingsBefore = sourceIndex .getSettings ();
8183
@@ -89,17 +91,17 @@ protected void doExecute(
8991 );
9092 }
9193
92- SubscribableListener .<AcknowledgedResponse >newForked (l -> setBlockWrites (sourceIndexName , l ))
93- .<AcknowledgedResponse >andThen (l -> deleteDestIfExists (destIndexName , l ))
94- .<AcknowledgedResponse >andThen (l -> createIndex (sourceIndex , destIndexName , l ))
95- .<BulkByScrollResponse >andThen (l -> reindex (sourceIndexName , destIndexName , l ))
96- .<AddIndexBlockResponse >andThen (l -> addBlockIfFromSource (WRITE , settingsBefore , destIndexName , l ))
97- .<AddIndexBlockResponse >andThen (l -> addBlockIfFromSource (READ_ONLY , settingsBefore , destIndexName , l ))
94+ SubscribableListener .<AcknowledgedResponse >newForked (l -> setBlockWrites (sourceIndexName , l , taskId ))
95+ .<AcknowledgedResponse >andThen (l -> deleteDestIfExists (destIndexName , l , taskId ))
96+ .<AcknowledgedResponse >andThen (l -> createIndex (sourceIndex , destIndexName , l , taskId ))
97+ .<BulkByScrollResponse >andThen (l -> reindex (sourceIndexName , destIndexName , l , taskId ))
98+ .<AddIndexBlockResponse >andThen (l -> addBlockIfFromSource (WRITE , settingsBefore , destIndexName , l , taskId ))
99+ .<AddIndexBlockResponse >andThen (l -> addBlockIfFromSource (READ_ONLY , settingsBefore , destIndexName , l , taskId ))
98100 .andThenApply (ignored -> new ReindexDataStreamIndexAction .Response (destIndexName ))
99101 .addListener (listener );
100102 }
101103
102- private void setBlockWrites (String sourceIndexName , ActionListener <AcknowledgedResponse > listener ) {
104+ private void setBlockWrites (String sourceIndexName , ActionListener <AcknowledgedResponse > listener , TaskId parentTaskId ) {
103105 logger .debug ("Setting write block on source index [{}]" , sourceIndexName );
104106 addBlockToIndex (WRITE , sourceIndexName , new ActionListener <>() {
105107 @ Override
@@ -121,18 +123,24 @@ public void onFailure(Exception e) {
121123 listener .onFailure (e );
122124 }
123125 }
124- });
126+ }, parentTaskId );
125127 }
126128
127- private void deleteDestIfExists (String destIndexName , ActionListener <AcknowledgedResponse > listener ) {
129+ private void deleteDestIfExists (String destIndexName , ActionListener <AcknowledgedResponse > listener , TaskId parentTaskId ) {
128130 logger .debug ("Attempting to delete index [{}]" , destIndexName );
129131 var deleteIndexRequest = new DeleteIndexRequest (destIndexName ).indicesOptions (IGNORE_MISSING_OPTIONS )
130132 .masterNodeTimeout (TimeValue .MAX_VALUE );
133+ deleteIndexRequest .setParentTask (parentTaskId );
131134 var errorMessage = String .format (Locale .ROOT , "Failed to acknowledge delete of index [%s]" , destIndexName );
132135 client .admin ().indices ().delete (deleteIndexRequest , failIfNotAcknowledged (listener , errorMessage ));
133136 }
134137
135- private void createIndex (IndexMetadata sourceIndex , String destIndexName , ActionListener <AcknowledgedResponse > listener ) {
138+ private void createIndex (
139+ IndexMetadata sourceIndex ,
140+ String destIndexName ,
141+ ActionListener <AcknowledgedResponse > listener ,
142+ TaskId parentTaskId
143+ ) {
136144 logger .debug ("Creating destination index [{}] for source index [{}]" , destIndexName , sourceIndex .getIndex ().getName ());
137145
138146 // override read-only settings if they exist
@@ -147,29 +155,32 @@ private void createIndex(IndexMetadata sourceIndex, String destIndexName, Action
147155 removeReadOnlyOverride ,
148156 Map .of ()
149157 );
158+ request .setParentTask (parentTaskId );
150159 var errorMessage = String .format (Locale .ROOT , "Could not create index [%s]" , request .getDestIndex ());
151160 client .execute (CreateIndexFromSourceAction .INSTANCE , request , failIfNotAcknowledged (listener , errorMessage ));
152161 }
153162
154- private void reindex (String sourceIndexName , String destIndexName , ActionListener <BulkByScrollResponse > listener ) {
163+ private void reindex (String sourceIndexName , String destIndexName , ActionListener <BulkByScrollResponse > listener , TaskId parentTaskId ) {
155164 logger .debug ("Reindex to destination index [{}] from source index [{}]" , destIndexName , sourceIndexName );
156165 var reindexRequest = new ReindexRequest ();
157166 reindexRequest .setSourceIndices (sourceIndexName );
158167 reindexRequest .getSearchRequest ().allowPartialSearchResults (false );
159168 reindexRequest .getSearchRequest ().source ().fetchSource (true );
160169 reindexRequest .setDestIndex (destIndexName );
170+ reindexRequest .setParentTask (parentTaskId );
161171 client .execute (ReindexAction .INSTANCE , reindexRequest , listener );
162172 }
163173
164174 private void addBlockIfFromSource (
165175 IndexMetadata .APIBlock block ,
166176 Settings settingsBefore ,
167177 String destIndexName ,
168- ActionListener <AddIndexBlockResponse > listener
178+ ActionListener <AddIndexBlockResponse > listener ,
179+ TaskId parentTaskId
169180 ) {
170181 if (settingsBefore .getAsBoolean (block .settingName (), false )) {
171182 var errorMessage = String .format (Locale .ROOT , "Add [%s] block to index [%s] was not acknowledged" , block .name (), destIndexName );
172- addBlockToIndex (block , destIndexName , failIfNotAcknowledged (listener , errorMessage ));
183+ addBlockToIndex (block , destIndexName , failIfNotAcknowledged (listener , errorMessage ), parentTaskId );
173184 } else {
174185 listener .onResponse (null );
175186 }
@@ -192,7 +203,14 @@ private static <U extends AcknowledgedResponse> ActionListener<U> failIfNotAckno
192203 });
193204 }
194205
195- private void addBlockToIndex (IndexMetadata .APIBlock block , String index , ActionListener <AddIndexBlockResponse > listener ) {
196- client .admin ().indices ().execute (TransportAddIndexBlockAction .TYPE , new AddIndexBlockRequest (block , index ), listener );
206+ private void addBlockToIndex (
207+ IndexMetadata .APIBlock block ,
208+ String index ,
209+ ActionListener <AddIndexBlockResponse > listener ,
210+ TaskId parentTaskId
211+ ) {
212+ AddIndexBlockRequest addIndexBlockRequest = new AddIndexBlockRequest (block , index );
213+ addIndexBlockRequest .setParentTask (parentTaskId );
214+ client .admin ().indices ().execute (TransportAddIndexBlockAction .TYPE , addIndexBlockRequest , listener );
197215 }
198216}
0 commit comments