The TopologyProvider and InventoryAndReadAdapter are Felix services which get started when all it's
dependencies are resolved (that is their start method gets called). The MD-SAL DataProviderService is not
or cannot be injected into them and so when start is called and the dataProviderService is used it throws an NPE
To fix this I simply moved most of the startup code into a separate method which I then call from the ComponentActivator
instead of start
Change-Id: Ia6f0b6cebd38f4af7f03c9da8a5e26e05c13f664
Signed-off-by: Moiz Raja <moraja@cisco.com>
topology.dataService = session.getSALService(DataProviderService)
tpProvider.dataService = session.getSALService(DataProviderService)
topology.dataService = session.getSALService(DataProviderService)
tpProvider.dataService = session.getSALService(DataProviderService)
+ inventory.startAdapter();
+ tpProvider.startAdapter();
subscribe.registerNotificationListener(dataPacket)
}
subscribe.registerNotificationListener(dataPacket)
}
private final Lock nodeToNodeConnectorsLock = new ReentrantLock();
private final Lock nodeToNodeConnectorsLock = new ReentrantLock();
inventoryNotificationProvider.dataProviderService = dataProviderService;
inventoryNotificationProvider.inventoryPublisher = inventoryPublisher;
// inventoryNotificationProvider.start();
}
inventoryNotificationProvider.dataProviderService = dataProviderService;
inventoryNotificationProvider.inventoryPublisher = inventoryPublisher;
// inventoryNotificationProvider.start();
}
def setInventoryPublisher(IPluginOutInventoryService listener){
inventoryPublisher.add(listener);
}
def setInventoryPublisher(IPluginOutInventoryService listener){
inventoryPublisher.add(listener);
}
DataProviderService dataService;
Registration<DataCommitHandler<InstanceIdentifier<? extends DataObject>,DataObject>> commitHandlerRegistration;
DataProviderService dataService;
Registration<DataCommitHandler<InstanceIdentifier<? extends DataObject>,DataObject>> commitHandlerRegistration;
+
+ }
+ def void startAdapter() {
+ if(dataService == null){
+ LOG.error("dataService not set");
+ return;
+ }
commitHandler = new TopologyCommitHandler(dataService)
commitHandler.setTopologyPublisher(topologyPublisher)
val InstanceIdentifier<? extends DataObject> path = InstanceIdentifier.builder(NetworkTopology)
commitHandler = new TopologyCommitHandler(dataService)
commitHandler.setTopologyPublisher(topologyPublisher)
val InstanceIdentifier<? extends DataObject> path = InstanceIdentifier.builder(NetworkTopology)
def setTopologyPublisher(IPluginOutTopologyService topologyPublisher) {
_topologyPublisher = topologyPublisher;
def setTopologyPublisher(IPluginOutTopologyService topologyPublisher) {
_topologyPublisher = topologyPublisher;
- commitHandler.setTopologyPublisher(topologyPublisher);
+ if(commitHandler != null){
+ commitHandler.setTopologyPublisher(topologyPublisher);
+ }