X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=netconf%2Fnetconf-topology-singleton%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetconf%2Ftopology%2Fsingleton%2Fimpl%2Factors%2FNetconfNodeActor.java;h=2e46cd4a1bfbb033f2b5948116503124eb3bf567;hb=1cf7c291c406d759c55c5ed0b15d28b32926e312;hp=fbd0422b692c66129f336dbb0f38bd8440ef31fe;hpb=56754e685563cf98a77e2e0772753f95165293b8;p=netconf.git diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/NetconfNodeActor.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/NetconfNodeActor.java index fbd0422b69..2e46cd4a1b 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/NetconfNodeActor.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/NetconfNodeActor.java @@ -15,6 +15,7 @@ import akka.util.Timeout; import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.MoreExecutors; import java.io.IOException; import java.util.List; import java.util.stream.Collectors; @@ -25,7 +26,9 @@ import org.opendaylight.controller.cluster.schema.provider.impl.RemoteSchemaProv import org.opendaylight.controller.cluster.schema.provider.impl.YangTextSchemaSourceSerializationProxy; import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction; +import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction; import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; +import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.controller.md.sal.dom.api.DOMRpcException; import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult; import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; @@ -39,6 +42,7 @@ import org.opendaylight.netconf.topology.singleton.messages.CreateInitialMasterA import org.opendaylight.netconf.topology.singleton.messages.MasterActorDataInitialized; import org.opendaylight.netconf.topology.singleton.messages.NormalizedNodeMessage; import org.opendaylight.netconf.topology.singleton.messages.RefreshSetupMasterActorData; +import org.opendaylight.netconf.topology.singleton.messages.RefreshSlaveActor; import org.opendaylight.netconf.topology.singleton.messages.RegisterMountPoint; import org.opendaylight.netconf.topology.singleton.messages.UnregisterSlaveMountPoint; import org.opendaylight.netconf.topology.singleton.messages.YangTextSchemaSourceRequest; @@ -47,6 +51,8 @@ import org.opendaylight.netconf.topology.singleton.messages.rpc.InvokeRpcMessage import org.opendaylight.netconf.topology.singleton.messages.transactions.EmptyResultResponse; import org.opendaylight.netconf.topology.singleton.messages.transactions.NewReadTransactionReply; import org.opendaylight.netconf.topology.singleton.messages.transactions.NewReadTransactionRequest; +import org.opendaylight.netconf.topology.singleton.messages.transactions.NewReadWriteTransactionReply; +import org.opendaylight.netconf.topology.singleton.messages.transactions.NewReadWriteTransactionRequest; import org.opendaylight.netconf.topology.singleton.messages.transactions.NewWriteTransactionReply; import org.opendaylight.netconf.topology.singleton.messages.transactions.NewWriteTransactionRequest; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; @@ -70,11 +76,12 @@ public class NetconfNodeActor extends UntypedActor { private static final Logger LOG = LoggerFactory.getLogger(NetconfNodeActor.class); - private final SchemaSourceRegistry schemaRegistry; - private final SchemaRepository schemaRepository; - private final Timeout actorResponseWaitTime; private final Duration writeTxIdleTimeout; + private final DOMMountPointService mountPointService; + private SchemaSourceRegistry schemaRegistry; + private SchemaRepository schemaRepository; + private Timeout actorResponseWaitTime; private RemoteDeviceId id; private NetconfTopologySetup setup; private List sourceIdentifiers; @@ -87,22 +94,27 @@ public class NetconfNodeActor extends UntypedActor { public static Props props(final NetconfTopologySetup setup, final RemoteDeviceId id, final SchemaSourceRegistry schemaRegistry, - final SchemaRepository schemaRepository, final Timeout actorResponseWaitTime) { + final SchemaRepository schemaRepository, final Timeout actorResponseWaitTime, + final DOMMountPointService mountPointService) { return Props.create(NetconfNodeActor.class, () -> - new NetconfNodeActor(setup, id, schemaRegistry, schemaRepository, actorResponseWaitTime)); + new NetconfNodeActor(setup, id, schemaRegistry, schemaRepository, actorResponseWaitTime, + mountPointService)); } private NetconfNodeActor(final NetconfTopologySetup setup, final RemoteDeviceId id, final SchemaSourceRegistry schemaRegistry, - final SchemaRepository schemaRepository, final Timeout actorResponseWaitTime) { + final SchemaRepository schemaRepository, final Timeout actorResponseWaitTime, + final DOMMountPointService mountPointService) { this.setup = setup; this.id = id; this.schemaRegistry = schemaRegistry; this.schemaRepository = schemaRepository; this.actorResponseWaitTime = actorResponseWaitTime; this.writeTxIdleTimeout = setup.getIdleTimeout(); + this.mountPointService = mountPointService; } + @SuppressWarnings("checkstyle:IllegalCatch") @Override public void onReceive(final Object message) throws Exception { if (message instanceof CreateInitialMasterActorData) { // master @@ -142,10 +154,18 @@ public class NetconfNodeActor extends UntypedActor { final DOMDataWriteTransaction tx = deviceDataBroker.newWriteOnlyTransaction(); final ActorRef txActor = context().actorOf(WriteTransactionActor.props(tx, writeTxIdleTimeout)); sender().tell(new NewWriteTransactionReply(txActor), self()); - } catch (final Throwable t) { + } catch (final Exception t) { sender().tell(t, self()); } + } else if (message instanceof NewReadWriteTransactionRequest) { + try { + final DOMDataReadWriteTransaction tx = deviceDataBroker.newReadWriteTransaction(); + final ActorRef txActor = context().actorOf(ReadWriteTransactionActor.props(tx, writeTxIdleTimeout)); + sender().tell(new NewReadWriteTransactionReply(txActor), self()); + } catch (final Exception t) { + sender().tell(t, self()); + } } else if (message instanceof InvokeRpcMessage) { // master final InvokeRpcMessage invokeRpcMessage = ((InvokeRpcMessage) message); @@ -161,8 +181,14 @@ public class NetconfNodeActor extends UntypedActor { slaveSalManager.close(); slaveSalManager = null; } - + } else if (message instanceof RefreshSlaveActor) { //slave + actorResponseWaitTime = ((RefreshSlaveActor) message).getActorResponseWaitTime(); + id = ((RefreshSlaveActor) message).getId(); + schemaRegistry = ((RefreshSlaveActor) message).getSchemaRegistry(); + setup = ((RefreshSlaveActor) message).getSetup(); + schemaRepository = ((RefreshSlaveActor) message).getSchemaRepository(); } + } @Override @@ -189,7 +215,7 @@ public class NetconfNodeActor extends UntypedActor { public void onFailure(@Nonnull final Throwable throwable) { sender.tell(throwable, getSelf()); } - }); + }, MoreExecutors.directExecutor()); } private void invokeSlaveRpc(final SchemaPath schemaPath, final NormalizedNodeMessage normalizedNodeMessage, @@ -217,7 +243,7 @@ public class NetconfNodeActor extends UntypedActor { public void onFailure(@Nonnull final Throwable throwable) { recipient.tell(throwable, getSelf()); } - }); + }, MoreExecutors.directExecutor()); } private void registerSlaveMountPoint(final ActorRef masterReference) { @@ -225,7 +251,8 @@ public class NetconfNodeActor extends UntypedActor { slaveSalManager.close(); } closeSchemaSourceRegistrations(); - slaveSalManager = new SlaveSalFacade(id, setup.getDomBroker(), setup.getActorSystem(), actorResponseWaitTime); + slaveSalManager = new SlaveSalFacade(id, setup.getActorSystem(), actorResponseWaitTime, + mountPointService); final CheckedFuture remoteSchemaContext = getSchemaContext(masterReference); @@ -242,7 +269,7 @@ public class NetconfNodeActor extends UntypedActor { public void onFailure(@Nonnull final Throwable throwable) { LOG.error("{}: Failed to register mount point: {}", id, throwable); } - }); + }, MoreExecutors.directExecutor()); } private DOMRpcService getDOMRpcService(final ActorRef masterReference) {