Hi!

Why do you do this inside an invoke()?
All of this can be done just inside a receiver.
Can you get rid of the invoke and check, that deadlocks disappear?

Denis

пт, 29 июн. 2018 г. в 17:24, breischl <[email protected]>:

> 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