Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-959 bf648965d -> 97e5c62cb


ignite-959 Avoid sending key-value class definitions to servers when starting a 
cache


Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/97e5c62c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/97e5c62c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/97e5c62c

Branch: refs/heads/ignite-959
Commit: 97e5c62cbd9d2b6a349b9e2c3eb958d10295c0bc
Parents: bf64896
Author: agura <ag...@gridgain.com>
Authored: Wed Jun 24 19:46:11 2015 +0300
Committer: agura <ag...@gridgain.com>
Committed: Wed Jun 24 19:46:11 2015 +0300

----------------------------------------------------------------------
 .../processors/query/GridQueryProcessor.java    | 62 ++++++++++++++------
 1 file changed, 44 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/97e5c62c/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
index 269c824..19cc9f0 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
@@ -143,36 +143,62 @@ public class GridQueryProcessor extends 
GridProcessorAdapter {
      * @throws IgniteCheckedException In case of error.
      */
     public void generateTypeMetadata(CacheConfiguration<?, ?> ccfg) throws 
IgniteCheckedException {
-        if (ccfg.getTypeMetadata() != null)
-            return;
+        if (ccfg.getTypeMetadata() == null) {
+            Class<?>[] clss = ccfg.getIndexedTypes();
 
-        Class<?>[] clss = ccfg.getIndexedTypes();
+            if (!F.isEmpty(clss)) {
 
-        if (F.isEmpty(clss))
-            return;
+                List<CacheTypeMetadata> metadata = new ArrayList<>(clss.length 
/ 2);
 
-        List<CacheTypeMetadata> metadata = new ArrayList<>(clss.length / 2);
+                for (int i = 0; i < clss.length; i += 2) {
+                    Class<?> keyCls = clss[i];
+                    Class<?> valCls = clss[i + 1];
 
-        for (int i = 0; i < clss.length; i += 2) {
-            Class<?> keyCls = clss[i];
-            Class<?> valCls = clss[i + 1];
+                    CacheTypeMetadata meta = new CacheTypeMetadata();
 
-            CacheTypeMetadata meta = new CacheTypeMetadata();
+                    meta.setKeyType(keyCls);
+                    meta.setValueType(valCls);
 
-            meta.setKeyType(keyCls);
-            meta.setValueType(valCls);
+                    Map<String, TreeMap<Integer, T3<String, Class<?>, 
Boolean>>> orderedGroups = new HashMap<>();
 
-            Map<String, TreeMap<Integer, T3<String, Class<?>, Boolean>>> 
orderedGroups = new HashMap<>();
+                    processClassAnnotations(keyCls, meta, null, orderedGroups);
+                    processClassAnnotations(valCls, meta, null, orderedGroups);
 
-            processClassAnnotations(keyCls, meta, null, orderedGroups);
-            processClassAnnotations(valCls, meta, null, orderedGroups);
+                    fillOrderedGroups(meta, orderedGroups);
 
-            fillOrderedGroups(meta, orderedGroups);
+                    metadata.add(meta);
+                }
 
-            metadata.add(meta);
+                ccfg.setTypeMetadata(metadata);
+            }
         }
 
-        ccfg.setTypeMetadata(metadata);
+        if (ctx.cacheObjects().isPortableEnabled() && ccfg.getTypeMetadata() 
!= null)
+            maskClasses(ccfg.getTypeMetadata());
+
+    }
+
+    private void maskClasses(Collection<CacheTypeMetadata> metadata) {
+        for (CacheTypeMetadata meta : metadata) {
+            maskFieldsTypes(meta.getQueryFields());
+            maskFieldsTypes(meta.getAscendingFields());
+            maskFieldsTypes(meta.getDescendingFields());
+
+            for (LinkedHashMap<String, IgniteBiTuple<Class<?>, Boolean>> grp : 
meta.getGroups().values()) {
+                for (Map.Entry<String, IgniteBiTuple<Class<?>, Boolean>> entry 
: grp.entrySet()) {
+                    Class<?> cls = entry.getValue().get1();
+
+                    if (!U.isJdk(cls))
+                        entry.getValue().set1(Object.class);
+                }
+            }
+        }
+    }
+
+    private void maskFieldsTypes(Map<String, Class<?>> fields) {
+        for (Map.Entry<String, Class<?>> entry : fields.entrySet())
+            if (!U.isJdk(entry.getValue()))
+                entry.setValue(Objects.class);
     }
 
     /**

Reply via email to