0 Replies Latest reply on Jul 27, 2014 2:21 AM by wmz7year

    openfire 3.9.1 clustering with hazelcast 1.2.1 plugin dead lock issue

    wmz7year

      Hey, guys.

       

       

      I found a deadlock with openfire clusters.

      When enabled cluster,

      system-clustering.jsp calls

      ClusterManager.setClusteringEnabled (true) method.

      Then sets clustering.enabled is true,

      When the listener is triggered after setting all parameters PropertyEventDispatcher listener, when triggered to ClusterManager internal listener calls ClusterManager.startup () method.

       

      When you call to ClusterManager.fireJoinedCluster method will result in a deadlock.

       

      Look at this.

      Thread [Jetty-QTP-AdminConsole-53] (Suspended)

      owns: ClusterListener  (id=126)

      owns: Class<T> (com.nqsky.cloud.cluster.ClusterManager) (id=94)

      owns: XMLProperties  (id=127)


      waited by: Daemon Thread [ClusterManager events dispatcher] (Running)

      ClusterManager.fireJoinedCluster(boolean) line: 185

      ClusterListener.joinCluster() line: 566

      ClusterListener.<init>(Cluster) line: 149

      ClusteredCacheFactory.startCluster() line: 142

      CacheFactory.startClustering() line: 631

      ClusterManager.startup() line: 308

      ClusterManager$1.xmlPropertySet(String, Map<String,Object>) line: 59

      PropertyEventDispatcher.dispatchEvent(String, EventType, Map<String,Object>) line: 101

      XMLProperties.setProperty(String, String) line: 682

      NQSkyGlobals.setXMLProperty(String, String) line: 449

      ClusterManager.setClusteringEnabled(boolean) line: 349

      system_002dclustering_jsp._jspService(HttpServletRequest, HttpServletResponse) line: 104

      system_002dclustering_jsp(HttpJspBase).service(HttpServletRequest, HttpServletResponse) line: 97

      system_002dclustering_jsp(HttpServlet).service(ServletRequest, ServletResponse) line: 820

      ServletHolder.handle(Request, ServletRequest, ServletResponse) line: 547

      ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) line: 1359

      PageFilter.parsePage(HttpServletRequest, HttpServletResponse, FilterChain) line: 118

      PageFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 52

      ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) line: 1330

      LocaleFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 78

      ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) line: 1330

      SetCharacterEncodingFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 50

      ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) line: 1330

      PluginFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 78

      ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) line: 1330

      AuthCheckFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 164

      ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) line: 1330

      ServletHandler.doHandle(String, Request, HttpServletRequest, HttpServletResponse) line: 478

      ServletHandler(ScopedHandler).handle(String, Request, HttpServletRequest, HttpServletResponse) line: 119

      ConstraintSecurityHandler(SecurityHandler).handle(String, Request, HttpServletRequest, HttpServletResponse) line: 520

      SessionHandler.doHandle(String, Request, HttpServletRequest, HttpServletResponse) line: 227

      WebAppContext(ContextHandler).doHandle(String, Request, HttpServletRequest, HttpServletResponse) line: 941

      ServletHandler.doScope(String, Request, HttpServletRequest, HttpServletResponse) line: 409

      SessionHandler.doScope(String, Request, HttpServletRequest, HttpServletResponse) line: 186

      WebAppContext(ContextHandler).doScope(String, Request, HttpServletRequest, HttpServletResponse) line: 875

      WebAppContext(ScopedHandler).handle(String, Request, HttpServletRequest, HttpServletResponse) line: 117

      ContextHandlerCollection.handle(String, Request, HttpServletRequest, HttpServletResponse) line: 250

      HandlerCollection.handle(String, Request, HttpServletRequest, HttpServletResponse) line: 149

      Server(HandlerWrapper).handle(String, Request, HttpServletRequest, HttpServletResponse) line: 110

      Server.handle(HttpConnection) line: 349

      SelectChannelConnector$SelectChannelHttpConnection(HttpConnection).handleRequest () line: 441

      HttpConnection$RequestHandler.content(Buffer) line: 936

      HttpParser.parseNext() line: 801

      HttpParser.parseAvailable() line: 224

      SelectChannelConnector$SelectChannelHttpConnection(AsyncHttpConnection).handle() line: 51

      SelectChannelEndPoint.handle() line: 586

      SelectChannelEndPoint$1.run() line: 44

      QueuedThreadPool.runJob(Runnable) line: 598

      QueuedThreadPool$3.run() line: 533

      Thread.run() line: 744

       

       

      I'm thinking about whether to CacheFactory.startClustering on the other thread.

      However, this method will immediately return false CacheFactory.isClusteringStarted lead looks like a cluster fails to start, guys have any good ideas?