summary |
shortlog |
log |
commit | commitdiff |
review |
tree
raw |
patch |
inline | side by side (from parent 1:
e13de28)
This will prevent blocking of config thread.
Change-Id: Ieb2e1c192ef91775153837956e6e6a428985c2d1
Signed-off-by: Maros Marsalek <mmarsale@cisco.com>
DataProviderService dataProviderService =
bundleContext.getService(serviceReference);
DataProviderService dataProviderService =
bundleContext.getService(serviceReference);
- dataProviderService.readOperationalData(InstanceIdentifier.builder(
- Nodes.class).child(Node.class).augmentation(NetconfNode.class).build());
-
getDomRegistryDependency();
NetconfDevice device = new NetconfDevice(getIdentifier().getInstanceName());
getDomRegistryDependency();
NetconfDevice device = new NetconfDevice(getIdentifier().getInstanceName());
device.setEventExecutor(getEventExecutorDependency());
device.setDispatcher(getClientDispatcher() == null ? createDispatcher() : getClientDispatcherDependency());
device.setSchemaSourceProvider(getGlobalNetconfSchemaProvider(bundleContext));
device.setEventExecutor(getEventExecutorDependency());
device.setDispatcher(getClientDispatcher() == null ? createDispatcher() : getClientDispatcherDependency());
device.setSchemaSourceProvider(getGlobalNetconfSchemaProvider(bundleContext));
+ device.setDataProviderService(dataProviderService);
getDomRegistryDependency().registerProvider(device, bundleContext);
device.start();
return device;
getDomRegistryDependency().registerProvider(device, bundleContext);
device.start();
return device;
import org.opendaylight.controller.md.sal.common.api.data.DataReader;
import org.opendaylight.controller.netconf.client.NetconfClientDispatcher;
import org.opendaylight.controller.netconf.client.conf.NetconfClientConfiguration;
import org.opendaylight.controller.md.sal.common.api.data.DataReader;
import org.opendaylight.controller.netconf.client.NetconfClientDispatcher;
import org.opendaylight.controller.netconf.client.conf.NetconfClientConfiguration;
+import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
import org.opendaylight.controller.sal.core.api.Broker.ProviderSession;
import org.opendaylight.controller.sal.core.api.Broker.RpcRegistration;
import org.opendaylight.controller.sal.core.api.Provider;
import org.opendaylight.controller.sal.core.api.Broker.ProviderSession;
import org.opendaylight.controller.sal.core.api.Broker.RpcRegistration;
import org.opendaylight.controller.sal.core.api.Provider;
import org.opendaylight.controller.sal.core.api.mount.MountProvisionInstance;
import org.opendaylight.controller.sal.core.api.mount.MountProvisionService;
import org.opendaylight.protocol.framework.ReconnectStrategy;
import org.opendaylight.controller.sal.core.api.mount.MountProvisionInstance;
import org.opendaylight.controller.sal.core.api.mount.MountProvisionService;
import org.opendaylight.protocol.framework.ReconnectStrategy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.inventory.rev140108.NetconfNode;
import org.opendaylight.yangtools.concepts.Registration;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.concepts.Registration;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.RpcResult;
SchemaSourceProvider<InputStream> remoteSourceProvider;
SchemaSourceProvider<InputStream> remoteSourceProvider;
- DataBrokerService dataBroker;
+ private volatile DataBrokerService dataBroker;
NetconfDeviceListener listener;
private boolean rollbackSupported;
private NetconfClientConfiguration clientConfig;
NetconfDeviceListener listener;
private boolean rollbackSupported;
private NetconfClientConfiguration clientConfig;
+ private volatile DataProviderService dataProviderService;
public NetconfDevice(String name) {
this.name = name;
public NetconfDevice(String name) {
this.name = name;
}
private void updateDeviceState(boolean up, Set<QName> capabilities) {
}
private void updateDeviceState(boolean up, Set<QName> capabilities) {
+ checkDataStoreState();
+
DataModificationTransaction transaction = dataBroker.beginTransaction();
CompositeNodeBuilder<ImmutableCompositeNode> it = ImmutableCompositeNode.builder();
DataModificationTransaction transaction = dataBroker.beginTransaction();
CompositeNodeBuilder<ImmutableCompositeNode> it = ImmutableCompositeNode.builder();
public void onSessionInitiated(ProviderSession session) {
dataBroker = session.getService(DataBrokerService.class);
public void onSessionInitiated(ProviderSession session) {
dataBroker = session.getService(DataBrokerService.class);
+ processingExecutor.submit(new Runnable() {
+ @Override
+ public void run() {
+ updateInitialState();
+ }
+ });
+
+ mountService = session.getService(MountProvisionService.class);
+ if (mountService != null) {
+ mountInstance = mountService.createOrGetMountPoint(path);
+ }
+ }
+
+ private void updateInitialState() {
+ checkDataStoreState();
+
DataModificationTransaction transaction = dataBroker.beginTransaction();
if (operationalNodeNotExisting(transaction)) {
transaction.putOperationalData(path, getNodeWithId());
DataModificationTransaction transaction = dataBroker.beginTransaction();
if (operationalNodeNotExisting(transaction)) {
transaction.putOperationalData(path, getNodeWithId());
} catch (ExecutionException e) {
throw new RuntimeException("Read configuration data " + path + " failed", e);
}
} catch (ExecutionException e) {
throw new RuntimeException("Read configuration data " + path + " failed", e);
}
-
- mountService = session.getService(MountProvisionService.class);
- if (mountService != null) {
- mountInstance = mountService.createOrGetMountPoint(path);
- }
+ private void checkDataStoreState() {
+ // read data from Nodes/Node in order to wait with write until schema for Nodes/Node is present in datastore
+ dataProviderService.readOperationalData(org.opendaylight.yangtools.yang.binding.InstanceIdentifier.builder(
+ Nodes.class).child(org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node.class).augmentation(NetconfNode.class).build()); }
+
CompositeNode getNodeWithId() {
SimpleNodeTOImpl id = new SimpleNodeTOImpl(INVENTORY_ID, null, name);
return new CompositeNodeTOImpl(INVENTORY_NODE, null, Collections.<Node<?>> singletonList(id));
CompositeNode getNodeWithId() {
SimpleNodeTOImpl id = new SimpleNodeTOImpl(INVENTORY_ID, null, name);
return new CompositeNodeTOImpl(INVENTORY_NODE, null, Collections.<Node<?>> singletonList(id));
this.clientConfig = clientConfig;
}
this.clientConfig = clientConfig;
}
+ public void setDataProviderService(final DataProviderService dataProviderService) {
+ this.dataProviderService = dataProviderService;
+ }
}
class NetconfDeviceSchemaContextProvider {
}
class NetconfDeviceSchemaContextProvider {