I tested that by adding an explicit 10 seconds delay between these operations in our code. It seems that the error occurs when the interval between the operations is too short. Our code performs 2 sequential operations:
According to the logs and our code logic, it seems that the issue is the next.
What we are doing wrong? How to proper invalidate the cache?Īndrew, I navigated to the /secure/SetupLicense.jspa URL on the node. How to avoid these errors? Am I right that the cache syncing is stopped in that case (see "Abandoning sending" message)? : ._5.cacheĪt .lookup(RegistryImpl.java:227)Īt _Skel.dispatch(RegistryImpl_Skel.java:115)Īt .oldDispatch(UnicastServerRef.java:468)Īt .dispatch(UnicastServerRef.java:300)Īt $1.run(Transport.java:200)Īt $1.run(Transport.java:197)Īt (Native Method)Īt .serviceCall(Transport.java:196)Īt .TCPTransport.handleMessages(TCPTransport.java:573)Īt .TCPTransport$n0(TCPTransport.java:834)Īt .TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688)Īt .TCPTransport$n(TCPTransport.java:687)Īt .runWorker(ThreadPoolExecutor.java:1149)Īt $n(ThreadPoolExecutor.java:624)Īt .exceptionReceivedFromServer(StreamRemoteCall.java:283)Īt .executeCall(StreamRemoteCall.java:260)Īt .invoke(UnicastRef.java:375)Īt _Stub.lookup(RegistryImpl_Stub.java:119)Īt .lookupRemoteCachePeer(BasicRMICachePeerProvider.java:64)Īt .create(BasicRMICachePeerProvider.java:39)Īt .getCachePeerFor(CachingRMICachePeerManager.java:58)Īt .withCachePeer(CachingRMICachePeerManager.java:91)Īt .send(LocalQCacheOpRMISender.java:63)Īt .(LocalQCacheOpReader.java:84)Īt $RunnableAdapter.call(Executors.java:511)Īt .run(FutureTask.java:266) 12:53:57,961 localq-reader-14 WARN anonymous 636x48x1 1k8m4mi 92.255.190.27,172.31.59.203 /secure/SetupLicense.jspa Runtime exception: UnrecoverableFailure occurred when processing: LocalQCacheOp from cache replication queue:, failuresCount: 2/2.
The issue is that when object update is performed just after the object creation then we get the next errors in logs: Sometimes the object is changed and this leads to the cache invalidation which is done with "cache.removeAll()" call. When the object is created on one node - it sends OBJ_CREATED event to other nodes to let them know and to create the same objects on them as well. One of our objects has a cache () which is initialized on the object creation.