apache/druid · info

numMergeBuffers[ ] configured, that is ignored on Router

Error message

numMergeBuffers[%d] configured, that is ignored on Router

What it means

Log warning in RouterProcessingModule.getMergeBufferPool. The Router never performs merge operations, so it binds a DummyBlockingPool for merge buffers; a configured druid.processing.numMergeBuffers has no effect on the Router and the warning flags that the value is ignored.

Solutions

  1. Remove druid.processing.numMergeBuffers from the Router's runtime.properties.
  2. Keep merge-buffer sizing in per-node configs for historicals/peers only.
  3. No functional impact if left set — the DummyBlockingPool is used regardless; suppress noise by removing the key.
  4. Update deployment automation so processing keys are only emitted for query-executing roles.

Example fix

// before (router runtime.properties)
druid.processing.numMergeBuffers=2
// after (removed)
# druid.processing.numMergeBuffers not set on Router
Defensive patterns

Strategy: validation

Validate before calling

// Strip merge-buffer keys from Router configs
if (role == Role.ROUTER) {
  props.remove("druid.processing.numMergeBuffers");
}

Prevention

When it happens

Trigger: druid.processing.numMergeBuffers is explicitly set (isNumMergeBuffersConfigured() true) in the Router's runtime.properties or shared config while the Router module constructs its (no-op) merge buffer pool.

Common situations: Cluster-wide common.runtime.properties carrying historical tuning; deployment templates reusing the same processing block for all node types.

Related errors


AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07). Data as JSON: /api/errors/2f4999d0f405c73d. Report an issue: GitHub.

Appendix: source

Thrown at server/src/main/java/org/apache/druid/guice/RouterProcessingModule.java:83

    }
    return NoopQueryProcessingPool.instance();
  }

  @Provides
  @LazySingleton
  @Global
  public NonBlockingPool<ByteBuffer> getIntermediateResultsPool()
  {
    return DummyNonBlockingPool.instance();
  }

  @Provides
  @LazySingleton
  @Merging
  public BlockingPool<ByteBuffer> getMergeBufferPool(DruidProcessingConfig config)
  {
    if (config.isNumMergeBuffersConfigured()) {
      log.warn(
          "numMergeBuffers[%d] configured, that is ignored on Router",
          config.getNumMergeBuffers()
      );
    }
    return DummyBlockingPool.instance();
  }

  /**
   * Reservation pool injected with a dummy pool
   */
  @Provides
  @LazySingleton
  @Merging
  public GroupByResourcesReservationPool getGroupByResourcesReservationPool(
      @Merging BlockingPool<ByteBuffer> mergeBufferPool,
      GroupByQueryConfig groupByQueryConfig
  )
  {

View on GitHub (pinned to 9b90983fd2)