Description
There are two issue with conflicting IDs:
- DocViewSAXImporter.addNode(DocViewNode) checks if an ID set in the node which is about to be imported to the JCR is already taken (https://github.com/apache/jackrabbit-filevault/blob/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/DocViewSAXImporter.java#L777). Unfortunately this check will completely skip the import if the conflicting node is a sibling of the to-be-imported node
- Since between the check for the conflicting node id and the actual import in DocViewSAXImporter.createNode(DocViewNode) there might be other JCR operations happening leading to a conflicting node the import behaviour set in https://github.com/apache/jackrabbit-filevault/blob/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/DocViewSAXImporter.java#L979 might still matter in edge cases.
Currently it is using the ImportUUIDBehavior.IMPORT_UUID_COLLISION_REMOVE_EXISTING.
According to the JCR Spec (http://www.day.com/specs/jcr/2.0/11_Import.html#11.8.2%20Remove%20Existing%20Node) that means the node with the same ID is first removed from the repo (no matter where it is located), then the new node one is imported with that ID.
That is a problem, if by coincidence the ID 1 is used for node /content/a in the repository and now you install a package containing /content/b also having the ID 1. Then the package would remove the /content/a node from the repository, although this is not intended. I would rather recommend using ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW.
Attachments
Issue Links
- is related to
-
JCRVLT-551 Set jcr:uuid to value from package when updating node
- Closed
- relates to
-
OAK-1846 ConstraintViolationException: OakConstraint0030: Uniqueness constraint violated for key <>
- Reopened
- links to