Uploaded image for project: 'mdsal'
  1. mdsal
  2. MDSAL-796

DOMRpcService.registerImplementations() does not work with pre-existing entries

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Highest Highest
    • 9.0.7, 10.0.4, 11.0.1
    • 7.0.0, 8.0.0, 9.0.0, 10.0.0, 7.0.14, 11.0.0, 10.0.3, 9.0.6, 8.0.16
    • DOM runtime

      Downstream integration found this:

      2022-11-28T10:20:27,859 | ERROR | opendaylight-cluster-data-akka.actor.default-dispatcher-16 | OSGiClusterAdmin                 | 107 - org.opendaylight.controller.sal-cluster-admin-impl - 7.0.0.SNAPSHOT | bundle org.opendaylight.controller.sal-cluster-admin-impl:7.0.0.SNAPSHOT (107)[org.opendaylight.controller.cluster.datastore.admin.OSGiClusterAdmin(62)] : Error during instantiation of the implementation object
      java.lang.reflect.InvocationTargetException: null
              at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
              at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[?:?]
              at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?]
              at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[?:?]
              at java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[?:?]
              at org.apache.felix.scr.impl.inject.internal.ComponentConstructorImpl.newInstance(ComponentConstructorImpl.java:326) ~[?:?]
              at org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:286) ~[?:?]
              at org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:115) ~[?:?]
              at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:1002) ~[?:?]
              at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:975) ~[?:?]
              at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:785) ~[?:?]
              at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1274) ~[?:?]
              at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1225) ~[?:?]
              at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1232) ~[?:?]
              at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1152) ~[?:?]
              at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:959) ~[?:?]
              at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:895) ~[?:?]
              at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1184) ~[?:?]
              at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:116) ~[?:?]
              at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:123) ~[?:?]
              at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:961) ~[?:?]
              at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) ~[?:?]
              at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) ~[?:?]
              at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:937) ~[?:?]
              at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:874) ~[?:?]
              at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:141) ~[?:?]
              at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:262) ~[?:?]
              at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:500) ~[?:?]
              at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:929) ~[?:?]
              at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:915) ~[?:?]
              at org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:133) ~[?:?]
              at org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:984) ~[?:?]
              at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:752) ~[?:?]
              at org.apache.felix.scr.impl.manager.AbstractComponentManager.enableInternal(AbstractComponentManager.java:674) ~[?:?]
              at org.apache.felix.scr.impl.manager.ComponentFactoryImpl.newInstance(ComponentFactoryImpl.java:132) ~[?:?]
              at org.opendaylight.controller.cluster.datastore.OSGiDistributedDataStore$DatastoreState.onSuccess(OSGiDistributedDataStore.java:93) ~[?:?]
              at com.google.common.util.concurrent.Futures$CallbackListener.run(Futures.java:1138) ~[?:?]
              at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:49) ~[?:?]
              at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(ForkJoinExecutorConfigurator.scala:48) ~[?:?]
              at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) ~[?:?]
              at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) ~[?:?]
              at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) ~[?:?]
              at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) ~[?:?]
              at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165) ~[?:?]
      Caused by: java.lang.IllegalArgumentException: Multiple entries with same key: (urn:opendaylight:params:xml:ns:yang:controller:entity-owners)get-entity=org.opendaylight.mdsal.dom.broker.GlobalDOMRpcRoutingTableEntry@2f695c72 and (urn:opendaylight:params:xml:ns:yang:controller:entity-owners)get-entity=org.opendaylight.mdsal.dom.broker.GlobalDOMRpcRoutingTableEntry@2f695c72
              at com.google.common.collect.ImmutableMap.conflictException(ImmutableMap.java:377) ~[?:?]
              at com.google.common.collect.ImmutableMap.checkNoConflict(ImmutableMap.java:371) ~[?:?]
              at com.google.common.collect.RegularImmutableMap.checkNoConflictInKeyBucket(RegularImmutableMap.java:241) ~[?:?]
              at com.google.common.collect.RegularImmutableMap.fromEntryArrayCheckingBucketOverflow(RegularImmutableMap.java:132) ~[?:?]
              at com.google.common.collect.RegularImmutableMap.fromEntryArray(RegularImmutableMap.java:94) ~[?:?]
              at com.google.common.collect.ImmutableMap$Builder.build(ImmutableMap.java:573) ~[?:?]
              at com.google.common.collect.ImmutableMap$Builder.buildOrThrow(ImmutableMap.java:601) ~[?:?]
              at com.google.common.collect.ImmutableMap$Builder.build(ImmutableMap.java:588) ~[?:?]
              at org.opendaylight.mdsal.dom.broker.AbstractDOMRoutingTable.addAll(AbstractDOMRoutingTable.java:121) ~[?:?]
              at org.opendaylight.mdsal.dom.broker.DOMRpcRouter$RpcProviderServiceFacade.registerRpcImplementations(DOMRpcRouter.java:534) ~[?:?]
              at org.opendaylight.mdsal.dom.spi.ForwardingDOMRpcProviderService.registerRpcImplementations(ForwardingDOMRpcProviderService.java:42) ~[?:?]
              at org.opendaylight.mdsal.binding.dom.adapter.BindingDOMRpcProviderServiceAdapter.register(BindingDOMRpcProviderServiceAdapter.java:127) ~[?:?]
              at org.opendaylight.mdsal.binding.dom.adapter.BindingDOMRpcProviderServiceAdapter.registerRpcImplementation(BindingDOMRpcProviderServiceAdapter.java:45) ~[?:?]
              at org.opendaylight.mdsal.binding.dom.adapter.osgi.OSGiRpcProviderService.registerRpcImplementation(OSGiRpcProviderService.java:39) ~[?:?]
              at org.opendaylight.controller.cluster.datastore.admin.OSGiClusterAdmin.<init>(OSGiClusterAdmin.java:37) ~[?:?]
              ... 44 more
      

      The cause seems to lie with the bulk registration process exposed by https://git.opendaylight.org/gerrit/c/mdsal/+/87754 . If that ends up being the case, the fix needs to be backported to previous streams as well.

            rovarga Robert Varga
            rovarga Robert Varga
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: