This commit is contained in:
Matthew Mo 2025-12-14 14:38:25 +00:00 committed by GitHub
commit 1383e8cbc7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -18,6 +18,7 @@ import logging
from collections.abc import Coroutine from collections.abc import Coroutine
from typing import Any from typing import Any
import neo4j.exceptions
from neo4j import AsyncGraphDatabase, EagerResult from neo4j import AsyncGraphDatabase, EagerResult
from neo4j.exceptions import ClientError from neo4j.exceptions import ClientError
from typing_extensions import LiteralString from typing_extensions import LiteralString
@ -71,6 +72,15 @@ class Neo4jDriver(GraphDriver):
try: try:
result = await self.client.execute_query(cypher_query_, parameters_=params, **kwargs) result = await self.client.execute_query(cypher_query_, parameters_=params, **kwargs)
except neo4j.exceptions.ClientError as e:
# Handle race condition when creating indices/constraints in parallel
# Neo4j 5.26+ may throw EquivalentSchemaRuleAlreadyExists even with IF NOT EXISTS
if 'EquivalentSchemaRuleAlreadyExists' in str(e):
logger.info(f'Index or constraint already exists, continuing: {cypher_query_}')
# Return empty result to indicate success (index exists)
return EagerResult([], None, None) # type: ignore
logger.error(f'Error executing Neo4j query: {e}\n{cypher_query_}\n{params}')
raise
except Exception as e: except Exception as e:
logger.error(f'Error executing Neo4j query: {e}\n{cypher_query_}\n{params}') logger.error(f'Error executing Neo4j query: {e}\n{cypher_query_}\n{params}')
raise raise