From 917a76ecb4b1cb6742f810226d1ca0e26c461f75 Mon Sep 17 00:00:00 2001 From: Yaniv Michael Kaul Date: Mon, 6 Apr 2026 21:40:34 +0300 Subject: [PATCH] perf: optimize _key_parts_packed to avoid format string allocation Replace per-call struct.pack(">H%dsB" % l, l, p, 0) with pre-compiled uint16_pack(len(p)) + p + b'\\x00'. This eliminates the format string interpolation and dynamic struct format creation on every call, using the pre-compiled uint16_pack (struct.Struct('>H').pack) instead. The routing key computation is called for every query when TokenAwarePolicy is in use, making this a hot path. --- cassandra/query.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cassandra/query.py b/cassandra/query.py index 6c6878fdb4..8ef7b7fb64 100644 --- a/cassandra/query.py +++ b/cassandra/query.py @@ -23,6 +23,8 @@ import re import struct import time + +from cassandra.marshal import uint16_pack import warnings from cassandra import ConsistencyLevel, OperationTimedOut @@ -299,9 +301,9 @@ def __init__(self, retry_policy=None, consistency_level=None, routing_key=None, self.is_idempotent = is_idempotent def _key_parts_packed(self, parts): + _pack = uint16_pack for p in parts: - l = len(p) - yield struct.pack(">H%dsB" % l, l, p, 0) + yield _pack(len(p)) + p + b'\x00' def _get_routing_key(self): return self._routing_key