That does seem to be what's happening, but we're only invoke()'ing on keys
that were passed into receive(), so that should not require going off-box.
Right? 

Here's the relevant code...


@Override
public void receive(IgniteCache<TKey, TEntity> cache,
Collection<Map.Entry&lt;TKey, TEntity>> newEntries) throws IgniteException {

    for (val newEntry : newEntries) {
        val entryKey = newEntry.getKey();

        cache.invoke(entryKey, ((CacheEntryProcessor<TKey, TEntity, Object>)
(entry, args) -> {
            val key =
                (TKey) args[0]; //passed this in to make the lambda
non-capturing, which is a slight perf optimization (fewer memory allocs)
            val newVal = (TEntity) args[1];
            val oldVal = entry.getValue();

            if (oldVal == null) {
                //Didn't already exist, we can just set the new values and
be done
                log.info("event=receiverCreatingNewInstance key={}
newValue={}", key, newVal);
                entry.setValue(newVal);
            } else if (isNewer(oldVal, newVal)) {
                log.info("event=newEntryHasHigherVersion key={}
oldVersion={} newVersion={}", key, getVersionForLogging(oldVal),
                    getVersionForLogging(newVal));
                entry.setValue(newVal);
            } else {
                log.info("event=newEntryHasLowerVersion key={} oldVersion={}
newVersion={}", key, getVersionForLogging(oldVal),
                    getVersionForLogging(newVal));
            }
            return null;
        }), entryKey, newEntry.getValue());
    }
}





--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/

Reply via email to