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

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

    XMLWordPrintable

Details

    • Bug
    • Status: Resolved
    • Highest
    • Resolution: Done
    • 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
    • 9.0.7, 10.0.4, 11.0.1
    • DOM runtime

    Description

      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.

      Attachments

        Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

          Activity

            People

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

              Dates

                Created:
                Updated:
                Resolved: