mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-05-04 09:17:48 +08:00
fix: close file handles properly in json.load() calls (#13997)
## Summary Fixes #13996 Replace `json.load(open(...))` with `with open(...) as f: json.load(f)` in two files to ensure file descriptors are properly closed. **Affected files:** - `common/doc_store/infinity_conn_base.py` — schema loading for Infinity doc store - `api/db/init_data.py` — agent template loading at startup ## Why this matters In a long-running server process like RAGFlow, leaked file descriptors from `json.load(open(...))` can accumulate over time. While CPython's refcounting usually cleans these up, it's not guaranteed (especially under memory pressure or with alternative Python runtimes), and can lead to `OSError: [Errno 24] Too many open files`. ## Test plan - [ ] Verify Infinity doc store schema loading still works correctly - [ ] Verify agent templates load correctly on startup <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Refactor** * Improved file handling in internal data processing to ensure proper resource cleanup. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: easonysliu <easonysliu@tencent.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@ -168,7 +168,8 @@ def add_graph_templates():
|
||||
|
||||
for fnm in os.listdir(dir):
|
||||
try:
|
||||
cnvs = json.load(open(os.path.join(dir, fnm), "r",encoding="utf-8"))
|
||||
with open(os.path.join(dir, fnm), "r", encoding="utf-8") as f:
|
||||
cnvs = json.load(f)
|
||||
try:
|
||||
CanvasTemplateService.save(**cnvs)
|
||||
except Exception:
|
||||
|
||||
@ -270,7 +270,8 @@ class InfinityConnectionBase(DocStoreConnection):
|
||||
fp_mapping = os.path.join(get_project_base_directory(), "conf", self.mapping_file_name)
|
||||
if not os.path.exists(fp_mapping):
|
||||
raise Exception(f"Mapping file not found at {fp_mapping}")
|
||||
schema = json.load(open(fp_mapping))
|
||||
with open(fp_mapping) as f:
|
||||
schema = json.load(f)
|
||||
|
||||
if parser_id is not None:
|
||||
from common.constants import ParserType
|
||||
|
||||
Reference in New Issue
Block a user