diff options
author | Jan Srnicek <jsrnicek@cisco.com> | 2017-08-16 09:21:24 +0200 |
---|---|---|
committer | Marek Gradzki <mgradzki@cisco.com> | 2017-08-16 07:56:39 +0000 |
commit | 130c716105017c7b20b4779973b915968b3dc322 (patch) | |
tree | 50b28ac5691928dcff03fcf8cb57bec651a270c1 /infra/translate-utils/src/main/java/io/fd | |
parent | c643983450d5fd56db40ad2718877ec2289e6e6f (diff) |
HONEYCOMB-386 - Make update optional
If customizer does not support update directly,
updates for its handled nodes are broken up to delete + create pairs.
Change-Id: I2929109e8c9a1db0bef108367cf7d839135ce173
Signed-off-by: Jan Srnicek <jsrnicek@cisco.com>
Diffstat (limited to 'infra/translate-utils/src/main/java/io/fd')
3 files changed, 30 insertions, 11 deletions
diff --git a/infra/translate-utils/src/main/java/io/fd/honeycomb/translate/util/write/AbstractGenericWriter.java b/infra/translate-utils/src/main/java/io/fd/honeycomb/translate/util/write/AbstractGenericWriter.java index ff2174ed2..e2ea11535 100644 --- a/infra/translate-utils/src/main/java/io/fd/honeycomb/translate/util/write/AbstractGenericWriter.java +++ b/infra/translate-utils/src/main/java/io/fd/honeycomb/translate/util/write/AbstractGenericWriter.java @@ -18,8 +18,8 @@ package io.fd.honeycomb.translate.util.write; import static com.google.common.base.Preconditions.checkArgument; -import io.fd.honeycomb.translate.write.WriteContext; import io.fd.honeycomb.translate.util.RWUtils; +import io.fd.honeycomb.translate.write.WriteContext; import io.fd.honeycomb.translate.write.WriteFailedException; import io.fd.honeycomb.translate.write.Writer; import javax.annotation.Nonnull; @@ -34,9 +34,11 @@ public abstract class AbstractGenericWriter<D extends DataObject> implements Wri private static final Logger LOG = LoggerFactory.getLogger(AbstractGenericWriter.class); private final InstanceIdentifier<D> instanceIdentifier; + private final boolean supportsUpdate; - protected AbstractGenericWriter(final InstanceIdentifier<D> type) { + protected AbstractGenericWriter(final InstanceIdentifier<D> type, final boolean supportsUpdate) { this.instanceIdentifier = RWUtils.makeIidWildcarded(type); + this.supportsUpdate = supportsUpdate; } protected void writeCurrent(final InstanceIdentifier<D> id, final D data, final WriteContext ctx) @@ -67,10 +69,10 @@ public abstract class AbstractGenericWriter<D extends DataObject> implements Wri @SuppressWarnings("unchecked") @Override - public void update(@Nonnull final InstanceIdentifier<? extends DataObject> id, - @Nullable final DataObject dataBefore, - @Nullable final DataObject dataAfter, - @Nonnull final WriteContext ctx) throws WriteFailedException { + public void processModification(@Nonnull final InstanceIdentifier<? extends DataObject> id, + @Nullable final DataObject dataBefore, + @Nullable final DataObject dataAfter, + @Nonnull final WriteContext ctx) throws WriteFailedException { LOG.debug("{}: Updating : {}", this, id); LOG.trace("{}: Updating : {}, from: {} to: {}", this, id, dataBefore, dataAfter); @@ -134,4 +136,9 @@ public abstract class AbstractGenericWriter<D extends DataObject> implements Wri public String toString() { return String.format("Writer[%s]", getManagedDataObjectType().getTargetType().getSimpleName()); } + + @Override + public boolean supportsDirectUpdate() { + return supportsUpdate; + } } diff --git a/infra/translate-utils/src/main/java/io/fd/honeycomb/translate/util/write/BindingBrokerWriter.java b/infra/translate-utils/src/main/java/io/fd/honeycomb/translate/util/write/BindingBrokerWriter.java index f06e6ae2f..7b68376ba 100644 --- a/infra/translate-utils/src/main/java/io/fd/honeycomb/translate/util/write/BindingBrokerWriter.java +++ b/infra/translate-utils/src/main/java/io/fd/honeycomb/translate/util/write/BindingBrokerWriter.java @@ -49,9 +49,9 @@ public final class BindingBrokerWriter<D extends DataObject> implements Writer<D } @Override - public void update(@Nonnull final InstanceIdentifier<? extends DataObject> id, - @Nullable final DataObject dataBefore, @Nullable final DataObject dataAfter, - @Nonnull final WriteContext ctx) throws WriteFailedException { + public void processModification(@Nonnull final InstanceIdentifier<? extends DataObject> id, + @Nullable final DataObject dataBefore, @Nullable final DataObject dataAfter, + @Nonnull final WriteContext ctx) throws WriteFailedException { final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction(); writeTransaction.put(CONFIGURATION, (InstanceIdentifier<DataObject>) id, dataAfter); final CheckedFuture<Void, TransactionCommitFailedException> result = writeTransaction.submit(); @@ -61,4 +61,9 @@ public final class BindingBrokerWriter<D extends DataObject> implements Writer<D throw new WriteFailedException(id, e); } } + + @Override + public boolean supportsDirectUpdate() { + return false; + } } diff --git a/infra/translate-utils/src/main/java/io/fd/honeycomb/translate/util/write/NoopWriterRegistry.java b/infra/translate-utils/src/main/java/io/fd/honeycomb/translate/util/write/NoopWriterRegistry.java index 8f15c6f8d..13ae12fad 100644 --- a/infra/translate-utils/src/main/java/io/fd/honeycomb/translate/util/write/NoopWriterRegistry.java +++ b/infra/translate-utils/src/main/java/io/fd/honeycomb/translate/util/write/NoopWriterRegistry.java @@ -20,6 +20,7 @@ import io.fd.honeycomb.translate.TranslationException; import io.fd.honeycomb.translate.write.WriteContext; import io.fd.honeycomb.translate.write.registry.WriterRegistry; import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; /** * Empty registry that does not perform any changes. Can be used in data layer, if we want to disable passing data to @@ -28,12 +29,18 @@ import javax.annotation.Nonnull; public class NoopWriterRegistry implements WriterRegistry, AutoCloseable { @Override - public void update(@Nonnull final DataObjectUpdates updates, - @Nonnull final WriteContext ctx) throws TranslationException { + public void processModifications(@Nonnull final DataObjectUpdates updates, + @Nonnull final WriteContext ctx) throws TranslationException { // NOOP } @Override + public boolean writerSupportsUpdate(@Nonnull final InstanceIdentifier<?> type) { + // returns true to make higher level performance better(does not have to break updates to delete+create pairs) + return true; + } + + @Override public void close() throws Exception { // NOOP } |