refactor(maizone): 重构数据迁移以尽早关闭文件句柄

数据迁移逻辑已更新为先将整个文件读入内存,然后立即关闭文件句柄。

这可以防止旧数据文件在随后的 JSON 解析、验证和写入新存储的过程中保持打开状态,从而提高迁移过程的稳健性。
This commit is contained in:
tt-P607
2025-11-15 20:07:48 +08:00
committed by Windpicker-owo
parent 07a70e1dd5
commit fea007b429

View File

@@ -80,9 +80,11 @@ class ReplyTrackerService:
if old_data_file.exists():
logger.info(f"检测到旧的数据文件 '{old_data_file}',开始执行一次性迁移...")
try:
# 读取旧文件内容
# 步骤1: 读取旧文件内容并立即关闭文件
with open(old_data_file, "rb") as f:
file_content = f.read()
# 步骤2: 处理文件内容
# 如果文件为空,直接删除,无需迁移
if not file_content.strip():
logger.warning("旧数据文件为空,无需迁移。")
@@ -93,7 +95,7 @@ class ReplyTrackerService:
# 解析JSON数据
old_data = orjson.loads(file_content)
# 验证数据格式是否正确
# 步骤3: 验证数据并执行迁移/备份
if self._validate_data(old_data):
# 验证通过将数据写入新的存储API
self.storage.set("data", old_data)
@@ -101,7 +103,7 @@ class ReplyTrackerService:
self.storage._save_data()
logger.info("旧数据已成功迁移到新的存储API。")
# 将旧文件重命名为备份文件,而不是直接删除,以防万一
# 将旧文件重命名为备份文件
backup_file = old_data_file.with_suffix(f".json.bak.migrated.{int(time.time())}")
old_data_file.rename(backup_file)
logger.info(f"旧数据文件已成功迁移并备份为: {backup_file}")