+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

Reply via email to