mirror of https://github.com/apache/druid.git
Fix the issue of missing implementation of IndexerTaskCountStatsProvider for peons (#16875)
Bug description: Peons to fail to start up when `WorkerTaskCountStatsMonitor` is used on MiddleManagers. This is because MiddleManagers pass on their properties to peons and peons are unable to find `IndexerTaskCountStatsProvider` as that is bound only for indexer nodes. Fix: Check if node is an indexer before trying to get instance of `IndexerTaskCountStatsProvider`.
This commit is contained in:
parent
483a03f26c
commit
4ef4e75c5d
|
@ -38,6 +38,7 @@ public class WorkerTaskCountStatsMonitor extends AbstractMonitor
|
||||||
private final String workerCategory;
|
private final String workerCategory;
|
||||||
private final String workerVersion;
|
private final String workerVersion;
|
||||||
private final boolean isMiddleManager;
|
private final boolean isMiddleManager;
|
||||||
|
private final boolean isIndexer;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public WorkerTaskCountStatsMonitor(
|
public WorkerTaskCountStatsMonitor(
|
||||||
|
@ -46,16 +47,22 @@ public class WorkerTaskCountStatsMonitor extends AbstractMonitor
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
this.isMiddleManager = nodeRoles.contains(NodeRole.MIDDLE_MANAGER);
|
this.isMiddleManager = nodeRoles.contains(NodeRole.MIDDLE_MANAGER);
|
||||||
|
this.isIndexer = nodeRoles.contains(NodeRole.INDEXER);
|
||||||
if (isMiddleManager) {
|
if (isMiddleManager) {
|
||||||
this.statsProvider = injector.getInstance(WorkerTaskCountStatsProvider.class);
|
this.statsProvider = injector.getInstance(WorkerTaskCountStatsProvider.class);
|
||||||
this.indexerStatsProvider = null;
|
this.indexerStatsProvider = null;
|
||||||
this.workerCategory = statsProvider.getWorkerCategory();
|
this.workerCategory = statsProvider.getWorkerCategory();
|
||||||
this.workerVersion = statsProvider.getWorkerVersion();
|
this.workerVersion = statsProvider.getWorkerVersion();
|
||||||
} else {
|
} else if (isIndexer) {
|
||||||
this.indexerStatsProvider = injector.getInstance(IndexerTaskCountStatsProvider.class);
|
this.indexerStatsProvider = injector.getInstance(IndexerTaskCountStatsProvider.class);
|
||||||
this.statsProvider = null;
|
this.statsProvider = null;
|
||||||
this.workerCategory = null;
|
this.workerCategory = null;
|
||||||
this.workerVersion = null;
|
this.workerVersion = null;
|
||||||
|
} else {
|
||||||
|
this.indexerStatsProvider = null;
|
||||||
|
this.statsProvider = null;
|
||||||
|
this.workerCategory = null;
|
||||||
|
this.workerVersion = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,7 +75,7 @@ public class WorkerTaskCountStatsMonitor extends AbstractMonitor
|
||||||
emit(emitter, "worker/taskSlot/idle/count", statsProvider.getWorkerIdleTaskSlotCount());
|
emit(emitter, "worker/taskSlot/idle/count", statsProvider.getWorkerIdleTaskSlotCount());
|
||||||
emit(emitter, "worker/taskSlot/total/count", statsProvider.getWorkerTotalTaskSlotCount());
|
emit(emitter, "worker/taskSlot/total/count", statsProvider.getWorkerTotalTaskSlotCount());
|
||||||
emit(emitter, "worker/taskSlot/used/count", statsProvider.getWorkerUsedTaskSlotCount());
|
emit(emitter, "worker/taskSlot/used/count", statsProvider.getWorkerUsedTaskSlotCount());
|
||||||
} else {
|
} else if (isIndexer) {
|
||||||
emit(emitter, "worker/task/running/count", indexerStatsProvider.getWorkerRunningTasks());
|
emit(emitter, "worker/task/running/count", indexerStatsProvider.getWorkerRunningTasks());
|
||||||
emit(emitter, "worker/task/assigned/count", indexerStatsProvider.getWorkerAssignedTasks());
|
emit(emitter, "worker/task/assigned/count", indexerStatsProvider.getWorkerAssignedTasks());
|
||||||
emit(emitter, "worker/task/completed/count", indexerStatsProvider.getWorkerCompletedTasks());
|
emit(emitter, "worker/task/completed/count", indexerStatsProvider.getWorkerCompletedTasks());
|
||||||
|
|
|
@ -309,6 +309,7 @@ public class WorkerTaskCountStatsMonitorTest
|
||||||
89L
|
89L
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testMonitorWithNulls()
|
public void testMonitorWithNulls()
|
||||||
{
|
{
|
||||||
|
@ -318,4 +319,14 @@ public class WorkerTaskCountStatsMonitorTest
|
||||||
monitor.doMonitor(emitter);
|
monitor.doMonitor(emitter);
|
||||||
Assert.assertEquals(0, emitter.getEvents().size());
|
Assert.assertEquals(0, emitter.getEvents().size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMonitorWithPeon()
|
||||||
|
{
|
||||||
|
final WorkerTaskCountStatsMonitor monitor =
|
||||||
|
new WorkerTaskCountStatsMonitor(injectorForPeon, ImmutableSet.of(NodeRole.PEON));
|
||||||
|
final StubServiceEmitter emitter = new StubServiceEmitter("service", "host");
|
||||||
|
monitor.doMonitor(emitter);
|
||||||
|
Assert.assertEquals(0, emitter.getEvents().size());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue