private static void checkDeleteApplicable(final NodeModification modification, final Optional<TreeNode> current) {
// Delete is always applicable, we do not expose it to subclasses
- if (current.isPresent()) {
+ if (!current.isPresent()) {
LOG.trace("Delete operation turned to no-op on missing node {}", modification);
}
}
final Optional<TreeNode> apply(final ModifiedNode modification, final Optional<TreeNode> currentMeta, final Version version) {
switch (modification.getOperation()) {
case DELETE:
- modification.resolveModificationType(ModificationType.DELETE);
+ // Deletion of a non-existing node is a no-op, report it as such
+ modification.resolveModificationType(currentMeta.isPresent() ? ModificationType.DELETE : ModificationType.UNMODIFIED);
return modification.setSnapshot(Optional.<TreeNode> absent());
case TOUCH:
Preconditions.checkArgument(currentMeta.isPresent(), "Metadata not available for modification %s",