Return-Path: X-Original-To: apmail-ignite-commits-archive@minotaur.apache.org Delivered-To: apmail-ignite-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id A267919440 for ; Mon, 11 Apr 2016 15:43:19 +0000 (UTC) Received: (qmail 89740 invoked by uid 500); 11 Apr 2016 15:43:19 -0000 Delivered-To: apmail-ignite-commits-archive@ignite.apache.org Received: (qmail 89611 invoked by uid 500); 11 Apr 2016 15:43:19 -0000 Mailing-List: contact commits-help@ignite.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ignite.apache.org Delivered-To: mailing list commits@ignite.apache.org Received: (qmail 88059 invoked by uid 99); 11 Apr 2016 15:43:18 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 11 Apr 2016 15:43:18 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 7AB33EAB46; Mon, 11 Apr 2016 15:43:18 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: sboikov@apache.org To: commits@ignite.apache.org Date: Mon, 11 Apr 2016 15:43:55 -0000 Message-Id: <9920372fc5da41d09a3be7a121c44e03@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [39/50] [abbrv] ignite git commit: Now cache plugins are able to unwrap entries passed to EntryProcessor. Now cache plugins are able to unwrap entries passed to EntryProcessor. Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/ec2ec996 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/ec2ec996 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/ec2ec996 Branch: refs/heads/ignite-1837 Commit: ec2ec9965ae03ef3666b2035a13f444cf2765aec Parents: a70d2dc Author: dkarachentsev Authored: Wed Mar 30 13:29:36 2016 +0300 Committer: dkarachentsev Committed: Tue Apr 5 12:06:22 2016 +0300 ---------------------------------------------------------------------- .../processors/cache/CacheInvokeEntry.java | 41 +++++++++++++++----- .../processors/cache/CacheLazyEntry.java | 9 ++++- .../processors/cache/GridCacheMapEntry.java | 9 +++-- .../distributed/dht/GridDhtTxPrepareFuture.java | 12 +++--- .../dht/atomic/GridDhtAtomicCache.java | 4 +- .../local/atomic/GridLocalAtomicCache.java | 4 +- .../cache/transactions/IgniteTxAdapter.java | 8 ++-- .../cache/transactions/IgniteTxEntry.java | 4 +- .../transactions/IgniteTxLocalAdapter.java | 5 +-- .../processors/plugin/CachePluginManager.java | 25 ++++++++++++ .../ignite/plugin/CachePluginProvider.java | 11 ++++++ ...CacheDeploymentCachePluginConfiguration.java | 7 ++++ 12 files changed, 107 insertions(+), 32 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/ec2ec996/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeEntry.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeEntry.java index 2ecfdbf..2526146 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeEntry.java @@ -40,44 +40,53 @@ public class CacheInvokeEntry extends CacheLazyEntry implements Muta /** Entry version. */ private GridCacheVersion ver; + /** Cache entry instance. */ + private GridCacheEntryEx entry; + /** - * @param cctx Cache context. + * Constructor. + * * @param keyObj Key cache object. * @param valObj Cache object value. * @param ver Entry version. + * @param keepBinary Keep binary flag. + * @param entry Original entry. */ - public CacheInvokeEntry(GridCacheContext cctx, - KeyCacheObject keyObj, + public CacheInvokeEntry(KeyCacheObject keyObj, @Nullable CacheObject valObj, GridCacheVersion ver, - boolean keepBinary + boolean keepBinary, + GridCacheEntryEx entry ) { - super(cctx, keyObj, valObj, keepBinary); + super(entry.context(), keyObj, valObj, keepBinary); this.hadVal = valObj != null; this.ver = ver; + this.entry = entry; } /** - * @param ctx Cache context. * @param keyObj Key cache object. * @param key Key value. * @param valObj Value cache object. * @param val Value. * @param ver Entry version. + * @param keepBinary Keep binary flag. + * @param entry Grid cache entry. */ - public CacheInvokeEntry(GridCacheContext ctx, - KeyCacheObject keyObj, + public CacheInvokeEntry(KeyCacheObject keyObj, @Nullable K key, @Nullable CacheObject valObj, @Nullable V val, GridCacheVersion ver, - boolean keepBinary + boolean keepBinary, + GridCacheEntryEx entry ) { - super(ctx, keyObj, key, valObj, val, keepBinary); + super(entry.context(), keyObj, key, valObj, val, keepBinary); this.hadVal = valObj != null || val != null; this.ver = ver; + this.entry = entry; } /** {@inheritDoc} */ @@ -122,12 +131,24 @@ public class CacheInvokeEntry extends CacheLazyEntry implements Muta return op != Operation.NONE; } + /** + * @return Cache entry instance. + */ + public GridCacheEntryEx entry() { + return entry; + } + /** {@inheritDoc} */ @SuppressWarnings("unchecked") @Override public T unwrap(Class cls) { if (cls.isAssignableFrom(CacheEntry.class) && ver != null) return (T)new CacheEntryImplEx<>(getKey(), getValue(), ver); + final T res = cctx.plugin().unwrapCacheEntry(this, cls); + + if (res != null) + return res; + return super.unwrap(cls); } http://git-wip-us.apache.org/repos/asf/ignite/blob/ec2ec996/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLazyEntry.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLazyEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLazyEntry.java index 6ec17c0..c1fcb77 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLazyEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLazyEntry.java @@ -80,7 +80,7 @@ public class CacheLazyEntry implements Cache.Entry { * @param keepBinary Keep binary flag. * @param val Cache value. */ - public CacheLazyEntry(GridCacheContext ctx, + public CacheLazyEntry(GridCacheContext ctx, KeyCacheObject keyObj, K key, CacheObject valObj, @@ -136,6 +136,13 @@ public class CacheLazyEntry implements Cache.Entry { return key; } + /** + * @return Keep binary flag. + */ + public boolean keepBinary() { + return keepBinary; + } + /** {@inheritDoc} */ @SuppressWarnings("unchecked") @Override public T unwrap(Class cls) { http://git-wip-us.apache.org/repos/asf/ignite/blob/ec2ec996/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java index 9678fe0..5519070 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java @@ -1614,7 +1614,7 @@ public abstract class GridCacheMapEntry extends GridMetadataAwareAdapter impleme assert entryProcessor != null; - CacheInvokeEntry entry = new CacheInvokeEntry<>(cctx, key, old, version(), keepBinary); + CacheInvokeEntry entry = new CacheInvokeEntry<>(key, old, version(), keepBinary, this); try { Object computed = entryProcessor.process(entry, invokeArgs); @@ -1907,7 +1907,8 @@ public abstract class GridCacheMapEntry extends GridMetadataAwareAdapter impleme oldVal = rawGetOrUnmarshalUnlocked(true); - CacheInvokeEntry entry = new CacheInvokeEntry(cctx, key, oldVal, version(), keepBinary); + CacheInvokeEntry entry = new CacheInvokeEntry(key, oldVal, version(), + keepBinary, this); try { Object computed = entryProcessor.process(entry, invokeArgs); @@ -2045,7 +2046,7 @@ public abstract class GridCacheMapEntry extends GridMetadataAwareAdapter impleme (EntryProcessor)writeObj; CacheInvokeEntry entry = - new CacheInvokeEntry<>(cctx, key, prevVal, version(), keepBinary); + new CacheInvokeEntry<>(key, prevVal, version(), keepBinary, this); try { entryProcessor.process(entry, invokeArgs); @@ -2175,7 +2176,7 @@ public abstract class GridCacheMapEntry extends GridMetadataAwareAdapter impleme EntryProcessor entryProcessor = (EntryProcessor)writeObj; - CacheInvokeEntry entry = new CacheInvokeEntry(cctx, key, oldVal, version(), keepBinary); + CacheInvokeEntry entry = new CacheInvokeEntry(key, oldVal, version(), keepBinary, this); try { Object computed = entryProcessor.process(entry, invokeArgs); http://git-wip-us.apache.org/repos/asf/ignite/blob/ec2ec996/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java index b8995bf..00cbd29 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java @@ -344,6 +344,8 @@ public final class GridDhtTxPrepareFuture extends GridCompoundFuture, Object[]> t : txEntry.entryProcessors()) { - CacheInvokeEntry invokeEntry = new CacheInvokeEntry<>( - txEntry.context(), key, val, txEntry.cached().version(), txEntry.keepBinary()); + for (T2, Object[]> t : txEntry.entryProcessors()) { + CacheInvokeEntry invokeEntry = new CacheInvokeEntry<>(key, val, + txEntry.cached().version(), keepBinary, txEntry.cached()); try { EntryProcessor processor = t.get1(); @@ -419,7 +421,7 @@ public final class GridDhtTxPrepareFuture extends GridCompoundFuture extends GridDhtCacheAdapter { Object oldVal = null; Object updatedVal = null; - CacheInvokeEntry invokeEntry = new CacheInvokeEntry(ctx, entry.key(), old, - entry.version(), req.keepBinary()); + CacheInvokeEntry invokeEntry = new CacheInvokeEntry(entry.key(), old, + entry.version(), req.keepBinary(), entry); CacheObject updated; http://git-wip-us.apache.org/repos/asf/ignite/blob/ec2ec996/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/atomic/GridLocalAtomicCache.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/atomic/GridLocalAtomicCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/atomic/GridLocalAtomicCache.java index fed3e33..651c4d0 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/atomic/GridLocalAtomicCache.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/atomic/GridLocalAtomicCache.java @@ -1195,8 +1195,8 @@ public class GridLocalAtomicCache extends GridCacheAdapter { Object oldVal = null; - CacheInvokeEntry invokeEntry = new CacheInvokeEntry<>(ctx, entry.key(), old, - entry.version(), keepBinary); + CacheInvokeEntry invokeEntry = new CacheInvokeEntry<>(entry.key(), old, + entry.version(), keepBinary, entry); CacheObject updated; Object updatedVal = null; http://git-wip-us.apache.org/repos/asf/ignite/blob/ec2ec996/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java index ca5a8fd..6af388b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java @@ -1240,6 +1240,8 @@ public abstract class IgniteTxAdapter extends GridMetadataAwareAdapter boolean recordEvt = cctx.gridEvents().isRecordable(EVT_CACHE_OBJECT_READ); + final boolean keepBinary = txEntry.keepBinary(); + CacheObject cacheVal = txEntry.hasValue() ? txEntry.value() : txEntry.cached().innerGet(this, /*swap*/false, @@ -1253,7 +1255,7 @@ public abstract class IgniteTxAdapter extends GridMetadataAwareAdapter /**closure name */recordEvt ? F.first(txEntry.entryProcessors()).get1() : null, resolveTaskName(), null, - txEntry.keepBinary()); + keepBinary); boolean modified = false; @@ -1276,8 +1278,8 @@ public abstract class IgniteTxAdapter extends GridMetadataAwareAdapter } for (T2, Object[]> t : txEntry.entryProcessors()) { - CacheInvokeEntry invokeEntry = new CacheInvokeEntry(txEntry.context(), - txEntry.key(), key, cacheVal, val, ver, txEntry.keepBinary()); + CacheInvokeEntry invokeEntry = new CacheInvokeEntry<>( + txEntry.key(), key, cacheVal, val, ver, keepBinary, txEntry.cached()); try { EntryProcessor processor = t.get1(); http://git-wip-us.apache.org/repos/asf/ignite/blob/ec2ec996/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java index 18fca64..ecaf04f 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java @@ -687,8 +687,8 @@ public class IgniteTxEntry implements GridPeerDeployAware, Message { for (T2, Object[]> t : entryProcessors()) { try { - CacheInvokeEntry invokeEntry = new CacheInvokeEntry(ctx, key, keyVal, cacheVal, val, - ver, keepBinary()); + CacheInvokeEntry invokeEntry = new CacheInvokeEntry(key, keyVal, cacheVal, val, + ver, keepBinary(), cached()); EntryProcessor processor = t.get1(); http://git-wip-us.apache.org/repos/asf/ignite/blob/ec2ec996/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java index 7ed9542..fef91c8 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java @@ -2963,9 +2963,8 @@ public abstract class IgniteTxLocalAdapter extends IgniteTxAdapter Object res = null; for (T2, Object[]> t : txEntry.entryProcessors()) { - CacheInvokeEntry invokeEntry = - new CacheInvokeEntry(txEntry.context(), txEntry.key(), key0, cacheVal, val0, ver, - txEntry.keepBinary()); + CacheInvokeEntry invokeEntry = new CacheInvokeEntry<>(txEntry.key(), key0, cacheVal, + val0, ver, txEntry.keepBinary(), txEntry.cached()); EntryProcessor entryProcessor = t.get1(); http://git-wip-us.apache.org/repos/asf/ignite/blob/ec2ec996/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/CachePluginManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/CachePluginManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/CachePluginManager.java index 23f1f3f..d0efc0a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/CachePluginManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/CachePluginManager.java @@ -38,6 +38,9 @@ import org.apache.ignite.internal.processors.cache.store.CacheStoreManager; import org.apache.ignite.plugin.CachePluginConfiguration; import org.apache.ignite.plugin.CachePluginContext; import org.apache.ignite.plugin.CachePluginProvider; +import org.jetbrains.annotations.Nullable; + +import javax.cache.Cache; /** * Cache plugin manager. @@ -131,6 +134,28 @@ public class CachePluginManager extends GridCacheManagerAdapter { } /** + * Unwrap entry to specified type. For details see {@code javax.cache.Cache.Entry.unwrap(Class)}. + * + * @param entry Entry to unwrap. + * @param cls Type of the expected component. + * @param Return type. + * @param Key type. + * @param Value type. + * @return New instance of underlying type or {@code null} if it's not available. + */ + @SuppressWarnings({"unchecked", "ForLoopReplaceableByForEach"}) + @Nullable public T unwrapCacheEntry(Cache.Entry entry, Class cls) { + for (int i = 0; i < providersList.size(); i++) { + final T res = (T)providersList.get(i).unwrapCacheEntry(entry, cls); + + if (res != null) + return res; + } + + return null; + } + + /** * Validates cache plugin configurations. Throw exception if validation failed. * * @throws IgniteCheckedException If validation failed. http://git-wip-us.apache.org/repos/asf/ignite/blob/ec2ec996/modules/core/src/main/java/org/apache/ignite/plugin/CachePluginProvider.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/plugin/CachePluginProvider.java b/modules/core/src/main/java/org/apache/ignite/plugin/CachePluginProvider.java index 11550ec..b7ed0b3 100644 --- a/modules/core/src/main/java/org/apache/ignite/plugin/CachePluginProvider.java +++ b/modules/core/src/main/java/org/apache/ignite/plugin/CachePluginProvider.java @@ -22,6 +22,8 @@ import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.configuration.CacheConfiguration; import org.jetbrains.annotations.Nullable; +import javax.cache.Cache; + /** * Cache plugin provider is a point for processing of properties * which provide specific {@link CachePluginConfiguration}. @@ -65,6 +67,15 @@ public interface CachePluginProvider { @Nullable public T createComponent(Class cls); /** + * Unwrap entry to specified type. For details see {@code javax.cache.Cache.Entry.unwrap(Class)}. + * + * @param entry Mutable entry to unwrap. + * @param cls Type of the expected component. + * @return New instance of underlying type or {@code null} if it's not available. + */ + @Nullable public T unwrapCacheEntry(Cache.Entry entry, Class cls); + + /** * Validates cache plugin configuration in process of cache creation. Throw exception if validation failed. * * @throws IgniteCheckedException If validation failed. http://git-wip-us.apache.org/repos/asf/ignite/blob/ec2ec996/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/CacheDeploymentCachePluginConfiguration.java ---------------------------------------------------------------------- diff --git a/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/CacheDeploymentCachePluginConfiguration.java b/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/CacheDeploymentCachePluginConfiguration.java index bb37c25..ff2e674 100644 --- a/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/CacheDeploymentCachePluginConfiguration.java +++ b/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/CacheDeploymentCachePluginConfiguration.java @@ -25,6 +25,8 @@ import org.apache.ignite.plugin.CachePluginContext; import org.apache.ignite.plugin.CachePluginProvider; import org.jetbrains.annotations.Nullable; +import javax.cache.Cache; + /** * Test cache plugin configuration for cache deployment tests. */ @@ -41,6 +43,11 @@ public class CacheDeploymentCachePluginConfiguration implements CachePlugi } /** {@inheritDoc} */ + @Nullable @Override public Object unwrapCacheEntry(final Cache.Entry mutableEntry, final Class cls) { + return null; + } + + /** {@inheritDoc} */ @Override public void start() throws IgniteCheckedException { }