You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by "oscerd (via GitHub)" <gi...@apache.org> on 2026/08/24 10:10:56 UTC

[PR] Fix #1800: scope the SMT TypeConverter and CamelContext to the instance [camel-kafka-connector]

oscerd opened a new pull request, #1811:
URL: https://github.com/apache/camel-kafka-connector/pull/1811

   Fixes #1800.
   
   ## What
   
   Three related things in the bundled type-converter SMT.
   
   **1. `static` field assigned from an instance method**
   
   ```java
   private static TypeConverter typeConverter;
   ...
   public void configure(Map<String, ?> props) {
       ...
       typeConverter = getCamelContext().getTypeConverter();   // per-instance context
   }
   ```
   
   The last SMT instance configured in a plugin classloader repointed the converter used by every other
   connector's transforms in that worker. Now an instance field.
   
   **2. The per-instance `CamelContext` was never released**
   
   `CamelTransformSupport` creates a `DefaultCamelContext` per instance and `close()` was empty, so Kafka
   Connect re-instantiating transforms on every connector configuration update left those contexts
   accumulating for the worker's lifetime. `CamelTransformSupport` now exposes `stopCamelContext()` and
   `CamelTypeConverterTransform.close()` calls it. `CamelSinkTask` / `CamelSourceTask` already stop their
   context in `stop()`; this brings the SMTs in line.
   
   **3. The record value was formatted into the exception message**
   
   ```java
   throw new DataException(String.format("CamelTypeConverter was not able to convert value `%s` ...", originalValue, ...));
   ```
   
   Kafka Connect surfaces that message in the worker log and in the task status over the REST API. It now
   reports the source and target *type*, which is what is actually useful for diagnosing the failure.
   
   ## Tests
   
   `testConverterIsScopedToTheInstanceThatConfiguredIt` registers a converter for a test-local target type
   on **one** instance's context, then configures a second instance and asserts the first still converts.
   
   This distinction matters: my first attempt at this test passed with *and* without the fix, because
   each `DefaultCamelContext` resolves an equivalent converter, so overwriting the static field is not
   observable through the default registry — which is exactly why the existing four tests never caught
   it. Registering a converter on one context only makes it observable. Confirmed against the unpatched
   field:
   
   ```
   CamelTypeConverterTransformTest.testConverterIsScopedToTheInstanceThatConfiguredIt
     » DataException: CamelTypeConverter was not able to convert a value of type
       `java.lang.String` to target type of `Marker`
   ```
   
   `testConversionFailureDoesNotEchoTheRecordValue` likewise fails on the old message
   (`expected: <false> but was: <true>`), and `testCloseStopsTheCamelContext` covers the lifecycle.
   
   ## Verification
   
   - `core`: 105/105 tests pass (was 101, +4).
   - Full reactor build from the repository root (`./mvnw clean install -DskipTests`): BUILD SUCCESS.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] Fix #1800: scope the SMT TypeConverter and CamelContext to the instance [camel-kafka-connector]

Posted by "oscerd (via GitHub)" <gi...@apache.org>.
oscerd merged PR #1811:
URL: https://github.com/apache/camel-kafka-connector/pull/1811


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org