We suffered a brief network partition in our JIRA Datacenter setup. Among other exceptions, we noticed the usage of RMISynchronousCacheReplicator in some stacktraces in http threads. When do user facing threads cause synchronous activity? Can this be configured to be asynchronous?
Stacktrace from our incident:
java.net.ConnectException: Connection timed out
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:130)
at net.sf.ehcache.distribution.RMICachePeer_Stub.remove(Unknown Source)
at net.sf.ehcache.distribution.RMISynchronousCacheReplicator.replicateRemovalNotification(RMISynchronousCacheReplicator.java:243)
at net.sf.ehcache.distribution.RMISynchronousCacheReplicator.notifyElementRemoved(RMISynchronousCacheReplicator.java:229)
at net.sf.ehcache.event.RegisteredEventListeners.internalNotifyElementRemoved(RegisteredEventListeners.java:144)
at net.sf.ehcache.event.RegisteredEventListeners.notifyElementRemoved(RegisteredEventListeners.java:124)
at net.sf.ehcache.Cache.notifyRemoveInternalListeners(Cache.java:2322)
at net.sf.ehcache.Cache.removeInternal(Cache.java:2305)
at net.sf.ehcache.Cache.remove(Cache.java:2207)
at net.sf.ehcache.Cache.remove(Cache.java:2125)
at net.sf.ehcache.constructs.EhcacheDecoratorAdapter.remove(EhcacheDecoratorAdapter.java:154)
at com.atlassian.cache.ehcache.LoadingCache.remove(LoadingCache.java:208)
at com.atlassian.cache.ehcache.DelegatingCache.remove(DelegatingCache.java:135)
at com.atlassian.jira.avatar.CachingTaggingAvatarStore.getByIdTagged(CachingTaggingAvatarStore.java:104)
at com.atlassian.jira.avatar.AvatarManagerImpl.getByIdTagged(AvatarManagerImpl.java:117)
at com.atlassian.jira.avatar.AvatarManagerImpl.lambda$transformToJIRAAvatar$480(AvatarManagerImpl.java:421)
at com.atlassian.fugue.Option$Some.fold(Option.java:421)
at com.atlassian.fugue.Option.flatMap(Option.java:287)
at com.atlassian.jira.avatar.AvatarManagerImpl.transformToJIRAAvatar(AvatarManagerImpl.java:421)
at com.atlassian.jira.avatar.AvatarManagerImpl.processAvatarData(AvatarManagerImpl.java:376)
at com.atlassian.jira.avatar.AvatarManagerImpl.readAvatarData(AvatarManagerImpl.java:488)
at com.atlassian.jira.web.servlet.AvatarToStream.sendAvatar(AvatarToStream.java:29)
at com.atlassian.jira.web.servlet.AbstractAvatarServlet.defaultDoGet(AbstractAvatarServlet.java:82)
at com.atlassian.jira.web.servlet.ViewUserAvatarServlet.defaultDoGet(ViewUserAvatarServlet.java:39)
at com.atlassian.jira.web.servlet.AbstractAvatarServlet.doGet(AbstractAvatarServlet.java:39)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)