From 6a9e368382c88ecb2fbccc13808f149f359299d0 Mon Sep 17 00:00:00 2001 From: yangdx Date: Tue, 16 Dec 2025 15:56:10 +0800 Subject: [PATCH] Rename QdrantMigrationError to DataMigrationError for generalization --- lightrag/exceptions.py | 4 ++-- lightrag/kg/qdrant_impl.py | 36 ++++++++++++++++++++++-------------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/lightrag/exceptions.py b/lightrag/exceptions.py index 709f294d..7c9accef 100644 --- a/lightrag/exceptions.py +++ b/lightrag/exceptions.py @@ -128,8 +128,8 @@ class ChunkTokenLimitExceededError(ValueError): self.chunk_preview = truncated_preview -class QdrantMigrationError(Exception): - """Raised when Qdrant data migration from legacy collections fails.""" +class DataMigrationError(Exception): + """Raised when data migration from legacy collection/table fails.""" def __init__(self, message: str): super().__init__(message) diff --git a/lightrag/kg/qdrant_impl.py b/lightrag/kg/qdrant_impl.py index 092e24bc..83baa972 100644 --- a/lightrag/kg/qdrant_impl.py +++ b/lightrag/kg/qdrant_impl.py @@ -10,7 +10,7 @@ import numpy as np import pipmaster as pm from ..base import BaseVectorStorage -from ..exceptions import QdrantMigrationError +from ..exceptions import DataMigrationError from ..kg.shared_storage import get_data_init_lock from ..utils import compute_mdhash_id, logger @@ -138,13 +138,13 @@ class QdrantVectorDBStorage(BaseVectorStorage): This method now supports backward compatibility by automatically detecting legacy collections created by older versions of LightRAG using multiple naming patterns. - + Behavior: - Case 1: New collection is the same as legacy collection - show debug message and continue - Case 2: Only new collection exists - - show debug message and continue - Case 3: Both new and legacy collections exist with different names - show warning and continue - Case 4: Only legacy exists - migrate data from legacy collection to new collection - Raise QdrantMigrationError if legacy collection has different dimension than new collection + Raise DataMigrationError if legacy collection has different dimension than new collection Args: client: QdrantClient instance @@ -154,7 +154,7 @@ class QdrantVectorDBStorage(BaseVectorStorage): **kwargs: Additional arguments for collection creation (vectors_config, hnsw_config, etc.) Raises: - QdrantMigrationError: If migration fails or index creation fails + DataMigrationError: If migration fails or index creation fails """ new_collection_exists = client.collection_exists(collection_name) @@ -178,18 +178,24 @@ class QdrantVectorDBStorage(BaseVectorStorage): # Case 1: New collection is the same as legacy collection - show debug message and continue if collection_name == legacy_collection: - logger.debug("Qdrant: legacy collection '%s' is the same as new collection '%s'.", legacy_collection, collection_name) + logger.debug( + "Qdrant: legacy collection '%s' is the same as new collection '%s'.", + legacy_collection, + collection_name, + ) return - # Case 2: Only new collection exists - silently return + # Case 2: Only new collection exists - silently return if new_collection_exists and not legacy_collection: - logger.debug("Qdrant: Only new collection '%s' exists. No migration needed.", collection_name) + logger.debug( + "Qdrant: Only new collection '%s' exists. No migration needed.", + collection_name, + ) return # Case 3: Both new and legacy collections exist with different names - show warning and continue # Only delete legacy if it's empty (safe cleanup) and it's not the same as new collection if new_collection_exists and legacy_collection: - try: # Check if legacy collection is empty legacy_count = client.count( @@ -229,9 +235,11 @@ class QdrantVectorDBStorage(BaseVectorStorage): collection_name=legacy_collection, exact=True ).count if legacy_count == 0: - logger.info(f"Qdrant: Legacy collection '{legacy_collection}' is empty. No migration needed.") + logger.info( + f"Qdrant: Legacy collection '{legacy_collection}' is empty. No migration needed." + ) return - + logger.info(f"Qdrant: Found {legacy_count} records in legacy collection") # Check vector dimension compatibility before migration @@ -252,7 +260,7 @@ class QdrantVectorDBStorage(BaseVectorStorage): f"but new embedding model expects {new_dim}d. " ) - raise QdrantMigrationError( + raise DataMigrationError( f"Qdrant: Dimension mismatch! " f"Legacy collection '{legacy_collection}' has {legacy_dim}d vectors, " f"but new embedding model expects {new_dim}d. " @@ -322,7 +330,7 @@ class QdrantVectorDBStorage(BaseVectorStorage): if new_count != legacy_count: error_msg = f"Qdrant: Migration verification failed, expected {legacy_count} records, got {new_count} in new collection" logger.error(error_msg) - raise QdrantMigrationError(error_msg) + raise DataMigrationError(error_msg) logger.info( f"Qdrant: Migration from '{legacy_collection}' to '{collection_name}' completed successfully" @@ -331,13 +339,13 @@ class QdrantVectorDBStorage(BaseVectorStorage): "Qdrant: Manual deletion is required after data migration verification." ) - except QdrantMigrationError: + except DataMigrationError: # Re-raise migration errors without wrapping raise except Exception as e: error_msg = f"Qdrant: Collection initialization failed with error: {e}" logger.error(error_msg) - raise QdrantMigrationError(error_msg) from e + raise DataMigrationError(error_msg) from e def __post_init__(self): # Check for QDRANT_WORKSPACE environment variable first (higher priority)