mirror of https://github.com/apache/druid.git
make RTR idempotent to multiple run requests for same task, because higher level things in the indexing service require this behaviour
This commit is contained in:
parent
fbb1211cbc
commit
35f89d7232
|
@ -265,9 +265,6 @@ public class RemoteTaskRunner implements TaskRunner, TaskLogProvider
|
||||||
task.getId(),
|
task.getId(),
|
||||||
new RemoteTaskRunnerWorkItem(task, SettableFuture.<TaskStatus>create())
|
new RemoteTaskRunnerWorkItem(task, SettableFuture.<TaskStatus>create())
|
||||||
);
|
);
|
||||||
} else {
|
|
||||||
log.info("Bootstrap didn't find %s running. Running it again", task.getId());
|
|
||||||
run(task);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -284,8 +281,15 @@ public class RemoteTaskRunner implements TaskRunner, TaskLogProvider
|
||||||
@Override
|
@Override
|
||||||
public ListenableFuture<TaskStatus> run(final Task task)
|
public ListenableFuture<TaskStatus> run(final Task task)
|
||||||
{
|
{
|
||||||
if (runningTasks.containsKey(task.getId()) || pendingTasks.containsKey(task.getId())) {
|
RemoteTaskRunnerWorkItem runningTask = runningTasks.get(task.getId());
|
||||||
throw new ISE("Assigned a task[%s] that is already running or pending, WTF is happening?!", task.getId());
|
if (runningTask != null) {
|
||||||
|
log.info("Assigned a task[%s] that is already running, not doing anything", task.getId());
|
||||||
|
return runningTask.getResult();
|
||||||
|
}
|
||||||
|
RemoteTaskRunnerWorkItem pendingTask = pendingTasks.get(task.getId());
|
||||||
|
if (pendingTask != null) {
|
||||||
|
log.info("Assigned a task[%s] that is already pending, not doing anything", task.getId());
|
||||||
|
return pendingTask.getResult();
|
||||||
}
|
}
|
||||||
RemoteTaskRunnerWorkItem taskRunnerWorkItem = new RemoteTaskRunnerWorkItem(
|
RemoteTaskRunnerWorkItem taskRunnerWorkItem = new RemoteTaskRunnerWorkItem(
|
||||||
task,
|
task,
|
||||||
|
@ -686,9 +690,12 @@ public class RemoteTaskRunner implements TaskRunner, TaskLogProvider
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
sortedWorkers.addAll(zkWorkers.values());
|
sortedWorkers.addAll(zkWorkers.values());
|
||||||
|
final String configMinWorkerVer = workerSetupData.get().getMinVersion();
|
||||||
|
final String minWorkerVer = configMinWorkerVer == null ? config.getWorkerVersion() : configMinWorkerVer;
|
||||||
|
|
||||||
for (ZkWorker zkWorker : sortedWorkers) {
|
for (ZkWorker zkWorker : sortedWorkers) {
|
||||||
if (zkWorker.canRunTask(task) &&
|
if (zkWorker.canRunTask(task) &&
|
||||||
zkWorker.getWorker().getVersion().compareTo(workerSetupData.get().getMinVersion()) >= 0) {
|
zkWorker.getWorker().getVersion().compareTo(minWorkerVer) >= 0) {
|
||||||
return zkWorker;
|
return zkWorker;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@ import com.metamx.druid.indexing.common.config.IndexerZkConfig;
|
||||||
import org.joda.time.Duration;
|
import org.joda.time.Duration;
|
||||||
import org.skife.config.Config;
|
import org.skife.config.Config;
|
||||||
import org.skife.config.Default;
|
import org.skife.config.Default;
|
||||||
|
import org.skife.config.DefaultNull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
|
@ -35,4 +36,8 @@ public abstract class RemoteTaskRunnerConfig extends IndexerZkConfig
|
||||||
@Config("druid.curator.compression.enable")
|
@Config("druid.curator.compression.enable")
|
||||||
@Default("false")
|
@Default("false")
|
||||||
public abstract boolean enableCompression();
|
public abstract boolean enableCompression();
|
||||||
|
|
||||||
|
@Config("druid.indexer.worker.version")
|
||||||
|
@DefaultNull
|
||||||
|
public abstract String getWorkerVersion();
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,17 +109,6 @@ public class RemoteTaskRunnerTest
|
||||||
remoteTaskRunner.run(task);
|
remoteTaskRunner.run(task);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = ISE.class)
|
|
||||||
public void testExceptionThrownWithExistingTask() throws Exception
|
|
||||||
{
|
|
||||||
doSetup();
|
|
||||||
|
|
||||||
remoteTaskRunner.run(makeTask(TaskStatus.running("task")));
|
|
||||||
remoteTaskRunner.run(
|
|
||||||
makeTask(TaskStatus.running("task"))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testRunTooMuchZKData() throws Exception
|
public void testRunTooMuchZKData() throws Exception
|
||||||
{
|
{
|
||||||
|
@ -415,5 +404,11 @@ public class RemoteTaskRunnerTest
|
||||||
{
|
{
|
||||||
return 1000;
|
return 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getWorkerVersion()
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue