protected CacheInsResultWithEntry Clustered_Insert(ArrayList dests, object key, CacheEntry cacheEntry, object lockId, LockAccessType accessType, OperationContext operationContext) { try { if (ServerMonitor.MonitorActivity) { ServerMonitor.LogClientActivity("RepCacheBase.Insert", "enter"); } /// Ask every server to update the object, except myself. Function func = new Function((int)OpCodes.Insert, new object[] { key, cacheEntry, _statusLatch.IsAnyBitsSet(NodeStatus.Initializing), lockId, accessType, operationContext }, false, key); Array userPayLoad = null; if (cacheEntry.Value is CallbackEntry) { CallbackEntry cbEntry = ((CallbackEntry)cacheEntry.Value); userPayLoad = cbEntry.UserData; } else { userPayLoad = cacheEntry.UserData; } func.UserPayload = userPayLoad; RspList results = Cluster.BroadcastToMultiple(dests, func, GroupRequest.GET_ALL, _asyncOperation); ClusterHelper.ValidateResponses(results, typeof(OperationResponse), Name); //Bug Fixed, during state transfer (one node up with the exisiting one) of replicated cache, //while client doing insert operaion continously, which incrementing the add/sec counter while the client only performing insert //means no need to incrment add/sec counter, need only updat/sec to be incremented //so after discussing with QA, we modify the code here. CacheInsResultWithEntry retVal = ClusterHelper.FindAtomicInsertStatusReplicated(results); if (retVal != null && retVal.Result == CacheInsResult.Success && results != null) { for (int i = 0; i < results.Results.Count; i++) { if (((CacheInsResultWithEntry)((OperationResponse)results.Results[i]).SerializablePayload).Result == CacheInsResult.SuccessOverwrite) { retVal.Result = CacheInsResult.SuccessOverwrite; break; } } } return(retVal); } catch (CacheException e) { throw; } catch (Exception e) { throw new GeneralFailureException(e.Message, e); } finally { if (ServerMonitor.MonitorActivity) { ServerMonitor.LogClientActivity("RepCacheBase.Insert", "exit"); } } }