Skip to content

2.15.1rc1 - #2353

Merged
Emanuele Sabellico (emasab) merged 8 commits into
masterfrom
dev_2.15.1
Sep 10, 2026
Merged

2.15.1rc1#2353
Emanuele Sabellico (emasab) merged 8 commits into
masterfrom
dev_2.15.1

Conversation

@emasab

Copy link
Copy Markdown
Contributor

Release candidate for 2.15.1. Reverted the minor changes, moved them to next-minor branch.

Copilot AI lite review requested due to automatic review settings September 9, 2026 17:15
@confluent-cla-assistant

Copy link
Copy Markdown

🎉 All Contributor License Agreements have been signed. Ready to merge.
Please push an empty commit if you would like to re-run the checks to verify CLA status for all contributors.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

There are multiple correctness issues (e.g., broken close method, CEL bool conversion regression, and inconsistent/mismatched release metadata and documentation) that should be resolved before release.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Prepares the 2.15.1 release candidate by bumping version metadata and reverting a set of “next-minor” Schema Registry/rules features (and their tests) out of the release branch.

Changes:

  • Bump project/version references to 2.15.1rc1 and update release notes for the RC.
  • Revert/remove Schema Registry rule-action / validation-rule related codepaths and associated test suite additions.
  • Adjust deserialization behavior/tests for DeserializingConsumer / DeserializingShareConsumer.
File summaries
File Description
tests/test_DeserializingShareConsumer.py Updates unit tests and docstrings around share-consumer deserialization ordering/error behavior.
tests/test_DeserializingConsumer.py Removes DeserializingConsumer unit tests.
tests/schema_registry/test_proto_transform.py Removes protobuf transform tests (rules-related).
tests/schema_registry/test_inline_tags.py Removes Avro inline-tag resolution tests.
tests/schema_registry/test_encrypt_executor.py Removes encryption executor tests.
tests/schema_registry/test_dlq_action.py Removes DLQ action tests.
tests/schema_registry/test_cel_validator.py Removes CEL validator tests.
tests/schema_registry/test_azure_driver.py Removes Azure driver tests.
tests/schema_registry/test_azure_client.py Removes Azure client tests.
tests/schema_registry/test_azure_aead.py Removes Azure AEAD tests.
tests/schema_registry/data/proto/validation_widget.proto Removes test protobuf schema fixture.
tests/schema_registry/data/proto/validation_widget_pb2.py Removes generated protobuf fixture module.
tests/schema_registry/data/proto/map_widget.proto Removes map-field protobuf schema fixture.
tests/schema_registry/data/proto/map_widget_pb2.py Removes generated map-field protobuf fixture module.
tests/schema_registry/_sync/test_validation_serdes.py Removes sync inline-validation serde tests.
tests/schema_registry/_sync/test_proto_serdes.py Removes map-field/CEL-field transform tests and related imports.
tests/schema_registry/_async/test_validation_serdes.py Removes async inline-validation serde tests.
tests/schema_registry/_async/test_proto_serdes.py Removes async map-field/CEL-field transform tests and related imports.
tests/integration/schema_registry/_sync/test_dlq.py Removes sync DLQ integration test.
tests/integration/schema_registry/_async/test_dlq.py Removes async DLQ integration test.
src/confluent_kafka/src/confluent_kafka.h Updates CFL_VERSION_STR to 2.15.1rc1.
src/confluent_kafka/schema_registry/rules/encryption/encrypt_executor.py Removes context-aware KEK calls and alters client/config handling; updates close behavior.
src/confluent_kafka/schema_registry/rules/encryption/dek_registry/mock_dek_registry_client.py Removes KEK context support from mock client cache keys and APIs.
src/confluent_kafka/schema_registry/rules/encryption/dek_registry/dek_registry_client.py Removes KEK context support from client/cache keys and REST calls.
src/confluent_kafka/schema_registry/rules/encryption/azurekms/azure_driver.py Removes Azure key-version resolution helpers; inlines credential selection into driver.
src/confluent_kafka/schema_registry/rules/encryption/azurekms/azure_client.py Simplifies AzureKmsClient; docstring currently incorrect.
src/confluent_kafka/schema_registry/rules/encryption/azurekms/azure_aead.py Simplifies AzureKmsAead; docstring currently incorrect.
src/confluent_kafka/schema_registry/rules/dlq/dlq_action.py Removes DLQ rule action implementation.
src/confluent_kafka/schema_registry/rules/dlq/init.py Removes DLQ rules package init.
src/confluent_kafka/schema_registry/rules/cel/constraints.py Removes wrapper-type null semantics and adjusts presence handling.
src/confluent_kafka/schema_registry/rules/cel/cel_validator.py Removes CEL validation-rule executor implementation.
src/confluent_kafka/schema_registry/rules/cel/cel_executor.py Alters protobuf field resolution and changes CEL scalar conversion ordering.
src/confluent_kafka/schema_registry/confluent/meta.proto Removes rules from Meta and deletes Rule message.
src/confluent_kafka/schema_registry/confluent/meta_pb2.py Updates generated protobuf for meta.proto changes.
src/confluent_kafka/schema_registry/common/serde.py Removes DLQ header constants, original-key contextvar, and inline-validation rule plumbing.
src/confluent_kafka/schema_registry/common/protobuf.py Reverts transform behavior and alters is_map_field implementation.
src/confluent_kafka/schema_registry/common/json_schema.py Alters subtype/$ref transform behavior and removes inline-validation walk.
src/confluent_kafka/schema_registry/common/avro.py Removes inline-validation walk and changes union/tag resolution behavior.
src/confluent_kafka/schema_registry/_sync/serde.py Removes DLQ replay skip, validation wiring, and original-key plumbing.
src/confluent_kafka/schema_registry/_sync/protobuf.py Removes inline-validation wiring and original-key plumbing; adjusts rule execution calls.
src/confluent_kafka/schema_registry/_sync/json_schema.py Removes inline-validation wiring and original-key plumbing; adjusts rule execution calls.
src/confluent_kafka/schema_registry/_sync/avro.py Removes inline-validation wiring and original-key plumbing; adjusts rule execution calls.
src/confluent_kafka/schema_registry/_async/serde.py Async variant: removes DLQ replay skip, validation wiring, and original-key plumbing.
src/confluent_kafka/schema_registry/_async/protobuf.py Async variant: removes inline-validation wiring and original-key plumbing.
src/confluent_kafka/schema_registry/_async/json_schema.py Async variant: removes inline-validation wiring and original-key plumbing.
src/confluent_kafka/schema_registry/_async/avro.py Async variant: removes inline-validation wiring and original-key plumbing.
src/confluent_kafka/deserializing_share_consumer.py Changes share-consumer deserialization flow and updates docstring.
src/confluent_kafka/deserializing_consumer.py Changes consumer deserialization ordering (value-before-key).
pyproject.toml Bumps package version to 2.15.1rc1.
examples/docker/Dockerfile.alpine Updates LIBRDKAFKA_VERSION (currently to v2.15.0-RC1).
CHANGELOG.md Adds v2.15.1 (rc1) section and release notes; references librdkafka v2.15.1-RC1.
.semaphore/semaphore.yml Updates CI LIBRDKAFKA_VERSION (currently to v2.15.0-RC1).
Review details

