diff options
Diffstat (limited to 'infra/translate-api/src/main/java/io/fd/honeycomb/translate/write/registry/WriterRegistry.java')
-rw-r--r-- | infra/translate-api/src/main/java/io/fd/honeycomb/translate/write/registry/WriterRegistry.java | 147 |
1 files changed, 10 insertions, 137 deletions
diff --git a/infra/translate-api/src/main/java/io/fd/honeycomb/translate/write/registry/WriterRegistry.java b/infra/translate-api/src/main/java/io/fd/honeycomb/translate/write/registry/WriterRegistry.java index a297b6de8..e2924f84a 100644 --- a/infra/translate-api/src/main/java/io/fd/honeycomb/translate/write/registry/WriterRegistry.java +++ b/infra/translate-api/src/main/java/io/fd/honeycomb/translate/write/registry/WriterRegistry.java @@ -16,8 +16,6 @@ package io.fd.honeycomb.translate.write.registry; -import static com.google.common.base.Preconditions.checkNotNull; - import com.google.common.annotations.Beta; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; @@ -26,6 +24,8 @@ import io.fd.honeycomb.translate.write.DataObjectUpdate; import io.fd.honeycomb.translate.write.WriteContext; import io.fd.honeycomb.translate.write.Writer; import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @@ -38,8 +38,7 @@ public interface WriterRegistry { /** * Performs bulk update. * - * @throws BulkUpdateException in case bulk update fails - * @throws TranslationException in case some other error occurs while processing update request + * @throws TranslationException in case update fails or there was some other problem while processing */ void processModifications(@Nonnull DataObjectUpdates updates, @Nonnull WriteContext ctx) throws TranslationException; @@ -52,8 +51,8 @@ public interface WriterRegistry { boolean writerSupportsUpdate(@Nonnull InstanceIdentifier<?> type); /** - * Simple DTO containing updates for {@link WriterRegistry}. Currently only deletes and updates (create + - * update) are distinguished. + * Simple DTO containing updates for {@link WriterRegistry}. Currently only deletes and updates (create + update) + * are distinguished. */ @Beta final class DataObjectUpdates { @@ -97,6 +96,11 @@ public interface WriterRegistry { return Sets.union(deletes.keySet(), updates.keySet()); } + public Set<DataObjectUpdate> getAllModifications() { + return Stream.concat(updates.values().stream(), deletes.values().stream()) + .collect(Collectors.toSet()); + } + /** * Check whether there is only a single type of data object to be updated. * @@ -132,135 +136,4 @@ public interface WriterRegistry { } } - - /** - * Thrown when bulk update failed. - */ - @Beta - class BulkUpdateException extends TranslationException { - - private final transient Reverter reverter; - private final InstanceIdentifier<?> failedSubtree; - private final DataObjectUpdate failedData; - private final Set<InstanceIdentifier<?>> unrevertedSubtrees; - - /** - * Constructs an BulkUpdateException. - * @param unhandledSubtrees instance identifiers of the data objects that were not processed during bulk update. - * @param cause the cause of bulk update failure - */ - public BulkUpdateException(@Nonnull final InstanceIdentifier<?> failedSubtree, - @Nonnull final DataObjectUpdate failedData, - @Nonnull final Set<InstanceIdentifier<?>> unhandledSubtrees, - @Nonnull final Reverter reverter, - @Nonnull final Throwable cause) { - super("Bulk update failed at: " + failedSubtree + " ignored updates: " + unhandledSubtrees, cause); - this.failedSubtree = failedSubtree; - this.failedData = failedData; - this.unrevertedSubtrees = unhandledSubtrees; - this.reverter = checkNotNull(reverter, "reverter should not be null"); - } - - /** - * Reverts changes that were successfully applied during bulk update before failure occurred. - * - * @param writeContext Non-closed {@code WriteContext} to be used by reverting logic.<br> <b>Do not use same - * write context as was used in previous write</b> - * @throws Reverter.RevertFailedException if revert fails - */ - public void revertChanges(@Nonnull final WriteContext writeContext) throws Reverter.RevertFailedException { - reverter.revert(writeContext); - } - - public Set<InstanceIdentifier<?>> getUnrevertedSubtrees() { - return unrevertedSubtrees; - } - - public InstanceIdentifier<?> getFailedSubtree() { - return failedSubtree; - } - - public DataObjectUpdate getFailedData() { - return failedData; - } - } - - /** - * Abstraction over revert mechanism in case of a bulk update failure. - */ - @Beta - interface Reverter { - - /** - * Reverts changes that were successfully applied during bulk update before failure occurred. Changes are - * reverted in reverse order they were applied. - * Used {@code WriteContext} needs to be in non-closed state, creating fresh one for revert - * is recommended, same way as for write, to allow {@code Reverter} use same logic as write. - * - * @param writeContext Non-closed {@code WriteContext} to be used by reverting logic - * @throws RevertFailedException if not all of applied changes were successfully reverted - */ - void revert(@Nonnull final WriteContext writeContext) throws RevertFailedException; - - /** - * Thrown when some of the changes applied during bulk update were not reverted. - */ - @Beta - class RevertFailedException extends TranslationException { - - /** - * Constructs a RevertFailedException with the list of changes that were not reverted. - * - * @param cause the cause of revert failure - */ - public RevertFailedException(@Nonnull final BulkUpdateException cause) { - super("Unable to revert changes after failure. Revert failed for " - + cause.getFailedSubtree() + " unreverted subtrees: " + cause.getUnrevertedSubtrees(), cause); - } - - /** - * Returns the list of changes that were not reverted. - * - * @return list of changes that were not reverted - */ - @Nonnull - public Set<InstanceIdentifier<?>> getNotRevertedChanges() { - return ((BulkUpdateException) getCause()).getUnrevertedSubtrees(); - } - - /** - * Returns the update that caused the failure. - * - * @return update that caused the failure - */ - @Nonnull - public DataObjectUpdate getFailedUpdate() { - return ((BulkUpdateException) getCause()).getFailedData(); - } - } - - /** - * Thrown after bulk operation was successfully reverted, - * to maintain marking of transaction as failed,without double logging of - * cause of update fail(its logged before reverting in ModifiableDataTreeDelegator - */ - @Beta - class RevertSuccessException extends TranslationException { - private final Set<InstanceIdentifier<?>> failedIds; - - /** - * Constructs an RevertSuccessException. - * - * @param failedIds instance identifiers of the data objects that were not processed during bulk update. - */ - public RevertSuccessException(@Nonnull final Set<InstanceIdentifier<?>> failedIds) { - super("Bulk update failed for: " + failedIds); - this.failedIds = failedIds; - } - - public Set<InstanceIdentifier<?>> getFailedIds() { - return failedIds; - } - } - } }
\ No newline at end of file |