{"record":{"id":"ea58239e4f713fc5","repo":"apache/druid","slug":"appenderatorsmanager-methods-should-only-called-by","errorCode":null,"errorMessage":"AppenderatorsManager methods should only called by services that run tasks directly.","messagePattern":"AppenderatorsManager methods should only called by services that run tasks directly\\.","errorType":"exception","errorClass":"UOE","httpStatus":null,"severity":"error","filePath":"server/src/main/java/org/apache/druid/segment/realtime/appenderator/DummyForInjectionAppenderatorsManager.java","lineNumber":86,"sourceCode":"      ObjectMapper objectMapper,\n      IndexIO indexIO,\n      IndexMerger indexMerger,\n      QueryRunnerFactoryConglomerate conglomerate,\n      DataSegmentAnnouncer segmentAnnouncer,\n      ServiceEmitter emitter,\n      QueryProcessingPool queryProcessingPool,\n      JoinableFactory joinableFactory,\n      Cache cache,\n      CacheConfig cacheConfig,\n      CachePopulatorStats cachePopulatorStats,\n      PolicyEnforcer policyEnforcer,\n      RowIngestionMeters rowIngestionMeters,\n      ParseExceptionHandler parseExceptionHandler,\n      CentralizedDatasourceSchemaConfig centralizedDatasourceSchemaConfig,\n      TaskIntervalUnlocker taskIntervalUnlocker\n  )\n  {\n    throw new UOE(ERROR_MSG);\n  }\n\n  @Override\n  public Appenderator createBatchAppenderatorForTask(\n      String taskId,\n      DataSchema schema,\n      AppenderatorConfig config,\n      TaskDirectory taskDirectory,\n      SegmentGenerationMetrics metrics,\n      DataSegmentPusher dataSegmentPusher,\n      ObjectMapper objectMapper,\n      IndexIO indexIO,\n      IndexMerger indexMerger,\n      RowIngestionMeters rowIngestionMeters,\n      ParseExceptionHandler parseExceptionHandler,\n      CentralizedDatasourceSchemaConfig centralizedDatasourceSchemaConfig\n  )\n  {","sourceCodeStart":68,"sourceCodeEnd":104,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/server/src/main/java/org/apache/druid/segment/realtime/appenderator/DummyForInjectionAppenderatorsManager.java#L68-L104","documentation":"DummyForInjectionAppenderatorsManager is a stub AppenderatorsManager whose every method throws UnsupportedOperationException. It exists only as an injection placeholder (e.g. for Peons in non-task mode) and must never be used to create realtime appenderators. This error means a service running tasks directly is absent — the wrong manager was injected into a component that expected a real manager (like UsedAppenderatorsManager or TaskAppenderatorsManager).","triggerScenarios":"Calling createRealtimeAppenderatorForTask on a DummyForInjectionAppenderatorsManager instance obtained from DI — typically when a component that should only run under the task runner receives the dummy binding because the runtime mode does not run tasks directly.","commonSituations":"Misconfigured Guice injection in tests or embedded setups; running code paths intended for Middle Manager/Peon environments where the dummy binding is active; upgrading Druid and adding a component that assumes a real AppenderatorsManager binding.","solutions":["Ensure the code path runs only in a service that executes tasks directly (Peon); restructure so task-side components get TaskAppenderatorsManager","Fix the Guice binding to install the appropriate AppenderatorsManager for the runtime mode","If in a test, inject a real or mock AppenderatorsManager instead of the dummy"],"exampleFix":"// before\nthis.appenderatorsManager = injector.getInstance(AppenderatorsManager.class); // resolves dummy\n// after\nthis.appenderatorsManager = injector.getInstance(TaskAppenderatorsManager.class); // real task-side manager","handlingStrategy":"type-guard","validationCode":"if (appenderatorsManager instanceof DummyForInjectionAppenderatorsManager) {\n  throw new IllegalStateException(\"Realtime appenderators unsupported in this runtime\");\n}","typeGuard":"boolean supportsTaskAppenderators(AppenderatorsManager m) {\n  return !(m instanceof DummyForInjectionAppenderatorsManager);\n}","tryCatchPattern":"try {\n  appenderatorsManager.createRealtimeAppenderatorForTask(...);\n} catch (UOE e) {\n  throw new IllegalStateException(\"Not running in a task-executing service; cannot create realtime appenderator\", e);\n}","preventionTips":["Check the execution mode before creating task appenderators","In Guice tests, assert the bound AppenderatorsManager is the real implementation","Keep task-only code paths out of coordinators/brokers/historicals","Document which Guice modules install which AppenderatorsManager"],"tags":["java","druid","dependency-injection","unsupported-operation"],"backgroundTag":"unsupported-operation","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}