From 9c73fc2a4da1fa8f917dafe35baf2a8ea7febbda Mon Sep 17 00:00:00 2001 From: Emmett Butler Date: Fri, 23 Feb 2024 09:28:28 -0800 Subject: [PATCH 1/3] catch typeerror raised by confluent-kafka when setting tombstone tag --- ddtrace/contrib/kafka/patch.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ddtrace/contrib/kafka/patch.py b/ddtrace/contrib/kafka/patch.py index 4218b11b4c2..0d9c6860031 100644 --- a/ddtrace/contrib/kafka/patch.py +++ b/ddtrace/contrib/kafka/patch.py @@ -244,7 +244,12 @@ def traced_poll(func, instance, args, kwargs): ): span.set_tag_str(kafkax.MESSAGE_KEY, message_key) span.set_tag(kafkax.PARTITION, message.partition()) - span.set_tag_str(kafkax.TOMBSTONE, str(len(message) == 0)) + is_tombstone = False + try: + is_tombstone = len(message) == 0 + except TypeError: # https://github.com/confluentinc/confluent-kafka-python/issues/1192 + pass + span.set_tag_str(kafkax.TOMBSTONE, str(is_tombstone)) span.set_tag(kafkax.MESSAGE_OFFSET, message_offset) span.set_tag(SPAN_MEASURED_KEY) rate = config.kafka.get_analytics_sample_rate() From 609097c28f6af30151cfb0cda2bd42f833327541 Mon Sep 17 00:00:00 2001 From: Emmett Butler Date: Fri, 23 Feb 2024 09:33:24 -0800 Subject: [PATCH 2/3] reno --- releasenotes/notes/kafka-typeerror-b39a35c5338b05aa.yaml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 releasenotes/notes/kafka-typeerror-b39a35c5338b05aa.yaml diff --git a/releasenotes/notes/kafka-typeerror-b39a35c5338b05aa.yaml b/releasenotes/notes/kafka-typeerror-b39a35c5338b05aa.yaml new file mode 100644 index 00000000000..e759637f2b2 --- /dev/null +++ b/releasenotes/notes/kafka-typeerror-b39a35c5338b05aa.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + kafka: This fix resolves an issue where the use of a Kafka ``DeserializingConsumer`` could result in + a crash when the deserializer in use returns a type without a ``__len__`` attribute. From c1633a84253369933b217582888df4435e069aa9 Mon Sep 17 00:00:00 2001 From: Emmett Butler Date: Fri, 23 Feb 2024 09:36:08 -0800 Subject: [PATCH 3/3] Nonetype --- tests/contrib/kafka/test_kafka.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/contrib/kafka/test_kafka.py b/tests/contrib/kafka/test_kafka.py index f5193764cdd..a3c86fa4a61 100644 --- a/tests/contrib/kafka/test_kafka.py +++ b/tests/contrib/kafka/test_kafka.py @@ -837,7 +837,7 @@ def json_deserializer(as_bytes, ctx): try: return json.loads(as_bytes) except json.decoder.JSONDecodeError: - return as_bytes + return # return a type that has no __len__ because such types caused a crash at one point conf = { "bootstrap.servers": BOOTSTRAP_SERVERS,