# 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);

Reply via email to