apache/pulsar · error · IllegalArgumentException

Invalid Config: loadBalancerServiceUnitStateTombstoneDelayTi

Error message

Invalid Config: loadBalancerServiceUnitStateTombstoneDelayTimeInSeconds${tombstoneSecs} secs< loadBalancerInFlightServiceUnitStateWaitingTimeInMillis${inFlightMillis} millis

What it means

Error "Invalid Config: loadBalancerServiceUnitStateTombstoneDelayTimeInSeconds${tombstoneSecs} secs< loadBalancerInFlightServiceUnitStateWaitingTimeInMillis${inFlightMillis} millis" thrown in apache/pulsar.

Source

Thrown at pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/channel/ServiceUnitStateChannelImpl.java:210

        Jittery,
        Unstable
    }

    @VisibleForTesting
    public ServiceUnitStateChannelImpl(PulsarService pulsar) {
        this.pulsar = pulsar;
        this.config = pulsar.getConfig();
        this.brokerId = pulsar.getBrokerId();
        this.schema = Schema.JSON(ServiceUnitStateData.class);
        this.getOwnerRequests = new ConcurrentHashMap<>();
        this.cleanupJobs = new ConcurrentHashMap<>();
        this.stateChangeListeners = new StateChangeListeners();
        this.stateTombstoneDelayTimeInMillis = config.getLoadBalancerServiceUnitStateTombstoneDelayTimeInSeconds()
                * 1000;
        this.inFlightStateWaitingTimeInMillis = config.getLoadBalancerInFlightServiceUnitStateWaitingTimeInMillis();
        this.ownershipMonitorDelayTimeInSecs = config.getLoadBalancerServiceUnitStateMonitorIntervalInSeconds();
        if (stateTombstoneDelayTimeInMillis < inFlightStateWaitingTimeInMillis) {
            throw new IllegalArgumentException(
                    "Invalid Config: loadBalancerServiceUnitStateTombstoneDelayTimeInSeconds"
                            + stateTombstoneDelayTimeInMillis / 1000 + " secs"
                            + "< loadBalancerInFlightServiceUnitStateWaitingTimeInMillis"
                            + inFlightStateWaitingTimeInMillis + " millis");
        }
        this.maxCleanupDelayTimeInSecs = MAX_CLEAN_UP_DELAY_TIME_IN_SECS;
        this.minCleanupDelayTimeInSecs = MIN_CLEAN_UP_DELAY_TIME_IN_SECS;

        Map<ServiceUnitState, Counters> tmpOwnerLookUpCounters = new HashMap<>();
        Map<ServiceUnitState, Counters> tmpHandlerCounters = new HashMap<>();
        Map<EventType, Counters> tmpEventCounters = new HashMap<>();
        for (var state : ServiceUnitState.values()) {
            tmpOwnerLookUpCounters.put(state, new Counters());
            tmpHandlerCounters.put(state, new Counters());
        }
        for (var event : EventType.values()) {
            tmpEventCounters.put(event, new Counters());
        }

View on GitHub (pinned to 820761864e)

Solutions

  1. Raise loadBalancerServiceUnitStateTombstoneDelayTimeInSeconds above the in-flight wait time
  2. Lower loadBalancerInFlightServiceUnitStateWaitingTimeInMillis below the tombstone delay
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/channel/ServiceUnitStateChannelImpl.java:210 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of apache/pulsar@820761864e (2026-09-06). Data as JSON: /api/errors/e7e812aa76313509. Report an issue: GitHub.