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); } /**