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
- Change to .withSubmissionMode(SubmissionMode.HIGHER_THROUGHPUT) or LOWER_LATENCY for real workloads.
- Audit pipeline configs during promotion from test to prod so TESTING mode never ships.
- 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
- Gate TESTING mode behind test-only profiles/config flags.
- Add a startup check that fails (or alerts) on TESTING mode outside test scope.
- Default to HIGHER_THROUGHPUT/LOWER_LATENCY in template configs.
- Review this warning in staging logs before production rollout.
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
- SolaceIO.Write: Overriding MESSAGE_CALLBACK_ON_REACTOR to…
- SolaceIO.Write: Overriding MESSAGE_CALLBACK_ON_REACTOR to…
- SolaceIO.Write: Overriding PUB_ACK_WINDOW_SIZE to
- SolaceIO.Write: Overriding PUB_ACK_WINDOW_SIZE to
- A 'datagen' table requires either 'rows-per-second' (for…
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)