import org.opendaylight.netconf.topology.singleton.impl.utils.NetconfTopologySetup;
import org.opendaylight.netconf.topology.singleton.impl.utils.NetconfTopologyUtils;
import org.opendaylight.netconf.topology.singleton.messages.AskForMasterMountPoint;
+import org.opendaylight.netconf.topology.singleton.messages.RefreshSlaveActor;
import org.opendaylight.netconf.topology.singleton.messages.UnregisterSlaveMountPoint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus;
handleSlaveMountPoint(rootNode);
break;
case DELETE:
- LOG.debug("{}: Operational for node {} deleted. Trying to remove slave mount point", id, nodeId);
- closeActor();
+ LOG.debug("{}: Operational for node {} deleted.", id, nodeId);
+ unregisterSlaveMountpoint();
break;
default:
LOG.debug("{}: Uknown operation for node: {}", id, nodeId);
@Override
public void close() {
+ unregisterSlaveMountpoint();
closeActor();
-
if (dataChangeListenerRegistration != null) {
dataChangeListenerRegistration.close();
dataChangeListenerRegistration = null;
private void closeActor() {
if (slaveActorRef != null) {
- slaveActorRef.tell(new UnregisterSlaveMountPoint(), ActorRef.noSender());
+ LOG.debug("{}: Sending poison pill to {}", id, slaveActorRef);
slaveActorRef.tell(PoisonPill.getInstance(), ActorRef.noSender());
slaveActorRef = null;
}
}
+ private void unregisterSlaveMountpoint() {
+ if (slaveActorRef != null) {
+ LOG.debug("{}: Sending message to unregister slave mountpoint on {}", id, slaveActorRef);
+ slaveActorRef.tell(new UnregisterSlaveMountPoint(), ActorRef.noSender());
+ }
+ }
+
void registerDataTreeChangeListener(final String topologyId, final NodeKey key) {
LOG.debug("{}: Registering data tree change listener on node {}", id, key);
dataChangeListenerRegistration = setup.getDataBroker().registerDataTreeChangeListener(
final NetconfNode netconfNodeAfter = rootNode.getDataAfter().getAugmentation(NetconfNode.class);
if (NetconfNodeConnectionStatus.ConnectionStatus.Connected.equals(netconfNodeAfter.getConnectionStatus())) {
- createActorRef();
+ createOrUpdateActorRef();
final String masterAddress = netconfNodeAfter.getClusteredConnectionStatus().getNetconfMasterNode();
final String path = NetconfTopologyUtils.createActorPath(masterAddress,
NetconfTopologyUtils.createMasterActorName(id.getName(),
netconfNodeAfter.getClusteredConnectionStatus().getNetconfMasterNode()));
setup.getActorSystem().actorSelection(path).tell(new AskForMasterMountPoint(), slaveActorRef);
} else {
- closeActor();
+ unregisterSlaveMountpoint();
}
}
- private void createActorRef() {
+ private void createOrUpdateActorRef() {
if (slaveActorRef == null) {
slaveActorRef = setup.getActorSystem().actorOf(NetconfNodeActor.props(setup, id, schemaRegistry,
- schemaRepository, actorResponseWaitTime, mountPointService), id.getName());
+ schemaRepository, actorResponseWaitTime, mountPointService));
+ LOG.debug("{}: Slave actor created with name {}", id, slaveActorRef);
+ } else {
+ slaveActorRef
+ .tell(new RefreshSlaveActor(setup, id, schemaRegistry, schemaRepository, actorResponseWaitTime),
+ ActorRef.noSender());
}
}
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;
private static final Logger LOG = LoggerFactory.getLogger(NetconfNodeActor.class);
- private final SchemaSourceRegistry schemaRegistry;
- private final SchemaRepository schemaRepository;
private final DOMMountPointService mountPointService;
- private final Timeout actorResponseWaitTime;
private final Duration writeTxIdleTimeout;
+ private SchemaSourceRegistry schemaRegistry;
+ private SchemaRepository schemaRepository;
+ private Timeout actorResponseWaitTime;
private RemoteDeviceId id;
private NetconfTopologySetup setup;
private List<SourceIdentifier> sourceIdentifiers;
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
--- /dev/null
+/*
+ * Copyright (c) 2017 Pantheon Technologies s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.netconf.topology.singleton.messages;
+
+import akka.util.Timeout;
+import java.io.Serializable;
+import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
+import org.opendaylight.netconf.topology.singleton.impl.utils.NetconfTopologySetup;
+import org.opendaylight.yangtools.yang.model.repo.api.SchemaRepository;
+import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceRegistry;
+
+public class RefreshSlaveActor implements Serializable {
+
+ private final SchemaRepository schemaRepository;
+ private final RemoteDeviceId id;
+ private final SchemaSourceRegistry schemaRegistry;
+ private final NetconfTopologySetup setup;
+ private final Timeout actorResponseWaitTime;
+
+ public RefreshSlaveActor(final NetconfTopologySetup setup, final RemoteDeviceId id,
+ final SchemaSourceRegistry schemaRegistry, final SchemaRepository schemaRepository,
+ final Timeout actorResponseWaitTime) {
+ this.setup = setup;
+ this.id = id;
+ this.schemaRegistry = schemaRegistry;
+ this.schemaRepository = schemaRepository;
+ this.actorResponseWaitTime = actorResponseWaitTime;
+ }
+
+ public Timeout getActorResponseWaitTime() {
+ return actorResponseWaitTime;
+ }
+
+ public SchemaRepository getSchemaRepository() {
+ return schemaRepository;
+ }
+
+ public RemoteDeviceId getId() {
+ return id;
+ }
+
+ public SchemaSourceRegistry getSchemaRegistry() {
+ return schemaRegistry;
+ }
+
+ public NetconfTopologySetup getSetup() {
+ return setup;
+ }
+}