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:
Rushikesh Bankar 2024-08-10 14:53:16 +05:30 committed by GitHub
parent 483a03f26c
commit 4ef4e75c5d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 20 additions and 2 deletions

View File

@ -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());

View File

@ -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());
}
} }