Openfire 3.9.1 clustering with hazelcast 1.2.1 plugin dead lock issue

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 (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.(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?