From b5a8227035c524df1bc295cb95aab7f1ff42d487 Mon Sep 17 00:00:00 2001 From: gmakstutis Date: Sun, 14 Dec 2025 19:23:08 +0000 Subject: [PATCH] Update graphiti_core/driver/neo4j_driver.py --- graphiti_core/driver/neo4j_driver.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/graphiti_core/driver/neo4j_driver.py b/graphiti_core/driver/neo4j_driver.py index f5a815fd..ad2ff3b0 100644 --- a/graphiti_core/driver/neo4j_driver.py +++ b/graphiti_core/driver/neo4j_driver.py @@ -18,6 +18,7 @@ import logging from collections.abc import Coroutine from typing import Any +import neo4j.exceptions from neo4j import AsyncGraphDatabase, EagerResult from neo4j.exceptions import ClientError from typing_extensions import LiteralString @@ -71,6 +72,15 @@ class Neo4jDriver(GraphDriver): try: 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: logger.error(f'Error executing Neo4j query: {e}\n{cypher_query_}\n{params}') raise