feat: Add helpful error message for database connection failures
- Catch Redis/database connection errors during initialization - Provide clear, formatted error messages with startup instructions - Include provider-specific guidance (FalkorDB vs Neo4j) - Improves developer experience when database is not running
This commit is contained in:
parent
008678dc49
commit
6b716d57d2
1 changed files with 53 additions and 25 deletions
|
|
@ -209,33 +209,61 @@ class GraphitiService:
|
||||||
self.entity_types = custom_types
|
self.entity_types = custom_types
|
||||||
|
|
||||||
# Initialize Graphiti client with appropriate driver
|
# Initialize Graphiti client with appropriate driver
|
||||||
if self.config.database.provider.lower() == 'falkordb':
|
try:
|
||||||
# For FalkorDB, create a FalkorDriver instance directly
|
if self.config.database.provider.lower() == 'falkordb':
|
||||||
from graphiti_core.driver.falkordb_driver import FalkorDriver
|
# For FalkorDB, create a FalkorDriver instance directly
|
||||||
|
from graphiti_core.driver.falkordb_driver import FalkorDriver
|
||||||
|
|
||||||
falkor_driver = FalkorDriver(
|
falkor_driver = FalkorDriver(
|
||||||
host=db_config['host'],
|
host=db_config['host'],
|
||||||
port=db_config['port'],
|
port=db_config['port'],
|
||||||
password=db_config['password'],
|
password=db_config['password'],
|
||||||
database=db_config['database'],
|
database=db_config['database'],
|
||||||
)
|
)
|
||||||
|
|
||||||
self.client = Graphiti(
|
self.client = Graphiti(
|
||||||
graph_driver=falkor_driver,
|
graph_driver=falkor_driver,
|
||||||
llm_client=llm_client,
|
llm_client=llm_client,
|
||||||
embedder=embedder_client,
|
embedder=embedder_client,
|
||||||
max_coroutines=self.semaphore_limit,
|
max_coroutines=self.semaphore_limit,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
# For Neo4j (default), use the original approach
|
# For Neo4j (default), use the original approach
|
||||||
self.client = Graphiti(
|
self.client = Graphiti(
|
||||||
uri=db_config['uri'],
|
uri=db_config['uri'],
|
||||||
user=db_config['user'],
|
user=db_config['user'],
|
||||||
password=db_config['password'],
|
password=db_config['password'],
|
||||||
llm_client=llm_client,
|
llm_client=llm_client,
|
||||||
embedder=embedder_client,
|
embedder=embedder_client,
|
||||||
max_coroutines=self.semaphore_limit,
|
max_coroutines=self.semaphore_limit,
|
||||||
)
|
)
|
||||||
|
except Exception as db_error:
|
||||||
|
# Check for connection errors
|
||||||
|
error_msg = str(db_error).lower()
|
||||||
|
if 'connection refused' in error_msg or 'could not connect' in error_msg:
|
||||||
|
db_provider = self.config.database.provider
|
||||||
|
if db_provider.lower() == 'falkordb':
|
||||||
|
raise RuntimeError(
|
||||||
|
f"\n{'='*70}\n"
|
||||||
|
f"Database Connection Error: FalkorDB is not running\n"
|
||||||
|
f"{'='*70}\n\n"
|
||||||
|
f"FalkorDB at {db_config['host']}:{db_config['port']} is not accessible.\n\n"
|
||||||
|
f"To start FalkorDB:\n"
|
||||||
|
f" - Using Docker Compose: cd mcp_server && docker compose up\n"
|
||||||
|
f" - Or run FalkorDB manually: docker run -p 6379:6379 falkordb/falkordb\n\n"
|
||||||
|
f"{'='*70}\n"
|
||||||
|
) from db_error
|
||||||
|
else:
|
||||||
|
raise RuntimeError(
|
||||||
|
f"\n{'='*70}\n"
|
||||||
|
f"Database Connection Error: {db_provider} is not running\n"
|
||||||
|
f"{'='*70}\n\n"
|
||||||
|
f"{db_provider} at {db_config.get('uri', 'unknown')} is not accessible.\n\n"
|
||||||
|
f"Please ensure {db_provider} is running and accessible.\n\n"
|
||||||
|
f"{'='*70}\n"
|
||||||
|
) from db_error
|
||||||
|
# Re-raise other errors
|
||||||
|
raise
|
||||||
|
|
||||||
# Build indices
|
# Build indices
|
||||||
await self.client.build_indices_and_constraints()
|
await self.client.build_indices_and_constraints()
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue