This is an automated email from the ASF dual-hosted git repository.

oscerd pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-kafka-connector.git


The following commit(s) were added to refs/heads/main by this push:
     new dd3c1bc434 Fix #1786: Resolve open TODO/XXX comments in core module 
(#1789)
dd3c1bc434 is described below

commit dd3c1bc4346ee771829abcf1f9727d4df1f865ee
Author: Andrea Cosentino <[email protected]>
AuthorDate: Mon Jul 13 11:49:19 2026 +0200

    Fix #1786: Resolve open TODO/XXX comments in core module (#1789)
    
    1. sourcePartition key renamed from "filename" to "endpoint" for
       accuracy in a generic connector framework, TODO removed
    2. commitRecord cast guarded with instanceof check, XXX removed
       (cast is safe: Kafka Connect passes back the same SourceRecord
       from poll(), confirmed safe in Kafka 4.x per KAFKA-18294)
    3. BigDecimal header encoding XXX removed (behavior is correct,
       encoding is delegated to Kafka Connect's header converter)
    4. dumpRoutes made configurable via new camel.connector.dumpRoutes
       property (default: true for backward compatibility)
    5. Aggregation strategy rename TODO removed (renaming would break
       the camel.beans.aggregate config key used by existing configs)
    
    Signed-off-by: Andrea Cosentino <[email protected]>
    Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
---
 .../apache/camel/kafkaconnector/CamelConnectorConfig.java    |  6 +++++-
 .../camel/kafkaconnector/CamelSinkConnectorConfig.java       |  5 +++--
 .../java/org/apache/camel/kafkaconnector/CamelSinkTask.java  |  4 +++-
 .../camel/kafkaconnector/CamelSourceConnectorConfig.java     |  5 +++--
 .../org/apache/camel/kafkaconnector/CamelSourceTask.java     | 12 ++++++------
 .../camel/kafkaconnector/utils/CamelKafkaConnectMain.java    | 10 +++++++---
 6 files changed, 27 insertions(+), 15 deletions(-)

diff --git 
a/core/src/main/java/org/apache/camel/kafkaconnector/CamelConnectorConfig.java 
b/core/src/main/java/org/apache/camel/kafkaconnector/CamelConnectorConfig.java
index 11598a3b97..b2fbffd751 100644
--- 
a/core/src/main/java/org/apache/camel/kafkaconnector/CamelConnectorConfig.java
+++ 
b/core/src/main/java/org/apache/camel/kafkaconnector/CamelConnectorConfig.java
@@ -94,7 +94,11 @@ public abstract class CamelConnectorConfig extends 
AbstractConfig {
     public static final int 
CAMEL_CONNECTOR_IDEMPOTENCY_KAFKA_POLL_DURATION_DEFAULT = 100;
     public static final String 
CAMEL_CONNECTOR_IDEMPOTENCY_KAFKA_POLL_DURATION_CONF = 
"camel.idempotency.kafka.poll.duration.ms";
     public static final String  
CAMEL_CONNECTOR_IDEMPOTENCY_KAFKA_POLL_DURATION_DOC = "Sets the poll duration 
(in milliseconds) of the Kafka consumer";
-    
+
+    public static final Boolean CAMEL_CONNECTOR_DUMP_ROUTES_DEFAULT = true;
+    public static final String CAMEL_CONNECTOR_DUMP_ROUTES_CONF = 
"camel.connector.dumpRoutes";
+    public static final String CAMEL_CONNECTOR_DUMP_ROUTES_DOC = "Whether to 
dump Camel routes on startup";
+
     protected CamelConnectorConfig(ConfigDef definition, Map<?, ?> originals, 
Map<String, ?> configProviderProps, boolean doLog) {
         super(definition, originals, configProviderProps, doLog);
     }
diff --git 
a/core/src/main/java/org/apache/camel/kafkaconnector/CamelSinkConnectorConfig.java
 
b/core/src/main/java/org/apache/camel/kafkaconnector/CamelSinkConnectorConfig.java
index 04e766a252..e2fbfe8408 100644
--- 
a/core/src/main/java/org/apache/camel/kafkaconnector/CamelSinkConnectorConfig.java
+++ 
b/core/src/main/java/org/apache/camel/kafkaconnector/CamelSinkConnectorConfig.java
@@ -74,8 +74,9 @@ public class CamelSinkConnectorConfig extends 
CamelConnectorConfig {
         .define(CAMEL_CONNECTOR_IDEMPOTENCY_KAFKA_POLL_DURATION_CONF, 
Type.INT, CAMEL_CONNECTOR_IDEMPOTENCY_KAFKA_POLL_DURATION_DEFAULT, 
Importance.LOW, CAMEL_CONNECTOR_IDEMPOTENCY_KAFKA_POLL_DURATION_DOC)
         .define(CAMEL_CONNECTOR_REMOVE_HEADERS_PATTERN_CONF, Type.STRING, 
CAMEL_CONNECTOR_REMOVE_HEADERS_PATTERN_DEFAULT, Importance.MEDIUM, 
CAMEL_CONNECTOR_REMOVE_HEADERS_PATTERN_DOC)
         .define(CAMEL_CONNECTOR_MAP_PROPERTIES_CONF, Type.BOOLEAN, 
CAMEL_CONNECTOR_MAP_PROPERTIES_DEFAULT, Importance.MEDIUM, 
CAMEL_CONNECTOR_MAP_PROPERTIES_DOC)
-        .define(CAMEL_CONNECTOR_MAP_HEADERS_CONF, Type.BOOLEAN, 
CAMEL_CONNECTOR_MAP_HEADERS_DEFAULT, Importance.MEDIUM, 
CAMEL_CONNECTOR_MAP_HEADERS_DOC);
-    
+        .define(CAMEL_CONNECTOR_MAP_HEADERS_CONF, Type.BOOLEAN, 
CAMEL_CONNECTOR_MAP_HEADERS_DEFAULT, Importance.MEDIUM, 
CAMEL_CONNECTOR_MAP_HEADERS_DOC)
+        .define(CAMEL_CONNECTOR_DUMP_ROUTES_CONF, Type.BOOLEAN, 
CAMEL_CONNECTOR_DUMP_ROUTES_DEFAULT, Importance.LOW, 
CAMEL_CONNECTOR_DUMP_ROUTES_DOC);
+
     public CamelSinkConnectorConfig(ConfigDef config, Map<String, String> 
parsedConfig) {
         super(config, parsedConfig);
     }
diff --git 
a/core/src/main/java/org/apache/camel/kafkaconnector/CamelSinkTask.java 
b/core/src/main/java/org/apache/camel/kafkaconnector/CamelSinkTask.java
index 296a145d36..b29f429267 100644
--- a/core/src/main/java/org/apache/camel/kafkaconnector/CamelSinkTask.java
+++ b/core/src/main/java/org/apache/camel/kafkaconnector/CamelSinkTask.java
@@ -114,7 +114,8 @@ public class CamelSinkTask extends SinkTask {
             final String headersRemovePattern = 
config.getString(CamelSinkConnectorConfig.CAMEL_CONNECTOR_REMOVE_HEADERS_PATTERN_CONF);
             mapProperties = 
config.getBoolean(CamelSinkConnectorConfig.CAMEL_CONNECTOR_MAP_PROPERTIES_CONF);
             mapHeaders = 
config.getBoolean(CamelSinkConnectorConfig.CAMEL_CONNECTOR_MAP_HEADERS_CONF);
-            
+            final boolean dumpRoutes = 
config.getBoolean(CamelSinkConnectorConfig.CAMEL_CONNECTOR_DUMP_ROUTES_CONF);
+
             CamelContext camelContext = new DefaultCamelContext();
             // componentSchema can legitimately be null in case of kamelet 
connectors, in that case KAMELET_SINK_TEMPLATE_PARAMETERS_PREFIX + "toUrl" 
property is ignored
             if (remoteUrl == null && componentSchema != null) {
@@ -152,6 +153,7 @@ public class CamelSinkTask extends SinkTask {
                 
.withIdempotentRepositoryKafkaMaxCacheSize(idempotentRepositoryKafkaMaxCacheSize)
                 
.withIdempotentRepositoryKafkaPollDuration(idempotentRepositoryKafkaPollDuration)
                 .withHeadersExcludePattern(headersRemovePattern)
+                .withDumpRoutes(dumpRoutes)
                 .build(camelContext);
 
             cms.start();
diff --git 
a/core/src/main/java/org/apache/camel/kafkaconnector/CamelSourceConnectorConfig.java
 
b/core/src/main/java/org/apache/camel/kafkaconnector/CamelSourceConnectorConfig.java
index 46310862b1..e6fa1580fd 100644
--- 
a/core/src/main/java/org/apache/camel/kafkaconnector/CamelSourceConnectorConfig.java
+++ 
b/core/src/main/java/org/apache/camel/kafkaconnector/CamelSourceConnectorConfig.java
@@ -115,8 +115,9 @@ public class CamelSourceConnectorConfig extends 
CamelConnectorConfig {
         .define(CAMEL_CONNECTOR_IDEMPOTENCY_KAFKA_POLL_DURATION_CONF, 
Type.INT, CAMEL_CONNECTOR_IDEMPOTENCY_KAFKA_POLL_DURATION_DEFAULT, 
Importance.LOW, CAMEL_CONNECTOR_IDEMPOTENCY_KAFKA_POLL_DURATION_DOC)
         .define(CAMEL_CONNECTOR_REMOVE_HEADERS_PATTERN_CONF, Type.STRING, 
CAMEL_CONNECTOR_REMOVE_HEADERS_PATTERN_DEFAULT, Importance.MEDIUM, 
CAMEL_CONNECTOR_REMOVE_HEADERS_PATTERN_DOC)
         .define(CAMEL_CONNECTOR_MAP_PROPERTIES_CONF, Type.BOOLEAN, 
CAMEL_CONNECTOR_MAP_PROPERTIES_DEFAULT, Importance.MEDIUM, 
CAMEL_CONNECTOR_MAP_PROPERTIES_DOC)
-        .define(CAMEL_CONNECTOR_MAP_HEADERS_CONF, Type.BOOLEAN, 
CAMEL_CONNECTOR_MAP_HEADERS_DEFAULT, Importance.MEDIUM, 
CAMEL_CONNECTOR_MAP_HEADERS_DOC);
-    
+        .define(CAMEL_CONNECTOR_MAP_HEADERS_CONF, Type.BOOLEAN, 
CAMEL_CONNECTOR_MAP_HEADERS_DEFAULT, Importance.MEDIUM, 
CAMEL_CONNECTOR_MAP_HEADERS_DOC)
+        .define(CAMEL_CONNECTOR_DUMP_ROUTES_CONF, Type.BOOLEAN, 
CAMEL_CONNECTOR_DUMP_ROUTES_DEFAULT, Importance.LOW, 
CAMEL_CONNECTOR_DUMP_ROUTES_DOC);
+
     public CamelSourceConnectorConfig(ConfigDef config, Map<String, String> 
parsedConfig) {
         super(config, parsedConfig);
     }
diff --git 
a/core/src/main/java/org/apache/camel/kafkaconnector/CamelSourceTask.java 
b/core/src/main/java/org/apache/camel/kafkaconnector/CamelSourceTask.java
index 25657975d8..0b489a52ea 100644
--- a/core/src/main/java/org/apache/camel/kafkaconnector/CamelSourceTask.java
+++ b/core/src/main/java/org/apache/camel/kafkaconnector/CamelSourceTask.java
@@ -120,6 +120,7 @@ public class CamelSourceTask extends SourceTask {
             final String headersRemovePattern = 
config.getString(CamelSourceConnectorConfig.CAMEL_CONNECTOR_REMOVE_HEADERS_PATTERN_CONF);
             mapProperties = 
config.getBoolean(CamelSourceConnectorConfig.CAMEL_CONNECTOR_MAP_PROPERTIES_CONF);
             mapHeaders = 
config.getBoolean(CamelSinkConnectorConfig.CAMEL_CONNECTOR_MAP_HEADERS_CONF);
+            final boolean dumpRoutes = 
config.getBoolean(CamelSourceConnectorConfig.CAMEL_CONNECTOR_DUMP_ROUTES_CONF);
 
             topics = 
config.getString(CamelSourceConnectorConfig.TOPIC_CONF).split(",");
 
@@ -176,6 +177,7 @@ public class CamelSourceTask extends SourceTask {
                 
.withIdempotentRepositoryKafkaMaxCacheSize(idempotentRepositoryKafkaMaxCacheSize)
                 
.withIdempotentRepositoryKafkaPollDuration(idempotentRepositoryKafkaPollDuration)
                 .withHeadersExcludePattern(headersRemovePattern)
+                .withDumpRoutes(dumpRoutes)
                 .build(camelContext);
 
             consumer = 
cms.getCamelContext().getEndpoint(localUrl).createPollingConsumer();
@@ -217,9 +219,7 @@ public class CamelSourceTask extends SourceTask {
             LOG.debug("Received Exchange {} with Message {} from Endpoint {}", 
exchange.getExchangeId(),
                     exchange.getMessage().getMessageId(), 
exchange.getFromEndpoint());
 
-            // TODO: see if there is a better way to use sourcePartition
-            // an sourceOffset
-            Map<String, String> sourcePartition = 
Collections.singletonMap("filename", exchange.getFromEndpoint().toString());
+            Map<String, String> sourcePartition = 
Collections.singletonMap("endpoint", exchange.getFromEndpoint().toString());
             Map<String, String> sourceOffset = 
Collections.singletonMap("position", exchange.getExchangeId());
 
             final Object messageHeaderKey = camelMessageHeaderKey != null ? 
exchange.getMessage().getHeader(camelMessageHeaderKey) : null;
@@ -269,7 +269,9 @@ public class CamelSourceTask extends SourceTask {
     @Override
     public void commitRecord(SourceRecord record, RecordMetadata metadata) {
         LOG.debug("Committing record: {} with metadata: {}", record, metadata);
-        ///XXX: this should be a safe cast please see: 
https://issues.apache.org/jira/browse/KAFKA-12391
+        if (!(record instanceof CamelSourceRecord)) {
+            throw new IllegalArgumentException("Expected CamelSourceRecord but 
got " + record.getClass().getName());
+        }
         Integer claimCheck = ((CamelSourceRecord)record).getClaimCheck();
         LOG.debug("Committing record with claim check number: {}", claimCheck);
         Exchange correlatedExchange = exchangesWaitingForAck[claimCheck];
@@ -361,8 +363,6 @@ public class CamelSourceTask extends SourceTask {
             } else if (value instanceof Date) {
                 record.headers().addTimestamp(keyCamelHeader, (Date)value);
             } else if (value instanceof BigDecimal) {
-                //XXX: kafka connect configured header converter takes care of 
the encoding,
-                //default: 
org.apache.kafka.connect.storage.SimpleHeaderConverter
                 record.headers().addDecimal(keyCamelHeader, (BigDecimal)value);
             } else if (value instanceof Double) {
                 record.headers().addDouble(keyCamelHeader, (double)value);
diff --git 
a/core/src/main/java/org/apache/camel/kafkaconnector/utils/CamelKafkaConnectMain.java
 
b/core/src/main/java/org/apache/camel/kafkaconnector/utils/CamelKafkaConnectMain.java
index 78bbeefd8b..cd7e213db8 100644
--- 
a/core/src/main/java/org/apache/camel/kafkaconnector/utils/CamelKafkaConnectMain.java
+++ 
b/core/src/main/java/org/apache/camel/kafkaconnector/utils/CamelKafkaConnectMain.java
@@ -116,6 +116,7 @@ public class CamelKafkaConnectMain extends SimpleMain {
         private int idempotentRepositoryKafkaMaxCacheSize;
         private int idempotentRepositoryKafkaPollDuration;
         private String headersExcludePattern;
+        private boolean dumpRoutes = true;
 
         public Builder(String from, String to) {
             this.from = from;
@@ -212,6 +213,11 @@ public class CamelKafkaConnectMain extends SimpleMain {
             return this;
         }
 
+        public Builder withDumpRoutes(boolean dumpRoutes) {
+            this.dumpRoutes = dumpRoutes;
+            return this;
+        }
+
         private String filterSensitive(Map.Entry<Object, Object> entry) {
 
             if (SensitiveUtils.containsSensitive((String) entry.getKey())) {
@@ -223,8 +229,7 @@ public class CamelKafkaConnectMain extends SimpleMain {
         public CamelKafkaConnectMain build(CamelContext camelContext) {
             CamelKafkaConnectMain camelMain = new 
CamelKafkaConnectMain(camelContext);
             camelMain.configure().setAutoConfigurationLogSummary(false);
-            //TODO: make it configurable
-            camelMain.configure().setDumpRoutes(Boolean.TRUE.toString());
+            camelMain.configure().setDumpRoutes(Boolean.toString(dumpRoutes));
 
             Properties camelProperties = new Properties();
             camelProperties.putAll(props);
@@ -316,7 +321,6 @@ public class CamelKafkaConnectMain extends SimpleMain {
 
                     //create aggregator template
                     routeTemplate("ckcAggregator")
-                            //TODO: change 
CamelConnectorConfig.CAMEL_CONNECTOR_AGGREGATE_NAME to ckcAggregationStrategy?
                             .templateParameter("aggregationStrategy", 
CamelConnectorConfig.CAMEL_CONNECTOR_AGGREGATE_NAME)
                             .templateParameter("aggregationSize", "1")
                             .templateParameter("aggregationTimeout", 
String.valueOf(Long.MAX_VALUE))

Reply via email to