+Daniel and Integration-dev, Daniel,
does our rpm package and the systemd work you did for it answer any of Muthu's questions below? I'm assuming it *IS* the answer, but you will know better. Thanks, JamO On 10/12/2017 04:56 AM, Muthukumaran K wrote: > Hi, > > * * > > *Context* : Figuring out the best possible way to gracefully shutdown Karaf > process using standard Karaf commands. > > This would be required because framework-level shutdown-sequence in Karaf > would give opportunity framework to properly > execute bundle lifecycle listeners. What I mean is – abrupt kill can > potentially prevent lifecycle listeners from being > properly executed and may also impact any inflight transactions which may be > in various stages of replication and/or commit > phases. This can in turn lead to troubles during recovery / restart phase. > > > > So, I thought of middle-ground where > > 1) We execute karaf stop followed by > > 2) Periodic check if the last PID indeed terminates > > > > Doing a straight kill -9 could lead to rare heisenbugs during wherein > recovery could suffer since there may not be room for > lifecycle listeners to execute (unless Karaf handles it as unified > shutdownhook and execute same path as that of stop or any > graceful shutdown methods) > > > > Have anybody tried any better methods without side-effects ? > > > > > > *Option was tried and observation is as follows * > > Using Karaf stop followed by Karaf status command to check if the process has > come to a graceful termination. But, it appears > that though ‘status’ command reports Karaf instance as ‘Not Running’, the PID > still lingers for 2 to 3 mins roughly in ODL > context. I am biased to think that there are indeed some lifecycle listeners > executing … During this ‘PID lingering’ phase, > the thread-dump hints the System Bundle Shutdown is waiting for the BP > container to shutdown the components (probably > executing the lifecycle listeners at application and platform levels) > > > > "System Bundle Shutdown" #1582 daemon prio=5 os_prio=0 tid=0x00007fb05003d800 > nid=0xe68 waiting on condition [0x00007faf77678000] > > java.lang.Thread.State: TIMED_WAITING (parking) > > at sun.misc.Unsafe.park(Native Method) > > - parking to wait for <0x00000000e9064250> (a > com.google.common.util.concurrent.AbstractFuture$Sync) > > at > java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) > > at > java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos(AbstractQueuedSynchronizer.java:1037) > > at > java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1328) > > at > com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:268) > > at > com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:96) > > at > org.opendaylight.openflowplugin.openflow.md.core.MDController.stop(MDController.java:358) > > at > org.opendaylight.openflowplugin.openflow.md.core.sal.OpenflowPluginProvider.close(OpenflowPluginProvider.java:121) > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > > at java.lang.reflect.Method.invoke(Method.java:498) > > at > org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:299) > > at > org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:980) > > at > org.apache.aries.blueprint.container.BeanRecipe.destroy(BeanRecipe.java:887) > > at > org.apache.aries.blueprint.container.BlueprintRepository.destroy(BlueprintRepository.java:329) > > at > org.apache.aries.blueprint.container.BlueprintContainerImpl.destroyComponents(BlueprintContainerImpl.java:765) > > at > org.apache.aries.blueprint.container.BlueprintContainerImpl.tidyupComponents(BlueprintContainerImpl.java:964) > > at > org.apache.aries.blueprint.container.BlueprintContainerImpl.destroy(BlueprintContainerImpl.java:909) > > at > org.apache.aries.blueprint.container.BlueprintExtender$3.run(BlueprintExtender.java:325) > > at > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) > > at java.util.concurrent.FutureTask.run(FutureTask.java:266) > > at > org.apache.aries.blueprint.container.BlueprintExtender.destroyContainer(BlueprintExtender.java:346) > > at > org.apache.aries.blueprint.container.BlueprintExtender.access$400(BlueprintExtender.java:68) > > at > org.apache.aries.blueprint.container.BlueprintExtender$BlueprintContainerServiceImpl.destroyContainer(BlueprintExtender.java:624) > > at > org.opendaylight.controller.blueprint.BlueprintBundleTracker.shutdownAllContainers(BlueprintBundleTracker.java:251) > > at > org.opendaylight.controller.blueprint.BlueprintBundleTracker.bundleChanged(BlueprintBundleTracker.java:150) > > at > org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:847) > > at > org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) > > at > org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) > > at > org.eclipse.osgi.framework.internal.core.Framework.publishBundleEventPrivileged(Framework.java:1568) > > at > org.eclipse.osgi.framework.internal.core.Framework.publishBundleEvent(Framework.java:1504) > > at > org.eclipse.osgi.framework.internal.core.Framework.publishBundleEvent(Framework.java:1499) > > at > org.eclipse.osgi.framework.internal.core.Framework.shutdown(Framework.java:681) > > - locked <0x000000008060b4d0> (a > org.eclipse.osgi.framework.internal.core.Framework) > > at > org.eclipse.osgi.framework.internal.core.Framework.close(Framework.java:600) > > - locked <0x000000008060b4d0> (a > org.eclipse.osgi.framework.internal.core.Framework) > > at > org.eclipse.osgi.framework.internal.core.InternalSystemBundle$1.run(InternalSystemBundle.java:261) > > at java.lang.Thread.run(Thread.java:745) > > > > "Framework Active Thread" #12 prio=5 os_prio=0 tid=0x00007fb0dc4bd000 > nid=0x52a waiting for monitor entry [0x00007fb0c14b0000] > > java.lang.Thread.State: BLOCKED (on object monitor) > > at java.lang.Object.wait(Native Method) > > at > org.eclipse.osgi.framework.internal.core.Framework.run(Framework.java:1862) > > - locked <0x000000008060b4d0> (a > org.eclipse.osgi.framework.internal.core.Framework) > > at java.lang.Thread.run(Thread.java:745) > > > > "main" #1 prio=5 os_prio=0 tid=0x00007fb0dc00b800 nid=0x514 in Object.wait() > [0x00007fb0e5134000] > > java.lang.Thread.State: WAITING (on object monitor) > > at java.lang.Object.wait(Native Method) > > - waiting on <0x000000008060b4d0> (a > org.eclipse.osgi.framework.internal.core.Framework) > > at > org.eclipse.osgi.framework.internal.core.Framework.waitForStop(Framework.java:1884) > > - locked <0x000000008060b4d0> (a > org.eclipse.osgi.framework.internal.core.Framework) > > at > org.eclipse.osgi.framework.internal.core.EquinoxLauncher.waitForStop(EquinoxLauncher.java:118) > > at > org.eclipse.osgi.launch.Equinox.waitForStop(Equinox.java:182) > > at org.apache.karaf.main.Main.awaitShutdown(Main.java:487) > > at org.apache.karaf.main.Main.main(Main.java:177) > > > > > > > > > > > > Regards > > Muthu > > > > > > > > _______________________________________________ > controller-dev mailing list > controller-dev@lists.opendaylight.org > https://lists.opendaylight.org/mailman/listinfo/controller-dev > _______________________________________________ controller-dev mailing list controller-dev@lists.opendaylight.org https://lists.opendaylight.org/mailman/listinfo/controller-dev