Catch json decode exception (#19323)

* Catch json decode exception when semantic search stats file is corrupted

* clear stats file if corrupted
This commit is contained in:
Josh Hawkins 2025-07-29 13:38:13 -05:00 committed by GitHub
parent 4f4c8a4fb9
commit 92a0dad2c2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -7,6 +7,7 @@ import multiprocessing as mp
import os import os
import signal import signal
import threading import threading
from json.decoder import JSONDecodeError
from types import FrameType from types import FrameType
from typing import Any, Optional, Union from typing import Any, Optional, Union
@ -73,13 +74,21 @@ class EmbeddingsContext:
self.requestor = EmbeddingsRequestor() self.requestor = EmbeddingsRequestor()
# load stats from disk # load stats from disk
stats_file = os.path.join(CONFIG_DIR, ".search_stats.json")
try: try:
with open(os.path.join(CONFIG_DIR, ".search_stats.json"), "r") as f: with open(stats_file, "r") as f:
data = json.loads(f.read()) data = json.loads(f.read())
self.thumb_stats.from_dict(data["thumb_stats"]) self.thumb_stats.from_dict(data["thumb_stats"])
self.desc_stats.from_dict(data["desc_stats"]) self.desc_stats.from_dict(data["desc_stats"])
except FileNotFoundError: except FileNotFoundError:
pass pass
except JSONDecodeError:
logger.warning("Failed to decode semantic search stats, clearing file")
try:
with open(stats_file, "w") as f:
f.write("")
except OSError as e:
logger.error(f"Failed to clear corrupted stats file: {e}")
def stop(self): def stop(self):
"""Write the stats to disk as JSON on exit.""" """Write the stats to disk as JSON on exit."""