不要急,总有办法的

为什么会出现通过task id取消任务不成功,以及为什么根据父任务id不能查到子任务?

Elasticsearch | 作者 kender | 发布于2020年07月17日 | 阅读数:4695

我在kibana中执行
GET /_cat/tasks?v

获取到结果

76EC~{WJ~P5~ZQEIGT{7_Y1.png


我现在想取消其中的一个指定的任务
#取消指定任务id的任务
POST _tasks/NpegKuCBSN6yxczJFwsbJQ:29635/_cance

结果如图,直接显示的是没有找到

L]QA`1546MFQ2{JBWH84VT.png

 通过父任务id查找其子任务,也是相同的问题,明明他有子任务的,还是没有返回值
GET /_tasks?parent_task_id=YQlkIfqMRm2tETj6RRKKCw:43048
结果没有返回值
{
"nodes" : { }
}


问题:为什么会出现通过task id取消任务不成功,以及为什么根据父任务id不能查到子任务?
非常感谢各位解题的大佬们
已邀请:

Charele - Cisco4321

赞同来自: juin kender

当你GET /_cat/tasks?v的时候,
ES实际上是执行了一个TransportListTasksAction这个动作(TransportAction的子类),
你看到的那个3任务就是因为你GET /_cat/tasks?v而产生的。
 
它执行很快,立即结束了,所以你跟本不可能再下次看到相同的task。
当你再执行同的,看到就是不同的任务了。
(所以你想cancel的时候会报错,因为它跟本就不存在)
 
再来看看task_id
NpegKuCBSN6yxczJFwsbJQ:29635
 
前面的后面的29635就是节点的任务id,它是递增的
如果你感兴趣,可以看下TaskManager类里面产生task的实现方法:
 
Task task = request.createTask(taskIdGenerator.incrementAndGet(), type, action, request.getParentTask(), headers);
 
taskIdGenerator.incrementAndGet()
这是一个全局的计数器,每个task都会有一个递增的id

Charele - Cisco4321

赞同来自:

如果你想看到效果,你可以写一个程序,插入100万条数据。
你就可以看到这个indices:data/write/bulk类型的任务了,如果它执行时间稍长,你就可以cancel

要回复问题请先登录注册