PutIfAbsent and all Replace operation uses filter for previous values checks.
When filter has provided then we have to retrieve full row (instead of header) just to apply the filter.
However, in most of cases filter doesn't need a value itself, but just a fact if previous value exists.
There is unused class org.apache.ignite.internal.processors.cache.CacheOperationFilter enum that can be used for optimization. We can just compare filter type and visitor resultType to make a decision in CacheDataStore.mvccUpdate\mvccRemove methods.