Hello team, I am performing concurrent updates on the same entries in cache by using EntryProcessor. (Entry processor just sums existing values with provided delta values. I.e. I have List of doubles as cache value). And after performing such updates N times I expected to have final values equal to N (I used 1.0 as delta values in my testing). But my actual values are less (I could say even much less). And after digging deeply into that and enabling debug I've captured the following statement in log files:
[cache.GridCacheMapEntry] - Received entry update with smaller version than current (will ignore) [entry=GridDhtAtomicCacheEntry [super=GridDhtCacheEntry [rdrs=[], locPart=GridDhtLocalPartition [id=207, mapPubSize=1, rmvQueue=GridCircularBuffer [sizeMask=511, idxGen=0], cntr=1, state=OWNING, reservations=0, empty=false, createTime=02/08/2016 15:12:26, mapPubSize=1], super=GridDistributedCacheEntry [super=GridCacheMapEntry [key=KeyCacheObjectImpl [val=<myKey>, hasValBytes=true], val=CacheObjectImpl [val=[1.0,1.0], hasValBytes=true], startVer=1454937145741, ver=GridCacheVersion [topVer=66417147, nodeOrderDrId=1, globalTime=1454937165753, order=1454937145734], hash=-1875348639, extras=null, flags=0]]]], newVer=GridCacheVersion [topVer=66417147, nodeOrderDrId=1, globalTime=1454937165753, order=1454937145732]] My test is being run on single node(i.e. there is only one grid node) and I am using Ignite 1.5.0.final. There might be up to 5 threads performing concurrent updates. My key cache settings (which as far as I understand might affect update behavior) are: cacheMode=PARTITIONED atomicityMode=ATOMIC atomicWriteOrderMode=CLOCK writeSynchronizationMode=FULL_SYNC And my suspicion is that since there is CLOCK write order mode used and as it states: "In this mode, write versions are assigned on a sender node which generally leads to better performance in CacheWriteSynchronizationMode.FULL_SYNC <https://ignite.apache.org/releases/1.5.0.final/javadoc/org/apache/ignite/cache/CacheWriteSynchronizationMode.html#FULL_SYNC> synchronization mode, since in this case sender can send write requests to primary and backups at the same time." , actually one thread assigns/initializes version earlier than another while updates(on entries) are performed in inverse order. So, could you please clarify am I correct? If not, what is the reason? Is it expected behavior? How can It be handled correctly? Thanks,
