{"record":{"id":"b35b41fdf28adccc","repo":"apache/beam","slug":"solaceio-write-overriding-message-callback-on-reactor-to","errorCode":null,"errorMessage":"SolaceIO.Write: Overriding MESSAGE_CALLBACK_ON_REACTOR to false since HIGHER_THROUGHPUT mode was selected","messagePattern":"SolaceIO\\.Write: Overriding MESSAGE_CALLBACK_ON_REACTOR to false since HIGHER_THROUGHPUT mode was selected","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"sdks/java/io/solace/src/main/java/org/apache/beam/sdk/io/solace/broker/SessionService.java","lineNumber":222,"sourceCode":"      // Make XMLProducer safe to access from several threads. This is the default value, setting\n      // it just in case.\n      props.setProperty(JCSMPProperties.PUB_MULTI_THREAD, true);\n    }\n\n    // PUB_ACK_WINDOW_SIZE heavily affects performance when publishing persistent\n    // messages. It can be a value between 1 and 255. This is the batch size for the ack\n    // received from Solace. A value of 1 will have the lowest latency, but a very low\n    // throughput and a monumental backpressure.\n\n    // Retrieve current values of the properties\n    Boolean msgCbProp = props.getBooleanProperty(JCSMPProperties.MESSAGE_CALLBACK_ON_REACTOR);\n    Integer ackWindowSize = props.getIntegerProperty(JCSMPProperties.PUB_ACK_WINDOW_SIZE);\n\n    switch (mode) {\n      case HIGHER_THROUGHPUT:\n        // Check if it was set by user, show override warning\n        if (msgCbProp != null && msgCbProp) {\n          LOG.warn(\n              \"SolaceIO.Write: Overriding MESSAGE_CALLBACK_ON_REACTOR to false since\"\n                  + \" HIGHER_THROUGHPUT mode was selected\");\n        }\n        if ((ackWindowSize != null && ackWindowSize != BATCHED_PUB_ACK_WINDOW)) {\n          LOG.warn(\n              \"SolaceIO.Write: Overriding PUB_ACK_WINDOW_SIZE to {} since\"\n                  + \" HIGHER_THROUGHPUT mode was selected\",\n              BATCHED_PUB_ACK_WINDOW);\n        }\n\n        // Override the properties\n        // Use a dedicated thread for callbacks, increase the ack window size\n        props.setProperty(JCSMPProperties.MESSAGE_CALLBACK_ON_REACTOR, false);\n        props.setProperty(JCSMPProperties.PUB_ACK_WINDOW_SIZE, BATCHED_PUB_ACK_WINDOW);\n        LOG.info(\n            \"SolaceIO.Write: Using HIGHER_THROUGHPUT mode, MESSAGE_CALLBACK_ON_REACTOR is FALSE,\"\n                + \" PUB_ACK_WINDOW_SIZE is {}\",\n            BATCHED_PUB_ACK_WINDOW);","sourceCodeStart":204,"sourceCodeEnd":240,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/io/solace/src/main/java/org/apache/beam/sdk/io/solace/broker/SessionService.java#L204-L240","documentation":"In Solace publisher SessionService, when the write submission mode is HIGHER_THROUGHPUT the connector forcibly sets MESSAGE_CALLBACK_ON_REACTOR to false. If the user had explicitly set that JCSMP property to true, this WARN notifies them their value is overridden. It is informational, not a failure.","triggerScenarios":"Calling write().withSubmissionMode(HIGHER_THROUGHPUT) while having set JCSMPProperties.MESSAGE_CALLBACK_ON_REACTOR=true in the session properties.","commonSituations":"Users copying session properties tuned for lower-latency consumers into a high-throughput producer config.","solutions":["No action needed — the connector intentionally overrides the property.","If callback-on-reactor behavior is required, switch the submission mode to LOWER_LATENCY instead.","Remove the explicit MESSAGE_CALLBACK_ON_REACTOR=true setting to silence the warning."],"exampleFix":"// before\nprops.setProperty(JCSMPProperties.MESSAGE_CALLBACK_ON_REACTOR, true);\nSolaceIO.write().withSubmissionMode(SubmissionMode.HIGHER_THROUGHPUT);\n// after: pick a mode consistent with the property\nSolaceIO.write().withSubmissionMode(SubmissionMode.LOWER_LATENCY);","handlingStrategy":"validation","validationCode":"Boolean msgCb = (Boolean) props.getIntegerProperty(JCSMPProperties.MESSAGE_CALLBACK_ON_REACTOR) != null;\nif (mode == SubmissionMode.HIGHER_THROUGHPUT && userSetMessageCallbackOnReactor()) {\n  LOG.warn(\"MESSAGE_CALLBACK_ON_REACTOR will be overridden by HIGHER_THROUGHPUT mode\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Don't set per-message JCSMP properties when using preset submission modes.","Keep a config checklist mapping each submission mode to its implied properties.","Search logs for 'Overriding' warnings during pipeline bring-up."],"tags":["java","solace","message-queue","configuration"],"backgroundTag":"conflicting-config-options","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}