Refactor initialization logic for vector, KV and graph storage implementations
• Add try_initialize_namespace check • Move init code out of storage locks • Reduce redundant init conditions • Simplify initialization flow • Make init thread-safer
This commit is contained in:
@@ -6,7 +6,7 @@ import numpy as np
|
||||
from lightrag.types import KnowledgeGraph, KnowledgeGraphNode, KnowledgeGraphEdge
|
||||
from lightrag.utils import logger
|
||||
from lightrag.base import BaseGraphStorage
|
||||
from .shared_storage import get_storage_lock, get_namespace_object, is_multiprocess
|
||||
from .shared_storage import get_storage_lock, get_namespace_object, is_multiprocess, try_initialize_namespace
|
||||
|
||||
import pipmaster as pm
|
||||
|
||||
@@ -74,32 +74,34 @@ class NetworkXStorage(BaseGraphStorage):
|
||||
self.global_config["working_dir"], f"graph_{self.namespace}.graphml"
|
||||
)
|
||||
self._storage_lock = get_storage_lock()
|
||||
|
||||
# check need_init must before get_namespace_object
|
||||
need_init = try_initialize_namespace(self.namespace)
|
||||
self._graph = get_namespace_object(self.namespace)
|
||||
with self._storage_lock:
|
||||
|
||||
if need_init:
|
||||
if is_multiprocess:
|
||||
if self._graph.value is None:
|
||||
preloaded_graph = NetworkXStorage.load_nx_graph(
|
||||
self._graphml_xml_file
|
||||
preloaded_graph = NetworkXStorage.load_nx_graph(
|
||||
self._graphml_xml_file
|
||||
)
|
||||
self._graph.value = preloaded_graph or nx.Graph()
|
||||
if preloaded_graph:
|
||||
logger.info(
|
||||
f"Loaded graph from {self._graphml_xml_file} with {preloaded_graph.number_of_nodes()} nodes, {preloaded_graph.number_of_edges()} edges"
|
||||
)
|
||||
self._graph.value = preloaded_graph or nx.Graph()
|
||||
if preloaded_graph:
|
||||
logger.info(
|
||||
f"Loaded graph from {self._graphml_xml_file} with {preloaded_graph.number_of_nodes()} nodes, {preloaded_graph.number_of_edges()} edges"
|
||||
)
|
||||
else:
|
||||
logger.info("Created new empty graph")
|
||||
else:
|
||||
logger.info("Created new empty graph")
|
||||
else:
|
||||
if self._graph is None:
|
||||
preloaded_graph = NetworkXStorage.load_nx_graph(
|
||||
self._graphml_xml_file
|
||||
preloaded_graph = NetworkXStorage.load_nx_graph(
|
||||
self._graphml_xml_file
|
||||
)
|
||||
self._graph = preloaded_graph or nx.Graph()
|
||||
if preloaded_graph:
|
||||
logger.info(
|
||||
f"Loaded graph from {self._graphml_xml_file} with {preloaded_graph.number_of_nodes()} nodes, {preloaded_graph.number_of_edges()} edges"
|
||||
)
|
||||
self._graph = preloaded_graph or nx.Graph()
|
||||
if preloaded_graph:
|
||||
logger.info(
|
||||
f"Loaded graph from {self._graphml_xml_file} with {preloaded_graph.number_of_nodes()} nodes, {preloaded_graph.number_of_edges()} edges"
|
||||
)
|
||||
else:
|
||||
logger.info("Created new empty graph")
|
||||
else:
|
||||
logger.info("Created new empty graph")
|
||||
|
||||
self._node_embed_algorithms = {
|
||||
"node2vec": self._node2vec_embed,
|
||||
|
Reference in New Issue
Block a user