rubenada opened a new pull request, #5256:
URL: https://github.com/apache/calcite/pull/5256

   <!--
   Thanks for sending a pull request! Here are some critical tips for you:
   
   1. READ THE GUIDE FIRST: https://calcite.apache.org/develop/#contributing
      *For significant contributions, please discuss on the dev mailing list or 
Jira BEFORE coding.*
   
   2. JIRA IS USUALLY MANDATORY: Ensure you have created an issue on the 
Calcite Jira:
      https://issues.apache.org/jira/projects/CALCITE/issues
      *Check existing issues first to avoid duplicates.*
      *Note: A Jira is NOT required for typos and cosmetic changes (i.e., 
changes that are neither bugs nor features).*
   
   3. TIMING: Strongly recommended to create the Jira BEFORE you start writing 
code (e.g., a day or so before posting a PR).
      This gives others a chance to weigh in on your specification.
   
   4. CRITICAL CONSISTENCY RULE
      The following three items MUST match exactly in wording and meaning:
      (A) The Jira Issue Title
      (B) This Pull Request Title
      (C) Your Git Commit Message
   
      Format: [CALCITE-XXXX] <Description>
      Example: [CALCITE-0000] Add IF NOT EXISTS clause to CREATE TABLE
   
      Guidelines for a good Title:
      - Illustrate using SQL keywords (in ALL-CAPS) rather than Java method 
names.
      - Focus on the specification and user experience, not the implementation.
      - Make it clear whether it is a bug or a feature.
      - Use words like "should" to indicate desired behavior vs. current 
behavior (e.g., "Validator should not close model file").
   
   5. REPRODUCTION: If fixing a bug, please provide a concise SQL example or 
test case to reproduce the issue for a faster review.
   
   6. TESTING: Ensure `./gradlew build` passes and appropriate tests are 
added/updated.
   -->
   
   ## Jira Link
   
   [CALCITE-7773](https://issues.apache.org/jira/browse/CALCITE-7773)
   
   ## Changes Proposed
   <!--
   Please clarify what changes you are proposing. The purpose of this section 
is to outline the changes and how this PR fixes the issue.
   If possible, please consider writing useful notes for better and faster 
reviews in your PR.
   -->
   The Kafka adapter's `consumer.params` model operand is forwarded verbatim to 
`KafkaConsumer` in `KafkaTableFactory.create(...)` (currently via 
`KafkaTableOptions.setConsumerParams(...)`, then `Properties.putAll(...)` in 
`KafkaStreamTable`).  Several Kafka consumer configuration keys cause the 
client to load and instantiate classes named in the operand as part of `new 
KafkaConsumer<>(config)`: keys inside it are forwarded without any check, which 
means a model with, for example, 
`consumer.params.value.deserializer=some.unrelated.Class` runs the static 
initializer of `some.unrelated.Class` inside the Kafka client before any 
validation.
   
   Proposal:
   Add validation in `KafkaTableFactory.create(...)` (fail-fast at table 
creation):
     - `key.deserializer` / `value.deserializer` are accepted only after 
`Class.forName(name, false, loader)` and 
`Deserializer.class.isAssignableFrom(klass)` (the class is not initialized 
during the check).
     - The other class-naming keys listed above are rejected with a 
`SecurityException` naming the offending key and pointing at the system 
property that can be used to revert to the legacy behavior (see below).
     - All non-class-naming keys (`group.id`, `max.poll.records`, 
`fetch.min.bytes`, timeouts, `security.protocol=PLAINTEXT`, etc.) are forwarded 
unchanged.
   
   Add a new system property `calcite.kafka.consumer.params.trusted`, 
registered as `CalciteSystemProperty.KAFKA_CONSUMER_PARAMS_TRUSTED`, default 
`false`. Setting it to `true` restores the previous forwarding behavior for 
deployments where the model is entirely operator-supplied (i.e. trusted).


-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to