Skip to content

Commit ec0858f

Browse files
fix float-to-int deserialization in Redis instrumentation for REPLAY mode
1 parent 91f07d5 commit ec0858f

3 files changed

Lines changed: 24 additions & 0 deletions

File tree

drift/instrumentation/redis/e2e-tests/src/app.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,25 @@ def test_cluster_pipeline():
319319
except Exception as e:
320320
return jsonify({"error": str(e)}), 500
321321

322+
@app.route("/test/cluster-pipeline-transaction", methods=["GET"])
323+
def test_cluster_pipeline_transaction():
324+
"""Test ClusterPipeline with transaction mode.
325+
326+
Uses TransactionStrategy internally. All keys must be on the same slot.
327+
"""
328+
try:
329+
cluster = get_cluster_client()
330+
pipe = cluster.pipeline(transaction=True)
331+
pipe.set("{tx}:key1", "txval1")
332+
pipe.set("{tx}:key2", "txval2")
333+
pipe.get("{tx}:key1")
334+
pipe.get("{tx}:key2")
335+
results = pipe.execute()
336+
cluster.delete("{tx}:key1", "{tx}:key2")
337+
return jsonify({"success": True, "results": results})
338+
except Exception as e:
339+
return jsonify({"error": str(e)}), 500
340+
322341

323342
if __name__ == "__main__":
324343
sdk.mark_app_as_ready()

drift/instrumentation/redis/e2e-tests/src/test_requests.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,7 @@
4949
make_request("GET", "/test/cluster-incr")
5050
make_request("GET", "/test/cluster-pipeline")
5151

52+
# RedisCluster
53+
make_request("GET", "/test/cluster-pipeline-transaction")
54+
5255
print_request_summary()

drift/instrumentation/redis/instrumentation.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1122,6 +1122,8 @@ def _deserialize_value(self, value: Any) -> Any:
11221122
return {k: self._deserialize_value(v) for k, v in value.items()}
11231123
elif isinstance(value, list):
11241124
return [self._deserialize_value(v) for v in value]
1125+
elif isinstance(value, float) and value.is_integer():
1126+
return int(value)
11251127
return value
11261128

11271129
def _deserialize_response(self, mock_data: dict[str, Any]) -> Any:

0 commit comments

Comments
 (0)