apache/beam · warning

SolaceIO.Write: Overriding JCSMP properties for testing…

Error message

SolaceIO.Write: Overriding JCSMP properties for testing. **IF THIS IS AN ACTUAL PIPELINE, CHANGE THE SUBMISSION MODE TO HIGHER_THROUGHPUT OR LOWER_LATENCY.**

What it means

The TESTING submission mode forces single-threaded-friendly JCSMP settings (callback on reactor true, minimal ack window) for local tests. Because these settings are unsuitable for production, a prominent WARN tells developers to change the mode if running a real pipeline.

Solutions

  1. Change to .withSubmissionMode(SubmissionMode.HIGHER_THROUGHPUT) or LOWER_LATENCY for real workloads.
  2. Audit pipeline configs during promotion from test to prod so TESTING mode never ships.
  3. Use CUSTOM mode with explicit JCSMP properties if you need full control.

Example fix

// before
SolaceIO.write().withSubmissionMode(SubmissionMode.TESTING)
// after
SolaceIO.write().withSubmissionMode(SubmissionMode.HIGHER_THROUGHPUT)
Defensive patterns

Strategy: validation

Validate before calling

assert submissionMode != SubmissionMode.TESTING : "TESTING submission mode must not reach production pipelines";

Prevention

When it happens

Trigger: Calling SolaceIO.write() with .withSubmissionMode(SubmissionMode.TESTING) (or leaving it set) in a deployed pipeline.

Common situations: Prototype/test pipelines promoted to staging/production without removing the TESTING mode; throughput is throttled and messages ack very conservatively.

Understand the failure class

Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.

Related errors


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

Appendix: source

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

        // 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,"
                + " PUB_ACK_WINDOW_SIZE is {}",
            STREAMING_PUB_ACK_WINDOW);

        break;
      case CUSTOM:
        LOG.info(
            " SolaceIO.Write: Using the custom JCSMP properties set by the user. No property has"
                + " been overridden by the connector.");
        break;
      case TESTING:
        LOG.warn(
            "SolaceIO.Write: Overriding JCSMP properties for testing. **IF THIS IS AN"
                + " ACTUAL PIPELINE, CHANGE THE SUBMISSION MODE TO HIGHER_THROUGHPUT "
                + "OR LOWER_LATENCY.**");
        // Minimize multi-threading for testing
        props.setProperty(JCSMPProperties.MESSAGE_CALLBACK_ON_REACTOR, true);
        props.setProperty(JCSMPProperties.PUB_ACK_WINDOW_SIZE, TESTING_PUB_ACK_WINDOW);
        break;
      default:
        LOG.error(
            "SolaceIO.Write: no submission mode is selected. Set the submission mode to"
                + " HIGHER_THROUGHPUT or LOWER_LATENCY;");
    }
    return props;
  }
}

View on GitHub (pinned to 12126d8942)