Closed kraney closed 2 years ago
Correction - that should be version 3.5.16-enterprise
@kraney
With the latest Apoc version there is a phase: "afterAsync"
to prevent some Transaction errors like this.
Please, could you try with this?
I am having the same problem.
I have the trigger in before
phase that is listening to removed property on a deleted relationship (HAS_BOSS).
And I want to rename relationships (not the one I am listening to) but the incoming HAS_BOSS relationship of the start node (Client)
CALL apoc.trigger.add('hasBossStartDateRemoved',
"UNWIND $removedRelationshipProperties['startDate'] AS map
WITH map.relationship AS rel, map.old AS startDate WHERE type(map.relationship) = 'HAS_BOSS'
WITH rel, startNode(rel) AS client, startDate
MATCH (client)<-[ohs:HAS_BOSS]-(orphan:Client)
WITH ohs
CALL apoc.refactor.setType(ohs, 'HAD_BOSS') YIELD output
RETURN count(*)")
This blows with `Getting deleted relationship data should have been covered by the tx state`
but the strange thing is that all updates/deletes actuallysucceed.
Were you able to solve the problem? I have a similar issue for which I opened an issue (https://github.com/neo4j-contrib/neo4j-apoc-procedures/issues/3216)
Expected Behavior: Delete nodes and relationships while having apoc.trigger.propertiesByKey($removedNodeProperties,"progenitorId")
Sample apoc trigger in production :
CALL apoc.trigger.add('requiredIdentifiers_removedNodeProperties_preventRemovalOnProgenitorId', 'UNWIND apoc.trigger.propertiesByKey($removedNodeProperties,"progenitorId") AS prop WITH prop.node AS n, prop.old AS oldValue SET n.progenitorId=oldValue RETURN 0', {phase:'before'}); CALL apoc.trigger.add('requiredIdentifiers_removedRelationshipProperties_preventRemovalOnExternalId', 'UNWIND apoc.trigger.propertiesByKey($removedRelationshipProperties,"externalId") AS prop WITH prop.relationship AS r, prop.old AS oldValue SET r.externalId=oldValue RETURN 0', {phase:'before'});
Actual Behavior: Neo.ClientError.Transaction.TransactionHookFailed: Error executing trigger requiredIdentifiers_removedNodeProperties_preventRemovalOnProgenitorId in phase before org.neo4j.graphdb.TransactionFailureException: Unable to complete transaction.
How to Reproduce the Problem -> CREATE DATABASE dummy -> CALL apoc.trigger.add('requiredIdentifiers_removedNodeProperties_preventRemovalOnProgenitorId', 'UNWIND apoc.trigger.propertiesByKey($removedNodeProperties,"progenitorId") AS prop WITH prop.node AS n, prop.old AS oldValue SET n.progenitorId=oldValue RETURN 0', {phase:'before'}); -> CREATE (node:dummyActivity {progenitorId : 123456}) -> MATCH (n:Activity) where n.progenitorId = 123456 delete n apoc_trigger_error.pdf
@conker84 - can you please look into this when you get time? I am using ( Neo4j: 4.4.8, Neo4j-Apoc: 4.4.0.4 ) Background: With apoc.triggers in place, we don't allow users to delete/update the node properties or relationship properties, however we give them access delete nodes and relationship and are successful using neo4j 3.5.18 and apoc 3.5.0.12-all.
Expected Behavior (Mandatory)
Adding a trigger in phase 'after' does not disrupt any operations
Actual Behavior (Mandatory)
When I create a trigger in phase 'after' - even when I reduce it to simply doing "RETURN NULL", it causes some transactions to fail with a stack trace like the following:
The specific transactions that fail with this error seem to be ones that include a deleted relationship. And that relationship was itself deleted by a 'before' trigger, if that matters.
How to Reproduce the Problem
I have not yet been able to reduce the problem to a straightforward procedure to reproduce it. It seems to be a complex interaction between triggers.
Steps (Mandatory)
Specifications (Mandatory)
Currently used versions
Versions