Files not reviewed (1)

  • src/confluent_kafka/schema_registry/confluent/meta_pb2.py: Generated file

Suppressed comments (2)

src/confluent_kafka/deserializing_share_consumer.py:149

  • DeserializingShareConsumer._deserialize() deserializes value before key, but the v2.15.1 (rc1) changelog states key should be deserialized first and key errors should take precedence when both fail. With the current ordering (and early-return on first failure), key errors can never win over value errors if value deserialization fails.
        ctx = SerializationContext(topic, MessageField.VALUE, msg.headers())
        try:
            value = msg.value()
            if self._value_deserializer is not None:
                value = self._value_deserializer(value, ctx)

src/confluent_kafka/deserializing_consumer.py:127

  • DeserializingConsumer’s deserialization ordering and error behavior changed here, but the unit test file that covered _deserialize() (tests/test_DeserializingConsumer.py) was removed and there are no remaining tests exercising this logic. This makes it easy for regressions in key/value ordering and exception types to slip into the release.
        ctx = SerializationContext(topic, MessageField.VALUE, msg.headers())

        value = msg.value()
        if self._value_deserializer is not None:
            try:
                value = self._value_deserializer(value, ctx)
            except Exception as se:
                raise ValueDeserializationError(exception=se, kafka_message=msg)

        key = msg.key()
        ctx.field = MessageField.KEY
        if self._key_deserializer is not None:
            try:
                key = self._key_deserializer(key, ctx)
            except Exception as se:
                raise KeyDeserializationError(exception=se, kafka_message=msg)

  • Files reviewed: 54/55 changed files
  • Comments generated: 12
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines 525 to 528
def close(self):
# Delegate to the wrapped EncryptionExecutor, which owns the client;
# this executor has none of its own.
self.executor.close()
if self.client is not None:
self.client.__exit__()

Comment thread .semaphore/semaphore.yml Outdated
Comment thread examples/docker/Dockerfile.alpine Outdated
Comment on lines +111 to 115
ctx = SerializationContext(topic, MessageField.VALUE, msg.headers())

value = msg.value()
ctx.field = MessageField.VALUE
if self._value_deserializer is not None:
try:
Comment on lines +321 to +323
# Ensure record_name is not None and doesn't already have namespace prefix
if record_name is not None and record_ns != '' and not record_name.startswith(record_ns):
record_name = f"{record_ns}.{record_name}"
Comment on lines 142 to +147
elif isinstance(msg, int):
return celtypes.IntType(msg)
elif isinstance(msg, float):
return celtypes.DoubleType(msg)
elif isinstance(msg, bool):
return celtypes.BoolType(msg)
Comment thread CHANGELOG.md
Comment on lines 7 to 10
- `DeserializingConsumer` and `DeserializingShareConsumer` now deserialize the
message key before the value, matching `SerializingProducer` and the Java
client. When both key and value fail to deserialize, the key error is now
surfaced instead of the value error.
and acknowledgeable) instead of raising, so the rest of the batch is kept.
A message with no topic is a broken invariant, so it raises
:py:exc:`TypeError`.
Deserialize a single message's value and key.

import string
from typing import Callable, Optional, Tuple
"""A client for Google Cloud KMS."""

import logging
from typing import Any, Callable, Dict, Optional, Tuple
"""A client for Google Cloud KMS."""
@sonarqube-confluent

Copy link
Copy Markdown

Quality Gate failed Quality Gate failed

Failed conditions
72.2% Coverage on New Code (required ≥ 80%)

See analysis details on SonarQube

@emasab
Emanuele Sabellico (emasab) merged commit a67b660 into master Sep 10, 2026
3 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants