You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2015/07/09 03:47:05 UTC

[01/14] incubator-ignite git commit: ignite-959-x - wip

Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-950 43c2138e5 -> 2105a48ef


ignite-959-x - wip


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

Branch: refs/heads/ignite-950
Commit: 781f0d5ff32ea034d67260469a595cdb64048655
Parents: 285d790
Author: S.Vladykin <sv...@gridgain.com>
Authored: Thu Jun 25 12:46:25 2015 +0300
Committer: S.Vladykin <sv...@gridgain.com>
Committed: Thu Jun 25 12:46:25 2015 +0300

----------------------------------------------------------------------
 .../configuration/CacheConfiguration.java       | 602 ++++++++++++++++++-
 .../processors/query/GridQueryProcessor.java    |  44 ++
 .../processors/query/h2/IgniteH2Indexing.java   |   2 -
 3 files changed, 632 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/781f0d5f/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
index 7af4974..50ba040 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
@@ -25,6 +25,9 @@ import org.apache.ignite.cache.eviction.*;
 import org.apache.ignite.cache.query.annotations.*;
 import org.apache.ignite.cache.store.*;
 import org.apache.ignite.cluster.*;
+import org.apache.ignite.internal.processors.query.*;
+import org.apache.ignite.internal.util.tostring.*;
+import org.apache.ignite.internal.util.typedef.*;
 import org.apache.ignite.internal.util.typedef.internal.*;
 import org.apache.ignite.lang.*;
 import org.apache.ignite.plugin.*;
@@ -33,8 +36,11 @@ import org.jetbrains.annotations.*;
 import javax.cache.*;
 import javax.cache.configuration.*;
 import javax.cache.expiry.*;
+import java.lang.reflect.*;
 import java.util.*;
 
+import static org.apache.ignite.internal.processors.query.GridQueryIndexType.*;
+
 /**
  * This class defines grid cache configuration. This configuration is passed to
  * grid via {@link IgniteConfiguration#getCacheConfiguration()} method. It defines all configuration
@@ -298,7 +304,7 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
     private boolean sqlEscapeAll;
 
     /** */
-    private Class<?>[] indexedTypes;
+    private transient Class<?>[] indexedTypes;
 
     /** */
     private int sqlOnheapRowCacheSize = DFLT_SQL_ONHEAP_ROW_CACHE_SIZE;
@@ -1506,7 +1512,12 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
      * @return {@code this} for chaining.
      */
     public CacheConfiguration setTypeMetadata(Collection<CacheTypeMetadata> typeMeta) {
-        this.typeMeta = typeMeta;
+        if (this.typeMeta == null)
+            this.typeMeta = new ArrayList<>(typeMeta);
+        else if (indexedTypes != null)
+            this.typeMeta.addAll(typeMeta);
+        else
+            throw new CacheException("Type metadata can be set only once.");
 
         return this;
     }
