# ignite-51-v2
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/1e4ce344 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/1e4ce344 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/1e4ce344 Branch: refs/heads/ignite-410 Commit: 1e4ce3449e4bc73ca201f88ac50afb07688022c6 Parents: 148b731 Author: sboikov <semen.boi...@inria.fr> Authored: Mon Mar 9 19:50:32 2015 +0300 Committer: sboikov <semen.boi...@inria.fr> Committed: Mon Mar 9 19:50:32 2015 +0300 ---------------------------------------------------------------------- .../processors/cache/CacheObjectContext.java | 11 ++++ .../processors/cache/GridCacheAdapter.java | 1 - .../cache/GridCacheDeploymentManager.java | 65 +++++++++++++++----- .../processors/cache/GridCacheMessage.java | 8 ++- .../processors/cache/UserCacheObjectImpl.java | 8 ++- .../IgniteCacheObjectProcessorImpl.java | 2 +- .../cache/GridCacheDeploymentSelfTest.java | 4 +- .../ignite/testsuites/IgniteCacheTestSuite.java | 5 +- 8 files changed, 77 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1e4ce344/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectContext.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectContext.java index 6c5bfc2..9351206 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectContext.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectContext.java @@ -42,6 +42,9 @@ public class CacheObjectContext { /** */ private boolean unmarshalVals; + /** */ + private boolean p2pEnabled; + /** * @param kernalCtx Kernal context. * @param dfltAffMapper Default affinity mapper. @@ -53,6 +56,7 @@ public class CacheObjectContext { boolean cpyOnGet, boolean unmarshalVals) { this.kernalCtx = kernalCtx; + this.p2pEnabled = kernalCtx.config().isPeerClassLoadingEnabled(); this.dfltAffMapper = dfltAffMapper; this.cpyOnGet = cpyOnGet; this.unmarshalVals = unmarshalVals; @@ -61,6 +65,13 @@ public class CacheObjectContext { } /** + * @return {@code True} if peer class loading is enabled. + */ + public boolean p2pEnabled() { + return p2pEnabled; + } + + /** * @return Copy on get flag. */ public boolean copyOnGet() { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1e4ce344/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java index e2ac897..f598b35 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java @@ -1221,7 +1221,6 @@ public abstract class GridCacheAdapter<K, V> implements GridCache<K, V>, return entrySet((CacheEntryPredicate[])null); } - /** {@inheritDoc} */ @Override public Set<Cache.Entry<K, V>> entrySetx(CacheEntryPredicate... filter) { return map.entriesx(filter); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1e4ce344/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentManager.java index 23f457a..fd3ef30 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentManager.java @@ -23,6 +23,7 @@ import org.apache.ignite.configuration.*; import org.apache.ignite.events.*; import org.apache.ignite.internal.managers.deployment.*; import org.apache.ignite.internal.managers.eventstorage.*; +import org.apache.ignite.internal.processors.cache.distributed.near.*; import org.apache.ignite.internal.processors.cache.query.*; import org.apache.ignite.internal.util.*; import org.apache.ignite.internal.util.lang.*; @@ -240,26 +241,20 @@ public class GridCacheDeploymentManager<K, V> extends GridCacheSharedManagerAdap private void onUndeploy0(final ClassLoader ldr, final GridCacheContext<K, V> cacheCtx) { GridCacheAdapter<K, V> cache = cacheCtx.cache(); - Collection<K> keys = new ArrayList<>(); + Collection<KeyCacheObject> keys = new ArrayList<>(); - for (Cache.Entry<K, V> e : cache.entrySet()) { - boolean undeploy = cacheCtx.isNear() ? - undeploy(ldr, e, cacheCtx.near()) || undeploy(ldr, e, cacheCtx.near().dht()) : - undeploy(ldr, e, cacheCtx.cache()); + addEntries(ldr, keys, cache); - if (undeploy) - keys.add(e.getKey()); - } + if (cache.isNear()) + addEntries(ldr, keys, (((GridNearCacheAdapter)cache).dht())); if (log.isDebugEnabled()) log.debug("Finished searching keys for undeploy [keysCnt=" + keys.size() + ']'); - for (K k : keys) - cache.clearLocally(k); + cache.clearLocally(keys, true); if (cacheCtx.isNear()) - for (K k : keys) - cacheCtx.near().dht().clearLocally(k); + cacheCtx.near().dht().clearLocally(keys, true); GridCacheQueryManager<K, V> qryMgr = cacheCtx.queries(); @@ -291,17 +286,55 @@ public class GridCacheDeploymentManager<K, V> extends GridCacheSharedManagerAdap /** * @param ldr Class loader. + * @param keys Keys. + * @param cache Cache. + */ + private void addEntries(ClassLoader ldr, Collection<KeyCacheObject> keys, GridCacheAdapter cache) { + GridCacheContext cacheCtx = cache.context(); + + for (GridCacheEntryEx e : (Collection<GridCacheEntryEx>)cache.entries()) { + boolean undeploy = cacheCtx.isNear() ? + undeploy(ldr, e, cacheCtx.near()) || undeploy(ldr, e, cacheCtx.near().dht()) : + undeploy(ldr, e, cacheCtx.cache()); + + if (undeploy) + keys.add(e.key()); + } + } + + /** + * @param ldr Class loader. * @param e Entry. * @param cache Cache. * @return {@code True} if need to undeploy. */ - private boolean undeploy(ClassLoader ldr, Cache.Entry<K, V> e, GridCacheAdapter cache) { - if (e == null) + private boolean undeploy(ClassLoader ldr, GridCacheEntryEx e, GridCacheAdapter cache) { + KeyCacheObject key = e.key(); + + GridCacheEntryEx entry = cache.peekEx(key); + + if (entry == null) return false; - K key0 = e.getKey(); + Object key0; + Object val0; + + try { + CacheObject v = entry.peek(GridCachePeekMode.GLOBAL, CU.empty0()); - V val0 = e.getValue(); + key0 = key.value(cache.context().cacheObjectContext(), false); + + assert key0 != null : "Key cannot be null for cache entry: " + e; + + val0 = CU.value(v, cache.context(), false); + } + catch (GridCacheEntryRemovedException ignore) { + return false; + } + catch (IgniteException ignore) { + // Peek can throw runtime exception if unmarshalling failed. + return true; + } ClassLoader keyLdr = U.detectObjectClassLoader(key0); ClassLoader valLdr = U.detectObjectClassLoader(val0); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1e4ce344/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMessage.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMessage.java index 3c82f79..133694a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMessage.java @@ -257,7 +257,13 @@ public abstract class GridCacheMessage implements Message { if (info.key() != null) prepareObject(info.key().value(ctx.cacheObjectContext(), false), ctx.shared()); - prepareObject(CU.value(info.value(), ctx, false), ctx.shared()); + CacheObject val = info.value(); + + if (val != null) { + val.finishUnmarshal(ctx.cacheObjectContext(), ctx.deploy().globalLoader()); + + prepareObject(CU.value(val, ctx, false), ctx.shared()); + } } } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1e4ce344/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/UserCacheObjectImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/UserCacheObjectImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/UserCacheObjectImpl.java index b5e4bc7..ad68bb4 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/UserCacheObjectImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/UserCacheObjectImpl.java @@ -18,7 +18,7 @@ package org.apache.ignite.internal.processors.cache; import org.apache.ignite.*; -import org.apache.ignite.internal.util.IgniteUtils; +import org.apache.ignite.internal.util.*; import org.jetbrains.annotations.*; import java.util.*; @@ -60,8 +60,10 @@ public class UserCacheObjectImpl extends CacheObjectImpl { valBytes = ctx.processor().marshal(ctx, val); if (ctx.unmarshalValues()) { - Object val = ctx.processor().unmarshal(ctx, valBytes, - IgniteUtils.detectClass(this.val).getClassLoader()); + ClassLoader ldr = ctx.p2pEnabled() ? + IgniteUtils.detectClass(this.val).getClassLoader() : val.getClass().getClassLoader(); + + Object val = ctx.processor().unmarshal(ctx, valBytes, ldr); return new CacheObjectImpl(val, valBytes); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1e4ce344/modules/core/src/main/java/org/apache/ignite/internal/processors/portable/IgniteCacheObjectProcessorImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/portable/IgniteCacheObjectProcessorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/portable/IgniteCacheObjectProcessorImpl.java index b259593..e1bfaae 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/portable/IgniteCacheObjectProcessorImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/portable/IgniteCacheObjectProcessorImpl.java @@ -163,7 +163,7 @@ public class IgniteCacheObjectProcessorImpl extends GridProcessorAdapter impleme return new CacheObjectContext(ctx, new GridCacheDefaultAffinityKeyMapper(), ccfg != null && ccfg.isCopyOnGet(), - ccfg != null && ccfg.isQueryIndexEnabled()); + ctx.config().isPeerClassLoadingEnabled() || (ccfg != null && ccfg.isQueryIndexEnabled())); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1e4ce344/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentSelfTest.java index 12a30fb..f310f30 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentSelfTest.java @@ -205,8 +205,8 @@ public class GridCacheDeploymentSelfTest extends GridCommonAbstractTest { U.sleep(500); } - assert g1.jcache(null).localSize() == 0; - assert g2.jcache(null).localSize() == 0; + assertEquals(0, g1.jcache(null).localSize()); + assertEquals(0, g2.jcache(null).localSize()); startGrid(3); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1e4ce344/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java index fd5965c..7c8b8d3 100644 --- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java +++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java @@ -278,9 +278,8 @@ public class IgniteCacheTestSuite extends TestSuite { suite.addTestSuite(GridCacheSyncReplicatedPreloadSelfTest.class); // suite.addTestSuite(GridCacheReplicatedFailoverSelfTest.class); TODO: uncomment when fix GG-2239 -// TODO IGNITE-51 -// suite.addTestSuite(GridCacheDeploymentSelfTest.class); -// suite.addTestSuite(GridCacheDeploymentOffHeapSelfTest.class); + suite.addTestSuite(GridCacheDeploymentSelfTest.class); + suite.addTestSuite(GridCacheDeploymentOffHeapSelfTest.class); suite.addTestSuite(GridCachePutArrayValueSelfTest.class); suite.addTestSuite(GridCacheReplicatedUnswapAdvancedSelfTest.class);