Skip to content

Commit 2d21591

Browse files
committed
fix: coderabbitai comments
1 parent 5d53d9b commit 2d21591

2 files changed

Lines changed: 24 additions & 16 deletions

File tree

services/workspace_listing.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,12 @@ def _safe_fetchall(query: str, params: tuple = ()) -> list:
134134
cid,
135135
e,
136136
)
137-
except Exception:
138-
_logger.exception("Failed to load composer rows from global storage")
137+
except Exception as e:
138+
_logger.error(
139+
"Failed to load composer rows from global storage: %s",
140+
e,
141+
exc_info=True,
142+
)
139143

140144
# Group workspace entries by normalized folder path
141145
folder_to_entries: dict[str, list] = {}

services/workspace_tabs.py

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import annotations
22

3+
import hashlib
34
import json
45
import logging
56
import os
@@ -47,17 +48,15 @@ def _try_loads_kv_value(raw: str | None) -> Any | None:
4748
return None
4849

4950

50-
_KV_VALUE_LOG_LIMIT = 200
51-
52-
53-
def _kv_value_log_preview(value: object | None, limit: int = _KV_VALUE_LOG_LIMIT) -> str:
54-
"""Truncated KV payload for warning logs (avoids multi-MB log lines on bad rows)."""
51+
def _kv_payload_log_meta(value: object | None) -> tuple[int, str | None]:
52+
"""Byte length and short SHA-256 prefix for logs without emitting raw KV payloads."""
5553
if value is None:
56-
return "None"
57-
text = value if isinstance(value, str) else str(value)
58-
if len(text) > limit:
59-
return text[:limit] + "..."
60-
return text
54+
return 0, None
55+
if isinstance(value, bytes):
56+
payload = value
57+
else:
58+
payload = str(value).encode("utf-8", errors="replace")
59+
return len(payload), hashlib.sha256(payload).hexdigest()[:12]
6160

6261

6362
def assemble_workspace_tabs(
@@ -128,12 +127,15 @@ def _safe_fetchall(query: str, params: tuple = ()) -> list:
128127
continue
129128
try:
130129
parsed = json.loads(row["value"])
130+
131131
except (json.JSONDecodeError, TypeError, ValueError) as e:
132+
payload_len, payload_fp = _kv_payload_log_meta(row["value"])
132133
_logger.warning(
133-
"Failed to decode Bubble from %s: %s (value_preview=%r)",
134+
"Failed to decode Bubble from %s: %s (payload_len=%d, payload_sha256=%s)",
134135
row["key"],
135136
e,
136-
_kv_value_log_preview(row["value"]),
137+
payload_len,
138+
payload_fp,
137139
)
138140
continue
139141
try:
@@ -213,12 +215,14 @@ def _safe_fetchall(query: str, params: tuple = ()) -> list:
213215
try:
214216
parsed = json.loads(row["value"])
215217
except (json.JSONDecodeError, TypeError, ValueError) as e:
218+
payload_len, payload_fp = _kv_payload_log_meta(row["value"])
216219
_logger.warning(
217-
"Failed to decode Composer from composerData:%s: %s (key=%s, value_preview=%r)",
220+
"Failed to decode Composer from composerData:%s: %s (key=%s, payload_len=%d, payload_sha256=%s)",
218221
composer_id,
219222
e,
220223
row["key"],
221-
_kv_value_log_preview(row["value"]),
224+
payload_len,
225+
payload_fp,
222226
)
223227
continue
224228
try:

0 commit comments

Comments
 (0)