@@ -1661,21 +1672,31 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
      * @return {@code this} for chaining.
      */
     public CacheConfiguration setIndexedTypes(Class<?>... indexedTypes) {
-        A.ensure(indexedTypes == null || (indexedTypes.length & 1) == 0,
+        int len = indexedTypes.length;
+
+        A.ensure(len > 0, "Array of indexed types can not be empty.");
+        A.ensure((len & 1) == 0,
             "Number of indexed types is expected to be even. Refer to method javadoc for details.");
 
-        if (indexedTypes != null) {
-            int len = indexedTypes.length;
+        if (this.indexedTypes != null)
+            throw new CacheException("Indexed types can be set only once.");
+
+        Class<?>[] newIndexedTypes = new Class<?>[len];
 
-            Class<?>[] newIndexedTypes = new Class<?>[len];
+        for (int i = 0; i < len; i++)
+            newIndexedTypes[i] = U.box(indexedTypes[i]);
 
-            for (int i = 0; i < len; i++)
-                newIndexedTypes[i] = U.box(indexedTypes[i]);
+        if (typeMeta == null)
+            typeMeta = new ArrayList<>();
 
-            this.indexedTypes = newIndexedTypes;
+        for (int i = 0; i < len; i += 2) {
+            Class<?> keyCls = newIndexedTypes[i];
+            Class<?> valCls = newIndexedTypes[i + 1];
+
+            TypeDescriptor desc = processKeyAndValueClasses(keyCls, valCls);
+
+            typeMeta.add(convert(desc));
         }
-        else
-            this.indexedTypes = null;
 
         return this;
     }
@@ -1773,6 +1794,165 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
         return this;
     }
 
+    /**
+     * @param desc Type descriptor.
+     * @return Type metadata.
+     */
+    private CacheTypeMetadata convert(TypeDescriptor desc) {
+        CacheTypeMetadata meta = new CacheTypeMetadata();
+
+        // TODO
+
+        return meta;
+    }
+
+    /**
+     * @param keyCls Key class.
+     * @param valCls Value class.
+     * @return Type descriptor.
+     */
+    private static TypeDescriptor processKeyAndValueClasses(
+        Class<?> keyCls,
+        Class<?> valCls
+    ) {
+        TypeDescriptor d = new TypeDescriptor();
+
+        d.keyClass(keyCls);
+        d.valueClass(valCls);
+
+        processAnnotationsInClass(true, d.keyCls, d, null);
+
+        String valTypeName = GridQueryProcessor.typeName(valCls);
+
+        d.name(valTypeName);
+
+        processAnnotationsInClass(false, d.valCls, d, null);
+
+        return d;
+    }
+
+    /**
+     * Process annotations for class.
+     *
+     * @param key If given class relates to key.
+     * @param cls Class.
+     * @param type Type descriptor.
+     * @param parent Parent in case of embeddable.
+     */
+    private static void processAnnotationsInClass(boolean key, Class<?> cls, TypeDescriptor type,
+        @Nullable ClassProperty parent) {
+        if (U.isJdk(cls) || GridQueryProcessor.isGeometryClass(cls)) {
+            if (parent == null && !key && GridQueryProcessor.isSqlType(cls) ) { // We have to index primitive _val.
+                String idxName = "_val_idx";
+
+                type.addIndex(idxName, GridQueryProcessor.isGeometryClass(cls) ? GEO_SPATIAL : SORTED);
+
+                type.addFieldToIndex(idxName, "_VAL", 0, false);
+            }
+
+            return;
+        }
+
+        if (parent != null && parent.knowsClass(cls))
+            throw new CacheException("Recursive reference found in type: " + cls.getName());
+
+        if (parent == null) { // Check class annotation at top level only.
+            QueryTextField txtAnnCls = cls.getAnnotation(QueryTextField.class);
+
+            if (txtAnnCls != null)
+                type.valueTextIndex(true);
+
+            QueryGroupIndex grpIdx = cls.getAnnotation(QueryGroupIndex.class);
+
+            if (grpIdx != null)
+                type.addIndex(grpIdx.name(), SORTED);
+
+            QueryGroupIndex.List grpIdxList = cls.getAnnotation(QueryGroupIndex.List.class);
+
+            if (grpIdxList != null && !F.isEmpty(grpIdxList.value())) {
+                for (QueryGroupIndex idx : grpIdxList.value())
+                    type.addIndex(idx.name(), SORTED);
+            }
+        }
+
+        for (Class<?> c = cls; c != null && !c.equals(Object.class); c = c.getSuperclass()) {
+            for (Field field : c.getDeclaredFields()) {
+                QuerySqlField sqlAnn = field.getAnnotation(QuerySqlField.class);
+                QueryTextField txtAnn = field.getAnnotation(QueryTextField.class);
+
+                if (sqlAnn != null || txtAnn != null) {
+                    ClassProperty prop = new ClassProperty(field, key);
+
+                    prop.parent(parent);
+
+                    processAnnotation(key, sqlAnn, txtAnn, field.getType(), prop, type);
+
+                    type.addProperty(prop, true);
+                }
+            }
+
+            for (Method mtd : c.getDeclaredMethods()) {
+                QuerySqlField sqlAnn = mtd.getAnnotation(QuerySqlField.class);
+                QueryTextField txtAnn = mtd.getAnnotation(QueryTextField.class);
+
+                if (sqlAnn != null || txtAnn != null) {
+                    if (mtd.getParameterTypes().length != 0)
+                        throw new CacheException("Getter with QuerySqlField " +
+                            "annotation cannot have parameters: " + mtd);
+
+                    ClassProperty prop = new ClassProperty(mtd, key);
+
+                    prop.parent(parent);
+
+                    processAnnotation(key, sqlAnn, txtAnn, mtd.getReturnType(), prop, type);
+
+                    type.addProperty(prop, true);
+                }
+            }
+        }
+    }
+
+    /**
+     * Processes annotation at field or method.
+     *
+     * @param key If given class relates to key.
+     * @param sqlAnn SQL annotation, can be {@code null}.
+     * @param txtAnn H2 text annotation, can be {@code null}.
+     * @param cls Class of field or return type for method.
+     * @param prop Current property.
+     * @param desc Class description.
+     */
+    private static void processAnnotation(boolean key, QuerySqlField sqlAnn, QueryTextField txtAnn,
+        Class<?> cls, ClassProperty prop, TypeDescriptor desc) {
+        if (sqlAnn != null) {
+            processAnnotationsInClass(key, cls, desc, prop);
+
+            if (!sqlAnn.name().isEmpty())
+                prop.name(sqlAnn.name());
+
+            if (sqlAnn.index()) {
+                String idxName = prop.name() + "_idx";
+
+                desc.addIndex(idxName, GridQueryProcessor.isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED);
+
+                desc.addFieldToIndex(idxName, prop.name(), 0, sqlAnn.descending());
+            }
+
+            if (!F.isEmpty(sqlAnn.groups())) {
+                for (String group : sqlAnn.groups())
+                    desc.addFieldToIndex(group, prop.name(), 0, false);
+            }
+
+            if (!F.isEmpty(sqlAnn.orderedGroups())) {
+                for (QuerySqlField.Group idx : sqlAnn.orderedGroups())
+                    desc.addFieldToIndex(idx.name(), prop.name(), idx.order(), idx.descending());
+            }
+        }
+
+        if (txtAnn != null)
+            desc.addFieldToTextIndex(prop.name());
+    }
+
     /** {@inheritDoc} */
     @Override public String toString() {
         return S.toString(CacheConfiguration.class, this);
@@ -1792,10 +1972,404 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
 
         /** {@inheritDoc} */
         @Override public boolean equals(Object obj) {
-            if (obj == null)
-                return false;
+            return obj != null && obj.getClass().equals(this.getClass());
+        }
+    }
+
+    /**
+     * Descriptor of type.
+     */
+    private static class TypeDescriptor implements GridQueryTypeDescriptor {
+        /** */
+        private String name;
+
+        /** Value field names and types with preserved order. */
+        @GridToStringInclude
+        private final Map<String, Class<?>> fields = new LinkedHashMap<>();
+
+        /** */
+        @GridToStringExclude
+        private final Map<String, Property> props = new HashMap<>();
+
+        /** */
+        @GridToStringInclude
+        private final Map<String, IndexDescriptor> indexes = new HashMap<>();
+
+        /** */
+        private IndexDescriptor fullTextIdx;
+
+        /** */
+        private Class<?> keyCls;
+
+        /** */
+        private Class<?> valCls;
+
+        /** */
+        private boolean valTextIdx;
+
+        /** SPI can decide not to register this type. */
+        private boolean registered;
+
+        /**
+         * @return {@code True} if type registration in SPI was finished and type was not rejected.
+         */
+        boolean registered() {
+            return registered;
+        }
+
+        /**
+         * @param registered Sets registered flag.
+         */
+        void registered(boolean registered) {
+            this.registered = registered;
+        }
+
+        /** {@inheritDoc} */
+        @Override public String name() {
+            return name;
+        }
+
+        /**
+         * Sets type name.
+         *
+         * @param name Name.
+         */
+        void name(String name) {
+            this.name = name;
+        }
+
+        /** {@inheritDoc} */
+        @Override public Map<String, Class<?>> fields() {
+            return fields;
+        }
+
+        /** {@inheritDoc} */
+        @SuppressWarnings("unchecked")
+        @Override public <T> T value(String field, Object key, Object val) throws IgniteCheckedException {
+            assert field != null;
+
+            Property prop = props.get(field);
+
+            if (prop == null)
+                throw new IgniteCheckedException("Failed to find field '" + field + "' in type '" + name + "'.");
+
+            return (T)prop.value(key, val);
+        }
+
+        /** {@inheritDoc} */
+        @Override public Map<String, GridQueryIndexDescriptor> indexes() {
+            return Collections.<String, GridQueryIndexDescriptor>unmodifiableMap(indexes);
+        }
+
+        /**
+         * Adds index.
+         *
+         * @param idxName Index name.
+         * @param type Index type.
+         * @return Index descriptor.
+         */
+        public IndexDescriptor addIndex(String idxName, GridQueryIndexType type) {
+            IndexDescriptor idx = new IndexDescriptor(type);
+
+            if (indexes.put(idxName, idx) != null)
+                throw new CacheException("Index with name '" + idxName + "' already exists.");
+
+            return idx;
+        }
 
-            return obj.getClass().equals(this.getClass());
+        /**
+         * Adds field to index.
+         *
+         * @param idxName Index name.
+         * @param field Field name.
+         * @param orderNum Fields order number in index.
+         * @param descending Sorting order.
+         */
+        public void addFieldToIndex(String idxName, String field, int orderNum,
+            boolean descending) {
+            IndexDescriptor desc = indexes.get(idxName);
+
+            if (desc == null)
+                desc = addIndex(idxName, SORTED);
+
+            desc.addField(field, orderNum, descending);
+        }
+
+        /**
+         * Adds field to text index.
+         *
+         * @param field Field name.
+         */
+        public void addFieldToTextIndex(String field) {
+            if (fullTextIdx == null) {
+                fullTextIdx = new IndexDescriptor(FULLTEXT);
+
+                indexes.put(null, fullTextIdx);
+            }
+
+            fullTextIdx.addField(field, 0, false);
+        }
+
+        /** {@inheritDoc} */
+        @Override public Class<?> valueClass() {
+            return valCls;
+        }
+
+        /**
+         * Sets value class.
+         *
+         * @param valCls Value class.
+         */
+        void valueClass(Class<?> valCls) {
+            this.valCls = valCls;
+        }
+
+        /** {@inheritDoc} */
+        @Override public Class<?> keyClass() {
+            return keyCls;
+        }
+
+        /**
+         * Set key class.
+         *
+         * @param keyCls Key class.
+         */
+        void keyClass(Class<?> keyCls) {
+            this.keyCls = keyCls;
+        }
+
+        /**
+         * Adds property to the type descriptor.
+         *
+         * @param prop Property.
+         * @param failOnDuplicate Fail on duplicate flag.
+         */
+        public void addProperty(Property prop, boolean failOnDuplicate) {
+            String name = prop.name();
+
+            if (props.put(name, prop) != null && failOnDuplicate)
+                throw new CacheException("Property with name '" + name + "' already exists.");
+
+            fields.put(name, prop.type());
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean valueTextIndex() {
+            return valTextIdx;
+        }
+
+        /**
+         * Sets if this value should be text indexed.
+         *
+         * @param valTextIdx Flag value.
+         */
+        public void valueTextIndex(boolean valTextIdx) {
+            this.valTextIdx = valTextIdx;
+        }
+
+        /** {@inheritDoc} */
+        @Override public String toString() {
+            return S.toString(TypeDescriptor.class, this);
+        }
+    }
+
+    /**
+     * Index descriptor.
+     */
+    private static class IndexDescriptor implements GridQueryIndexDescriptor {
+        /** Fields sorted by order number. */
+        private final Collection<T2<String, Integer>> fields = new TreeSet<>(
+            new Comparator<T2<String, Integer>>() {
+                @Override public int compare(T2<String, Integer> o1, T2<String, Integer> o2) {
+                    if (o1.get2().equals(o2.get2())) // Order is equal, compare field names to avoid replace in Set.
+                        return o1.get1().compareTo(o2.get1());
+
+                    return o1.get2() < o2.get2() ? -1 : 1;
+                }
+            });
+
+        /** Fields which should be indexed in descending order. */
+        private Collection<String> descendings;
+
+        /** */
+        private final GridQueryIndexType type;
+
+        /**
+         * @param type Type.
+         */
+        private IndexDescriptor(GridQueryIndexType type) {
+            assert type != null;
+
+            this.type = type;
+        }
+
+        /** {@inheritDoc} */
+        @Override public Collection<String> fields() {
+            Collection<String> res = new ArrayList<>(fields.size());
+
+            for (T2<String, Integer> t : fields)
+                res.add(t.get1());
+
+            return res;
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean descending(String field) {
+            return descendings != null && descendings.contains(field);
+        }
+
+        /**
+         * Adds field to this index.
+         *
+         * @param field Field name.
+         * @param orderNum Field order number in this index.
+         * @param descending Sort order.
+         */
+        public void addField(String field, int orderNum, boolean descending) {
+            fields.add(new T2<>(field, orderNum));
+
+            if (descending) {
+                if (descendings == null)
+                    descendings  = new HashSet<>();
+
+                descendings.add(field);
+            }
+        }
+
+        /** {@inheritDoc} */
+        @Override public GridQueryIndexType type() {
+            return type;
+        }
+
+        /** {@inheritDoc} */
+        @Override public String toString() {
+            return S.toString(IndexDescriptor.class, this);
+        }
+    }
+
+    /**
+     *
+     */
+    private abstract static class Property {
+        /**
+         * Gets this property value from the given object.
+         *
+         * @param key Key.
+         * @param val Value.
+         * @return Property value.
+         * @throws IgniteCheckedException If failed.
+         */
+        public abstract Object value(Object key, Object val) throws IgniteCheckedException;
+
+        /**
+         * @return Property name.
+         */
+        public abstract String name();
+
+        /**
+         * @return Class member type.
+         */
+        public abstract Class<?> type();
+    }
+
+    /**
+     * Description of type property.
+     */
+    private static class ClassProperty extends Property {
+        /** */
+        private final Member member;
+
+        /** */
+        private ClassProperty parent;
+
+        /** */
+        private String name;
+
+        /** */
+        private boolean field;
+
+        /** */
+        private boolean key;
+
+        /**
+         * Constructor.
+         *
+         * @param member Element.
+         */
+        ClassProperty(Member member, boolean key) {
+            this.member = member;
+            this.key = key;
+
+            name = member instanceof Method && member.getName().startsWith("get") && member.getName().length() > 3 ?
+                member.getName().substring(3) : member.getName();
+
+            ((AccessibleObject) member).setAccessible(true);
+
+            field = member instanceof Field;
+        }
+
+        /** {@inheritDoc} */
+        @Override public Object value(Object key, Object val) throws IgniteCheckedException {
+            Object x = this.key ? key : val;
+
+            if (parent != null)
+                x = parent.value(key, val);
+
+            if (x == null)
+                return null;
+
+            try {
+                if (field) {
+                    Field field = (Field)member;
+
+                    return field.get(x);
+                }
+                else {
+                    Method mtd = (Method)member;
+
+                    return mtd.invoke(x);
+                }
+            }
+            catch (Exception e) {
+                throw new IgniteCheckedException(e);
+            }
+        }
+
+        /**
+         * @param name Property name.
+         */
+        public void name(String name) {
+            this.name = name;
+        }
+
+        /** {@inheritDoc} */
+        @Override public String name() {
+            return name;
+        }
+
+        /** {@inheritDoc} */
+        @Override public Class<?> type() {
+            return member instanceof Field ? ((Field)member).getType() : ((Method)member).getReturnType();
+        }
+
+        /**
+         * @param parent Parent property if this is embeddable element.
+         */
+        public void parent(ClassProperty parent) {
+            this.parent = parent;
+        }
+
+        /** {@inheritDoc} */
+        @Override public String toString() {
+            return S.toString(ClassProperty.class, this);
+        }
+
+        /**
+         * @param cls Class.
+         * @return {@code true} If this property or some parent relates to member of the given class.
+         */
+        public boolean knowsClass(Class<?> cls) {
+            return member.getDeclaringClass() == cls || (parent != null && parent.knowsClass(cls));
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/781f0d5f/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 e080c6d..f6cff33 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
@@ -41,6 +41,8 @@ import org.jsr166.*;
 
 import javax.cache.*;
 import java.lang.reflect.*;
+import java.math.*;
+import java.sql.*;
 import java.util.*;
 import java.util.concurrent.*;
 
@@ -52,6 +54,28 @@ import static org.apache.ignite.internal.processors.query.GridQueryIndexType.*;
  * Indexing processor.
  */
 public class GridQueryProcessor extends GridProcessorAdapter {
+    /** */
+    private static final Class<?> GEOMETRY_CLASS = U.classForName("com.vividsolutions.jts.geom.Geometry", null);
+
+    /** */
+    private static Set<Class<?>> SQL_TYPES = new HashSet<>(F.<Class<?>>asList(
+        Integer.class,
+        Boolean.class,
+        Byte.class,
+        Short.class,
+        Long.class,
+        BigDecimal.class,
+        Double.class,
+        Float.class,
+        Time.class,
+        Timestamp.class,
+        java.util.Date.class,
+        java.sql.Date.class,
+        String.class,
+        UUID.class,
+        byte[].class
+    ));
+
     /** For tests. */
     public static Class<? extends GridQueryIndexing> idxCls;
 
@@ -801,6 +825,26 @@ public class GridQueryProcessor extends GridProcessorAdapter {
     }
 
     /**
+     * Checks if the given class can be mapped to a simple SQL type.
+     *
+     * @param cls Class.
+     * @return {@code true} If can.
+     */
+    public static boolean isSqlType(Class<?> cls) {
+        return SQL_TYPES.contains(cls);
+    }
+
+    /**
+     * Checks if the given class is GEOMETRY.
+     *
+     * @param cls Class.
+     * @return {@code true} If this is geometry.
+     */
+    public static boolean isGeometryClass(Class<?> cls) {
+        return GEOMETRY_CLASS != null && GEOMETRY_CLASS.isAssignableFrom(cls);
+    }
+
+    /**
      * Gets type name by class.
      *
      * @param cls Class.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/781f0d5f/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
index 06c0961..359341a 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
@@ -1584,8 +1584,6 @@ public class IgniteH2Indexing implements GridQueryIndexing {
             map.put(Timestamp.class, TIMESTAMP);
             map.put(java.util.Date.class, TIMESTAMP);
             map.put(java.sql.Date.class, DATE);
-            map.put(char.class, CHAR);
-            map.put(Character.class, CHAR);
             map.put(String.class, VARCHAR);
             map.put(UUID.class, UUID);
             map.put(byte[].class, BINARY);


[06/14] incubator-ignite git commit: ignite-959-x

Posted by ag...@apache.org.
ignite-959-x


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

Branch: refs/heads/ignite-950
Commit: 6a2c2cb3655bb1f61ef2554dcfad763edc37014b
Parents: 8eeee9e
Author: S.Vladykin <sv...@gridgain.com>
Authored: Mon Jul 6 05:25:25 2015 +0300
Committer: S.Vladykin <sv...@gridgain.com>
Committed: Mon Jul 6 05:25:25 2015 +0300

----------------------------------------------------------------------
 .../configuration/CacheConfiguration.java       |  63 +++++----
 .../processors/query/GridQueryProcessor.java    | 133 +++++++++++--------
 2 files changed, 114 insertions(+), 82 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6a2c2cb3/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
index e73f51f..9958739 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
@@ -40,6 +40,7 @@ import java.lang.reflect.*;
 import java.util.*;
 
 import static org.apache.ignite.internal.processors.query.GridQueryIndexType.*;
+import static org.apache.ignite.internal.processors.query.GridQueryProcessor.*;
 
 /**
  * This class defines grid cache configuration. This configuration is passed to
@@ -1830,9 +1831,19 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
                 LinkedHashMap<String, IgniteBiTuple<Class<?>, Boolean>> grp = new LinkedHashMap<>();
 
                 for (String fieldName : idx.fields()) {
-                    ClassProperty prop = desc.props.get(fieldName);
+                    Class<?> cls;
 
-                    Class<?> cls = mask(prop.type());
+                    if (_VAL.equals(fieldName))
+                        cls = desc.valueClass();
+                    else {
+                        ClassProperty prop = desc.props.get(fieldName);
+
+                        assert prop != null : fieldName;
+
+                        cls = prop.type();
+                    }
+
+                    cls = mask(cls);
 
                     grp.put(fieldName, new IgniteBiTuple<Class<?>, Boolean>(cls, idx.descending(fieldName)));
                 }
@@ -1841,18 +1852,14 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
             }
         }
 
+        meta.setGroups(grps);
+
         if (desc.valueTextIndex())
-            txtFields.add("_val");
+            txtFields.add(_VAL);
 
         if (!txtFields.isEmpty())
             meta.setTextFields(txtFields);
 
-        meta.setGroups(grps);
-
-        // Index primitive types.
-        if (GridQueryProcessor.isSqlType(desc.valueClass()))
-            meta.setAscendingFields(Collections.<String, Class<?>>singletonMap("_val", desc.valueClass()));
-
         // Aliases.
         Map<String,String> aliases = null;
 
@@ -1881,7 +1888,7 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
     private static Class<?> mask(Class<?> cls) {
         assert cls != null;
 
-        return GridQueryProcessor.isSqlType(cls) ? cls : Object.class;
+        return isSqlType(cls) ? cls : Object.class;
     }
 
     /**
@@ -1914,13 +1921,13 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
      */
     private static void processAnnotationsInClass(boolean key, Class<?> cls, TypeDescriptor type,
         @Nullable ClassProperty parent) {
-        if (U.isJdk(cls) || GridQueryProcessor.isGeometryClass(cls)) {
-            if (parent == null && !key && GridQueryProcessor.isSqlType(cls) ) { // We have to index primitive _val.
-                String idxName = "_val_idx";
+        if (U.isJdk(cls) || isGeometryClass(cls)) {
+            if (parent == null && !key && isSqlType(cls)) { // We have to index primitive _val.
+                String idxName = _VAL + "_idx";
 
-                type.addIndex(idxName, GridQueryProcessor.isGeometryClass(cls) ? GEO_SPATIAL : SORTED);
+                type.addIndex(idxName, isGeometryClass(cls) ? GEO_SPATIAL : SORTED);
 
-                type.addFieldToIndex(idxName, "_val", 0, false);
+                type.addFieldToIndex(idxName, _VAL, 0, false);
             }
 
             return;
@@ -1954,7 +1961,7 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
                 QueryTextField txtAnn = field.getAnnotation(QueryTextField.class);
 
                 if (sqlAnn != null || txtAnn != null) {
-                    ClassProperty prop = new ClassProperty(field, key);
+                    ClassProperty prop = new ClassProperty(field);
 
                     prop.parent(parent);
 
@@ -1973,7 +1980,7 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
                         throw new CacheException("Getter with QuerySqlField " +
                             "annotation cannot have parameters: " + mtd);
 
-                    ClassProperty prop = new ClassProperty(mtd, key);
+                    ClassProperty prop = new ClassProperty(mtd);
 
                     prop.parent(parent);
 
@@ -2004,26 +2011,26 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
                 prop.alias(sqlAnn.name());
 
             if (sqlAnn.index()) {
-                String idxName = prop.name() + "_idx";
+                String idxName = prop.alias() + "_idx";
 
-                desc.addIndex(idxName, GridQueryProcessor.isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED);
+                desc.addIndex(idxName, isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED);
 
-                desc.addFieldToIndex(idxName, prop.name(), 0, sqlAnn.descending());
+                desc.addFieldToIndex(idxName, prop.fullName(), 0, sqlAnn.descending());
             }
 
             if (!F.isEmpty(sqlAnn.groups())) {
                 for (String group : sqlAnn.groups())
-                    desc.addFieldToIndex(group, prop.name(), 0, false);
+                    desc.addFieldToIndex(group, prop.fullName(), 0, false);
             }
 
             if (!F.isEmpty(sqlAnn.orderedGroups())) {
                 for (QuerySqlField.Group idx : sqlAnn.orderedGroups())
-                    desc.addFieldToIndex(idx.name(), prop.name(), idx.order(), idx.descending());
+                    desc.addFieldToIndex(idx.name(), prop.fullName(), idx.order(), idx.descending());
             }
         }
 
         if (txtAnn != null)
-            desc.addFieldToTextIndex(prop.name());
+            desc.addFieldToTextIndex(prop.fullName());
     }
 
     /** {@inheritDoc} */
@@ -2172,7 +2179,7 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
          * @param failOnDuplicate Fail on duplicate flag.
          */
         public void addProperty(ClassProperty prop, boolean failOnDuplicate) {
-            String name = prop.name();
+            String name = prop.fullName();
 
             if (props.put(name, prop) != null && failOnDuplicate)
                 throw new CacheException("Property with name '" + name + "' already exists.");
@@ -2297,7 +2304,7 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
          *
          * @param member Element.
          */
-        ClassProperty(Member member, boolean key) {
+        ClassProperty(Member member) {
             this.member = member;
 
             name = member instanceof Method && member.getName().startsWith("get") && member.getName().length() > 3 ?
@@ -2314,10 +2321,10 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
         }
 
         /**
-         * @return Name.
+         * @return Alias.
          */
-        public String name() {
-            return name;
+        String alias() {
+            return F.isEmpty(alias) ? name : alias;
         }
 
         /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6a2c2cb3/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 afc90e8..bfc7b74 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
@@ -54,6 +54,9 @@ import static org.apache.ignite.internal.processors.query.GridQueryIndexType.*;
  */
 public class GridQueryProcessor extends GridProcessorAdapter {
     /** */
+    public static final String _VAL = "_val";
+
+    /** */
     private static final Class<?> GEOMETRY_CLASS = U.classForName("com.vividsolutions.jts.geom.Geometry", null);
 
     /** */
@@ -1031,52 +1034,14 @@ public class GridQueryProcessor extends GridProcessorAdapter {
         assert keyCls != null;
         assert valCls != null;
 
-        for (Map.Entry<String, Class<?>> entry : meta.getAscendingFields().entrySet()) {
-            ClassProperty prop = buildClassProperty(
-                keyCls,
-                valCls,
-                entry.getKey(),
-                entry.getValue(),
-                aliases);
-
-            d.addProperty(prop, false);
-
-            String idxName = prop.name() + "_idx";
-
-            d.addIndex(idxName, isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED);
-
-            d.addFieldToIndex(idxName, prop.name(), 0, false);
-        }
-
-        for (Map.Entry<String, Class<?>> entry : meta.getDescendingFields().entrySet()) {
-            ClassProperty prop = buildClassProperty(
-                keyCls,
-                valCls,
-                entry.getKey(),
-                entry.getValue(),
-                aliases);
-
-            d.addProperty(prop, false);
-
-            String idxName = prop.name() + "_idx";
-
-            d.addIndex(idxName, isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED);
-
-            d.addFieldToIndex(idxName, prop.name(), 0, true);
-        }
-
-        for (String txtIdx : meta.getTextFields()) {
-            ClassProperty prop = buildClassProperty(
-                keyCls,
-                valCls,
-                txtIdx,
-                String.class,
-                aliases);
+        for (Map.Entry<String, Class<?>> entry : meta.getAscendingFields().entrySet())
+            addToIndex(d, keyCls, valCls, entry.getKey(), entry.getValue(), 0, IndexType.ASC, null, aliases);
 
-            d.addProperty(prop, false);
+        for (Map.Entry<String, Class<?>> entry : meta.getDescendingFields().entrySet())
+            addToIndex(d, keyCls, valCls, entry.getKey(), entry.getValue(), 0, IndexType.DESC, null, aliases);
 
-            d.addFieldToTextIndex(prop.name());
-        }
+        for (String txtField : meta.getTextFields())
+            addToIndex(d, keyCls, valCls, txtField, String.class, 0, IndexType.TEXT, null, aliases);
 
         Map<String, LinkedHashMap<String, IgniteBiTuple<Class<?>, Boolean>>> grps = meta.getGroups();
 
@@ -1089,18 +1054,13 @@ public class GridQueryProcessor extends GridProcessorAdapter {
                 int order = 0;
 
                 for (Map.Entry<String, IgniteBiTuple<Class<?>, Boolean>> idxField : idxFields.entrySet()) {
-                    ClassProperty prop = buildClassProperty(
-                        keyCls,
-                        valCls,
-                        idxField.getKey(),
-                        idxField.getValue().get1(),
-                        aliases);
-
-                    d.addProperty(prop, false);
-
                     Boolean descending = idxField.getValue().get2();
 
-                    d.addFieldToIndex(idxName, prop.name(), order, descending != null && descending);
+                    if (descending == null)
+                        descending = false;
+
+                    addToIndex(d, keyCls, valCls, idxField.getKey(), idxField.getValue().get1(), order,
+                        descending ? IndexType.DESC : IndexType.ASC, idxName, aliases);
 
                     order++;
                 }
@@ -1120,6 +1080,64 @@ public class GridQueryProcessor extends GridProcessorAdapter {
     }
 
     /**
+     * @param d Type descriptor.
+     * @param keyCls Key class.
+     * @param valCls Value class.
+     * @param pathStr Path string.
+     * @param resType Result type.
+     * @param idxOrder Order number in index or {@code -1} if no need to index.
+     * @param idxType Index type.
+     * @param idxName Index name.
+     * @param aliases Aliases.
+     * @throws IgniteCheckedException If failed.
+     */
+    private void addToIndex(
+        TypeDescriptor d,
+        Class<?> keyCls,
+        Class<?> valCls,
+        String pathStr,
+        Class<?> resType,
+        int idxOrder,
+        IndexType idxType,
+        String idxName,
+        Map<String,String> aliases
+    ) throws IgniteCheckedException {
+        String propName;
+        Class<?> propCls;
+
+        if (_VAL.equals(pathStr)) {
+            propName = _VAL;
+            propCls = valCls;
+        }
+        else {
+            ClassProperty prop = buildClassProperty(
+                keyCls,
+                valCls,
+                pathStr,
+                resType,
+                aliases);
+
+            d.addProperty(prop, false);
+
+            propName = prop.name();
+            propCls = prop.type();
+        }
+
+        if (idxType != null) {
+            if (idxName == null)
+                idxName = propName + "_idx";
+
+            if (idxOrder == 0) // Add index only on the first field.
+                d.addIndex(idxName, isGeometryClass(propCls) ? GEO_SPATIAL : SORTED);
+
+            if (idxType == IndexType.TEXT)
+                d.addFieldToTextIndex(propName);
+            else
+                d.addFieldToIndex(idxName, propName, idxOrder, idxType == IndexType.DESC);
+        }
+    }
+
+    /**
      * Processes declarative metadata for portable object.
      *
      * @param meta Declared metadata.
@@ -1993,4 +2011,11 @@ public class GridQueryProcessor extends GridProcessorAdapter {
             return S.toString(TypeName.class, this);
         }
     }
+
+    /**
+     * The way to index.
+     */
+    private enum IndexType {
+        ASC, DESC, TEXT
+    }
 }


[07/14] incubator-ignite git commit: Merge branch 'ignite-sprint-7' of https://git-wip-us.apache.org/repos/asf/incubator-ignite into ignite-959-x

Posted by ag...@apache.org.
Merge branch 'ignite-sprint-7' of https://git-wip-us.apache.org/repos/asf/incubator-ignite into ignite-959-x


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

Branch: refs/heads/ignite-950
Commit: fe55c65ad35e528d00b7e0c553333bb3a1daef5c
Parents: 6a2c2cb f72b291
Author: S.Vladykin <sv...@gridgain.com>
Authored: Mon Jul 6 05:25:46 2015 +0300
Committer: S.Vladykin <sv...@gridgain.com>
Committed: Mon Jul 6 05:25:46 2015 +0300

----------------------------------------------------------------------
 bin/ignite.bat                                  |   8 +-
 bin/ignite.sh                                   |   6 +-
 bin/include/parseargs.bat                       |   1 +
 bin/include/parseargs.sh                        |   3 +
 .../java/org/apache/ignite/IgniteCache.java     |   5 +
 .../apache/ignite/IgniteSystemProperties.java   |   3 +
 .../processors/cache/CacheOperationContext.java |  44 ++-
 .../processors/cache/GridCacheAdapter.java      |  91 +++--
 .../processors/cache/GridCacheAtomicFuture.java |  12 +-
 .../processors/cache/GridCacheMvccManager.java  |   8 +-
 .../processors/cache/GridCacheProxyImpl.java    |  10 +-
 .../processors/cache/GridCacheUtils.java        |  42 +++
 .../processors/cache/IgniteCacheProxy.java      |  36 +-
 .../dht/atomic/GridDhtAtomicCache.java          |  18 +-
 .../dht/atomic/GridDhtAtomicUpdateFuture.java   |  15 +-
 .../dht/atomic/GridNearAtomicUpdateFuture.java  | 177 ++++++++-
 .../datastructures/GridCacheAtomicLongImpl.java |  25 +-
 .../GridCacheAtomicSequenceImpl.java            |  11 +-
 .../GridCacheAtomicStampedImpl.java             |  21 +-
 .../GridCacheCountDownLatchImpl.java            |  16 +-
 .../communication/tcp/TcpCommunicationSpi.java  |   2 +-
 .../startup/cmdline/CommandLineStartup.java     |   3 +-
 .../startup/cmdline/CommandLineTransformer.java |   9 +
 .../IgniteCachePutRetryAbstractSelfTest.java    | 147 ++++++++
 .../dht/IgniteCachePutRetryAtomicSelfTest.java  |  34 ++
 ...gniteCachePutRetryTransactionalSelfTest.java |  74 ++++
 ...eAtomicInvalidPartitionHandlingSelfTest.java |   5 +-
 .../GridCachePartitionedFailoverSelfTest.java   |   5 +
 .../IgniteCacheFailoverTestSuite.java           |   3 +
 modules/kafka/pom.xml                           | 116 ++++++
 .../ignite/stream/kafka/KafkaStreamer.java      | 220 +++++++++++
 .../kafka/IgniteKafkaStreamerSelfTestSuite.java |  37 ++
 .../stream/kafka/KafkaEmbeddedBroker.java       | 378 +++++++++++++++++++
 .../kafka/KafkaIgniteStreamerSelfTest.java      | 227 +++++++++++
 .../ignite/stream/kafka/SimplePartitioner.java  |  53 +++
 .../util/spring/IgniteSpringHelperImpl.java     |  72 +++-
 .../IgniteExcludeInConfigurationTest.java       |  78 ++++
 .../org/apache/ignite/spring/sprint-exclude.xml |  57 +++
 .../testsuites/IgniteSpringTestSuite.java       |   2 +
 .../ignite/visor/commands/VisorConsole.scala    |   3 +-
 .../visor/commands/open/VisorOpenCommand.scala  | 319 ++++++++++++++++
 .../scala/org/apache/ignite/visor/visor.scala   | 230 +----------
 .../ignite/visor/VisorRuntimeBaseSpec.scala     |   2 +
 .../commands/kill/VisorKillCommandSpec.scala    |   1 +
 .../commands/start/VisorStartCommandSpec.scala  |   1 +
 .../commands/tasks/VisorTasksCommandSpec.scala  |   1 +
 .../commands/vvm/VisorVvmCommandSpec.scala      |   1 +
 pom.xml                                         |   1 +
 48 files changed, 2258 insertions(+), 375 deletions(-)
----------------------------------------------------------------------



[12/14] incubator-ignite git commit: IGNITE-950 - Merge branch 'ignite-959-x into ignite-950

Posted by ag...@apache.org.
IGNITE-950 - Merge branch 'ignite-959-x into ignite-950


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

Branch: refs/heads/ignite-950
Commit: 2e8f713f094e0f5a2af8102ddc7fcf6102c7dc9c
Parents: 70e9b34 dbe6ce5
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Wed Jul 8 16:14:21 2015 -0700
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Wed Jul 8 16:14:21 2015 -0700

----------------------------------------------------------------------
 .../apache/ignite/cache/CacheTypeMetadata.java  |  66 +-
 .../configuration/CacheConfiguration.java       | 601 ++++++++++++++++++-
 .../processors/query/GridQueryIndexing.java     |  16 -
 .../processors/query/GridQueryProcessor.java    | 454 ++++++--------
 .../ignite/internal/util/IgniteUtils.java       |   5 +-
 .../cache/GridCacheAbstractSelfTest.java        |   6 +-
 .../processors/query/h2/IgniteH2Indexing.java   |  19 -
 7 files changed, 843 insertions(+), 324 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2e8f713f/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
index fcc80d4,bfc7b74..2e2baa1
--- 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
@@@ -130,15 -154,17 +156,17 @@@ public class GridQueryProcessor extend
  
                      TypeDescriptor desc = new TypeDescriptor();
  
+                     // Key and value classes still can be available if they are primitive or JDK part.
+                     // We need that to set correct types for _key and _val columns.
++                    Class<?> keyCls = U.classForName(meta.getKeyType(), null);
+                     Class<?> valCls = U.classForName(meta.getValueType(), null);
 +                    // TODO IGNITE-950 need class to check enableFieldsIndexing, but class may be absent on server node.
 +                    // TODO use old code if class is available on server node. CacheIndexedObjectImpl.
-                     Class<?> keyCls = meta.getKeyType() != null ? U.classForName(meta.getKeyType(), null) : null;
-                     Class<?> valCls = meta.getValueType() != null ? U.classForName(meta.getValueType(), null) : null;
  
-                     desc.name(valCls != null ? typeName(valCls) : meta.getValueType());
+                     desc.name(meta.getSimpleValueType());
  
                      desc.valueClass(valCls != null ? valCls : Object.class);
 -                    desc.keyClass(
 -                        meta.getKeyType() == null ?
 -                            Object.class :
 -                            U.classForName(meta.getKeyType(), Object.class));
 +                    desc.keyClass(keyCls != null ? keyCls : Object.class);
  
                      TypeId typeId;
  
@@@ -1240,17 -1142,17 +1150,22 @@@
       *
       * @param meta Declared metadata.
       * @param d Type descriptor.
 +     * @param propType PropertyType.
       * @throws IgniteCheckedException If failed.
       */
 -    private void processPortableMeta(CacheTypeMetadata meta, TypeDescriptor d)
 +    private void processCacheTypeMeta(CacheTypeMetadata meta, TypeDescriptor d, PropertyType propType)
          throws IgniteCheckedException {
 +        assert propType != CLASS_PROPERTY;
 +
+         Map<String,String> aliases = meta.getAliases();
+ 
+         if (aliases == null)
+             aliases = Collections.emptyMap();
+ 
          for (Map.Entry<String, Class<?>> entry : meta.getAscendingFields().entrySet()) {
 -            PortableProperty prop = buildPortableProperty(entry.getKey(), entry.getValue(), aliases);
 +            Property prop = propType == PORTABLE_PROPERTY ?
-                 buildPortableProperty(entry.getKey(), entry.getValue()) :
-                 buildIndexedFieldsProperty(entry.getKey(), entry.getValue());
++                buildPortableProperty(entry.getKey(), entry.getValue(), aliases) :
++                buildIndexedFieldsProperty(entry.getKey(), entry.getValue(), aliases);
  
              d.addProperty(prop, false);
  
@@@ -1262,9 -1164,7 +1177,9 @@@
          }
  
          for (Map.Entry<String, Class<?>> entry : meta.getDescendingFields().entrySet()) {
 -            PortableProperty prop = buildPortableProperty(entry.getKey(), entry.getValue(), aliases);
 +            Property prop = propType == PORTABLE_PROPERTY ?
-                 buildPortableProperty(entry.getKey(), entry.getValue()) :
-                 buildIndexedFieldsProperty(entry.getKey(), entry.getValue());
++                buildPortableProperty(entry.getKey(), entry.getValue(), aliases) :
++                buildIndexedFieldsProperty(entry.getKey(), entry.getValue(), aliases);
  
              d.addProperty(prop, false);
  
@@@ -1276,9 -1176,7 +1191,9 @@@
          }
  
          for (String txtIdx : meta.getTextFields()) {
 -            PortableProperty prop = buildPortableProperty(txtIdx, String.class, aliases);
 +            Property prop = propType == PORTABLE_PROPERTY ?
-                 buildPortableProperty(txtIdx, String.class) :
-                 buildIndexedFieldsProperty(txtIdx, String.class);
++                buildPortableProperty(txtIdx, String.class, aliases) :
++                buildIndexedFieldsProperty(txtIdx, String.class, aliases);
  
              d.addProperty(prop, false);
  
@@@ -1296,9 -1194,7 +1211,9 @@@
                  int order = 0;
  
                  for (Map.Entry<String, IgniteBiTuple<Class<?>, Boolean>> idxField : idxFields.entrySet()) {
 -                    PortableProperty prop = buildPortableProperty(idxField.getKey(), idxField.getValue().get1(), aliases);
 +                    Property prop = propType == PORTABLE_PROPERTY ?
-                         buildPortableProperty(idxField.getKey(), idxField.getValue().get1()) :
-                         buildIndexedFieldsProperty(idxField.getKey(), idxField.getValue().get1());
++                        buildPortableProperty(idxField.getKey(), idxField.getValue().get1(), aliases) :
++                        buildIndexedFieldsProperty(idxField.getKey(), idxField.getValue().get1(), aliases);
  
                      d.addProperty(prop, false);
  
@@@ -1312,9 -1208,7 +1227,9 @@@
          }
  
          for (Map.Entry<String, Class<?>> entry : meta.getQueryFields().entrySet()) {
 -            PortableProperty prop = buildPortableProperty(entry.getKey(), entry.getValue(), aliases);
 +            Property prop = propType == PORTABLE_PROPERTY ?
-                 buildPortableProperty(entry.getKey(), entry.getValue()) :
-                 buildIndexedFieldsProperty(entry.getKey(), entry.getValue());
++                buildPortableProperty(entry.getKey(), entry.getValue(), aliases) :
++                buildIndexedFieldsProperty(entry.getKey(), entry.getValue(), aliases);
  
              if (!d.props.containsKey(prop.name()))
                  d.addProperty(prop, false);
@@@ -2201,11 -2013,9 +2138,18 @@@
      }
  
      /**
+      * The way to index.
+      */
+     private enum IndexType {
+         ASC, DESC, TEXT
+     }
++
++    /**
 +     *
 +     */
 +    enum PropertyType {
 +        CLASS_PROPERTY,
 +        PORTABLE_PROPERTY,
 +        INDEXED_FIELDS_PROPERTY
 +    }
  }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2e8f713f/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
----------------------------------------------------------------------


[14/14] incubator-ignite git commit: IGNITE-950 - Adding tests WIP

Posted by ag...@apache.org.
IGNITE-950 - Adding tests WIP


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

Branch: refs/heads/ignite-950
Commit: 2105a48ef577322854f05d8aa0576696b6292c4c
Parents: b76014a
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Wed Jul 8 18:46:54 2015 -0700
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Wed Jul 8 18:46:54 2015 -0700

----------------------------------------------------------------------
 .../apache/ignite/cache/CacheTypeMetadata.java  |   7 +-
 .../IgniteCacheObjectProcessorImpl.java         |   2 +-
 .../processors/query/GridQueryProcessor.java    |  11 +-
 .../OptimizedMarshallerIndexingHandler.java     |  60 +------
 .../tests/p2p/cache/IndexAnnotatedValue.java    | 104 +++++++++++
 .../ignite/tests/p2p/cache/IndexValue.java      |  99 +++++++++++
 ...IgniteCacheQueryNoServerClassesSelfTest.java | 174 +++++++++++++++++++
 7 files changed, 398 insertions(+), 59 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2105a48e/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeMetadata.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeMetadata.java b/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeMetadata.java
index f2b004e..997383d 100644
--- a/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeMetadata.java
+++ b/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeMetadata.java
@@ -214,7 +214,12 @@ public class CacheTypeMetadata implements Serializable {
      * @param cls Value type class.
      */
     public void setValueType(Class<?> cls) {
-        setValueType(cls.getName());
+        if (valType != null)
+            throw new CacheException("Value type can be set only once.");
+
+        valType = cls.getName();
+
+        simpleValType = GridQueryProcessor.typeName(cls);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2105a48e/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java
index 46eefb6..7b556ee 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java
@@ -388,7 +388,7 @@ public class IgniteCacheObjectProcessorImpl extends GridProcessorAdapter impleme
     /** {@inheritDoc} */
     @Override public boolean isFieldsIndexingEnabled(Class<?> cls) {
         return indexingMgr != null && indexingMgr.isFieldsIndexingSupported() &&
-            indexingMgr.fieldsIndexingEnabledForClass(cls);
+            indexingMgr.enableFieldsIndexingForClass(cls);
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2105a48e/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 0be6055..22ff51e 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
@@ -441,10 +441,9 @@ public class GridQueryProcessor extends GridProcessorAdapter {
 
             TypeId id;
 
-            boolean portableVal = ctx.cacheObjects().isPortableObject(val);
-            boolean indexedFieldsVal = val instanceof CacheIndexedObjectImpl;
+            boolean indexedFieldsVal = ctx.cacheObjects().isIndexedObject(val);
 
-            if (portableVal || indexedFieldsVal) {
+            if (indexedFieldsVal) {
                 int typeId = ctx.cacheObjects().typeId(val);
 
                 id = new TypeId(space, typeId);
@@ -460,7 +459,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
             if (desc == null || !desc.registered())
                 return;
 
-            if (!portableVal && !indexedFieldsVal && !desc.valueClass().isAssignableFrom(valCls))
+            if (!indexedFieldsVal && !desc.valueClass().isAssignableFrom(valCls))
                 throw new IgniteCheckedException("Failed to update index due to class name conflict" +
                     "(multiple classes with same simple name are stored in the same cache) " +
                     "[expCls=" + desc.valueClass().getName() + ", actualCls=" + valCls.getName() + ']');
@@ -1616,7 +1615,9 @@ public class GridQueryProcessor extends GridProcessorAdapter {
                 obj = isKeyProp0 == 1 ? key : val;
             }
 
-            return ctx.cacheObjects().field(obj, propName);
+            Object res = ctx.cacheObjects().field(obj, propName);
+
+            return res;
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2105a48e/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerIndexingHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerIndexingHandler.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerIndexingHandler.java
index b48ce21..678e5b2 100644
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerIndexingHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerIndexingHandler.java
@@ -30,10 +30,7 @@ import java.util.concurrent.*;
  */
 public class OptimizedMarshallerIndexingHandler {
     /** */
-    private final static OptimizedMarshallerIndexingHandler instance = new OptimizedMarshallerIndexingHandler();
-
-    /** */
-    private final static ConcurrentHashMap<Class<?>, Boolean> indexingEnabledCache = new ConcurrentHashMap<>();
+    private static final ConcurrentMap<Class<?>, Boolean> indexingEnabledCache = new ConcurrentHashMap<>();
 
     /** Class descriptors by class. */
     private ConcurrentMap<Class, OptimizedClassDescriptor> clsMap;
@@ -129,16 +126,18 @@ public class OptimizedMarshallerIndexingHandler {
      *
      * @param cls Class.
      * @return {@code true} if fields indexing is enabled.
-     * @throws IgniteCheckedException In case of error.
      */
-    public boolean enableFieldsIndexingForClass(Class<?> cls) throws IgniteCheckedException {
+    public boolean enableFieldsIndexingForClass(Class<?> cls) {
         if (!isFieldsIndexingSupported())
             return false;
 
         if (metaHandler == null)
             return false;
 
-        boolean res;
+        Boolean res = indexingEnabledCache.get(cls);
+
+        if (res != null)
+            return res;
 
         if (isFieldsIndexingExcludedForClass(cls))
             res = false;
@@ -164,54 +163,11 @@ public class OptimizedMarshallerIndexingHandler {
                     res = false;
 
             } catch (IOException e) {
-                throw new IgniteCheckedException("Failed to put meta for class: " + cls.getName(), e);
+                throw new IgniteException("Failed to put meta for class: " + cls.getName(), e);
             }
         }
 
-        synchronized (indexingEnabledCache) {
-            indexingEnabledCache.put(cls, res);
-        }
-
-        return res;
-    }
-
-    /**
-     * Checks whether fields indexing is enabled for objects of the given {@code cls}.
-     *
-     * @param cls Class.
-     * @return {@code true} if fields indexing is enabled.
-     */
-    public boolean fieldsIndexingEnabledForClass(Class<?> cls) {
-        if (!isFieldsIndexingSupported())
-            return false;
-
-        if (metaHandler == null)
-            return false;
-
-        Boolean res = indexingEnabledCache.get(cls);
-
-        if (res != null)
-            return res;
-
-        if (isFieldsIndexingExcludedForClass(cls))
-            res = false;
-        else if (OptimizedMarshalAware.class.isAssignableFrom(cls))
-            res = true;
-        else {
-            try {
-                OptimizedClassDescriptor desc = OptimizedMarshallerUtils.classDescriptor(clsMap, cls, ctx, mapper,
-                    this);
-
-                res = desc.fields() != null && desc.fields().fieldsIndexingSupported() && metaHandler != null &&
-                    metaHandler.metadata(desc.typeId()) != null;
-            } catch (IOException e) {
-                throw new IgniteException("Failed to load class description: " + cls);
-            }
-        }
-
-        synchronized (indexingEnabledCache) {
-            indexingEnabledCache.putIfAbsent(cls, res);
-        }
+        indexingEnabledCache.put(cls, res);
 
         return res;
     }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2105a48e/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/cache/IndexAnnotatedValue.java
----------------------------------------------------------------------
diff --git a/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/cache/IndexAnnotatedValue.java b/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/cache/IndexAnnotatedValue.java
new file mode 100644
index 0000000..a4cfc33
--- /dev/null
+++ b/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/cache/IndexAnnotatedValue.java
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.tests.p2p.cache;
+
+import org.apache.ignite.cache.query.annotations.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ *
+ */
+@SuppressWarnings({"ReturnOfDateField", "AssignmentToDateFieldFromParameter"})
+public class IndexAnnotatedValue implements Serializable {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** */
+    @QuerySqlField(index = true)
+    private int field1;
+
+    /** */
+    @QuerySqlField(index = true)
+    private String field2;
+
+    /** */
+    @QuerySqlField(index = true)
+    private Date field3;
+
+    /** */
+    @QuerySqlField
+    private Object field4;
+
+    /**
+     * @return Field1 value.
+     */
+    public int getField1() {
+        return field1;
+    }
+
+    /**
+     * @param field1 Field1 value.
+     */
+    public void setField1(int field1) {
+        this.field1 = field1;
+    }
+
+    /**
+     * @return Field2 value.
+     */
+    public String getField2() {
+        return field2;
+    }
+
+    /**
+     * @param field2 Field2 value.
+     */
+    public void setField2(String field2) {
+        this.field2 = field2;
+    }
+
+    /**
+     * @return Field3 value.
+     */
+    public Date getField3() {
+        return field3;
+    }
+
+    /**
+     * @param field3 Field3 value.
+     */
+    public void setField3(Date field3) {
+        this.field3 = field3;
+    }
+
+    /**
+     * @return Field4 value.
+     */
+    public Object getField4() {
+        return field4;
+    }
+
+    /**
+     * @param field4 Field4 value.
+     */
+    public void setField4(Object field4) {
+        this.field4 = field4;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2105a48e/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/cache/IndexValue.java
----------------------------------------------------------------------
diff --git a/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/cache/IndexValue.java b/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/cache/IndexValue.java
new file mode 100644
index 0000000..b3da513
--- /dev/null
+++ b/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/cache/IndexValue.java
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.tests.p2p.cache;
+
+
+import java.io.*;
+import java.util.*;
+
+/**
+ *
+ */
+@SuppressWarnings({"ReturnOfDateField", "AssignmentToDateFieldFromParameter"})
+public class IndexValue implements Serializable {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** */
+    private int field1;
+
+    /** */
+    private String field2;
+
+    /** */
+    private Date field3;
+
+    /** */
+    private Object field4;
+
+    /**
+     * @return Field1 value.
+     */
+    public int getField1() {
+        return field1;
+    }
+
+    /**
+     * @param field1 Field1 value.
+     */
+    public void setField1(int field1) {
+        this.field1 = field1;
+    }
+
+    /**
+     * @return Field2 value.
+     */
+    public String getField2() {
+        return field2;
+    }
+
+    /**
+     * @param field2 Field2 value.
+     */
+    public void setField2(String field2) {
+        this.field2 = field2;
+    }
+
+    /**
+     * @return Field3 value.
+     */
+    public Date getField3() {
+        return field3;
+    }
+
+    /**
+     * @param field3 Field3 value.
+     */
+    public void setField3(Date field3) {
+        this.field3 = field3;
+    }
+
+    /**
+     * @return Field4 value.
+     */
+    public Object getField4() {
+        return field4;
+    }
+
+    /**
+     * @param field4 Field4 value.
+     */
+    public void setField4(Object field4) {
+        this.field4 = field4;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2105a48e/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheQueryNoServerClassesSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheQueryNoServerClassesSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheQueryNoServerClassesSelfTest.java
new file mode 100644
index 0000000..4d9af70
--- /dev/null
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheQueryNoServerClassesSelfTest.java
@@ -0,0 +1,174 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.cache;
+
+import org.apache.ignite.*;
+import org.apache.ignite.cache.*;
+import org.apache.ignite.cache.query.*;
+import org.apache.ignite.configuration.*;
+import org.apache.ignite.internal.util.typedef.*;
+import org.apache.ignite.testframework.*;
+import org.apache.ignite.testframework.config.*;
+import org.apache.ignite.testframework.junits.common.*;
+
+import javax.cache.*;
+import java.net.*;
+import java.util.*;
+
+/**
+ *
+ */
+public class IgniteCacheQueryNoServerClassesSelfTest extends GridCommonAbstractTest {
+    /** */
+    private static final int NODES_CNT = 2;
+
+    /** */
+    private static final int CLIENT_IDX = NODES_CNT - 1;
+
+    /** */
+    private static final String ANNOTATED_CLASS_NAME = "org.apache.ignite.tests.p2p.cache.IndexAnnotatedValue";
+
+    /** */
+    private static final String PLAIN_CLASS_NAME = "org.apache.ignite.tests.p2p.cache.IndexValue";
+
+    /** */
+    private ClassLoader ldr;
+
+    /** {@inheritDoc} */
+    @Override protected void beforeTestsStarted() throws Exception {
+        ldr = new GridTestExternalClassLoader(new URL[]{
+            new URL(GridTestProperties.getProperty("p2p.uri.cls"))});
+
+        startGrids(NODES_CNT);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void afterTestsStopped() throws Exception {
+        stopAllGrids(true);
+
+        ldr = null;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
+        IgniteConfiguration cfg = super.getConfiguration(gridName);
+
+        if (getTestGridName(CLIENT_IDX).equals(gridName))
+            cfg.setClientMode(true);
+
+        return cfg;
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testSqlQueryAnnotatedClass() throws Exception {
+        CacheConfiguration<Object, Object> cfg = new CacheConfiguration<>();
+
+        Class<?> valCls = ldr.loadClass(ANNOTATED_CLASS_NAME);
+
+        Thread.currentThread().setContextClassLoader(ldr);
+
+        cfg.setIndexedTypes(Integer.class, valCls);
+
+        IgniteCache<Object, Object> clientCache = ignite(CLIENT_IDX).createCache(cfg);
+
+        try {
+            for (int i = 0; i < 100; i++)
+                clientCache.put(i, value(valCls, i, "value" + i, new Date(i * 1000), "otherValue" + i));
+
+            // Check SQL query.
+            // TODO ignite-950.
+            List<Cache.Entry<Object, Object>> res = clientCache.query(new SqlQuery<>(valCls, "field1 >= 50")).getAll();
+
+            assertEquals(50, res.size());
+
+            // Check SQL fields query.
+            List<List<?>> rows = clientCache.query(new SqlFieldsQuery("select field1, field2 from IndexAnnotatedValue " +
+                "where field1 >= 50")).getAll();
+
+            assertEquals(50, rows.size());
+        }
+        finally {
+            ignite(CLIENT_IDX).destroyCache(null);
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testSqlQueryMetadata() throws Exception {
+        CacheConfiguration<Object, Object> cfg = new CacheConfiguration<>();
+
+        Class<?> valCls = ldr.loadClass(PLAIN_CLASS_NAME);
+
+        Thread.currentThread().setContextClassLoader(ldr);
+
+        CacheTypeMetadata meta = new CacheTypeMetadata();
+
+        meta.setKeyType(Integer.class);
+        meta.setValueType(valCls);
+
+        meta.setAscendingFields(F.asMap("field1", (Class<?>)Integer.class, "field2", String.class, "field3", Date.class));
+        meta.setQueryFields(F.<String, Class<?>>asMap("field4", String.class));
+
+        cfg.setTypeMetadata(F.asList(meta));
+
+        IgniteCache<Object, Object> clientCache = ignite(CLIENT_IDX).createCache(cfg);
+
+        try {
+            for (int i = 0; i < 100; i++)
+                clientCache.put(i, value(valCls, i, "value" + i, new Date(i * 1000), "otherValue" + i));
+
+            // Check SQL query.
+            // TODO ignite-950.
+//            List<Cache.Entry<Object, Object>> res = clientCache.query(new SqlQuery<>(valCls, "field1 >= 50")).getAll();
+//
+//            assertEquals(50, res.size());
+
+            // Check SQL fields query.
+            List<List<?>> rows = clientCache.query(new SqlFieldsQuery("select field1, field2 from IndexValue " +
+                "where field1 >= 50")).getAll();
+
+            assertEquals(50, rows.size());
+        }
+        finally {
+            ignite(CLIENT_IDX).destroyCache(null);
+        }
+    }
+
+    /**
+     * @param cls Class to instantiate.
+     * @param field1 Field 1 value.
+     * @param field2 Field 2 value.
+     * @param field3 Field 3 value.
+     * @param field4 Field 4 value.
+     * @return Filled object.
+     * @throws Exception If error occurred.
+     */
+    private Object value(Class<?> cls, int field1, String field2, Date field3, Object field4) throws Exception {
+        Object res = cls.newInstance();
+
+        GridTestUtils.setFieldValue(res, "field1", field1);
+        GridTestUtils.setFieldValue(res, "field2", field2);
+        GridTestUtils.setFieldValue(res, "field3", field3);
+        GridTestUtils.setFieldValue(res, "field4", field4);
+
+        return res;
+    }
+}


[09/14] incubator-ignite git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-ignite into ignite-950

Posted by ag...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-ignite into ignite-950


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

Branch: refs/heads/ignite-950
Commit: 08f8fa7f20c75f5ff5bb906f0816b04f98062820
Parents: b10836d 0f1b31a
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Tue Jul 7 16:47:24 2015 -0700
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Tue Jul 7 16:47:24 2015 -0700

----------------------------------------------------------------------
 bin/ignite.bat                                  |   8 +-
 bin/ignite.sh                                   |   6 +-
 bin/include/parseargs.bat                       |   1 +
 bin/include/parseargs.sh                        |   3 +
 dev-tools/slurp.sh                              |   2 +-
 modules/core/pom.xml                            |   4 +-
 .../cache/eviction/fifo/FifoEvictionPolicy.java |   5 -
 .../cache/eviction/lru/LruEvictionPolicy.java   |   5 -
 .../eviction/sorted/SortedEvictionPolicy.java   |  19 +-
 .../internal/interop/InteropIgnition.java       |  48 ++-
 .../internal/interop/InteropProcessor.java      |   7 +
 .../dht/GridPartitionedGetFuture.java           |  13 +-
 .../cache/query/GridCacheQueryAdapter.java      |  35 +-
 .../processors/query/GridQueryProcessor.java    |   5 +
 .../ignite/internal/util/IgniteUtils.java       |   6 +-
 .../ignite/spi/discovery/tcp/ServerImpl.java    |  26 ++
 .../startup/cmdline/CommandLineStartup.java     |   3 +-
 .../startup/cmdline/CommandLineTransformer.java |   9 +
 .../cache/CacheFutureExceptionSelfTest.java     | 171 +++++++++
 .../GridCachePartitionedFailoverSelfTest.java   |   5 +
 .../GridCachePartitionedNodeRestartTest.java    |   5 -
 ...ePartitionedOptimisticTxNodeRestartTest.java |   2 +-
 .../GridCacheReplicatedFailoverSelfTest.java    |   5 -
 .../GridCacheReplicatedNodeRestartSelfTest.java |   5 -
 ...acheAtomicReplicatedNodeRestartSelfTest.java |  10 +
 ...heConcurrentEvictionConsistencySelfTest.java |  15 +-
 .../TcpDiscoveryNodeConsistentIdSelfTest.java   |  80 ++++
 .../ignite/testsuites/IgniteCacheTestSuite.java |   1 +
 .../IgniteSpiDiscoverySelfTestSuite.java        |   2 +
 .../CacheAbstractQueryMetricsSelfTest.java      | 157 +++++++-
 .../cache/CacheLocalQueryMetricsSelfTest.java   |  33 ++
 ...titionedQueryMetricsDistributedSelfTest.java |  33 ++
 ...chePartitionedQueryMetricsLocalSelfTest.java |  33 ++
 .../CachePartitionedQueryMetricsSelfTest.java   |  32 --
 ...plicatedQueryMetricsDistributedSelfTest.java |  33 ++
 ...acheReplicatedQueryMetricsLocalSelfTest.java |  33 ++
 .../CacheReplicatedQueryMetricsSelfTest.java    |  32 --
 .../IgniteCacheQuerySelfTestSuite.java          |   7 +-
 modules/kafka/pom.xml                           | 116 ++++++
 .../ignite/stream/kafka/KafkaStreamer.java      | 220 +++++++++++
 .../kafka/IgniteKafkaStreamerSelfTestSuite.java |  37 ++
 .../stream/kafka/KafkaEmbeddedBroker.java       | 378 +++++++++++++++++++
 .../kafka/KafkaIgniteStreamerSelfTest.java      | 227 +++++++++++
 .../ignite/stream/kafka/SimplePartitioner.java  |  53 +++
 modules/mesos/pom.xml                           |   1 -
 modules/rest-http/pom.xml                       |  14 +-
 .../util/spring/IgniteSpringHelperImpl.java     |  72 +++-
 .../IgniteExcludeInConfigurationTest.java       |  78 ++++
 .../org/apache/ignite/spring/sprint-exclude.xml |  57 +++
 .../testsuites/IgniteSpringTestSuite.java       |   2 +
 modules/urideploy/pom.xml                       |   8 +-
 .../ignite/visor/commands/VisorConsole.scala    |   3 +-
 .../visor/commands/open/VisorOpenCommand.scala  | 319 ++++++++++++++++
 .../scala/org/apache/ignite/visor/visor.scala   | 230 +----------
 .../ignite/visor/VisorRuntimeBaseSpec.scala     |   2 +
 .../commands/kill/VisorKillCommandSpec.scala    |   1 +
 .../commands/start/VisorStartCommandSpec.scala  |   1 +
 .../commands/tasks/VisorTasksCommandSpec.scala  |   1 +
 .../commands/vvm/VisorVvmCommandSpec.scala      |   1 +
 modules/web/pom.xml                             |   6 +-
 parent/pom.xml                                  |   1 +
 pom.xml                                         |   1 +
 scripts/git-patch-prop.sh                       |   2 +-
 63 files changed, 2340 insertions(+), 390 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/08f8fa7f/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/08f8fa7f/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite.java
----------------------------------------------------------------------
diff --cc modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite.java
index d396d0b,2d7d0ce..ae7fa88
--- a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite.java
@@@ -116,15 -116,15 +116,18 @@@ public class IgniteCacheQuerySelfTestSu
          suite.addTestSuite(H2CompareBigQueryTest.class);
  
          // Cache query metrics.
-         suite.addTestSuite(CachePartitionedQueryMetricsSelfTest.class);
-         suite.addTestSuite(CacheReplicatedQueryMetricsSelfTest.class);
+         suite.addTestSuite(CacheLocalQueryMetricsSelfTest.class);
+         suite.addTestSuite(CachePartitionedQueryMetricsDistributedSelfTest.class);
+         suite.addTestSuite(CachePartitionedQueryMetricsLocalSelfTest.class);
+         suite.addTestSuite(CacheReplicatedQueryMetricsDistributedSelfTest.class);
+         suite.addTestSuite(CacheReplicatedQueryMetricsLocalSelfTest.class);
  
 -        //Unmarshallig query test.
 +        // Unmarshallig query test.
          suite.addTestSuite(IgniteCacheP2pUnmarshallingQueryErrorTest.class);
  
 +        // Optimized extended marshaller query tests
 +        suite.addTestSuite(IgniteCacheOptimizedMarshallerExtQuerySelfTest.class);
 +
          return suite;
      }
  }


[05/14] incubator-ignite git commit: Merge branches 'ignite-959-x' and 'ignite-sprint-7' of https://git-wip-us.apache.org/repos/asf/incubator-ignite into ignite-959-x

Posted by ag...@apache.org.
Merge branches 'ignite-959-x' and 'ignite-sprint-7' of https://git-wip-us.apache.org/repos/asf/incubator-ignite into ignite-959-x


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

Branch: refs/heads/ignite-950
Commit: 8eeee9e29b14915fd29509fcbcf7a2aa3f8582c5
Parents: 7df4f8c a0a31e2
Author: S.Vladykin <sv...@gridgain.com>
Authored: Thu Jul 2 12:07:31 2015 -0700
Committer: S.Vladykin <sv...@gridgain.com>
Committed: Thu Jul 2 12:07:31 2015 -0700

----------------------------------------------------------------------
 .../apache/ignite/internal/IgniteKernal.java    |   1 -
 .../managers/communication/GridIoManager.java   | 124 +++++++--
 .../managers/communication/GridIoMessage.java   |  15 +-
 .../managers/communication/GridIoPolicy.java    |  32 +--
 .../eventstorage/GridEventStorageManager.java   |   2 +-
 .../internal/processors/cache/CacheType.java    |   8 +-
 .../processors/cache/GridCacheContext.java      |   4 +-
 .../processors/cache/GridCacheIoManager.java    |  12 +-
 .../processors/cache/GridCacheSwapManager.java  | 257 ++++++++++++-------
 .../GridDistributedTxFinishRequest.java         |  11 +-
 .../GridDistributedTxPrepareRequest.java        |   9 +-
 .../GridDistributedTxRemoteAdapter.java         |   3 +-
 .../distributed/dht/GridDhtTxFinishRequest.java |   3 +-
 .../cache/distributed/dht/GridDhtTxLocal.java   |   3 +-
 .../distributed/dht/GridDhtTxLocalAdapter.java  |   3 +-
 .../cache/distributed/dht/GridDhtTxRemote.java  |   5 +-
 .../near/GridNearTxFinishRequest.java           |   3 +-
 .../cache/distributed/near/GridNearTxLocal.java |   3 +-
 .../distributed/near/GridNearTxRemote.java      |   5 +-
 .../cache/transactions/IgniteInternalTx.java    |   3 +-
 .../cache/transactions/IgniteTxAdapter.java     |  11 +-
 .../transactions/IgniteTxLocalAdapter.java      |   3 +-
 .../internal/processors/igfs/IgfsContext.java   |   5 +-
 .../plugin/IgnitePluginProcessor.java           |   3 +-
 .../plugin/extensions/communication/IoPool.java |  42 +++
 .../ignite/spi/discovery/tcp/ClientImpl.java    |   5 +-
 .../ignite/spi/discovery/tcp/ServerImpl.java    |   5 +-
 .../TcpDiscoveryMulticastIpFinder.java          |   2 +-
 .../communication/GridIoManagerSelfTest.java    |   2 +-
 .../cache/IgniteInternalCacheTypesTest.java     |   3 +-
 .../GridCacheEvictionFilterSelfTest.java        |   2 -
 .../inmemory/GridTestSwapSpaceSpi.java          |   3 +-
 .../query/h2/opt/GridH2KeyValueRowOffheap.java  |   8 +-
 .../processors/query/h2/opt/GridH2Table.java    |   2 +-
 .../cache/IgniteCacheOffheapEvictQueryTest.java |   2 +-
 .../IgniteCacheQueryMultiThreadedSelfTest.java  |   4 +-
 ...QueryOffheapEvictsMultiThreadedSelfTest.java |   5 -
 .../IgniteCacheQueryNodeRestartSelfTest2.java   |   5 +
 modules/urideploy/pom.xml                       |  14 -
 39 files changed, 388 insertions(+), 244 deletions(-)
----------------------------------------------------------------------



[13/14] incubator-ignite git commit: IGNITE-950 - Fixing conflicts.

Posted by ag...@apache.org.
IGNITE-950 - Fixing conflicts.


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

Branch: refs/heads/ignite-950
Commit: b76014aa527178ea740b88c890c3c0a0b1160ce2
Parents: 2e8f713
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Wed Jul 8 16:14:33 2015 -0700
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Wed Jul 8 16:14:33 2015 -0700

----------------------------------------------------------------------
 .../cacheobject/IgniteCacheObjectProcessor.java |   8 +
 .../IgniteCacheObjectProcessorImpl.java         |   5 +
 .../processors/query/GridQueryProcessor.java    | 169 +++----------------
 3 files changed, 33 insertions(+), 149 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b76014aa/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessor.java
index 164d666..5991fff 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessor.java
@@ -77,6 +77,14 @@ public interface IgniteCacheObjectProcessor extends GridProcessor {
     public boolean isPortableObject(Object obj);
 
     /**
+     * Checks whether objects supports index fields extraction.
+     *
+     * @param obj Object to check.
+     * @return {@code True} if object is indexed object, {@code false} otherwise.
+     */
+    public boolean isIndexedObject(Object obj);
+
+    /**
      * Checks whether given class is portable.
      *
      * @return {@code true} If portable objects are enabled.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b76014aa/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java
index 689c4f5..46eefb6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java
@@ -335,6 +335,11 @@ public class IgniteCacheObjectProcessorImpl extends GridProcessorAdapter impleme
     }
 
     /** {@inheritDoc} */
+    @Override public boolean isIndexedObject(Object obj) {
+        return obj instanceof CacheIndexedObjectImpl;
+    }
+
+    /** {@inheritDoc} */
     @Override public boolean isPortableEnabled() {
         return false;
     }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b76014aa/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 2e2baa1..0be6055 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
@@ -34,7 +34,6 @@ import org.apache.ignite.internal.util.typedef.*;
 import org.apache.ignite.internal.util.typedef.internal.*;
 import org.apache.ignite.internal.util.worker.*;
 import org.apache.ignite.lang.*;
-import org.apache.ignite.marshaller.optimized.*;
 import org.apache.ignite.spi.indexing.*;
 import org.jetbrains.annotations.*;
 import org.jsr166.*;
@@ -49,11 +48,11 @@ import java.util.concurrent.*;
 import static org.apache.ignite.events.EventType.*;
 import static org.apache.ignite.internal.IgniteComponentType.*;
 import static org.apache.ignite.internal.processors.query.GridQueryIndexType.*;
-import static org.apache.ignite.internal.processors.query.GridQueryProcessor.PropertyType.*;
 
 /**
  * Indexing processor.
  */
+@SuppressWarnings({"UnnecessaryFullyQualifiedName", "PublicField"})
 public class GridQueryProcessor extends GridProcessorAdapter {
     /** */
     public static final String _VAL = "_val";
@@ -62,7 +61,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
     private static final Class<?> GEOMETRY_CLASS = U.classForName("com.vividsolutions.jts.geom.Geometry", null);
 
     /** */
-    private static Set<Class<?>> SQL_TYPES = new HashSet<>(F.<Class<?>>asList(
+    private static final Collection<Class<?>> SQL_TYPES = new HashSet<>(F.<Class<?>>asList(
         Integer.class,
         Boolean.class,
         Byte.class,
@@ -160,8 +159,6 @@ public class GridQueryProcessor extends GridProcessorAdapter {
                     // We need that to set correct types for _key and _val columns.
                     Class<?> keyCls = U.classForName(meta.getKeyType(), null);
                     Class<?> valCls = U.classForName(meta.getValueType(), null);
-                    // TODO IGNITE-950 need class to check enableFieldsIndexing, but class may be absent on server node.
-                    // TODO use old code if class is available on server node. CacheIndexedObjectImpl.
 
                     desc.name(meta.getSimpleValueType());
 
@@ -170,17 +167,14 @@ public class GridQueryProcessor extends GridProcessorAdapter {
 
                     TypeId typeId;
 
-                    if (valCls == null || ctx.cacheObjects().isPortableEnabled()) {
-                        processCacheTypeMeta(meta, desc, PORTABLE_PROPERTY);
+                    if (ctx.cacheObjects().isPortableEnabled() || valCls == null || ccfg.isCopyOnRead()) {
+                        processCacheTypeMeta(meta, desc);
 
                         typeId = new TypeId(ccfg.getName(), ctx.cacheObjects().typeId(meta.getValueType()));
                     }
-                    else if (ctx.cacheObjects().enableFieldsIndexing(valCls)) {
-                        processCacheTypeMeta(meta, desc, INDEXED_FIELDS_PROPERTY);
-
-                        typeId = new TypeId(ccfg.getName(), ctx.cacheObjects().typeId(valCls.getName()));
-                    }
                     else {
+                        assert valCls != null;
+
                         processClassMeta(meta, desc);
 
                         typeId = new TypeId(ccfg.getName(), valCls);
@@ -555,7 +549,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
             final GridCacheContext<Object, Object> cctx = ctx.cache().internalCache(space).context();
 
             return executeQuery(cctx, new IgniteOutClosureX<Iterable<List<?>>>() {
-                @Override public Iterable<List<?>> applyx() throws IgniteCheckedException {
+                @Override public Iterable<List<?>> applyx() {
                     return idx.queryTwoStep(
                         cctx,
                         qry,
@@ -584,7 +578,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
 
         try {
             return executeQuery(cctx, new IgniteOutClosureX<QueryCursor<List<?>>>() {
-                @Override public QueryCursor<List<?>> applyx() throws IgniteCheckedException {
+                @Override public QueryCursor<List<?>> applyx() {
                     return idx.queryTwoStep(cctx, qry);
                 }
             });
@@ -610,7 +604,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
 
         try {
             return executeQuery(cctx, new IgniteOutClosureX<QueryCursor<Cache.Entry<K, V>>>() {
-                @Override public QueryCursor<Cache.Entry<K, V>> applyx() throws IgniteCheckedException {
+                @Override public QueryCursor<Cache.Entry<K, V>> applyx() {
                     return idx.queryTwoStep(cctx, qry);
                 }
             });
@@ -1150,22 +1144,17 @@ public class GridQueryProcessor extends GridProcessorAdapter {
      *
      * @param meta Declared metadata.
      * @param d Type descriptor.
-     * @param propType PropertyType.
      * @throws IgniteCheckedException If failed.
      */
-    private void processCacheTypeMeta(CacheTypeMetadata meta, TypeDescriptor d, PropertyType propType)
+    private void processCacheTypeMeta(CacheTypeMetadata meta, TypeDescriptor d)
         throws IgniteCheckedException {
-        assert propType != CLASS_PROPERTY;
-
         Map<String,String> aliases = meta.getAliases();
 
         if (aliases == null)
             aliases = Collections.emptyMap();
 
         for (Map.Entry<String, Class<?>> entry : meta.getAscendingFields().entrySet()) {
-            Property prop = propType == PORTABLE_PROPERTY ?
-                buildPortableProperty(entry.getKey(), entry.getValue(), aliases) :
-                buildIndexedFieldsProperty(entry.getKey(), entry.getValue(), aliases);
+            Property prop = buildPortableProperty(entry.getKey(), entry.getValue(), aliases);
 
             d.addProperty(prop, false);
 
@@ -1177,9 +1166,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
         }
 
         for (Map.Entry<String, Class<?>> entry : meta.getDescendingFields().entrySet()) {
-            Property prop = propType == PORTABLE_PROPERTY ?
-                buildPortableProperty(entry.getKey(), entry.getValue(), aliases) :
-                buildIndexedFieldsProperty(entry.getKey(), entry.getValue(), aliases);
+            Property prop = buildPortableProperty(entry.getKey(), entry.getValue(), aliases);
 
             d.addProperty(prop, false);
 
@@ -1191,9 +1178,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
         }
 
         for (String txtIdx : meta.getTextFields()) {
-            Property prop = propType == PORTABLE_PROPERTY ?
-                buildPortableProperty(txtIdx, String.class, aliases) :
-                buildIndexedFieldsProperty(txtIdx, String.class, aliases);
+            Property prop = buildPortableProperty(txtIdx, String.class, aliases);
 
             d.addProperty(prop, false);
 
@@ -1211,9 +1196,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
                 int order = 0;
 
                 for (Map.Entry<String, IgniteBiTuple<Class<?>, Boolean>> idxField : idxFields.entrySet()) {
-                    Property prop = propType == PORTABLE_PROPERTY ?
-                        buildPortableProperty(idxField.getKey(), idxField.getValue().get1(), aliases) :
-                        buildIndexedFieldsProperty(idxField.getKey(), idxField.getValue().get1(), aliases);
+                    Property prop = buildPortableProperty(idxField.getKey(), idxField.getValue().get1(), aliases);
 
                     d.addProperty(prop, false);
 
@@ -1227,9 +1210,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
         }
 
         for (Map.Entry<String, Class<?>> entry : meta.getQueryFields().entrySet()) {
-            Property prop = propType == PORTABLE_PROPERTY ?
-                buildPortableProperty(entry.getKey(), entry.getValue(), aliases) :
-                buildIndexedFieldsProperty(entry.getKey(), entry.getValue(), aliases);
+            Property prop = buildPortableProperty(entry.getKey(), entry.getValue(), aliases);
 
             if (!d.props.containsKey(prop.name()))
                 d.addProperty(prop, false);
@@ -1302,11 +1283,9 @@ public class GridQueryProcessor extends GridProcessorAdapter {
      * @param resType Expected result type.
      * @param aliases Aliases.
      * @return Property instance corresponding to the given path.
-     * @throws IgniteCheckedException If property cannot be created.
      */
     static ClassProperty buildClassProperty(boolean key, Class<?> cls, String pathStr, Class<?> resType,
-        Map<String,String> aliases)
-        throws IgniteCheckedException {
+        Map<String,String> aliases) {
         String[] path = pathStr.split("\\.");
 
         ClassProperty res = null;
@@ -1355,25 +1334,6 @@ public class GridQueryProcessor extends GridProcessorAdapter {
     }
 
     /**
-     * Builds property of object that has fields information in its serialized form.
-     *
-     * @param pathStr String representing path to the property. May contains dots '.' to identify
-     *      nested fields.
-     * @param resType Result type.
-     * @return Portable property.
-     */
-    private IndexedFieldsProperty buildIndexedFieldsProperty(String pathStr, Class<?> resType) {
-        String[] path = pathStr.split("\\.");
-
-        IndexedFieldsProperty res = null;
-
-        for (String prop : path)
-            res = new IndexedFieldsProperty(prop, res, resType);
-
-        return res;
-    }
-
-    /**
      * Gets types for space.
      *
      * @param space Space name.
@@ -1414,7 +1374,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
      * @param cctx Cache context.
      * @param clo Closure.
      */
-    private <R> R executeQuery(GridCacheContext<?,?> cctx, IgniteOutClosureX<R> clo)
+    private <R> R executeQuery(GridCacheContext<?,?> cctx, IgniteOutClosure<R> clo)
         throws IgniteCheckedException {
         final long start = U.currentTimeMillis();
 
@@ -1631,8 +1591,8 @@ public class GridQueryProcessor extends GridProcessorAdapter {
                 if (obj == null)
                     return null;
 
-                if (!ctx.cacheObjects().isPortableObject(obj))
-                    throw new IgniteCheckedException("Non-portable object received as a result of property extraction " +
+                if (!ctx.cacheObjects().isIndexedObject(obj))
+                    throw new IgniteCheckedException("Non-indexed object received as a result of property extraction " +
                         "[parent=" + parent + ", propName=" + propName + ", obj=" + obj + ']');
             }
             else {
@@ -1641,7 +1601,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
                 if (isKeyProp0 == 0) {
                     // Key is allowed to be a non-portable object here.
                     // We check key before value consistently with ClassProperty.
-                    if (ctx.cacheObjects().isPortableObject(key) && ctx.cacheObjects().hasField(key, propName))
+                    if (ctx.cacheObjects().isIndexedObject(key) && ctx.cacheObjects().hasField(key, propName))
                         isKeyProp = isKeyProp0 = 1;
                     else if (ctx.cacheObjects().hasField(val, propName))
                         isKeyProp = isKeyProp0 = -1;
@@ -1671,86 +1631,6 @@ public class GridQueryProcessor extends GridProcessorAdapter {
     }
 
     /**
-     *
-     */
-    private class IndexedFieldsProperty extends Property {
-        /** Property name. */
-        private String propName;
-
-        /** Parent property. */
-        private IndexedFieldsProperty parent;
-
-        /** Result class. */
-        private Class<?> type;
-
-        /** */
-        private volatile int isKeyProp;
-
-        /**
-         * Constructor.
-         *
-         * @param propName Property name.
-         * @param parent Parent property.
-         * @param type Result type.
-         */
-        private IndexedFieldsProperty(String propName, IndexedFieldsProperty parent, Class<?> type) {
-            this.propName = propName;
-            this.parent = parent;
-            this.type = type;
-        }
-
-        /** {@inheritDoc} */
-        @Override public Object value(Object key, Object val) throws IgniteCheckedException {
-            Object obj;
-
-            if (parent != null) {
-                obj = parent.value(key, val);
-
-                if (obj == null)
-                    return null;
-
-                if (!(obj instanceof CacheIndexedObjectImpl))
-                    throw new IgniteCheckedException("Non-indexed object received as a result of property extraction " +
-                        "[parent=" + parent + ", propName=" + propName + ", obj=" + obj + ']');
-
-                return ctx.cacheObjects().field(obj, propName);
-            }
-            else {
-                int isKeyProp0 = isKeyProp;
-
-                if (isKeyProp0 == 0) {
-                    // Key is allowed to be a non-portable object here.
-                    // We check key before value consistently with ClassProperty.
-                    if (ctx.cacheObjects().hasField(key, propName))
-                        isKeyProp = isKeyProp0 = 1;
-                    else if (ctx.cacheObjects().hasField(val, propName))
-                        isKeyProp = isKeyProp0 = -1;
-                    else {
-                        U.warn(log, "Neither key nor value have property " +
-                            "[propName=" + propName + ", key=" + key + ", val=" + val + "]");
-
-                        return null;
-                    }
-                }
-
-                obj = isKeyProp0 == 1 ? key : val;
-
-                return ctx.cacheObjects().field(obj, propName);
-            }
-        }
-
-        /** {@inheritDoc} */
-        @Override public String name() {
-            return propName;
-        }
-
-        /** {@inheritDoc} */
-        @Override public Class<?> type() {
-            return type;
-        }
-    }
-
-    /**
      * Descriptor of type.
      */
     private static class TypeDescriptor implements GridQueryTypeDescriptor {
@@ -2143,13 +2023,4 @@ public class GridQueryProcessor extends GridProcessorAdapter {
     private enum IndexType {
         ASC, DESC, TEXT
     }
-
-    /**
-     *
-     */
-    enum PropertyType {
-        CLASS_PROPERTY,
-        PORTABLE_PROPERTY,
-        INDEXED_FIELDS_PROPERTY
-    }
 }


[04/14] incubator-ignite git commit: Merge branch 'ignite-sprint-7' of https://git-wip-us.apache.org/repos/asf/incubator-ignite into ignite-959-x

Posted by ag...@apache.org.
Merge branch 'ignite-sprint-7' of https://git-wip-us.apache.org/repos/asf/incubator-ignite into ignite-959-x

# Conflicts:
#	modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java


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

Branch: refs/heads/ignite-950
Commit: 7df4f8cb063b4491e46cc64368dff5a83a3df200
Parents: 3f38513 d3783a1
Author: S.Vladykin <sv...@gridgain.com>
Authored: Wed Jul 1 12:52:32 2015 -0700
Committer: S.Vladykin <sv...@gridgain.com>
Committed: Wed Jul 1 12:52:32 2015 -0700

----------------------------------------------------------------------
 assembly/dependencies-fabric.xml                |   1 +
 examples/pom.xml                                |   2 +-
 modules/aop/pom.xml                             |   2 +-
 modules/aws/pom.xml                             |   2 +-
 modules/clients/pom.xml                         |   2 +-
 .../ClientAbstractConnectivitySelfTest.java     |   4 +-
 modules/cloud/pom.xml                           |   2 +-
 modules/codegen/pom.xml                         |   2 +-
 modules/core/pom.xml                            |   2 +-
 .../org/apache/ignite/cluster/ClusterGroup.java |  18 +-
 .../org/apache/ignite/cluster/ClusterNode.java  |   2 +
 .../configuration/CacheConfiguration.java       | 105 +--
 .../configuration/NearCacheConfiguration.java   |  10 +-
 .../ignite/internal/GridKernalContextImpl.java  |   2 +-
 .../internal/cluster/ClusterGroupAdapter.java   |  50 +-
 .../cluster/IgniteClusterAsyncImpl.java         |  12 +-
 .../managers/communication/GridIoManager.java   |  49 +-
 .../discovery/GridDiscoveryManager.java         |  32 +-
 .../cache/GridCacheDeploymentManager.java       |  10 +-
 .../GridCachePartitionExchangeManager.java      |   6 +-
 .../processors/cache/GridCacheProcessor.java    |  62 +-
 .../processors/cache/IgniteCacheFutureImpl.java |  42 +
 .../processors/cache/IgniteCacheProxy.java      |   2 +-
 .../processors/clock/GridClockServer.java       |  21 +-
 .../processors/rest/GridRestProcessor.java      |   4 +-
 .../handlers/task/GridTaskCommandHandler.java   |  12 +-
 .../processors/task/GridTaskWorker.java         |   4 +-
 .../internal/util/GridConfigurationFinder.java  |  55 +-
 .../ignite/internal/util/IgniteUtils.java       |   6 +-
 .../internal/util/future/IgniteFutureImpl.java  |  18 +-
 .../shmem/IpcSharedMemoryServerEndpoint.java    |  10 +-
 .../util/nio/GridNioMessageTracker.java         |  23 +-
 .../apache/ignite/internal/visor/VisorJob.java  |   2 +
 .../internal/visor/log/VisorLogSearchTask.java  |   2 +-
 .../visor/node/VisorNodeDataCollectorJob.java   |   4 +
 .../visor/query/VisorQueryCleanupTask.java      |  14 +
 .../util/VisorClusterGroupEmptyException.java   |  37 +
 .../ignite/spi/discovery/tcp/ClientImpl.java    | 151 ++--
 .../ignite/spi/discovery/tcp/ServerImpl.java    | 105 ++-
 .../spi/discovery/tcp/TcpDiscoverySpi.java      |   3 +-
 .../TcpDiscoveryMulticastIpFinder.java          |  74 +-
 .../core/src/main/resources/ignite.properties   |   2 +-
 .../core/src/test/config/spark/spark-config.xml |  46 ++
 modules/core/src/test/config/tests.properties   |   6 +-
 .../internal/ClusterGroupAbstractTest.java      | 777 ++++++++++++++++++
 .../internal/ClusterGroupHostsSelfTest.java     | 141 ++++
 .../ignite/internal/ClusterGroupSelfTest.java   | 251 ++++++
 .../internal/GridDiscoveryEventSelfTest.java    |  12 +-
 .../internal/GridProjectionAbstractTest.java    | 784 -------------------
 .../ignite/internal/GridProjectionSelfTest.java | 251 ------
 .../apache/ignite/internal/GridSelfTest.java    |   2 +-
 .../IgniteTopologyPrintFormatSelfTest.java      | 289 +++++++
 .../cache/GridCacheDaemonNodeStopSelfTest.java  | 119 ---
 .../IgniteDaemonNodeMarshallerCacheTest.java    | 192 +++++
 ...achePartitionedMultiNodeFullApiSelfTest.java |   4 +-
 .../internal/util/IgniteUtilsSelfTest.java      |  22 +
 .../GridP2PContinuousDeploymentSelfTest.java    |   2 -
 .../tcp/TcpClientDiscoverySpiSelfTest.java      | 265 ++++++-
 .../ignite/testsuites/IgniteBasicTestSuite.java |   7 +-
 .../testsuites/IgniteCacheTestSuite3.java       |   1 -
 .../testsuites/IgniteKernalSelfTestSuite.java   |   1 +
 modules/core/src/test/resources/helloworld.gar  | Bin 6092 -> 0 bytes
 modules/core/src/test/resources/helloworld1.gar | Bin 6092 -> 0 bytes
 modules/core/src/test/resources/readme.txt      |   6 -
 modules/docker/Dockerfile                       |  55 ++
 modules/docker/README.txt                       |  11 +
 modules/docker/build_users_libs.sh              |  39 +
 modules/docker/download_ignite.sh               |  49 ++
 modules/docker/execute.sh                       |  62 ++
 modules/docker/run.sh                           |  34 +
 modules/extdata/p2p/pom.xml                     |   4 +-
 .../p2p/GridP2PContinuousDeploymentTask1.java   |   2 +-
 modules/extdata/uri/META-INF/ignite.xml         |  38 +
 .../extdata/uri/modules/uri-dependency/pom.xml  |  42 +
 .../deployment/uri/tasks/GarHelloWorldBean.java |  60 ++
 .../src/main/resources/gar-example.properties   |  18 +
 modules/extdata/uri/pom.xml                     |  62 +-
 .../deployment/uri/tasks/GarHelloWorldTask.java |  81 ++
 .../deployment/uri/tasks/gar-spring-bean.xml    |  29 +
 modules/gce/pom.xml                             |   2 +-
 modules/geospatial/pom.xml                      |   2 +-
 modules/hadoop/pom.xml                          |   2 +-
 modules/hibernate/pom.xml                       |   2 +-
 modules/indexing/pom.xml                        |   2 +-
 modules/jcl/pom.xml                             |   2 +-
 modules/jta/pom.xml                             |   2 +-
 modules/log4j/pom.xml                           |   2 +-
 modules/mesos/pom.xml                           |   2 +-
 modules/rest-http/pom.xml                       |   2 +-
 modules/scalar-2.10/pom.xml                     |   2 +-
 modules/scalar/pom.xml                          |   2 +-
 modules/schedule/pom.xml                        |   2 +-
 modules/schema-import/pom.xml                   |   2 +-
 .../ignite/schema/model/PojoDescriptor.java     |   2 +
 .../apache/ignite/schema/model/PojoField.java   |   1 +
 .../parser/dialect/OracleMetadataDialect.java   |   2 +-
 modules/slf4j/pom.xml                           |   2 +-
 modules/spark-2.10/pom.xml                      |   2 +-
 modules/spark/pom.xml                           |   2 +-
 .../org/apache/ignite/spark/IgniteContext.scala |  50 +-
 .../org/apache/ignite/spark/IgniteRddSpec.scala |  18 +
 modules/spring/pom.xml                          |   2 +-
 modules/ssh/pom.xml                             |   2 +-
 modules/tools/pom.xml                           |   2 +-
 modules/urideploy/pom.xml                       |  16 +-
 .../GridTaskUriDeploymentDeadlockSelfTest.java  |  13 +-
 .../ignite/p2p/GridP2PDisabledSelfTest.java     |   2 +-
 modules/visor-console-2.10/pom.xml              |   2 +-
 modules/visor-console/pom.xml                   |   2 +-
 .../commands/cache/VisorCacheCommand.scala      |   7 +-
 modules/visor-plugins/pom.xml                   |   2 +-
 modules/web/pom.xml                             |   2 +-
 modules/yardstick/pom.xml                       |   2 +-
 pom.xml                                         |  14 +-
 scripts/git-patch-prop.sh                       |   2 +-
 115 files changed, 3413 insertions(+), 1496 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7df4f8cb/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
index 1f32cf3,e2308f2..e73f51f
--- a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
@@@ -1511,13 -1506,8 +1512,13 @@@ public class CacheConfiguration<K, V> e
       * @param typeMeta Collection of type metadata.
       * @return {@code this} for chaining.
       */
-     public CacheConfiguration setTypeMetadata(Collection<CacheTypeMetadata> typeMeta) {
+     public CacheConfiguration<K, V> setTypeMetadata(Collection<CacheTypeMetadata> typeMeta) {
 -        this.typeMeta = typeMeta;
 +        if (this.typeMeta == null)
 +            this.typeMeta = new ArrayList<>(typeMeta);
 +        else if (indexedTypes != null)
 +            this.typeMeta.addAll(typeMeta);
 +        else
 +            throw new CacheException("Type metadata can be set only once.");
  
          return this;
      }
@@@ -1671,32 -1661,22 +1672,32 @@@
       * @param indexedTypes Key and value type pairs.
       * @return {@code this} for chaining.
       */
-     public CacheConfiguration setIndexedTypes(Class<?>... indexedTypes) {
+     public CacheConfiguration<K, V> setIndexedTypes(Class<?>... indexedTypes) {
 -        A.ensure(indexedTypes == null || (indexedTypes.length & 1) == 0,
 +        int len = indexedTypes.length;
 +
 +        A.ensure(len > 0, "Array of indexed types can not be empty.");
 +        A.ensure((len & 1) == 0,
              "Number of indexed types is expected to be even. Refer to method javadoc for details.");
  
 -        if (indexedTypes != null) {
 -            int len = indexedTypes.length;
 +        if (this.indexedTypes != null)
 +            throw new CacheException("Indexed types can be set only once.");
 +
 +        Class<?>[] newIndexedTypes = new Class<?>[len];
  
 -            Class<?>[] newIndexedTypes = new Class<?>[len];
 +        for (int i = 0; i < len; i++)
 +            newIndexedTypes[i] = U.box(indexedTypes[i]);
  
 -            for (int i = 0; i < len; i++)
 -                newIndexedTypes[i] = U.box(indexedTypes[i]);
 +        if (typeMeta == null)
 +            typeMeta = new ArrayList<>();
  
 -            this.indexedTypes = newIndexedTypes;
 +        for (int i = 0; i < len; i += 2) {
 +            Class<?> keyCls = newIndexedTypes[i];
 +            Class<?> valCls = newIndexedTypes[i + 1];
 +
 +            TypeDescriptor desc = processKeyAndValueClasses(keyCls, valCls);
 +
 +            typeMeta.add(convert(desc));
          }
 -        else
 -            this.indexedTypes = null;
  
          return this;
      }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7df4f8cb/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
----------------------------------------------------------------------


[03/14] incubator-ignite git commit: ignite-959-x - wip

Posted by ag...@apache.org.
ignite-959-x - wip


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

Branch: refs/heads/ignite-950
Commit: 3f38513fb00b472a5b30be4da61a6838154e5e57
Parents: 9379828
Author: S.Vladykin <sv...@gridgain.com>
Authored: Tue Jun 30 18:25:33 2015 -0700
Committer: S.Vladykin <sv...@gridgain.com>
Committed: Tue Jun 30 18:25:33 2015 -0700

----------------------------------------------------------------------
 .../apache/ignite/cache/CacheTypeMetadata.java  |  66 +++--
 .../configuration/CacheConfiguration.java       | 260 ++++++++---------
 .../processors/query/GridQueryIndexing.java     |  16 --
 .../processors/query/GridQueryProcessor.java    | 283 ++++++-------------
 .../ignite/internal/util/IgniteUtils.java       |   5 +-
 .../processors/query/h2/IgniteH2Indexing.java   |  17 --
 6 files changed, 254 insertions(+), 393 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3f38513f/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeMetadata.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeMetadata.java b/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeMetadata.java
index 20129b7..f2b004e 100644
--- a/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeMetadata.java
+++ b/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeMetadata.java
@@ -17,10 +17,12 @@
 
 package org.apache.ignite.cache;
 
+import org.apache.ignite.internal.processors.query.*;
 import org.apache.ignite.internal.util.tostring.*;
 import org.apache.ignite.internal.util.typedef.internal.*;
 import org.apache.ignite.lang.*;
 
+import javax.cache.*;
 import java.io.*;
 import java.util.*;
 
@@ -43,6 +45,9 @@ public class CacheTypeMetadata implements Serializable {
     /** Value class used to store value in cache. */
     private String valType;
 
+    /** Simple value type name that will be used as SQL table name.*/
+    private String simpleValType;
+
     /** Key fields. */
     @GridToStringInclude
     private Collection<CacheTypeFieldMetadata> keyFields;
@@ -71,22 +76,20 @@ public class CacheTypeMetadata implements Serializable {
     @GridToStringInclude
     private Map<String, LinkedHashMap<String, IgniteBiTuple<Class<?>, Boolean>>> grps;
 
+    /** */
+    @GridToStringInclude
+    private Map<String,String> aliases;
+
     /**
      * Default constructor.
      */
     public CacheTypeMetadata() {
         keyFields = new ArrayList<>();
-
         valFields = new ArrayList<>();
-
         qryFlds = new LinkedHashMap<>();
-
         ascFlds = new LinkedHashMap<>();
-
         descFlds = new LinkedHashMap<>();
-
         txtFlds = new LinkedHashSet<>();
-
         grps = new LinkedHashMap<>();
     }
 
@@ -95,25 +98,16 @@ public class CacheTypeMetadata implements Serializable {
      */
     public CacheTypeMetadata(CacheTypeMetadata src) {
         dbSchema = src.getDatabaseSchema();
-
         dbTbl = src.getDatabaseTable();
-
         keyType = src.getKeyType();
-
         valType = src.getValueType();
-
+        simpleValType = src.simpleValType;
         keyFields = new ArrayList<>(src.getKeyFields());
-
         valFields = new ArrayList<>(src.getValueFields());
-
         qryFlds = new LinkedHashMap<>(src.getQueryFields());
-
         ascFlds = new LinkedHashMap<>(src.getAscendingFields());
-
         descFlds = new LinkedHashMap<>(src.getDescendingFields());
-
         txtFlds = new LinkedHashSet<>(src.getTextFields());
-
         grps = new LinkedHashMap<>(src.getGroups());
     }
 
@@ -190,12 +184,28 @@ public class CacheTypeMetadata implements Serializable {
     }
 
     /**
+     * Gets simple value type.
+     *
+     * @return Simple value type.
+     */
+    public String getSimpleValueType() {
+        return simpleValType;
+    }
+
+    /**
      * Sets value type.
      *
      * @param valType Value type.
      */
     public void setValueType(String valType) {
+        if (this.valType != null)
+            throw new CacheException("Value type can be set only once.");
+
         this.valType = valType;
+
+        Class<?> cls = U.classForName(valType, null);
+
+        simpleValType = cls == null ? valType : GridQueryProcessor.typeName(cls);
     }
 
     /**
@@ -276,7 +286,10 @@ public class CacheTypeMetadata implements Serializable {
      * @param ascFlds Map of ascending-indexed fields.
      */
     public void setAscendingFields(Map<String, Class<?>> ascFlds) {
-        this.ascFlds = ascFlds;
+        if (ascFlds == null)
+            this.ascFlds = ascFlds;
+        else
+            this.ascFlds.putAll(ascFlds);
     }
 
     /**
@@ -333,6 +346,25 @@ public class CacheTypeMetadata implements Serializable {
         this.grps = grps;
     }
 
+    /**
+     * Sets mapping from full property name in dot notation to an alias that will be used as SQL column name.
+     * Example: {"parent.name" -> "parentName"}.
+     *
+     * @param aliases Aliases.
+     */
+    public void setAliases(Map<String,String> aliases) {
+        this.aliases = aliases;
+    }
+
+    /**
+     * Gets aliases mapping.
+     *
+     * @return Aliases.
+     */
+    public Map<String,String> getAliases() {
+        return aliases;
+    }
+
     /** {@inheritDoc} */
     @Override public String toString() {
         return S.toString(CacheTypeMetadata.class, this);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3f38513f/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
index 50ba040..1f32cf3 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
@@ -1798,15 +1798,92 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
      * @param desc Type descriptor.
      * @return Type metadata.
      */
-    private CacheTypeMetadata convert(TypeDescriptor desc) {
+    private static CacheTypeMetadata convert(TypeDescriptor desc) {
         CacheTypeMetadata meta = new CacheTypeMetadata();
 
-        // TODO
+        // Key and val types.
+        meta.setKeyType(desc.keyClass());
+        meta.setValueType(desc.valueClass());
+
+        // Query fields.
+        Map<String, Class<?>> qryFields = new HashMap<>();
+
+        for (ClassProperty prop : desc.props.values())
+            qryFields.put(prop.fullName(), mask(prop.type()));
+
+        meta.setQueryFields(qryFields);
+
+        // Indexes.
+        Collection<String> txtFields = new ArrayList<>();
+        Map<String, LinkedHashMap<String, IgniteBiTuple<Class<?>, Boolean>>> grps = new HashMap<>();
+
+        for (Map.Entry<String,GridQueryIndexDescriptor> idxEntry : desc.indexes().entrySet()) {
+            GridQueryIndexDescriptor idx = idxEntry.getValue();
+
+            if (idx.type() == FULLTEXT) {
+                assert txtFields.isEmpty();
+
+                txtFields.addAll(idx.fields());
+            }
+            else {
+                LinkedHashMap<String, IgniteBiTuple<Class<?>, Boolean>> grp = new LinkedHashMap<>();
+
+                for (String fieldName : idx.fields()) {
+                    ClassProperty prop = desc.props.get(fieldName);
+
+                    Class<?> cls = mask(prop.type());
+
+                    grp.put(fieldName, new IgniteBiTuple<Class<?>, Boolean>(cls, idx.descending(fieldName)));
+                }
+
+                grps.put(idxEntry.getKey(), grp);
+            }
+        }
+
+        if (desc.valueTextIndex())
+            txtFields.add("_val");
+
+        if (!txtFields.isEmpty())
+            meta.setTextFields(txtFields);
+
+        meta.setGroups(grps);
+
+        // Index primitive types.
+        if (GridQueryProcessor.isSqlType(desc.valueClass()))
+            meta.setAscendingFields(Collections.<String, Class<?>>singletonMap("_val", desc.valueClass()));
+
+        // Aliases.
+        Map<String,String> aliases = null;
+
+        for (ClassProperty prop : desc.props.values()) {
+            while (prop != null) {
+                if (!F.isEmpty(prop.alias)) {
+                    if (aliases == null)
+                        aliases = new HashMap<>();
+
+                    aliases.put(prop.fullName(), prop.alias);
+                }
+
+                prop = prop.parent;
+            }
+        }
+
+        meta.setAliases(aliases);
 
         return meta;
     }
 
     /**
+     * @param cls Class.
+     * @return Masked class.
+     */
+    private static Class<?> mask(Class<?> cls) {
+        assert cls != null;
+
+        return GridQueryProcessor.isSqlType(cls) ? cls : Object.class;
+    }
+
+    /**
      * @param keyCls Key class.
      * @param valCls Value class.
      * @return Type descriptor.
@@ -1821,11 +1898,6 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
         d.valueClass(valCls);
 
         processAnnotationsInClass(true, d.keyCls, d, null);
-
-        String valTypeName = GridQueryProcessor.typeName(valCls);
-
-        d.name(valTypeName);
-
         processAnnotationsInClass(false, d.valCls, d, null);
 
         return d;
@@ -1847,7 +1919,7 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
 
                 type.addIndex(idxName, GridQueryProcessor.isGeometryClass(cls) ? GEO_SPATIAL : SORTED);
 
-                type.addFieldToIndex(idxName, "_VAL", 0, false);
+                type.addFieldToIndex(idxName, "_val", 0, false);
             }
 
             return;
@@ -1928,7 +2000,7 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
             processAnnotationsInClass(key, cls, desc, prop);
 
             if (!sqlAnn.name().isEmpty())
-                prop.name(sqlAnn.name());
+                prop.alias(sqlAnn.name());
 
             if (sqlAnn.index()) {
                 String idxName = prop.name() + "_idx";
@@ -1979,17 +2051,14 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
     /**
      * Descriptor of type.
      */
-    private static class TypeDescriptor implements GridQueryTypeDescriptor {
-        /** */
-        private String name;
-
+    private static class TypeDescriptor {
         /** Value field names and types with preserved order. */
         @GridToStringInclude
         private final Map<String, Class<?>> fields = new LinkedHashMap<>();
 
         /** */
         @GridToStringExclude
-        private final Map<String, Property> props = new HashMap<>();
+        private final Map<String, ClassProperty> props = new HashMap<>();
 
         /** */
         @GridToStringInclude
@@ -2007,57 +2076,10 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
         /** */
         private boolean valTextIdx;
 
-        /** SPI can decide not to register this type. */
-        private boolean registered;
-
-        /**
-         * @return {@code True} if type registration in SPI was finished and type was not rejected.
-         */
-        boolean registered() {
-            return registered;
-        }
-
         /**
-         * @param registered Sets registered flag.
+         * @return Indexes.
          */
-        void registered(boolean registered) {
-            this.registered = registered;
-        }
-
-        /** {@inheritDoc} */
-        @Override public String name() {
-            return name;
-        }
-
-        /**
-         * Sets type name.
-         *
-         * @param name Name.
-         */
-        void name(String name) {
-            this.name = name;
-        }
-
-        /** {@inheritDoc} */
-        @Override public Map<String, Class<?>> fields() {
-            return fields;
-        }
-
-        /** {@inheritDoc} */
-        @SuppressWarnings("unchecked")
-        @Override public <T> T value(String field, Object key, Object val) throws IgniteCheckedException {
-            assert field != null;
-
-            Property prop = props.get(field);
-
-            if (prop == null)
-                throw new IgniteCheckedException("Failed to find field '" + field + "' in type '" + name + "'.");
-
-            return (T)prop.value(key, val);
-        }
-
-        /** {@inheritDoc} */
-        @Override public Map<String, GridQueryIndexDescriptor> indexes() {
+        public Map<String, GridQueryIndexDescriptor> indexes() {
             return Collections.<String, GridQueryIndexDescriptor>unmodifiableMap(indexes);
         }
 
@@ -2110,8 +2132,10 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
             fullTextIdx.addField(field, 0, false);
         }
 
-        /** {@inheritDoc} */
-        @Override public Class<?> valueClass() {
+        /**
+         * @return Value class.
+         */
+        public Class<?> valueClass() {
             return valCls;
         }
 
@@ -2124,8 +2148,10 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
             this.valCls = valCls;
         }
 
-        /** {@inheritDoc} */
-        @Override public Class<?> keyClass() {
+        /**
+         * @return Key class.
+         */
+        public Class<?> keyClass() {
             return keyCls;
         }
 
@@ -2144,7 +2170,7 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
          * @param prop Property.
          * @param failOnDuplicate Fail on duplicate flag.
          */
-        public void addProperty(Property prop, boolean failOnDuplicate) {
+        public void addProperty(ClassProperty prop, boolean failOnDuplicate) {
             String name = prop.name();
 
             if (props.put(name, prop) != null && failOnDuplicate)
@@ -2153,8 +2179,10 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
             fields.put(name, prop.type());
         }
 
-        /** {@inheritDoc} */
-        @Override public boolean valueTextIndex() {
+        /**
+         * @return {@code true} If we need to have a fulltext index on value.
+         */
+        public boolean valueTextIndex() {
             return valTextIdx;
         }
 
@@ -2248,34 +2276,9 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
     }
 
     /**
-     *
-     */
-    private abstract static class Property {
-        /**
-         * Gets this property value from the given object.
-         *
-         * @param key Key.
-         * @param val Value.
-         * @return Property value.
-         * @throws IgniteCheckedException If failed.
-         */
-        public abstract Object value(Object key, Object val) throws IgniteCheckedException;
-
-        /**
-         * @return Property name.
-         */
-        public abstract String name();
-
-        /**
-         * @return Class member type.
-         */
-        public abstract Class<?> type();
-    }
-
-    /**
      * Description of type property.
      */
-    private static class ClassProperty extends Property {
+    private static class ClassProperty {
         /** */
         private final Member member;
 
@@ -2286,10 +2289,7 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
         private String name;
 
         /** */
-        private boolean field;
-
-        /** */
-        private boolean key;
+        private String alias;
 
         /**
          * Constructor.
@@ -2298,57 +2298,31 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
          */
         ClassProperty(Member member, boolean key) {
             this.member = member;
-            this.key = key;
 
             name = member instanceof Method && member.getName().startsWith("get") && member.getName().length() > 3 ?
                 member.getName().substring(3) : member.getName();
 
             ((AccessibleObject) member).setAccessible(true);
-
-            field = member instanceof Field;
-        }
-
-        /** {@inheritDoc} */
-        @Override public Object value(Object key, Object val) throws IgniteCheckedException {
-            Object x = this.key ? key : val;
-
-            if (parent != null)
-                x = parent.value(key, val);
-
-            if (x == null)
-                return null;
-
-            try {
-                if (field) {
-                    Field field = (Field)member;
-
-                    return field.get(x);
-                }
-                else {
-                    Method mtd = (Method)member;
-
-                    return mtd.invoke(x);
-                }
-            }
-            catch (Exception e) {
-                throw new IgniteCheckedException(e);
-            }
         }
 
         /**
-         * @param name Property name.
+         * @param alias Alias.
          */
-        public void name(String name) {
-            this.name = name;
+        public void alias(String alias) {
+            this.alias = alias;
         }
 
-        /** {@inheritDoc} */
-        @Override public String name() {
+        /**
+         * @return Name.
+         */
+        public String name() {
             return name;
         }
 
-        /** {@inheritDoc} */
-        @Override public Class<?> type() {
+        /**
+         * @return Type.
+         */
+        public Class<?> type() {
             return member instanceof Field ? ((Field)member).getType() : ((Method)member).getReturnType();
         }
 
@@ -2371,5 +2345,17 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
         public boolean knowsClass(Class<?> cls) {
             return member.getDeclaringClass() == cls || (parent != null && parent.knowsClass(cls));
         }
+
+        /**
+         * @return Full name with all parents in dot notation.
+         */
+        public String fullName() {
+            assert name != null;
+
+            if (parent == null)
+                return name;
+
+            return parent.fullName() + '.' + name;
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3f38513f/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java
index 0cbb77a..fd5de66 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java
@@ -151,22 +151,6 @@ public interface GridQueryIndexing {
     public void unregisterCache(CacheConfiguration<?, ?> ccfg) throws IgniteCheckedException;
 
     /**
-     * Checks if the given class can be mapped to a simple SQL type.
-     *
-     * @param cls Class.
-     * @return {@code true} If can.
-     */
-    public boolean isSqlType(Class<?> cls);
-
-    /**
-     * Checks if the given class is GEOMETRY.
-     *
-     * @param cls Class.
-     * @return {@code true} If this is geometry.
-     */
-    public boolean isGeometryClass(Class<?> cls);
-
-    /**
      * Registers type if it was not known before or updates it otherwise.
      *
      * @param spaceName Space name.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3f38513f/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 f6cff33..afc90e8 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
@@ -20,7 +20,6 @@ package org.apache.ignite.internal.processors.query;
 import org.apache.ignite.*;
 import org.apache.ignite.cache.*;
 import org.apache.ignite.cache.query.*;
-import org.apache.ignite.cache.query.annotations.*;
 import org.apache.ignite.configuration.*;
 import org.apache.ignite.events.*;
 import org.apache.ignite.internal.*;
@@ -152,9 +151,11 @@ public class GridQueryProcessor extends GridProcessorAdapter {
 
                     TypeDescriptor desc = new TypeDescriptor();
 
+                    // Key and value classes still can be available if they are primitive or JDK part.
+                    // We need that to set correct types for _key and _val columns.
                     Class<?> valCls = U.classForName(meta.getValueType(), null);
 
-                    desc.name(valCls != null ? typeName(valCls) : meta.getValueType());
+                    desc.name(meta.getSimpleValueType());
 
                     desc.valueClass(valCls != null ? valCls : Object.class);
                     desc.keyClass(
@@ -182,21 +183,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
                 }
             }
 
-            Class<?>[] clss = ccfg.getIndexedTypes();
-
-            if (!F.isEmpty(clss)) {
-                for (int i = 0; i < clss.length; i += 2) {
-                    Class<?> keyCls = clss[i];
-                    Class<?> valCls = clss[i + 1];
-
-                    TypeDescriptor desc = processKeyAndValueClasses(keyCls, valCls);
-
-                    addTypeByName(ccfg, desc);
-                    types.put(new TypeId(ccfg.getName(), valCls), desc);
-
-                    desc.registered(idx.registerType(ccfg.getName(), desc));
-                }
-            }
+            // Indexed types must be translated to CacheTypeMetadata in CacheConfiguration.
         }
         catch (IgniteCheckedException | RuntimeException e) {
             idx.unregisterCache(ccfg);
@@ -216,33 +203,6 @@ public class GridQueryProcessor extends GridProcessorAdapter {
                 "in cache '" + ccfg.getName() + "'.");
     }
 
-    /**
-     * @param keyCls Key class.
-     * @param valCls Value class.
-     * @return Type descriptor.
-     * @throws IgniteCheckedException If failed.
-     */
-    private TypeDescriptor processKeyAndValueClasses(
-        Class<?> keyCls,
-        Class<?> valCls
-    )
-        throws IgniteCheckedException {
-        TypeDescriptor d = new TypeDescriptor();
-
-        d.keyClass(keyCls);
-        d.valueClass(valCls);
-
-        processAnnotationsInClass(true, d.keyCls, d, null);
-
-        String valTypeName = typeName(valCls);
-
-        d.name(valTypeName);
-
-        processAnnotationsInClass(false, d.valCls, d, null);
-
-        return d;
-    }
-
     /** {@inheritDoc} */
     @Override public void onKernalStop(boolean cancel) {
         super.onKernalStop(cancel);
@@ -831,7 +791,9 @@ public class GridQueryProcessor extends GridProcessorAdapter {
      * @return {@code true} If can.
      */
     public static boolean isSqlType(Class<?> cls) {
-        return SQL_TYPES.contains(cls);
+        cls = U.box(cls);
+
+        return SQL_TYPES.contains(cls) || isGeometryClass(cls);
     }
 
     /**
@@ -1050,130 +1012,6 @@ public class GridQueryProcessor extends GridProcessorAdapter {
     }
 
     /**
-     * Process annotations for class.
-     *
-     * @param key If given class relates to key.
-     * @param cls Class.
-     * @param type Type descriptor.
-     * @param parent Parent in case of embeddable.
-     * @throws IgniteCheckedException In case of error.
-     */
-    private void processAnnotationsInClass(boolean key, Class<?> cls, TypeDescriptor type,
-        @Nullable ClassProperty parent) throws IgniteCheckedException {
-        if (U.isJdk(cls) || idx.isGeometryClass(cls)) {
-            if (parent == null && !key && idx.isSqlType(cls) ) { // We have to index primitive _val.
-                String idxName = "_val_idx";
-
-                type.addIndex(idxName, idx.isGeometryClass(cls) ? GEO_SPATIAL : SORTED);
-
-                type.addFieldToIndex(idxName, "_VAL", 0, false);
-            }
-
-            return;
-        }
-
-        if (parent != null && parent.knowsClass(cls))
-            throw new IgniteCheckedException("Recursive reference found in type: " + cls.getName());
-
-        if (parent == null) { // Check class annotation at top level only.
-            QueryTextField txtAnnCls = cls.getAnnotation(QueryTextField.class);
-
-            if (txtAnnCls != null)
-                type.valueTextIndex(true);
-
-            QueryGroupIndex grpIdx = cls.getAnnotation(QueryGroupIndex.class);
-
-            if (grpIdx != null)
-                type.addIndex(grpIdx.name(), SORTED);
-
-            QueryGroupIndex.List grpIdxList = cls.getAnnotation(QueryGroupIndex.List.class);
-
-            if (grpIdxList != null && !F.isEmpty(grpIdxList.value())) {
-                for (QueryGroupIndex idx : grpIdxList.value())
-                    type.addIndex(idx.name(), SORTED);
-            }
-        }
-
-        for (Class<?> c = cls; c != null && !c.equals(Object.class); c = c.getSuperclass()) {
-            for (Field field : c.getDeclaredFields()) {
-                QuerySqlField sqlAnn = field.getAnnotation(QuerySqlField.class);
-                QueryTextField txtAnn = field.getAnnotation(QueryTextField.class);
-
-                if (sqlAnn != null || txtAnn != null) {
-                    ClassProperty prop = new ClassProperty(field, key);
-
-                    prop.parent(parent);
-
-                    processAnnotation(key, sqlAnn, txtAnn, field.getType(), prop, type);
-
-                    type.addProperty(prop, true);
-                }
-            }
-
-            for (Method mtd : c.getDeclaredMethods()) {
-                QuerySqlField sqlAnn = mtd.getAnnotation(QuerySqlField.class);
-                QueryTextField txtAnn = mtd.getAnnotation(QueryTextField.class);
-
-                if (sqlAnn != null || txtAnn != null) {
-                    if (mtd.getParameterTypes().length != 0)
-                        throw new IgniteCheckedException("Getter with QuerySqlField " +
-                            "annotation cannot have parameters: " + mtd);
-
-                    ClassProperty prop = new ClassProperty(mtd, key);
-
-                    prop.parent(parent);
-
-                    processAnnotation(key, sqlAnn, txtAnn, mtd.getReturnType(), prop, type);
-
-                    type.addProperty(prop, true);
-                }
-            }
-        }
-    }
-
-    /**
-     * Processes annotation at field or method.
-     *
-     * @param key If given class relates to key.
-     * @param sqlAnn SQL annotation, can be {@code null}.
-     * @param txtAnn H2 text annotation, can be {@code null}.
-     * @param cls Class of field or return type for method.
-     * @param prop Current property.
-     * @param desc Class description.
-     * @throws IgniteCheckedException In case of error.
-     */
-    private void processAnnotation(boolean key, QuerySqlField sqlAnn, QueryTextField txtAnn,
-        Class<?> cls, ClassProperty prop, TypeDescriptor desc) throws IgniteCheckedException {
-        if (sqlAnn != null) {
-            processAnnotationsInClass(key, cls, desc, prop);
-
-            if (!sqlAnn.name().isEmpty())
-                prop.name(sqlAnn.name());
-
-            if (sqlAnn.index()) {
-                String idxName = prop.name() + "_idx";
-
-                desc.addIndex(idxName, idx.isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED);
-
-                desc.addFieldToIndex(idxName, prop.name(), 0, sqlAnn.descending());
-            }
-
-            if (!F.isEmpty(sqlAnn.groups())) {
-                for (String group : sqlAnn.groups())
-                    desc.addFieldToIndex(group, prop.name(), 0, false);
-            }
-
-            if (!F.isEmpty(sqlAnn.orderedGroups())) {
-                for (QuerySqlField.Group idx : sqlAnn.orderedGroups())
-                    desc.addFieldToIndex(idx.name(), prop.name(), idx.order(), idx.descending());
-            }
-        }
-
-        if (txtAnn != null)
-            desc.addFieldToTextIndex(prop.name());
-    }
-
-    /**
      * Processes declarative metadata for class.
      *
      * @param meta Type metadata.
@@ -1182,6 +1020,11 @@ public class GridQueryProcessor extends GridProcessorAdapter {
      */
     private void processClassMeta(CacheTypeMetadata meta, TypeDescriptor d)
         throws IgniteCheckedException {
+        Map<String,String> aliases = meta.getAliases();
+
+        if (aliases == null)
+            aliases = Collections.emptyMap();
+
         Class<?> keyCls = d.keyClass();
         Class<?> valCls = d.valueClass();
 
@@ -1193,13 +1036,14 @@ public class GridQueryProcessor extends GridProcessorAdapter {
                 keyCls,
                 valCls,
                 entry.getKey(),
-                entry.getValue());
+                entry.getValue(),
+                aliases);
 
             d.addProperty(prop, false);
 
             String idxName = prop.name() + "_idx";
 
-            d.addIndex(idxName, idx.isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED);
+            d.addIndex(idxName, isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED);
 
             d.addFieldToIndex(idxName, prop.name(), 0, false);
         }
@@ -1209,13 +1053,14 @@ public class GridQueryProcessor extends GridProcessorAdapter {
                 keyCls,
                 valCls,
                 entry.getKey(),
-                entry.getValue());
+                entry.getValue(),
+                aliases);
 
             d.addProperty(prop, false);
 
             String idxName = prop.name() + "_idx";
 
-            d.addIndex(idxName, idx.isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED);
+            d.addIndex(idxName, isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED);
 
             d.addFieldToIndex(idxName, prop.name(), 0, true);
         }
@@ -1225,7 +1070,8 @@ public class GridQueryProcessor extends GridProcessorAdapter {
                 keyCls,
                 valCls,
                 txtIdx,
-                String.class);
+                String.class,
+                aliases);
 
             d.addProperty(prop, false);
 
@@ -1247,7 +1093,8 @@ public class GridQueryProcessor extends GridProcessorAdapter {
                         keyCls,
                         valCls,
                         idxField.getKey(),
-                        idxField.getValue().get1());
+                        idxField.getValue().get1(),
+                        aliases);
 
                     d.addProperty(prop, false);
 
@@ -1265,7 +1112,8 @@ public class GridQueryProcessor extends GridProcessorAdapter {
                 keyCls,
                 valCls,
                 entry.getKey(),
-                entry.getValue());
+                entry.getValue(),
+                aliases);
 
             d.addProperty(prop, false);
         }
@@ -1280,32 +1128,37 @@ public class GridQueryProcessor extends GridProcessorAdapter {
      */
     private void processPortableMeta(CacheTypeMetadata meta, TypeDescriptor d)
         throws IgniteCheckedException {
+        Map<String,String> aliases = meta.getAliases();
+
+        if (aliases == null)
+            aliases = Collections.emptyMap();
+
         for (Map.Entry<String, Class<?>> entry : meta.getAscendingFields().entrySet()) {
-            PortableProperty prop = buildPortableProperty(entry.getKey(), entry.getValue());
+            PortableProperty prop = buildPortableProperty(entry.getKey(), entry.getValue(), aliases);
 
             d.addProperty(prop, false);
 
             String idxName = prop.name() + "_idx";
 
-            d.addIndex(idxName, idx.isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED);
+            d.addIndex(idxName, isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED);
 
             d.addFieldToIndex(idxName, prop.name(), 0, false);
         }
 
         for (Map.Entry<String, Class<?>> entry : meta.getDescendingFields().entrySet()) {
-            PortableProperty prop = buildPortableProperty(entry.getKey(), entry.getValue());
+            PortableProperty prop = buildPortableProperty(entry.getKey(), entry.getValue(), aliases);
 
             d.addProperty(prop, false);
 
             String idxName = prop.name() + "_idx";
 
-            d.addIndex(idxName, idx.isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED);
+            d.addIndex(idxName, isGeometryClass(prop.type()) ? GEO_SPATIAL : SORTED);
 
             d.addFieldToIndex(idxName, prop.name(), 0, true);
         }
 
         for (String txtIdx : meta.getTextFields()) {
-            PortableProperty prop = buildPortableProperty(txtIdx, String.class);
+            PortableProperty prop = buildPortableProperty(txtIdx, String.class, aliases);
 
             d.addProperty(prop, false);
 
@@ -1323,7 +1176,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
                 int order = 0;
 
                 for (Map.Entry<String, IgniteBiTuple<Class<?>, Boolean>> idxField : idxFields.entrySet()) {
-                    PortableProperty prop = buildPortableProperty(idxField.getKey(), idxField.getValue().get1());
+                    PortableProperty prop = buildPortableProperty(idxField.getKey(), idxField.getValue().get1(), aliases);
 
                     d.addProperty(prop, false);
 
@@ -1337,7 +1190,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
         }
 
         for (Map.Entry<String, Class<?>> entry : meta.getQueryFields().entrySet()) {
-            PortableProperty prop = buildPortableProperty(entry.getKey(), entry.getValue());
+            PortableProperty prop = buildPortableProperty(entry.getKey(), entry.getValue(), aliases);
 
             if (!d.props.containsKey(prop.name()))
                 d.addProperty(prop, false);
@@ -1350,15 +1203,26 @@ public class GridQueryProcessor extends GridProcessorAdapter {
      * @param pathStr String representing path to the property. May contains dots '.' to identify
      *      nested fields.
      * @param resType Result type.
+     * @param aliases Aliases.
      * @return Portable property.
      */
-    private PortableProperty buildPortableProperty(String pathStr, Class<?> resType) {
+    private PortableProperty buildPortableProperty(String pathStr, Class<?> resType, Map<String,String> aliases) {
         String[] path = pathStr.split("\\.");
 
         PortableProperty res = null;
 
-        for (String prop : path)
-            res = new PortableProperty(prop, res, resType);
+        StringBuilder fullName = new StringBuilder();
+
+        for (String prop : path) {
+            if (fullName.length() != 0)
+                fullName.append('.');
+
+            fullName.append(prop);
+
+            String alias = aliases.get(fullName.toString());
+
+            res = new PortableProperty(prop, res, resType, alias);
+        }
 
         return res;
     }
@@ -1368,19 +1232,21 @@ public class GridQueryProcessor extends GridProcessorAdapter {
      * @param valCls Value class.
      * @param pathStr Path string.
      * @param resType Result type.
+     * @param aliases Aliases.
      * @return Class property.
      * @throws IgniteCheckedException If failed.
      */
-    private static ClassProperty buildClassProperty(Class<?> keyCls, Class<?> valCls, String pathStr, Class<?> resType)
-        throws IgniteCheckedException {
+    private static ClassProperty buildClassProperty(Class<?> keyCls, Class<?> valCls, String pathStr, Class<?> resType,
+        Map<String,String> aliases) throws IgniteCheckedException {
         ClassProperty res = buildClassProperty(
             true,
             keyCls,
             pathStr,
-            resType);
+            resType,
+            aliases);
 
         if (res == null) // We check key before value consistently with PortableProperty.
-            res = buildClassProperty(false, valCls, pathStr, resType);
+            res = buildClassProperty(false, valCls, pathStr, resType, aliases);
 
         if (res == null)
             throw new IgniteCheckedException("Failed to initialize property '" + pathStr + "' for " +
@@ -1395,16 +1261,27 @@ public class GridQueryProcessor extends GridProcessorAdapter {
      * @param cls Source type class.
      * @param pathStr String representing path to the property. May contains dots '.' to identify nested fields.
      * @param resType Expected result type.
+     * @param aliases Aliases.
      * @return Property instance corresponding to the given path.
      * @throws IgniteCheckedException If property cannot be created.
      */
-    static ClassProperty buildClassProperty(boolean key, Class<?> cls, String pathStr, Class<?> resType)
+    static ClassProperty buildClassProperty(boolean key, Class<?> cls, String pathStr, Class<?> resType,
+        Map<String,String> aliases)
         throws IgniteCheckedException {
         String[] path = pathStr.split("\\.");
 
         ClassProperty res = null;
 
+        StringBuilder fullName = new StringBuilder();
+
         for (String prop : path) {
+            if (fullName.length() != 0)
+                fullName.append('.');
+
+            fullName.append(prop);
+
+            String alias = aliases.get(fullName.toString());
+
             ClassProperty tmp;
 
             try {
@@ -1414,11 +1291,11 @@ public class GridQueryProcessor extends GridProcessorAdapter {
 
                 bld.setCharAt(3, Character.toUpperCase(bld.charAt(3)));
 
-                tmp = new ClassProperty(cls.getMethod(bld.toString()), key);
+                tmp = new ClassProperty(cls.getMethod(bld.toString()), key, alias);
             }
             catch (NoSuchMethodException ignore) {
                 try {
-                    tmp = new ClassProperty(cls.getDeclaredField(prop), key);
+                    tmp = new ClassProperty(cls.getDeclaredField(prop), key, alias);
                 }
                 catch (NoSuchFieldException ignored) {
                     return null;
@@ -1577,11 +1454,12 @@ public class GridQueryProcessor extends GridProcessorAdapter {
          *
          * @param member Element.
          */
-        ClassProperty(Member member, boolean key) {
+        ClassProperty(Member member, boolean key, String name) {
             this.member = member;
             this.key = key;
 
-            name = member instanceof Method && member.getName().startsWith("get") && member.getName().length() > 3 ?
+            this.name = !F.isEmpty(name) ? name :
+                member instanceof Method && member.getName().startsWith("get") && member.getName().length() > 3 ?
                 member.getName().substring(3) : member.getName();
 
             ((AccessibleObject) member).setAccessible(true);
@@ -1616,13 +1494,6 @@ public class GridQueryProcessor extends GridProcessorAdapter {
             }
         }
 
-        /**
-         * @param name Property name.
-         */
-        public void name(String name) {
-            this.name = name;
-        }
-
         /** {@inheritDoc} */
         @Override public String name() {
             return name;
@@ -1661,6 +1532,9 @@ public class GridQueryProcessor extends GridProcessorAdapter {
         /** Property name. */
         private String propName;
 
+        /** */
+        private String alias;
+
         /** Parent property. */
         private PortableProperty parent;
 
@@ -1677,8 +1551,9 @@ public class GridQueryProcessor extends GridProcessorAdapter {
          * @param parent Parent property.
          * @param type Result type.
          */
-        private PortableProperty(String propName, PortableProperty parent, Class<?> type) {
+        private PortableProperty(String propName, PortableProperty parent, Class<?> type, String alias) {
             this.propName = propName;
+            this.alias = F.isEmpty(alias) ? propName : alias;
             this.parent = parent;
             this.type = type;
         }
@@ -1723,7 +1598,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
 
         /** {@inheritDoc} */
         @Override public String name() {
-            return propName;
+            return alias;
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3f38513f/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
index 6623e85..e5e93c3 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
@@ -7872,9 +7872,10 @@ public abstract class IgniteUtils {
         if (cls == null)
             return null;
 
-        Class<?> boxed = boxedClsMap.get(cls);
+        if (!cls.isPrimitive())
+            return cls;
 
-        return boxed != null ? boxed : cls;
+        return boxedClsMap.get(cls);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3f38513f/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
index 359341a..dfa1e5d 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
@@ -1483,23 +1483,6 @@ public class IgniteH2Indexing implements GridQueryIndexing {
         }
     }
 
-    /** {@inheritDoc} */
-    @Override public boolean isSqlType(Class<?> cls) {
-        switch (DBTypeEnum.fromClass(cls)) {
-            case OTHER:
-            case ARRAY:
-                return false;
-
-            default:
-                return true;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isGeometryClass(Class<?> cls) {
-        return DataType.isGeometryClass(cls);
-    }
-
     /**
      * Enum that helps to map java types to database types.
      */



[10/14] incubator-ignite git commit: Merge remote-tracking branch 'origin/ignite-950' into ignite-950

Posted by ag...@apache.org.
Merge remote-tracking branch 'origin/ignite-950' into ignite-950


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

Branch: refs/heads/ignite-950
Commit: 7512412fab6299c956db09293344ff44d42b0fb0
Parents: 08f8fa7 43c2138
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Wed Jul 8 15:22:48 2015 -0700
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Wed Jul 8 15:22:48 2015 -0700

----------------------------------------------------------------------
 .../ignite/spi/discovery/tcp/ServerImpl.java    |  20 ++++
 .../tcp/internal/TcpDiscoveryNode.java          |   2 +-
 .../tcp/internal/TcpDiscoveryNodesRing.java     |   8 +-
 .../tcp/internal/TcpDiscoveryStatistics.java    |  10 +-
 ...acheAtomicReplicatedNodeRestartSelfTest.java |   8 +-
 .../tcp/TcpDiscoveryMultiThreadedTest.java      |  38 +++++++
 .../IgniteSpiDiscoverySelfTestSuite.java        |   3 +
 .../config/benchmark-put-indexed-val.properties |  64 +++++++++++
 modules/yardstick/config/ignite-base-config.xml |  23 ++++
 .../cache/IgnitePutIndexedValue1Benchmark.java  |  42 +++++++
 .../cache/IgnitePutIndexedValue2Benchmark.java  |  42 +++++++
 .../cache/IgnitePutIndexedValue8Benchmark.java  |  42 +++++++
 .../ignite/yardstick/cache/model/Person1.java   |  55 ++++++++++
 .../ignite/yardstick/cache/model/Person2.java   |  67 ++++++++++++
 .../ignite/yardstick/cache/model/Person8.java   | 109 +++++++++++++++++++
 15 files changed, 525 insertions(+), 8 deletions(-)
----------------------------------------------------------------------



[02/14] incubator-ignite git commit: Merge branch 'ignite-sprint-7' of https://git-wip-us.apache.org/repos/asf/incubator-ignite into ignite-959-x

Posted by ag...@apache.org.
Merge branch 'ignite-sprint-7' of https://git-wip-us.apache.org/repos/asf/incubator-ignite into ignite-959-x


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

Branch: refs/heads/ignite-950
Commit: 9379828300b3a47e4a08c444a26a261d5ea04a34
Parents: 781f0d5 7fc5595
Author: S.Vladykin <sv...@gridgain.com>
Authored: Thu Jun 25 12:50:35 2015 +0300
Committer: S.Vladykin <sv...@gridgain.com>
Committed: Thu Jun 25 12:50:35 2015 +0300

----------------------------------------------------------------------
 examples/pom.xml                                |   2 +-
 modules/aop/pom.xml                             |   2 +-
 modules/aws/pom.xml                             |   2 +-
 modules/clients/pom.xml                         |   2 +-
 modules/cloud/pom.xml                           |   2 +-
 modules/codegen/pom.xml                         |   2 +-
 modules/core/pom.xml                            |   2 +-
 .../configuration/IgniteReflectionFactory.java  |  81 +++-
 .../ignite/internal/GridKernalContextImpl.java  |   3 +
 .../processors/cache/GridCacheContext.java      |   2 +-
 .../distributed/dht/GridDhtLocalPartition.java  |   3 +-
 .../distributed/dht/GridDhtLockFuture.java      |   2 +-
 .../dht/atomic/GridDhtAtomicCache.java          |   9 +-
 .../GridDhtPartitionsExchangeFuture.java        |  46 +-
 .../datastructures/DataStructuresProcessor.java |  64 +--
 .../processors/hadoop/HadoopJobInfo.java        |   4 +-
 .../hadoop/counter/HadoopCounterWriter.java     |   5 +-
 .../processors/plugin/CachePluginManager.java   |  10 +-
 .../processors/task/GridTaskProcessor.java      |  23 +-
 .../core/src/main/resources/ignite.properties   |   2 +-
 .../GridTaskFailoverAffinityRunTest.java        | 170 +++++++
 .../CacheReadThroughAtomicRestartSelfTest.java  |  32 ++
 ...heReadThroughLocalAtomicRestartSelfTest.java |  32 ++
 .../CacheReadThroughLocalRestartSelfTest.java   |  32 ++
 ...dThroughReplicatedAtomicRestartSelfTest.java |  32 ++
 ...cheReadThroughReplicatedRestartSelfTest.java |  32 ++
 .../cache/CacheReadThroughRestartSelfTest.java  | 133 ++++++
 .../cache/GridCacheAbstractSelfTest.java        |   2 +-
 ...eDynamicCacheStartNoExchangeTimeoutTest.java | 466 +++++++++++++++++++
 .../cache/IgniteDynamicCacheStartSelfTest.java  |  37 ++
 ...GridCacheQueueMultiNodeAbstractSelfTest.java |   4 +-
 .../GridCacheSetAbstractSelfTest.java           |  22 +-
 .../IgniteDataStructureWithJobTest.java         | 111 +++++
 ...ridCachePartitionNotLoadedEventSelfTest.java |  82 ++++
 .../distributed/IgniteCache150ClientsTest.java  | 189 ++++++++
 ...teCacheClientNodePartitionsExchangeTest.java |   1 +
 .../distributed/IgniteCacheManyClientsTest.java |   2 +
 .../IgniteCacheTxMessageRecoveryTest.java       |   5 +
 ...idCacheNearOnlyMultiNodeFullApiSelfTest.java |   5 -
 ...achePartitionedMultiNodeFullApiSelfTest.java |  49 +-
 .../GridCacheReplicatedFailoverSelfTest.java    |   5 +
 .../IgniteCacheTxStoreSessionTest.java          |   4 +
 .../testframework/junits/GridAbstractTest.java  |   2 +-
 .../IgniteCacheDataStructuresSelfTestSuite.java |   1 +
 .../ignite/testsuites/IgniteCacheTestSuite.java |   4 +-
 .../testsuites/IgniteCacheTestSuite4.java       |   8 +
 .../testsuites/IgniteClientTestSuite.java       |  38 ++
 .../testsuites/IgniteComputeGridTestSuite.java  |   1 +
 .../ignite/util/TestTcpCommunicationSpi.java    |  21 +
 modules/extdata/p2p/pom.xml                     |   2 +-
 modules/extdata/uri/pom.xml                     |   2 +-
 modules/gce/pom.xml                             |   2 +-
 modules/geospatial/pom.xml                      |   2 +-
 modules/hadoop/pom.xml                          |  80 +---
 .../fs/IgniteHadoopFileSystemCounterWriter.java |   9 +-
 .../processors/hadoop/HadoopClassLoader.java    |  29 ++
 .../processors/hadoop/HadoopDefaultJobInfo.java |  27 +-
 .../internal/processors/hadoop/HadoopUtils.java | 237 ----------
 .../hadoop/SecondaryFileSystemProvider.java     |   3 +-
 .../hadoop/fs/HadoopFileSystemCacheUtils.java   | 241 ++++++++++
 .../hadoop/fs/HadoopFileSystemsUtils.java       |  11 +
 .../hadoop/fs/HadoopLazyConcurrentMap.java      |   5 +
 .../hadoop/jobtracker/HadoopJobTracker.java     |  25 +-
 .../child/HadoopChildProcessRunner.java         |   3 +-
 .../processors/hadoop/v2/HadoopV2Job.java       |  84 +++-
 .../hadoop/v2/HadoopV2JobResourceManager.java   |  22 +-
 .../hadoop/v2/HadoopV2TaskContext.java          |  37 +-
 .../apache/ignite/igfs/IgfsEventsTestSuite.java |   5 +-
 .../processors/hadoop/HadoopMapReduceTest.java  |   2 +-
 .../processors/hadoop/HadoopTasksV1Test.java    |   7 +-
 .../processors/hadoop/HadoopTasksV2Test.java    |   7 +-
 .../processors/hadoop/HadoopV2JobSelfTest.java  |   6 +-
 .../collections/HadoopAbstractMapTest.java      |   3 +-
 .../testsuites/IgniteHadoopTestSuite.java       |   2 +-
 .../IgniteIgfsLinuxAndMacOSTestSuite.java       |   3 +-
 modules/hibernate/pom.xml                       |   2 +-
 modules/indexing/pom.xml                        |   2 +-
 ...QueryOffheapEvictsMultiThreadedSelfTest.java |   5 +
 .../IgniteCacheQuerySelfTestSuite.java          |   2 +-
 modules/jcl/pom.xml                             |   2 +-
 modules/jta/pom.xml                             |   2 +-
 modules/log4j/pom.xml                           |   2 +-
 modules/mesos/pom.xml                           |   2 +-
 modules/rest-http/pom.xml                       |   2 +-
 modules/scalar-2.10/pom.xml                     |   2 +-
 modules/scalar/pom.xml                          |   2 +-
 modules/schedule/pom.xml                        |   2 +-
 modules/schema-import/pom.xml                   |   2 +-
 modules/slf4j/pom.xml                           |   2 +-
 modules/spark-2.10/pom.xml                      |   2 +-
 modules/spark/pom.xml                           |   2 +-
 modules/spring/pom.xml                          |   2 +-
 modules/ssh/pom.xml                             |   2 +-
 modules/tools/pom.xml                           |   2 +-
 modules/urideploy/pom.xml                       |   2 +-
 modules/visor-console-2.10/pom.xml              |   2 +-
 modules/visor-console/pom.xml                   |   2 +-
 modules/visor-plugins/pom.xml                   |   2 +-
 modules/web/pom.xml                             |   2 +-
 .../IgniteWebSessionSelfTestSuite.java          |   2 +-
 modules/yardstick/pom.xml                       |   2 +-
 pom.xml                                         |   2 +-
 102 files changed, 2180 insertions(+), 523 deletions(-)
----------------------------------------------------------------------



[08/14] incubator-ignite git commit: ignite-959-x - tests fix + arg check

Posted by ag...@apache.org.
ignite-959-x - tests fix + arg check


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

Branch: refs/heads/ignite-950
Commit: dbe6ce5704702572c6c2bcff7675b450ed7d4024
Parents: fe55c65
Author: S.Vladykin <sv...@gridgain.com>
Authored: Mon Jul 6 10:50:24 2015 +0300
Committer: S.Vladykin <sv...@gridgain.com>
Committed: Mon Jul 6 10:50:24 2015 +0300

----------------------------------------------------------------------
 .../org/apache/ignite/configuration/CacheConfiguration.java  | 8 +++++++-
 .../internal/processors/cache/GridCacheAbstractSelfTest.java | 6 +++++-
 2 files changed, 12 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/dbe6ce57/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
index 9958739..63d7800 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
@@ -1674,6 +1674,8 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
      * @return {@code this} for chaining.
      */
     public CacheConfiguration<K, V> setIndexedTypes(Class<?>... indexedTypes) {
+        A.notNull(indexedTypes, "indexedTypes");
+
         int len = indexedTypes.length;
 
         A.ensure(len > 0, "Array of indexed types can not be empty.");
@@ -1685,8 +1687,12 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
 
         Class<?>[] newIndexedTypes = new Class<?>[len];
 
-        for (int i = 0; i < len; i++)
+        for (int i = 0; i < len; i++) {
+            if (indexedTypes[i] == null)
+                throw new NullPointerException("Indexed types array contains null at index: " + i);
+
             newIndexedTypes[i] = U.box(indexedTypes[i]);
+        }
 
         if (typeMeta == null)
             typeMeta = new ArrayList<>();

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/dbe6ce57/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractSelfTest.java
index 468aec1..1b428e3 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractSelfTest.java
@@ -229,7 +229,11 @@ public abstract class GridCacheAbstractSelfTest extends GridCommonAbstractTest {
         cfg.setAtomicityMode(atomicityMode());
         cfg.setWriteSynchronizationMode(writeSynchronization());
         cfg.setNearConfiguration(nearConfiguration());
-        cfg.setIndexedTypes(indexedTypes());
+
+        Class<?>[] idxTypes = indexedTypes();
+
+        if (!F.isEmpty(idxTypes))
+            cfg.setIndexedTypes(idxTypes);
 
         if (cacheMode() == PARTITIONED)
             cfg.setBackups(1);


[11/14] incubator-ignite git commit: IGNITE-950 - Minor.

Posted by ag...@apache.org.
IGNITE-950 - Minor.


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

Branch: refs/heads/ignite-950
Commit: 70e9b343df41e4e11bb55a3b2b0e68c348cd9598
Parents: 7512412
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Wed Jul 8 15:24:21 2015 -0700
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Wed Jul 8 15:24:21 2015 -0700

----------------------------------------------------------------------
 .../internal/processors/cache/CacheIndexedObjectImpl.java    | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70e9b343/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheIndexedObjectImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheIndexedObjectImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheIndexedObjectImpl.java
index 8993039..0b2996e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheIndexedObjectImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheIndexedObjectImpl.java
@@ -19,16 +19,13 @@ package org.apache.ignite.internal.processors.cache;
 
 import org.apache.ignite.*;
 import org.apache.ignite.internal.util.*;
-import org.apache.ignite.internal.util.typedef.internal.*;
 import org.apache.ignite.marshaller.optimized.*;
 import org.apache.ignite.plugin.extensions.communication.*;
 import org.jetbrains.annotations.*;
 import sun.misc.*;
 
 import java.io.*;
-import java.lang.reflect.*;
 import java.nio.*;
-import java.util.concurrent.*;
 
 /**
  * Cache object implementation for classes that support footer injection is their serialized form thus enabling fields
@@ -341,11 +338,12 @@ public class CacheIndexedObjectImpl extends CacheObjectAdapter {
      * @param checkCls Check class definition presence on node flag.
      * @return {@code true} if keep, {@code false} otherwise.
      */
+    @SuppressWarnings("SimplifiableIfStatement")
     protected boolean keepDeserialized(CacheObjectContext ctx, boolean checkCls) {
         if (ctx.copyOnGet())
             return false;
 
-        return checkCls ? hasClassOnNode(ctx) : true;
+        return !checkCls || hasClassOnNode(ctx);
     }
 
     /**
@@ -368,7 +366,7 @@ public class CacheIndexedObjectImpl extends CacheObjectAdapter {
 
             hasClass = cls != null;
         }
-        catch (Exception e) {
+        catch (Exception ignore) {
             hasClass = false;
         }