mirror of https://github.com/apache/druid.git
QueryCountStatsMonitor can be injected in the Peon (#10092)
* QueryCountStatsMonitor can be injected in the Peon This change fixes a dependency injection bug where there is a circular dependency on getting the MonitorScheduler when a user configures the QueryCountStatsMonitor to be used. * fix tests * Actually fix the tests this time
This commit is contained in:
parent
69f2b1ef00
commit
363d0d86be
|
@ -2703,7 +2703,7 @@ public class KafkaIndexTaskTest extends SeekableStreamIndexTaskTestBase
|
||||||
this::makeTimeseriesAndScanConglomerate,
|
this::makeTimeseriesAndScanConglomerate,
|
||||||
Execs.directExecutor(), // queryExecutorService
|
Execs.directExecutor(), // queryExecutorService
|
||||||
NoopJoinableFactory.INSTANCE,
|
NoopJoinableFactory.INSTANCE,
|
||||||
EasyMock.createMock(MonitorScheduler.class),
|
() -> EasyMock.createMock(MonitorScheduler.class),
|
||||||
new SegmentLoaderFactory(null, testUtils.getTestObjectMapper()),
|
new SegmentLoaderFactory(null, testUtils.getTestObjectMapper()),
|
||||||
testUtils.getTestObjectMapper(),
|
testUtils.getTestObjectMapper(),
|
||||||
testUtils.getTestIndexIO(),
|
testUtils.getTestIndexIO(),
|
||||||
|
|
|
@ -2963,7 +2963,7 @@ public class KinesisIndexTaskTest extends SeekableStreamIndexTaskTestBase
|
||||||
this::makeTimeseriesOnlyConglomerate,
|
this::makeTimeseriesOnlyConglomerate,
|
||||||
Execs.directExecutor(), // queryExecutorService
|
Execs.directExecutor(), // queryExecutorService
|
||||||
NoopJoinableFactory.INSTANCE,
|
NoopJoinableFactory.INSTANCE,
|
||||||
EasyMock.createMock(MonitorScheduler.class),
|
() -> EasyMock.createMock(MonitorScheduler.class),
|
||||||
new SegmentLoaderFactory(null, testUtils.getTestObjectMapper()),
|
new SegmentLoaderFactory(null, testUtils.getTestObjectMapper()),
|
||||||
testUtils.getTestObjectMapper(),
|
testUtils.getTestObjectMapper(),
|
||||||
testUtils.getTestIndexIO(),
|
testUtils.getTestIndexIO(),
|
||||||
|
|
|
@ -39,6 +39,7 @@ import org.apache.druid.indexing.common.actions.TaskActionClient;
|
||||||
import org.apache.druid.indexing.common.config.TaskConfig;
|
import org.apache.druid.indexing.common.config.TaskConfig;
|
||||||
import org.apache.druid.indexing.worker.IntermediaryDataManager;
|
import org.apache.druid.indexing.worker.IntermediaryDataManager;
|
||||||
import org.apache.druid.java.util.emitter.service.ServiceEmitter;
|
import org.apache.druid.java.util.emitter.service.ServiceEmitter;
|
||||||
|
import org.apache.druid.java.util.metrics.Monitor;
|
||||||
import org.apache.druid.java.util.metrics.MonitorScheduler;
|
import org.apache.druid.java.util.metrics.MonitorScheduler;
|
||||||
import org.apache.druid.query.QueryRunnerFactoryConglomerate;
|
import org.apache.druid.query.QueryRunnerFactoryConglomerate;
|
||||||
import org.apache.druid.segment.IndexIO;
|
import org.apache.druid.segment.IndexIO;
|
||||||
|
@ -57,6 +58,7 @@ import org.apache.druid.server.coordination.DataSegmentServerAnnouncer;
|
||||||
import org.apache.druid.timeline.DataSegment;
|
import org.apache.druid.timeline.DataSegment;
|
||||||
import org.joda.time.Interval;
|
import org.joda.time.Interval;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
@ -86,7 +88,8 @@ public class TaskToolbox
|
||||||
* because it may be unavailable, e. g. for batch tasks running in Spark or Hadoop.
|
* because it may be unavailable, e. g. for batch tasks running in Spark or Hadoop.
|
||||||
*/
|
*/
|
||||||
private final Provider<QueryRunnerFactoryConglomerate> queryRunnerFactoryConglomerateProvider;
|
private final Provider<QueryRunnerFactoryConglomerate> queryRunnerFactoryConglomerateProvider;
|
||||||
private final MonitorScheduler monitorScheduler;
|
@Nullable
|
||||||
|
private final Provider<MonitorScheduler> monitorSchedulerProvider;
|
||||||
private final ExecutorService queryExecutorService;
|
private final ExecutorService queryExecutorService;
|
||||||
private final JoinableFactory joinableFactory;
|
private final JoinableFactory joinableFactory;
|
||||||
private final SegmentLoader segmentLoader;
|
private final SegmentLoader segmentLoader;
|
||||||
|
@ -120,7 +123,7 @@ public class TaskToolbox
|
||||||
Provider<QueryRunnerFactoryConglomerate> queryRunnerFactoryConglomerateProvider,
|
Provider<QueryRunnerFactoryConglomerate> queryRunnerFactoryConglomerateProvider,
|
||||||
ExecutorService queryExecutorService,
|
ExecutorService queryExecutorService,
|
||||||
JoinableFactory joinableFactory,
|
JoinableFactory joinableFactory,
|
||||||
MonitorScheduler monitorScheduler,
|
@Nullable Provider<MonitorScheduler> monitorSchedulerProvider,
|
||||||
SegmentLoader segmentLoader,
|
SegmentLoader segmentLoader,
|
||||||
ObjectMapper jsonMapper,
|
ObjectMapper jsonMapper,
|
||||||
File taskWorkDir,
|
File taskWorkDir,
|
||||||
|
@ -151,7 +154,7 @@ public class TaskToolbox
|
||||||
this.queryRunnerFactoryConglomerateProvider = queryRunnerFactoryConglomerateProvider;
|
this.queryRunnerFactoryConglomerateProvider = queryRunnerFactoryConglomerateProvider;
|
||||||
this.queryExecutorService = queryExecutorService;
|
this.queryExecutorService = queryExecutorService;
|
||||||
this.joinableFactory = joinableFactory;
|
this.joinableFactory = joinableFactory;
|
||||||
this.monitorScheduler = monitorScheduler;
|
this.monitorSchedulerProvider = monitorSchedulerProvider;
|
||||||
this.segmentLoader = segmentLoader;
|
this.segmentLoader = segmentLoader;
|
||||||
this.jsonMapper = jsonMapper;
|
this.jsonMapper = jsonMapper;
|
||||||
this.taskWorkDir = taskWorkDir;
|
this.taskWorkDir = taskWorkDir;
|
||||||
|
@ -239,9 +242,34 @@ public class TaskToolbox
|
||||||
return joinableFactory;
|
return joinableFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
public MonitorScheduler getMonitorScheduler()
|
public MonitorScheduler getMonitorScheduler()
|
||||||
{
|
{
|
||||||
return monitorScheduler;
|
return monitorSchedulerProvider == null ? null : monitorSchedulerProvider.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a monitor to the monitorScheduler if it is configured
|
||||||
|
* @param monitor
|
||||||
|
*/
|
||||||
|
public void addMonitor(Monitor monitor)
|
||||||
|
{
|
||||||
|
MonitorScheduler scheduler = getMonitorScheduler();
|
||||||
|
if (scheduler != null) {
|
||||||
|
scheduler.addMonitor(monitor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a monitor to the monitorScheduler if it is configured
|
||||||
|
* @param monitor
|
||||||
|
*/
|
||||||
|
public void removeMonitor(Monitor monitor)
|
||||||
|
{
|
||||||
|
MonitorScheduler scheduler = getMonitorScheduler();
|
||||||
|
if (scheduler != null) {
|
||||||
|
scheduler.removeMonitor(monitor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ObjectMapper getJsonMapper()
|
public ObjectMapper getJsonMapper()
|
||||||
|
|
|
@ -74,7 +74,7 @@ public class TaskToolboxFactory
|
||||||
private final Provider<QueryRunnerFactoryConglomerate> queryRunnerFactoryConglomerateProvider;
|
private final Provider<QueryRunnerFactoryConglomerate> queryRunnerFactoryConglomerateProvider;
|
||||||
private final ExecutorService queryExecutorService;
|
private final ExecutorService queryExecutorService;
|
||||||
private final JoinableFactory joinableFactory;
|
private final JoinableFactory joinableFactory;
|
||||||
private final MonitorScheduler monitorScheduler;
|
private final Provider<MonitorScheduler> monitorSchedulerProvider;
|
||||||
private final SegmentLoaderFactory segmentLoaderFactory;
|
private final SegmentLoaderFactory segmentLoaderFactory;
|
||||||
private final ObjectMapper jsonMapper;
|
private final ObjectMapper jsonMapper;
|
||||||
private final IndexIO indexIO;
|
private final IndexIO indexIO;
|
||||||
|
@ -105,7 +105,7 @@ public class TaskToolboxFactory
|
||||||
Provider<QueryRunnerFactoryConglomerate> queryRunnerFactoryConglomerateProvider,
|
Provider<QueryRunnerFactoryConglomerate> queryRunnerFactoryConglomerateProvider,
|
||||||
@Processing ExecutorService queryExecutorService,
|
@Processing ExecutorService queryExecutorService,
|
||||||
JoinableFactory joinableFactory,
|
JoinableFactory joinableFactory,
|
||||||
MonitorScheduler monitorScheduler,
|
Provider<MonitorScheduler> monitorSchedulerProvider,
|
||||||
SegmentLoaderFactory segmentLoaderFactory,
|
SegmentLoaderFactory segmentLoaderFactory,
|
||||||
@Json ObjectMapper jsonMapper,
|
@Json ObjectMapper jsonMapper,
|
||||||
IndexIO indexIO,
|
IndexIO indexIO,
|
||||||
|
@ -135,7 +135,7 @@ public class TaskToolboxFactory
|
||||||
this.queryRunnerFactoryConglomerateProvider = queryRunnerFactoryConglomerateProvider;
|
this.queryRunnerFactoryConglomerateProvider = queryRunnerFactoryConglomerateProvider;
|
||||||
this.queryExecutorService = queryExecutorService;
|
this.queryExecutorService = queryExecutorService;
|
||||||
this.joinableFactory = joinableFactory;
|
this.joinableFactory = joinableFactory;
|
||||||
this.monitorScheduler = monitorScheduler;
|
this.monitorSchedulerProvider = monitorSchedulerProvider;
|
||||||
this.segmentLoaderFactory = segmentLoaderFactory;
|
this.segmentLoaderFactory = segmentLoaderFactory;
|
||||||
this.jsonMapper = jsonMapper;
|
this.jsonMapper = jsonMapper;
|
||||||
this.indexIO = Preconditions.checkNotNull(indexIO, "Null IndexIO");
|
this.indexIO = Preconditions.checkNotNull(indexIO, "Null IndexIO");
|
||||||
|
@ -169,7 +169,7 @@ public class TaskToolboxFactory
|
||||||
queryRunnerFactoryConglomerateProvider,
|
queryRunnerFactoryConglomerateProvider,
|
||||||
queryExecutorService,
|
queryExecutorService,
|
||||||
joinableFactory,
|
joinableFactory,
|
||||||
monitorScheduler,
|
monitorSchedulerProvider,
|
||||||
segmentLoaderFactory.manufacturate(taskWorkDir),
|
segmentLoaderFactory.manufacturate(taskWorkDir),
|
||||||
jsonMapper,
|
jsonMapper,
|
||||||
taskWorkDir,
|
taskWorkDir,
|
||||||
|
|
|
@ -327,7 +327,7 @@ public class AppenderatorDriverRealtimeIndexTask extends AbstractTask implements
|
||||||
);
|
);
|
||||||
|
|
||||||
// Set up metrics emission
|
// Set up metrics emission
|
||||||
toolbox.getMonitorScheduler().addMonitor(metricsMonitor);
|
toolbox.addMonitor(metricsMonitor);
|
||||||
|
|
||||||
// Delay firehose connection to avoid claiming input resources while the plumber is starting up.
|
// Delay firehose connection to avoid claiming input resources while the plumber is starting up.
|
||||||
final FirehoseFactory firehoseFactory = spec.getIOConfig().getFirehoseFactory();
|
final FirehoseFactory firehoseFactory = spec.getIOConfig().getFirehoseFactory();
|
||||||
|
@ -444,7 +444,7 @@ public class AppenderatorDriverRealtimeIndexTask extends AbstractTask implements
|
||||||
appenderator.close();
|
appenderator.close();
|
||||||
CloseQuietly.close(driver);
|
CloseQuietly.close(driver);
|
||||||
|
|
||||||
toolbox.getMonitorScheduler().removeMonitor(metricsMonitor);
|
toolbox.removeMonitor(metricsMonitor);
|
||||||
|
|
||||||
if (appenderatorsManager.shouldTaskMakeNodeAnnouncements()) {
|
if (appenderatorsManager.shouldTaskMakeNodeAnnouncements()) {
|
||||||
toolbox.getDataSegmentServerAnnouncer().unannounce();
|
toolbox.getDataSegmentServerAnnouncer().unannounce();
|
||||||
|
|
|
@ -378,7 +378,7 @@ public class RealtimeIndexTask extends AbstractTask
|
||||||
plumber.startJob();
|
plumber.startJob();
|
||||||
|
|
||||||
// Set up metrics emission
|
// Set up metrics emission
|
||||||
toolbox.getMonitorScheduler().addMonitor(metricsMonitor);
|
toolbox.addMonitor(metricsMonitor);
|
||||||
|
|
||||||
// Delay firehose connection to avoid claiming input resources while the plumber is starting up.
|
// Delay firehose connection to avoid claiming input resources while the plumber is starting up.
|
||||||
final FirehoseFactory firehoseFactory = spec.getIOConfig().getFirehoseFactory();
|
final FirehoseFactory firehoseFactory = spec.getIOConfig().getFirehoseFactory();
|
||||||
|
@ -473,7 +473,7 @@ public class RealtimeIndexTask extends AbstractTask
|
||||||
if (firehose != null) {
|
if (firehose != null) {
|
||||||
CloseQuietly.close(firehose);
|
CloseQuietly.close(firehose);
|
||||||
}
|
}
|
||||||
toolbox.getMonitorScheduler().removeMonitor(metricsMonitor);
|
toolbox.removeMonitor(metricsMonitor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -157,14 +157,12 @@ abstract class PartialSegmentGenerateTask<T extends GeneratedPartitionsReport> e
|
||||||
final FireDepartmentMetrics fireDepartmentMetrics = fireDepartmentForMetrics.getMetrics();
|
final FireDepartmentMetrics fireDepartmentMetrics = fireDepartmentForMetrics.getMetrics();
|
||||||
final RowIngestionMeters buildSegmentsMeters = new DropwizardRowIngestionMeters();
|
final RowIngestionMeters buildSegmentsMeters = new DropwizardRowIngestionMeters();
|
||||||
|
|
||||||
if (toolbox.getMonitorScheduler() != null) {
|
toolbox.addMonitor(
|
||||||
toolbox.getMonitorScheduler().addMonitor(
|
|
||||||
new RealtimeMetricsMonitor(
|
new RealtimeMetricsMonitor(
|
||||||
Collections.singletonList(fireDepartmentForMetrics),
|
Collections.singletonList(fireDepartmentForMetrics),
|
||||||
Collections.singletonMap(DruidMetrics.TASK_ID, new String[]{getId()})
|
Collections.singletonMap(DruidMetrics.TASK_ID, new String[]{getId()})
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
final ParallelIndexTuningConfig tuningConfig = ingestionSchema.getTuningConfig();
|
final ParallelIndexTuningConfig tuningConfig = ingestionSchema.getTuningConfig();
|
||||||
final PartitionsSpec partitionsSpec = tuningConfig.getGivenOrDefaultPartitionsSpec();
|
final PartitionsSpec partitionsSpec = tuningConfig.getGivenOrDefaultPartitionsSpec();
|
||||||
|
|
|
@ -296,14 +296,12 @@ public class SinglePhaseSubTask extends AbstractBatchIndexTask
|
||||||
new FireDepartment(dataSchema, new RealtimeIOConfig(null, null), null);
|
new FireDepartment(dataSchema, new RealtimeIOConfig(null, null), null);
|
||||||
final FireDepartmentMetrics fireDepartmentMetrics = fireDepartmentForMetrics.getMetrics();
|
final FireDepartmentMetrics fireDepartmentMetrics = fireDepartmentForMetrics.getMetrics();
|
||||||
|
|
||||||
if (toolbox.getMonitorScheduler() != null) {
|
toolbox.addMonitor(
|
||||||
toolbox.getMonitorScheduler().addMonitor(
|
|
||||||
new RealtimeMetricsMonitor(
|
new RealtimeMetricsMonitor(
|
||||||
Collections.singletonList(fireDepartmentForMetrics),
|
Collections.singletonList(fireDepartmentForMetrics),
|
||||||
Collections.singletonMap(DruidMetrics.TASK_ID, new String[]{getId()})
|
Collections.singletonMap(DruidMetrics.TASK_ID, new String[]{getId()})
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
final ParallelIndexTuningConfig tuningConfig = ingestionSchema.getTuningConfig();
|
final ParallelIndexTuningConfig tuningConfig = ingestionSchema.getTuningConfig();
|
||||||
final DynamicPartitionsSpec partitionsSpec = (DynamicPartitionsSpec) tuningConfig.getGivenOrDefaultPartitionsSpec();
|
final DynamicPartitionsSpec partitionsSpec = (DynamicPartitionsSpec) tuningConfig.getGivenOrDefaultPartitionsSpec();
|
||||||
|
|
|
@ -397,8 +397,7 @@ public abstract class SeekableStreamIndexTaskRunner<PartitionIdType, SequenceOff
|
||||||
null
|
null
|
||||||
);
|
);
|
||||||
FireDepartmentMetrics fireDepartmentMetrics = fireDepartmentForMetrics.getMetrics();
|
FireDepartmentMetrics fireDepartmentMetrics = fireDepartmentForMetrics.getMetrics();
|
||||||
toolbox.getMonitorScheduler()
|
toolbox.addMonitor(TaskRealtimeMetricsMonitorBuilder.build(task, fireDepartmentForMetrics, rowIngestionMeters));
|
||||||
.addMonitor(TaskRealtimeMetricsMonitorBuilder.build(task, fireDepartmentForMetrics, rowIngestionMeters));
|
|
||||||
|
|
||||||
final String lookupTier = task.getContextValue(RealtimeIndexTask.CTX_KEY_LOOKUP_TIER);
|
final String lookupTier = task.getContextValue(RealtimeIndexTask.CTX_KEY_LOOKUP_TIER);
|
||||||
final LookupNodeService lookupNodeService = lookupTier == null ?
|
final LookupNodeService lookupNodeService = lookupTier == null ?
|
||||||
|
|
|
@ -111,7 +111,7 @@ public class TaskToolboxTest
|
||||||
() -> mockQueryRunnerFactoryConglomerate,
|
() -> mockQueryRunnerFactoryConglomerate,
|
||||||
mockQueryExecutorService,
|
mockQueryExecutorService,
|
||||||
NoopJoinableFactory.INSTANCE,
|
NoopJoinableFactory.INSTANCE,
|
||||||
mockMonitorScheduler,
|
() -> mockMonitorScheduler,
|
||||||
mockSegmentLoaderFactory,
|
mockSegmentLoaderFactory,
|
||||||
ObjectMapper,
|
ObjectMapper,
|
||||||
mockIndexIO,
|
mockIndexIO,
|
||||||
|
|
|
@ -1594,7 +1594,7 @@ public class AppenderatorDriverRealtimeIndexTaskTest
|
||||||
() -> conglomerate,
|
() -> conglomerate,
|
||||||
Execs.directExecutor(), // queryExecutorService
|
Execs.directExecutor(), // queryExecutorService
|
||||||
NoopJoinableFactory.INSTANCE,
|
NoopJoinableFactory.INSTANCE,
|
||||||
EasyMock.createMock(MonitorScheduler.class),
|
() -> EasyMock.createMock(MonitorScheduler.class),
|
||||||
new SegmentLoaderFactory(null, testUtils.getTestObjectMapper()),
|
new SegmentLoaderFactory(null, testUtils.getTestObjectMapper()),
|
||||||
testUtils.getTestObjectMapper(),
|
testUtils.getTestObjectMapper(),
|
||||||
testUtils.getTestIndexIO(),
|
testUtils.getTestIndexIO(),
|
||||||
|
|
|
@ -981,7 +981,7 @@ public class RealtimeIndexTaskTest
|
||||||
() -> conglomerate,
|
() -> conglomerate,
|
||||||
Execs.directExecutor(), // queryExecutorService
|
Execs.directExecutor(), // queryExecutorService
|
||||||
NoopJoinableFactory.INSTANCE,
|
NoopJoinableFactory.INSTANCE,
|
||||||
EasyMock.createMock(MonitorScheduler.class),
|
() -> EasyMock.createMock(MonitorScheduler.class),
|
||||||
new SegmentLoaderFactory(null, testUtils.getTestObjectMapper()),
|
new SegmentLoaderFactory(null, testUtils.getTestObjectMapper()),
|
||||||
testUtils.getTestObjectMapper(),
|
testUtils.getTestObjectMapper(),
|
||||||
testUtils.getTestIndexIO(),
|
testUtils.getTestIndexIO(),
|
||||||
|
|
|
@ -665,7 +665,7 @@ public class TaskLifecycleTest
|
||||||
() -> queryRunnerFactoryConglomerate, // query runner factory conglomerate corporation unionized collective
|
() -> queryRunnerFactoryConglomerate, // query runner factory conglomerate corporation unionized collective
|
||||||
Execs.directExecutor(), // query executor service
|
Execs.directExecutor(), // query executor service
|
||||||
NoopJoinableFactory.INSTANCE,
|
NoopJoinableFactory.INSTANCE,
|
||||||
monitorScheduler, // monitor scheduler
|
() -> monitorScheduler, // monitor scheduler
|
||||||
new SegmentLoaderFactory(null, new DefaultObjectMapper()),
|
new SegmentLoaderFactory(null, new DefaultObjectMapper()),
|
||||||
MAPPER,
|
MAPPER,
|
||||||
INDEX_IO,
|
INDEX_IO,
|
||||||
|
|
Loading…
Reference in New Issue