apache/beam · warning

SolaceIO.Write: Overriding MESSAGE_CALLBACK_ON_REACTOR to…

Error message

SolaceIO.Write: Overriding MESSAGE_CALLBACK_ON_REACTOR to true since LOWER_LATENCY mode was selected

What it means

With LOWER_LATENCY submission mode, the Solace connector forces MESSAGE_CALLBACK_ON_REACTOR to true. If the user explicitly set it to false, this WARN reports the override. Informational, not an error.

Solutions

  1. No action needed — the override is intentional for LOWER_LATENCY.
  2. If you need callback-on-reactor disabled, use HIGHER_THROUGHPUT or CUSTOM mode.
  3. Delete the explicit property to stop the warning.

Example fix

// before
props.setProperty(JCSMPProperties.MESSAGE_CALLBACK_ON_REACTOR, false);
.withSubmissionMode(SubmissionMode.LOWER_LATENCY);
// after
.withSubmissionMode(SubmissionMode.HIGHER_THROUGHPUT);
Defensive patterns

Strategy: validation

Validate before calling

if (mode == SubmissionMode.LOWER_LATENCY && userSetMessageCallbackOnReactorToFalse()) {
  LOG.warn("MESSAGE_CALLBACK_ON_REACTOR=false will be overridden to true");
}

Prevention

When it happens

Trigger: write().withSubmissionMode(LOWER_LATENCY) while JCSMPProperties.MESSAGE_CALLBACK_ON_REACTOR is set to false by the user.

Common situations: Users reusing high-throughput producer properties with a low-latency mode.

Understand the failure class

Background: Conflicting config options: "cannot be used together" — configuration validation errors across open-source libraries — this error's family across 162 libraries.

Related errors


AI-assisted analysis of apache/beam@12126d8942 (2026-09-13). Data as JSON: /api/errors/40f113d05df53137. Report an issue: GitHub.

Appendix: source

Thrown at sdks/java/io/solace/src/main/java/org/apache/beam/sdk/io/solace/broker/SessionService.java:245

          LOG.warn(
              "SolaceIO.Write: Overriding PUB_ACK_WINDOW_SIZE to {} since"
                  + " HIGHER_THROUGHPUT mode was selected",
              BATCHED_PUB_ACK_WINDOW);
        }

        // Override the properties
        // Use a dedicated thread for callbacks, increase the ack window size
        props.setProperty(JCSMPProperties.MESSAGE_CALLBACK_ON_REACTOR, false);
        props.setProperty(JCSMPProperties.PUB_ACK_WINDOW_SIZE, BATCHED_PUB_ACK_WINDOW);
        LOG.info(
            "SolaceIO.Write: Using HIGHER_THROUGHPUT mode, MESSAGE_CALLBACK_ON_REACTOR is FALSE,"
                + " PUB_ACK_WINDOW_SIZE is {}",
            BATCHED_PUB_ACK_WINDOW);
        break;
      case LOWER_LATENCY:
        // Check if it was set by user, show override warning
        if (msgCbProp != null && !msgCbProp) {
          LOG.warn(
              "SolaceIO.Write: Overriding MESSAGE_CALLBACK_ON_REACTOR to true since"
                  + " LOWER_LATENCY mode was selected");
        }

        if ((ackWindowSize != null && ackWindowSize != STREAMING_PUB_ACK_WINDOW)) {
          LOG.warn(
              "SolaceIO.Write: Overriding PUB_ACK_WINDOW_SIZE to {} since"
                  + " LOWER_LATENCY mode was selected",
              STREAMING_PUB_ACK_WINDOW);
        }

        // Override the properties
        // Send from the same thread where the produced is being called. This offers the lowest
        // latency, but a low throughput too.
        props.setProperty(JCSMPProperties.MESSAGE_CALLBACK_ON_REACTOR, true);
        props.setProperty(JCSMPProperties.PUB_ACK_WINDOW_SIZE, STREAMING_PUB_ACK_WINDOW);
        LOG.info(
            "SolaceIO.Write: Using LOWER_LATENCY mode, MESSAGE_CALLBACK_ON_REACTOR is TRUE,"

View on GitHub (pinned to 12126d8942)