X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-binding-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fbinding%2Fcompat%2FHydrogenDataBrokerAdapter.java;h=a4f260c6c1ea928adcf80c80c058525613ea2392;hp=0ac8f697028ce7958153f3166f8985d4e1cb2acc;hb=80fcd5e9757822d5a4c0749fb206e796b4b00d59;hpb=5ce3f45de1eb4a6f7abd9b02343ef215d06654c3 diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/compat/HydrogenDataBrokerAdapter.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/compat/HydrogenDataBrokerAdapter.java index 0ac8f69702..a4f260c6c1 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/compat/HydrogenDataBrokerAdapter.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/compat/HydrogenDataBrokerAdapter.java @@ -7,48 +7,31 @@ */ package org.opendaylight.controller.md.sal.binding.compat; -import com.google.common.base.Function; -import com.google.common.util.concurrent.AsyncFunction; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; -import com.google.common.util.concurrent.ListeningExecutorService; -import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Set; -import java.util.concurrent.Callable; -import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutionException; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; -import org.opendaylight.controller.md.sal.common.api.RegistrationListener; import org.opendaylight.controller.md.sal.common.api.TransactionStatus; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent; -import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler; -import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler.DataCommitTransaction; -import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandlerRegistration; -import org.opendaylight.controller.md.sal.common.api.data.DataReader; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.impl.service.AbstractDataTransaction; import org.opendaylight.controller.sal.binding.api.data.DataChangeListener; import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction; import org.opendaylight.controller.sal.binding.api.data.DataProviderService; -import org.opendaylight.controller.sal.binding.codegen.impl.SingletonHolder; -import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; import org.opendaylight.yangtools.concepts.Delegator; import org.opendaylight.yangtools.concepts.ListenerRegistration; -import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.util.ListenerRegistry; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcResult; -import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -57,9 +40,6 @@ public class HydrogenDataBrokerAdapter implements DataProviderService, AutoClose private static final Logger LOG = LoggerFactory.getLogger(HydrogenDataBrokerAdapter.class); - private final ConcurrentHashMap, CommitHandlerRegistrationImpl> commitHandlers = new ConcurrentHashMap<>(); - private final ListeningExecutorService executorService = SingletonHolder.getDefaultCommitExecutor(); - private final DataBroker delegate; public HydrogenDataBrokerAdapter(final DataBroker dataBroker) { @@ -74,110 +54,30 @@ public class HydrogenDataBrokerAdapter implements DataProviderService, AutoClose @Override public DataObject readConfigurationData(final InstanceIdentifier path) { - DataModificationTransaction tx = beginTransaction(); + final DataModificationTransaction tx = beginTransaction(); return tx.readConfigurationData(path); } @Override public DataObject readOperationalData(final InstanceIdentifier path) { - DataModificationTransaction tx = beginTransaction(); + final DataModificationTransaction tx = beginTransaction(); return tx.readOperationalData(path); } - @Override - public Registration registerCommitHandler( - final InstanceIdentifier path, - final DataCommitHandler, DataObject> commitHandler) { - CommitHandlerRegistrationImpl reg = new CommitHandlerRegistrationImpl(path, commitHandler); - commitHandlers.put(path, reg); - return reg; - } - - @Override - @Deprecated - public ListenerRegistration, DataObject>>> registerCommitHandlerListener( - final RegistrationListener, DataObject>> commitHandlerListener) { - throw new UnsupportedOperationException("Not supported contract."); - } - @Override public ListenerRegistration registerDataChangeListener( final InstanceIdentifier path, final DataChangeListener listener) { - org.opendaylight.controller.md.sal.binding.api.DataChangeListener asyncOperListener = new BackwardsCompatibleOperationalDataChangeInvoker(listener); - org.opendaylight.controller.md.sal.binding.api.DataChangeListener asyncCfgListener = new BackwardsCompatibleConfigurationDataChangeInvoker(listener); + final org.opendaylight.controller.md.sal.binding.api.DataChangeListener asyncOperListener = new BackwardsCompatibleOperationalDataChangeInvoker(listener); + final org.opendaylight.controller.md.sal.binding.api.DataChangeListener asyncCfgListener = new BackwardsCompatibleConfigurationDataChangeInvoker(listener); - ListenerRegistration cfgReg = delegate.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, path, asyncCfgListener, DataChangeScope.SUBTREE); - ListenerRegistration operReg = delegate.registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, path, asyncOperListener, DataChangeScope.SUBTREE); + final ListenerRegistration cfgReg = delegate.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, path, asyncCfgListener, DataChangeScope.SUBTREE); + final ListenerRegistration operReg = delegate.registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, path, asyncOperListener, DataChangeScope.SUBTREE); return new LegacyListenerRegistration(listener,cfgReg,operReg); } - @Override - public Registration registerDataReader( - final InstanceIdentifier path, - final DataReader, DataObject> reader) { - throw new UnsupportedOperationException("Data reader contract is not supported."); - } - - public ListenableFuture> commit(final ForwardedBackwardsCompatibleTransacion tx) { - - final List, DataObject>> subTrans = new ArrayList<>(); - LOG.debug("Tx: {} Submitted.",tx.getIdentifier()); - ListenableFuture requestCommit = executorService.submit(new Callable() { - - @Override - public Boolean call() throws Exception { - try { - for (CommitHandlerRegistrationImpl handler : commitHandlers.values()) { - - DataCommitTransaction, DataObject> subTx = handler - .getInstance().requestCommit(tx); - subTrans.add(subTx); - } - } catch (Exception e) { - LOG.error("Tx: {} Rollback.",tx.getIdentifier(),e); - for (DataCommitTransaction, DataObject> subTx : subTrans) { - subTx.rollback(); - } - return false; - } - LOG.debug("Tx: {} Can Commit True.",tx.getIdentifier()); - return true; - } - - }); - - ListenableFuture> dataStoreCommit = Futures.transform(requestCommit, new AsyncFunction>() { - - @Override - public ListenableFuture> apply(final Boolean requestCommitSuccess) throws Exception { - if(requestCommitSuccess) { - return AbstractDataTransaction.convertToLegacyCommitFuture(tx.delegate.submit()); - } - return Futures.immediateFuture(RpcResultBuilder.failed().withResult(TransactionStatus.FAILED).build()); - } - }); - - return Futures.transform(dataStoreCommit, new Function,RpcResult>() { - @Override - public RpcResult apply(final RpcResult input) { - if(input.isSuccessful()) { - for(DataCommitTransaction, DataObject> subTx : subTrans ) { - subTx.finish(); - } - } else { - LOG.error("Tx: {} Rollback - Datastore commit failed.",tx.getIdentifier()); - for(DataCommitTransaction, DataObject> subTx : subTrans ) { - subTx.rollback(); - } - } - return input; - } - }); - } - @Deprecated private class ForwardedBackwardsCompatibleTransacion implements DataModificationTransaction { @@ -206,7 +106,7 @@ public class HydrogenDataBrokerAdapter implements DataProviderService, AutoClose @Override public void putOperationalData(final InstanceIdentifier path, final DataObject data) { - boolean previouslyRemoved = posponedRemovedOperational.remove(path); + final boolean previouslyRemoved = posponedRemovedOperational.remove(path); @SuppressWarnings({ "rawtypes", "unchecked" }) final InstanceIdentifier castedPath = (InstanceIdentifier) path; @@ -219,8 +119,8 @@ public class HydrogenDataBrokerAdapter implements DataProviderService, AutoClose @Override public void putConfigurationData(final InstanceIdentifier path, final DataObject data) { - boolean previouslyRemoved = posponedRemovedConfiguration.remove(path); - DataObject originalObj = readConfigurationData(path); + final boolean previouslyRemoved = posponedRemovedConfiguration.remove(path); + final DataObject originalObj = readConfigurationData(path); if (originalObj != null) { original.put(path, originalObj); @@ -311,10 +211,10 @@ public class HydrogenDataBrokerAdapter implements DataProviderService, AutoClose LOG.trace("Transaction {} changed status to {}", getIdentifier(), status); this.status = status; - for(ListenerRegistration listener : listeners) { + for(final ListenerRegistration listener : listeners) { try { listener.getInstance().onStatusUpdated(this, status); - } catch (Exception e) { + } catch (final Exception e) { LOG.error("Error during invoking transaction listener {}",listener.getInstance(),e); } } @@ -323,17 +223,17 @@ public class HydrogenDataBrokerAdapter implements DataProviderService, AutoClose @Override public ListenableFuture> commit() { - for(InstanceIdentifier path : posponedRemovedConfiguration) { + for(final InstanceIdentifier path : posponedRemovedConfiguration) { delegate.delete(LogicalDatastoreType.CONFIGURATION, path); } - for(InstanceIdentifier path : posponedRemovedOperational) { + for(final InstanceIdentifier path : posponedRemovedOperational) { delegate.delete(LogicalDatastoreType.OPERATIONAL, path); } changeStatus(TransactionStatus.SUBMITED); - final ListenableFuture> f = HydrogenDataBrokerAdapter.this.commit(this); + final ListenableFuture> f = delegate.commit(); Futures.addCallback(f, new FutureCallback>() { @Override @@ -364,25 +264,6 @@ public class HydrogenDataBrokerAdapter implements DataProviderService, AutoClose } - private class CommitHandlerRegistrationImpl extends - AbstractObjectRegistration, DataObject>> { - - private final InstanceIdentifier path; - - public CommitHandlerRegistrationImpl(final InstanceIdentifier path, - final DataCommitHandler, DataObject> commitHandler) { - super(commitHandler); - this.path = path; - } - - @Override - protected void removeRegistration() { - commitHandlers.remove(path, this); - } - - } - - private static final class LegacyListenerRegistration implements ListenerRegistration { private final DataChangeListener instance; @@ -423,7 +304,7 @@ public class HydrogenDataBrokerAdapter implements DataProviderService, AutoClose @Override public void onDataChanged(final AsyncDataChangeEvent, DataObject> change) { - DataChangeEvent legacyChange = HydrogenDataChangeEvent.createOperational(change); + final DataChangeEvent legacyChange = HydrogenDataChangeEvent.createOperational(change); delegate.onDataChanged(legacyChange); } @@ -446,7 +327,7 @@ public class HydrogenDataBrokerAdapter implements DataProviderService, AutoClose @Override public void onDataChanged(final AsyncDataChangeEvent, DataObject> change) { - DataChangeEvent legacyChange = HydrogenDataChangeEvent.createConfiguration(change); + final DataChangeEvent legacyChange = HydrogenDataChangeEvent.createConfiguration(change); delegate.onDataChanged(legacyChange);