Skip to content

Commit 2fa9988

Browse files
authored
Add trace log for task cancellation (#55940)
Adding trace logs to the task cancellation and its tests to debug the test failure in #55875. Relates ##55875
1 parent 6e6a10f commit 2fa9988

File tree

3 files changed

+25
-10
lines changed

3 files changed

+25
-10
lines changed

server/src/main/java/org/elasticsearch/action/admin/cluster/node/tasks/cancel/TransportCancelTasksAction.java

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -113,13 +113,19 @@ protected void taskOperation(CancelTasksRequest request, CancellableTask cancell
113113
}
114114

115115
void cancelTaskAndDescendants(CancellableTask task, String reason, boolean waitForCompletion, ActionListener<Void> listener) {
116+
final TaskId taskId = task.taskInfo(clusterService.localNode().getId(), false).getTaskId();
116117
if (task.shouldCancelChildrenOnCancellation()) {
118+
logger.trace("cancelling task [{}] and its descendants", taskId);
117119
StepListener<Void> completedListener = new StepListener<>();
118120
GroupedActionListener<Void> groupedListener = new GroupedActionListener<>(ActionListener.map(completedListener, r -> null), 3);
119-
Collection<DiscoveryNode> childrenNodes =
120-
taskManager.startBanOnChildrenNodes(task.getId(), () -> groupedListener.onResponse(null));
121-
taskManager.cancel(task, reason, () -> groupedListener.onResponse(null));
122-
121+
Collection<DiscoveryNode> childrenNodes = taskManager.startBanOnChildrenNodes(task.getId(), () -> {
122+
logger.trace("child tasks of parent [{}] are completed", taskId);
123+
groupedListener.onResponse(null);
124+
});
125+
taskManager.cancel(task, reason, () -> {
126+
logger.trace("task [{}] is cancelled", taskId);
127+
groupedListener.onResponse(null);
128+
});
123129
StepListener<Void> banOnNodesListener = new StepListener<>();
124130
setBanOnNodes(reason, waitForCompletion, task, childrenNodes, banOnNodesListener);
125131
banOnNodesListener.whenComplete(groupedListener::onResponse, groupedListener::onFailure);
@@ -137,7 +143,7 @@ void cancelTaskAndDescendants(CancellableTask task, String reason, boolean waitF
137143
banOnNodesListener.whenComplete(r -> listener.onResponse(null), listener::onFailure);
138144
}
139145
} else {
140-
logger.trace("task {} doesn't have any children that should be cancelled", task.getId());
146+
logger.trace("task [{}] doesn't have any children that should be cancelled", taskId);
141147
if (waitForCompletion) {
142148
taskManager.cancel(task, reason, () -> listener.onResponse(null));
143149
} else {
@@ -153,23 +159,24 @@ private void setBanOnNodes(String reason, boolean waitForCompletion, Cancellable
153159
listener.onResponse(null);
154160
return;
155161
}
156-
logger.trace("cancelling task {} on child nodes {}", task.getId(), childNodes);
162+
final TaskId taskId = new TaskId(clusterService.localNode().getId(), task.getId());
163+
logger.trace("cancelling child tasks of [{}] on child nodes {}", taskId, childNodes);
157164
GroupedActionListener<Void> groupedListener =
158165
new GroupedActionListener<>(ActionListener.map(listener, r -> null), childNodes.size());
159-
final BanParentTaskRequest banRequest = BanParentTaskRequest.createSetBanParentTaskRequest(
160-
new TaskId(clusterService.localNode().getId(), task.getId()), reason, waitForCompletion);
166+
final BanParentTaskRequest banRequest = BanParentTaskRequest.createSetBanParentTaskRequest(taskId, reason, waitForCompletion);
161167
for (DiscoveryNode node : childNodes) {
162168
transportService.sendRequest(node, BAN_PARENT_ACTION_NAME, banRequest,
163169
new EmptyTransportResponseHandler(ThreadPool.Names.SAME) {
164170
@Override
165171
public void handleResponse(TransportResponse.Empty response) {
172+
logger.trace("sent ban for tasks with the parent [{}] to the node [{}]", taskId, node);
166173
groupedListener.onResponse(null);
167174
}
168175

169176
@Override
170177
public void handleException(TransportException exp) {
171178
assert ExceptionsHelper.unwrapCause(exp) instanceof ElasticsearchSecurityException == false;
172-
logger.warn("Cannot send ban for tasks with the parent [{}] to the node [{}]", banRequest.parentTaskId, node);
179+
logger.warn("Cannot send ban for tasks with the parent [{}] to the node [{}]", taskId, node);
173180
groupedListener.onFailure(exp);
174181
}
175182
});

server/src/main/java/org/elasticsearch/tasks/TaskManager.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,8 +234,12 @@ public Task unregister(Task task) {
234234
public Releasable registerChildNode(long taskId, DiscoveryNode node) {
235235
final CancellableTaskHolder holder = cancellableTasks.get(taskId);
236236
if (holder != null) {
237+
logger.trace("register child node [{}] task [{}]", node, taskId);
237238
holder.registerChildNode(node);
238-
return Releasables.releaseOnce(() -> holder.unregisterChildNode(node));
239+
return Releasables.releaseOnce(() -> {
240+
logger.trace("unregister child node [{}] task [{}]", node, taskId);
241+
holder.unregisterChildNode(node);
242+
});
239243
}
240244
return () -> {};
241245
}

server/src/test/java/org/elasticsearch/action/admin/cluster/node/tasks/CancellableTasksIT.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import org.elasticsearch.tasks.TaskInfo;
5353
import org.elasticsearch.tasks.TaskManager;
5454
import org.elasticsearch.test.ESIntegTestCase;
55+
import org.elasticsearch.test.junit.annotations.TestIssueLogging;
5556
import org.elasticsearch.threadpool.ThreadPool;
5657
import org.elasticsearch.transport.TransportException;
5758
import org.elasticsearch.transport.TransportResponseHandler;
@@ -79,6 +80,9 @@
7980
import static org.hamcrest.Matchers.hasSize;
8081
import static org.hamcrest.Matchers.instanceOf;
8182

83+
@TestIssueLogging(
84+
value = "org.elasticsearch.action.admin.cluster.node.tasks.cancel:TRACE,org.elasticsearch.tasks:TRACE",
85+
issueUrl = "https://github.com/elastic/elasticsearch/issues/55875")
8286
public class CancellableTasksIT extends ESIntegTestCase {
8387

8488
static int idGenerator = 0;

0 commit comments

Comments
 (0)