You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2016/12/06 08:39:58 UTC

[01/50] ignite git commit: Merge branch 'ignite-1.7.4' into 'ignite-1.8'.

Repository: ignite
Updated Branches:
  refs/heads/ignite-comm-balance-master 8f45a3bbb -> 8e510d7b0


Merge branch 'ignite-1.7.4' into 'ignite-1.8'.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: d2b915e50c8e3cbe07f565f14d14474342662550
Parents: e43ea5e 7d88c5b
Author: Andrey Novikov <an...@gridgain.com>
Authored: Thu Nov 24 18:01:31 2016 +0700
Committer: Andrey Novikov <an...@gridgain.com>
Committed: Thu Nov 24 18:01:31 2016 +0700

----------------------------------------------------------------------
 modules/web-console/docker/compose/backend/build.sh  | 2 +-
 modules/web-console/docker/compose/frontend/build.sh | 4 ++--
 modules/web-console/docker/standalone/build.sh       | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------



[24/50] ignite git commit: IGNITE-4026: Fixed BinaryObjectBuilder.build() can fail if one of the fields is Externalizable, enum from binary object. This closes #1281. This closes #1289.

Posted by sb...@apache.org.
IGNITE-4026: Fixed BinaryObjectBuilder.build() can fail if one of the fields is Externalizable, enum from binary object. This closes #1281. This closes #1289.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 0b7c62d2939854223653d832a616ddb61211bf22
Parents: d1cc292
Author: dkarachentsev <dk...@gridgain.com>
Authored: Mon Nov 28 11:30:14 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Mon Nov 28 11:30:14 2016 +0300

----------------------------------------------------------------------
 .../internal/binary/GridBinaryMarshaller.java   |   2 +-
 .../binary/builder/BinaryBuilderReader.java     |  11 ++
 .../binary/builder/BinaryBuilderSerializer.java |   4 +
 .../binary/builder/BinaryObjectBuilderImpl.java |  10 ++
 .../BinaryObjectBuilderAdditionalSelfTest.java  | 157 ++++++++++++++++++-
 5 files changed, 181 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/0b7c62d2/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java
index ad63521..624fa33 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java
@@ -43,7 +43,7 @@ public class GridBinaryMarshaller {
     private static final ThreadLocal<BinaryContext> BINARY_CTX = new ThreadLocal<>();
 
     /** */
-    static final byte OPTM_MARSH = -2;
+    public static final byte OPTM_MARSH = -2;
 
     /** */
     public static final byte BYTE = 1;

http://git-wip-us.apache.org/repos/asf/ignite/blob/0b7c62d2/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderReader.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderReader.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderReader.java
index 347fb2b..baaabd6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderReader.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderReader.java
@@ -33,6 +33,7 @@ import java.sql.Timestamp;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
+import org.apache.ignite.internal.util.typedef.internal.U;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 
@@ -757,6 +758,16 @@ public class BinaryBuilderReader implements BinaryPositionReadable {
                 return new BinaryPlainBinaryObject(binaryObj);
             }
 
+            case GridBinaryMarshaller.OPTM_MARSH: {
+                final BinaryHeapInputStream bin = BinaryHeapInputStream.create(arr, pos);
+
+                final Object obj = BinaryUtils.doReadOptimized(bin, ctx, U.resolveClassLoader(ctx.configuration()));
+
+                pos = bin.position();
+
+                return obj;
+            }
+
             default:
                 throw new BinaryObjectException("Invalid flag value: " + type);
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/0b7c62d2/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderSerializer.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderSerializer.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderSerializer.java
index b296437..6974176 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderSerializer.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderSerializer.java
@@ -116,8 +116,12 @@ class BinaryBuilderSerializer {
             String typeName = writer.context().userTypeName(clsName);
 
             BinaryMetadata meta = new BinaryMetadata(typeId, typeName, null, null, null, true);
+
             writer.context().updateMetadata(typeId, meta);
 
+            // Need register class for marshaller to be able to deserialize enum value.
+            writer.context().descriptorForClass(val.getClass(), false);
+
             writer.writeByte(GridBinaryMarshaller.ENUM);
             writer.writeInt(typeId);
             writer.writeInt(((Enum)val).ordinal());

http://git-wip-us.apache.org/repos/asf/ignite/blob/0b7c62d2/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java
index ddd2423..a847d04 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java
@@ -22,6 +22,7 @@ import org.apache.ignite.binary.BinaryObject;
 import org.apache.ignite.binary.BinaryObjectBuilder;
 import org.apache.ignite.binary.BinaryObjectException;
 import org.apache.ignite.binary.BinaryType;
+import org.apache.ignite.internal.binary.BinaryEnumObjectImpl;
 import org.apache.ignite.internal.binary.BinaryMetadata;
 import org.apache.ignite.internal.binary.BinaryObjectImpl;
 import org.apache.ignite.internal.binary.BinaryWriterExImpl;
@@ -391,6 +392,15 @@ public class BinaryObjectBuilderImpl implements BinaryObjectBuilder {
             if (((BinaryValueWithType)newVal).value() == null)
                 nullFieldVal = true;
         }
+        // Detect Enum and Enum array type.
+        else if (newVal instanceof BinaryEnumObjectImpl)
+            newFldTypeId = GridBinaryMarshaller.ENUM;
+        else if (newVal.getClass().isArray() && newVal.getClass().getComponentType() == BinaryObject.class) {
+            BinaryObject[] arr = (BinaryObject[])newVal;
+
+            newFldTypeId = arr.length > 0 && arr[0] instanceof BinaryEnumObjectImpl ?
+                GridBinaryMarshaller.ENUM_ARR : GridBinaryMarshaller.OBJ_ARR;
+        }
         else
             newFldTypeId = BinaryUtils.typeByClass(newVal.getClass());
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/0b7c62d2/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectBuilderAdditionalSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectBuilderAdditionalSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectBuilderAdditionalSelfTest.java
index 24806cb..507aa6b 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectBuilderAdditionalSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectBuilderAdditionalSelfTest.java
@@ -21,6 +21,10 @@ import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
 import java.math.BigInteger;
@@ -1423,11 +1427,19 @@ public class BinaryObjectBuilderAdditionalSelfTest extends GridCommonAbstractTes
      * @return Wrapper.
      */
     private BinaryObjectBuilderImpl newWrapper(Class<?> aCls) {
+        return newWrapper(aCls.getName());
+    }
+
+    /**
+     * @param typeName Type name.
+     * @return Wrapper.
+     */
+    private BinaryObjectBuilderImpl newWrapper(String typeName) {
         CacheObjectBinaryProcessorImpl processor = (CacheObjectBinaryProcessorImpl)(
             (IgniteBinaryImpl)binaries()).processor();
 
-        return new BinaryObjectBuilderImpl(processor.binaryContext(), processor.typeId(aCls.getName()),
-            processor.binaryContext().userTypeName(aCls.getName()));
+        return new BinaryObjectBuilderImpl(processor.binaryContext(), processor.typeId(typeName),
+            processor.binaryContext().userTypeName(typeName));
     }
 
     /**
@@ -1508,4 +1520,145 @@ public class BinaryObjectBuilderAdditionalSelfTest extends GridCommonAbstractTes
         assert OBJ.equals(binaryObj.type().fieldTypeName("asSetHint"));
         assert OBJ.equals(binaryObj.type().fieldTypeName("asMapHint"));
     }
+
+    /**
+     * Checks that externalizable value is correctly serialized/deserialized.
+     *
+     * @throws Exception If failed.
+     */
+    public void testBuilderExternalizable() throws Exception {
+        BinaryObjectBuilder builder = newWrapper("TestType");
+
+        final TestObjectExternalizable exp = new TestObjectExternalizable("test");
+        final TestObjectExternalizable[] expArr = new TestObjectExternalizable[]{
+            new TestObjectExternalizable("test1"), new TestObjectExternalizable("test2")};
+
+        BinaryObject extObj = builder.setField("extVal", exp).setField("extArr", expArr).build();
+
+        assertEquals(exp, extObj.field("extVal"));
+        Assert.assertArrayEquals(expArr, (Object[])extObj.field("extArr"));
+
+        builder = extObj.toBuilder();
+
+        extObj = builder.setField("intVal", 10).build();
+
+        assertEquals(exp, extObj.field("extVal"));
+        Assert.assertArrayEquals(expArr, (Object[])extObj.field("extArr"));
+        assertEquals(Integer.valueOf(10), extObj.field("intVal"));
+
+        builder = extObj.toBuilder();
+
+        extObj = builder.setField("strVal", "some string").build();
+
+        assertEquals(exp, extObj.field("extVal"));
+        Assert.assertArrayEquals(expArr, (Object[])extObj.field("extArr"));
+        assertEquals(Integer.valueOf(10), extObj.field("intVal"));
+        assertEquals("some string", extObj.field("strVal"));
+    }
+
+    /**
+     * Checks correct serialization/deserialization of enums in builder.
+     *
+     * @throws Exception If failed.
+     */
+    public void testEnum() throws Exception {
+        BinaryObjectBuilder builder = newWrapper("TestType");
+
+        final TestEnum exp = TestEnum.A;
+        final TestEnum[] expArr = {TestEnum.A, TestEnum.B};
+
+        BinaryObject enumObj = builder.setField("testEnum", exp).setField("testEnumArr", expArr).build();
+
+        assertEquals(exp, ((BinaryObject)enumObj.field("testEnum")).deserialize());
+        Assert.assertArrayEquals(expArr, (Object[])deserializeEnumBinaryArray(enumObj.field("testEnumArr")));
+
+        builder = newWrapper(enumObj.type().typeName());
+
+        enumObj = builder.setField("testEnum", (Object)enumObj.field("testEnum"))
+            .setField("testEnumArr", (Object)enumObj.field("testEnumArr")).build();
+
+        assertEquals(exp, ((BinaryObject)enumObj.field("testEnum")).deserialize());
+        Assert.assertArrayEquals(expArr, (Object[])deserializeEnumBinaryArray(enumObj.field("testEnumArr")));
+    }
+
+    /**
+     * @param obj BinaryObject array.
+     * @return Deserialized enums.
+     */
+    private TestEnum[] deserializeEnumBinaryArray(Object obj) {
+        Object[] arr = (Object[])obj;
+
+        final TestEnum[] res = new TestEnum[arr.length];
+
+        for (int i = 0; i < arr.length; i++)
+            res[i] = ((BinaryObject)arr[i]).deserialize();
+
+        return res;
+    }
+
+    /**
+     *
+     */
+    private static class TestObjectExternalizable implements Externalizable {
+        /** */
+        private String val;
+
+        /**
+         *
+         */
+        public TestObjectExternalizable() {
+        }
+
+        /**
+         * @param val Value.
+         */
+        public TestObjectExternalizable(final String val) {
+            this.val = val;
+        }
+
+        /** {@inheritDoc} */
+        @Override public void writeExternal(final ObjectOutput out) throws IOException {
+            out.writeUTF(val);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException {
+            val = in.readUTF();
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean equals(final Object o) {
+            if (this == o)
+                return true;
+            if (o == null || getClass() != o.getClass())
+                return false;
+
+            final TestObjectExternalizable that = (TestObjectExternalizable)o;
+
+            return val != null ? val.equals(that.val) : that.val == null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public int hashCode() {
+            return val != null ? val.hashCode() : 0;
+        }
+
+        /** {@inheritDoc} */
+        @Override public String toString() {
+            return "TestObjectExternalizable{" +
+                "val='" + val + '\'' +
+                '}';
+        }
+    }
+
+    /**
+     *
+     */
+    private enum TestEnum {
+        /** */
+        A,
+
+        /** */
+        B
+    }
 }


[26/50] ignite git commit: IGNITE-4319: IgniteCacheAbstractSqlDmlQuerySelfTest fix. This closes #1291.

Posted by sb...@apache.org.
IGNITE-4319: IgniteCacheAbstractSqlDmlQuerySelfTest fix. This closes #1291.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 99eb4e0c802a5c967a4b4feda5e7de252912b962
Parents: b0127d3
Author: Alexander Paschenko <al...@gmail.com>
Authored: Mon Nov 28 13:28:16 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Mon Nov 28 13:28:16 2016 +0300

----------------------------------------------------------------------
 .../IgniteCacheAbstractSqlDmlQuerySelfTest.java | 44 ++++++++++++++++----
 1 file changed, 37 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/99eb4e0c/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractSqlDmlQuerySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractSqlDmlQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractSqlDmlQuerySelfTest.java
index 123c32a..1424163 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractSqlDmlQuerySelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractSqlDmlQuerySelfTest.java
@@ -89,25 +89,53 @@ public abstract class IgniteCacheAbstractSqlDmlQuerySelfTest extends GridCommonA
         startGridsMultiThreaded(3, true);
 
         ignite(0).createCache(cacheConfig("S2P", true, false).setIndexedTypes(String.class, Person.class));
-        ignite(0).createCache(createBinCacheConfig());
+
+        if (isBinaryMarshaller())
+            ignite(0).createCache(createBinCacheConfig());
     }
 
     /** {@inheritDoc} */
     @Override protected void beforeTest() throws Exception {
         super.beforeTest();
+
+        // Put to S2P only non binary Persons
         ignite(0).cache("S2P").put("FirstKey", new Person(1, "John", "White"));
         ignite(0).cache("S2P").put("SecondKey", new Person(2, "Joe", "Black"));
         ignite(0).cache("S2P").put("k3", new Person(3, "Sylvia", "Green"));
         ignite(0).cache("S2P").put("f0u4thk3y", new Person(4, "Jane", "Silver"));
 
-        ignite(0).cache("S2P-bin").put("FirstKey", createPerson(1, "John", "White"));
-        ignite(0).cache("S2P-bin").put("SecondKey", createPerson(2, "Joe", "Black"));
-        ignite(0).cache("S2P-bin").put("k3", createPerson(3, "Sylvia", "Green"));
-        ignite(0).cache("S2P-bin").put("f0u4thk3y", createPerson(4, "Jane", "Silver"));
+        if (isBinaryMarshaller()) {
+            ignite(0).cache("S2P-bin").put("FirstKey", createBinPerson(1, "John", "White"));
+            ignite(0).cache("S2P-bin").put("SecondKey", createBinPerson(2, "Joe", "Black"));
+            ignite(0).cache("S2P-bin").put("k3", createBinPerson(3, "Sylvia", "Green"));
+            ignite(0).cache("S2P-bin").put("f0u4thk3y", createBinPerson(4, "Jane", "Silver"));
+        }
     }
 
-    /** */
+    /**
+     * Create person.
+     *
+     * @param id ID.
+     * @param name Name.
+     * @param secondName Second name.
+     * @return Person.
+     */
     Object createPerson(int id, String name, String secondName) {
+        if (!isBinaryMarshaller())
+            return new Person(id, name, secondName);
+        else
+            return createBinPerson(id, name, secondName);
+    }
+
+    /**
+     * Create binary person.
+     *
+     * @param id ID.
+     * @param name Name.
+     * @param secondName Second name.
+     * @return Person.
+     */
+    private Object createBinPerson(int id, String name, String secondName) {
         BinaryObjectBuilder bldr = ignite(0).binary().builder("Person");
 
         bldr.setField("id", id);
@@ -117,7 +145,9 @@ public abstract class IgniteCacheAbstractSqlDmlQuerySelfTest extends GridCommonA
         return bldr.build();
     }
 
-    /** */
+    /**
+     * @return Cache.
+     */
     protected IgniteCache cache() {
         if (!isBinaryMarshaller())
             return ignite(0).cache("S2P");


[12/50] ignite git commit: IGNITE-4279: Fixed most of the failures in JDBC suite. They were caused by connection leak in old test JdbcNoDefaultCacheTest.

Posted by sb...@apache.org.
IGNITE-4279: Fixed most of the failures in JDBC suite. They were caused by connection leak in old test JdbcNoDefaultCacheTest.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 43ec85f2be5bc4b18f3cff6630d5adef60930fdc
Parents: ccbe600
Author: devozerov <vo...@gridgain.com>
Authored: Fri Nov 25 13:55:50 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Fri Nov 25 13:55:50 2016 +0300

----------------------------------------------------------------------
 .../internal/jdbc2/JdbcNoDefaultCacheTest.java  | 40 ++++++++++----------
 1 file changed, 21 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/43ec85f2/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcNoDefaultCacheTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcNoDefaultCacheTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcNoDefaultCacheTest.java
index 0acaa05..cdcda48 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcNoDefaultCacheTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcNoDefaultCacheTest.java
@@ -127,35 +127,37 @@ public class JdbcNoDefaultCacheTest extends GridCommonAbstractTest {
     public void testNoCacheNameQuery() throws Exception {
         Statement stmt;
 
-        stmt = DriverManager.getConnection(CFG_URL_PREFIX + CFG_URL).createStatement();
+        try (Connection conn = DriverManager.getConnection(CFG_URL_PREFIX + CFG_URL)) {
+            stmt = conn.createStatement();
 
-        assertNotNull(stmt);
-        assertFalse(stmt.isClosed());
+            assertNotNull(stmt);
+            assertFalse(stmt.isClosed());
 
-        stmt.execute("select t._key, t._val from \"cache1\".Integer t");
+            stmt.execute("select t._key, t._val from \"cache1\".Integer t");
 
-        ResultSet rs = stmt.getResultSet();
+            ResultSet rs = stmt.getResultSet();
 
-        while(rs.next())
-            assertEquals(rs.getInt(2), rs.getInt(1) * 2);
+            while(rs.next())
+                assertEquals(rs.getInt(2), rs.getInt(1) * 2);
 
-        stmt.execute("select t._key, t._val from \"cache2\".Integer t");
+            stmt.execute("select t._key, t._val from \"cache2\".Integer t");
 
-        rs = stmt.getResultSet();
+            rs = stmt.getResultSet();
 
-        while(rs.next())
-            assertEquals(rs.getInt(2), rs.getInt(1) * 3);
+            while(rs.next())
+                assertEquals(rs.getInt(2), rs.getInt(1) * 3);
 
-        stmt.execute("select t._key, t._val, v._val " +
-            "from \"cache1\".Integer t join \"cache2\".Integer v on t._key = v._key");
+            stmt.execute("select t._key, t._val, v._val " +
+                "from \"cache1\".Integer t join \"cache2\".Integer v on t._key = v._key");
 
-        rs = stmt.getResultSet();
+            rs = stmt.getResultSet();
 
-        while(rs.next()) {
-            assertEquals(rs.getInt(2), rs.getInt(1) * 2);
-            assertEquals(rs.getInt(3), rs.getInt(1) * 3);
-        }
+            while(rs.next()) {
+                assertEquals(rs.getInt(2), rs.getInt(1) * 2);
+                assertEquals(rs.getInt(3), rs.getInt(1) * 3);
+            }
 
-        stmt.close();
+            stmt.close();
+        }
     }
 }


[27/50] ignite git commit: Ignite-4243: Added a Python/PHP examples for Redis. - Fixes #1258.

Posted by sb...@apache.org.
Ignite-4243: Added a Python/PHP examples for Redis. - Fixes #1258.

Signed-off-by: shroman <rs...@yahoo.com>

(cherry picked from commit 9ec0a6f)


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 1073b2c14d68e252fb2970d489eab47f9a31d201
Parents: 99eb4e0
Author: shroman <rs...@yahoo.com>
Authored: Sat Nov 26 09:23:06 2016 +0700
Committer: Andrey Novikov <an...@gridgain.com>
Committed: Mon Nov 28 17:56:39 2016 +0700

----------------------------------------------------------------------
 examples/redis/redis-example.php | 82 +++++++++++++++++++++++++++++++++++
 examples/redis/redis-example.py  | 62 ++++++++++++++++++++++++++
 2 files changed, 144 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/1073b2c1/examples/redis/redis-example.php
----------------------------------------------------------------------
diff --git a/examples/redis/redis-example.php b/examples/redis/redis-example.php
new file mode 100644
index 0000000..0054f16
--- /dev/null
+++ b/examples/redis/redis-example.php
@@ -0,0 +1,82 @@
+#!/bin/php
+
+<?php
+/*
+ * 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.
+ */
+
+/**
+ * To execute this script, you need to have Predis extension installed and Ignite running.
+ * See https://github.com/nrk/predis for Predis details.
+ *
+ * See https://apacheignite.readme.io/ for more details on Redis integration.
+ */
+
+// Load the library.
+require 'predis/autoload.php';
+Predis\Autoloader::register();
+
+// Connect.
+try {
+    $redis = new Predis\Client(array(
+        "host" => "localhost",
+        "port" => 11211));
+
+    echo ">>> Successfully connected to Redis. \n";
+
+    // Put entry to cache.
+    if ($redis->set('k1', '1'))
+        echo ">>> Successfully put entry in cache. \n";
+
+    // Check entry value.
+    echo(">>> Value for 'k1': " . $redis->get('k1') . "\n");
+
+    // Change entry's value.
+    if ($redis->set('k1', 'new_value'))
+        echo ">>> Successfully put entry in cache. \n";
+
+    // Check entry value.
+    echo(">>> Value for 'k1': " . $redis->get('k1') . "\n");
+
+    // Put entry to cache.
+    if ($redis->set('k2', '2'))
+        echo ">>> Successfully put entry in cache. \n";
+
+    // Check entry value.
+    echo(">>> Value for 'k2': " . $redis->get('k2') . "\n");
+
+    // Get two entries.
+    $val = $redis->mget('k1', 'k2');
+    echo(">>> Value for 'k1' and 'k2': " . var_dump($val) . "\n");
+
+    // Delete on entry.
+    if ($redis->del('k1'))
+        echo ">>> Successfully deleted 'k1'. \n";
+
+    // Db size.
+    echo ">>> Db size: " . $redis->dbsize() . "\n";
+
+    // Increment.
+    echo ">>> Incremented: " . $redis->incr("inc_k") . "\n";
+
+    // Increment by 5.
+    echo ">>> Incremented: " . $redis->incrby("inc_k", 5) . "\n";
+}
+catch (Exception $e) {
+    echo ">>> Couldn't connected to Redis.";
+    echo $e->getMessage();
+}
+?>

http://git-wip-us.apache.org/repos/asf/ignite/blob/1073b2c1/examples/redis/redis-example.py
----------------------------------------------------------------------
diff --git a/examples/redis/redis-example.py b/examples/redis/redis-example.py
new file mode 100644
index 0000000..15b847b
--- /dev/null
+++ b/examples/redis/redis-example.py
@@ -0,0 +1,62 @@
+'''
+ * 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.
+'''
+
+import redis
+'''
+To execute this, you will have redis-py installed and Ignite running.
+See https://github.com/andymccurdy/redis-py for the details on redis-py.
+
+See https://apacheignite.readme.io/ for more details on Redis integration.
+'''
+
+r = redis.StrictRedis(host='localhost', port=11211, db=0)
+
+# set entry.
+r.set('k1', 1)
+
+# check.
+print 'Value for "k1": %s' % r.get('k1')
+
+# change entry's value.
+r.set('k1', 'new_val')
+
+# check.
+print 'Value for "k1": %s' % r.get('k1')
+
+# set another entry.
+r.set('k2', 2)
+
+# check.
+print 'Value for "k2": %s' % r.get('k2')
+
+# get both values.
+print 'Values for "k1" and "k2": %s' % r.mget('k1', 'k2')
+
+# delete one entry.
+r.delete('k1')
+
+# check one entry left.
+print 'Values for "k1" and "k2": %s' % r.mget('k1', 'k2')
+
+# check db size
+print 'Db size: %d' % r.dbsize()
+
+# increment.
+print 'Value for incremented "inc_k" : %s' % r.incr('inc_k')
+
+# increment again.
+print 'Value for incremented "inc_k" : %s' % r.incr('inc_k')


[16/50] ignite git commit: IGNITE-4309: Commented out failing CacheExampleMultiNodeSelfTest.testCacheLockExample.

Posted by sb...@apache.org.
IGNITE-4309: Commented out failing CacheExampleMultiNodeSelfTest.testCacheLockExample.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: dda4fc94e3fb53a0dc458e1035adb2d3d182d7c0
Parents: a6cb18a
Author: devozerov <vo...@gridgain.com>
Authored: Fri Nov 25 15:13:49 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Fri Nov 25 15:13:49 2016 +0300

----------------------------------------------------------------------
 .../ignite/examples/CacheExamplesMultiNodeSelfTest.java       | 7 +++++++
 1 file changed, 7 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/dda4fc94/examples/src/test/java/org/apache/ignite/examples/CacheExamplesMultiNodeSelfTest.java
----------------------------------------------------------------------
diff --git a/examples/src/test/java/org/apache/ignite/examples/CacheExamplesMultiNodeSelfTest.java b/examples/src/test/java/org/apache/ignite/examples/CacheExamplesMultiNodeSelfTest.java
index 06ceaac..6de0273 100644
--- a/examples/src/test/java/org/apache/ignite/examples/CacheExamplesMultiNodeSelfTest.java
+++ b/examples/src/test/java/org/apache/ignite/examples/CacheExamplesMultiNodeSelfTest.java
@@ -35,4 +35,11 @@ public class CacheExamplesMultiNodeSelfTest extends CacheExamplesSelfTest {
     @Override protected long getTestTimeout() {
         return 10 * 60 * 1000;
     }
+
+    /** {@inheritDoc} */
+    @Override public void testCacheLockExample() throws Exception {
+        fail("https://issues.apache.org/jira/browse/IGNITE-4309");
+
+        super.testCacheLockExample();
+    }
 }
\ No newline at end of file


[45/50] ignite git commit: IGNITE-4295: Added specialized methods for memory copying, depending on their nature (heap/offheap). Heap->heap copying is now performed using System.arraycopy when possible. Also it is possible to fallback to byte-by-byte copy

Posted by sb...@apache.org.
IGNITE-4295: Added specialized methods for memory copying, depending on their nature (heap/offheap). Heap->heap copying is now performed using System.arraycopy when possible. Also it is possible to fallback to byte-by-byte copying until certain threshold is reached (see IgniteSystemProperties.IGNITE_MEMORY_PER_BYTE_COPY_THRESHOLD); it could be useful on some JDK implementations with inefficient Unsafe copy routines. E.g. on OpenJDK 8 for PowerPC. This closes #1282.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 530d8c8de7e29dedcef1d7032a9320b442dc9dd3
Parents: 6d348ae
Author: devozerov <vo...@gridgain.com>
Authored: Mon Dec 5 15:42:24 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Mon Dec 5 15:42:24 2016 +0300

----------------------------------------------------------------------
 .../apache/ignite/IgniteSystemProperties.java   |  8 +++
 .../internal/binary/BinaryPrimitives.java       |  6 +-
 .../binary/streams/BinaryHeapInputStream.java   |  4 +-
 .../binary/streams/BinaryHeapOutputStream.java  |  2 +-
 .../streams/BinaryMemoryAllocatorChunk.java     |  3 +-
 .../streams/BinaryOffheapInputStream.java       |  4 +-
 .../streams/BinaryOffheapOutputStream.java      |  4 +-
 .../memory/PlatformInputStreamImpl.java         |  4 +-
 .../memory/PlatformOutputStreamImpl.java        |  2 +-
 .../ignite/internal/util/GridHandleTable.java   | 10 ++--
 .../apache/ignite/internal/util/GridUnsafe.java | 60 ++++++++++++++++++--
 .../ignite/internal/util/IgniteUtils.java       | 32 +----------
 .../internal/util/io/GridUnsafeDataInput.java   | 12 ++--
 .../internal/util/io/GridUnsafeDataOutput.java  | 12 ++--
 .../util/offheap/unsafe/GridUnsafeMemory.java   | 10 ++--
 .../binary/BinaryFieldsOffheapSelfTest.java     |  2 +-
 .../BinaryFooterOffsetsOffheapSelfTest.java     |  2 +-
 .../binary/BinaryMarshallerSelfTest.java        |  2 +-
 ...naryObjectBuilderDefaultMappersSelfTest.java |  2 +-
 .../hadoop/shuffle/HadoopShuffleJob.java        |  2 +-
 .../hadoop/shuffle/HadoopShuffleMessage.java    |  2 +-
 .../shuffle/streams/HadoopDataOutStream.java    |  2 +-
 .../HadoopConcurrentHashMultimapSelftest.java   |  2 +-
 .../collections/HadoopSkipListSelfTest.java     |  2 +-
 24 files changed, 108 insertions(+), 83 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
index 9429a6f..b83b5ef 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
@@ -500,6 +500,14 @@ public final class IgniteSystemProperties {
     public static final String IGNITE_MEMORY_UNALIGNED_ACCESS = "IGNITE_MEMORY_UNALIGNED_ACCESS";
 
     /**
+     * When unsafe memory copy if performed below this threshold, Ignite will do it on per-byte basis instead of
+     * calling to Unsafe.copyMemory().
+     * <p>
+     * Defaults to 0, meaning that threshold is disabled.
+     */
+    public static final String IGNITE_MEMORY_PER_BYTE_COPY_THRESHOLD = "IGNITE_MEMORY_PER_BYTE_COPY_THRESHOLD";
+
+    /**
      * Enforces singleton.
      */
     private IgniteSystemProperties() {

http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryPrimitives.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryPrimitives.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryPrimitives.java
index 86f5040..556282d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryPrimitives.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryPrimitives.java
@@ -60,7 +60,7 @@ public abstract class BinaryPrimitives {
     public static byte[] readByteArray(byte[] arr, int off, int len) {
         byte[] arr0 = new byte[len];
 
-        GridUnsafe.copyMemory(arr, GridUnsafe.BYTE_ARR_OFF + off, arr0, GridUnsafe.BYTE_ARR_OFF, len);
+        System.arraycopy(arr, off, arr0, 0, len);
 
         return arr0;
     }
@@ -73,7 +73,7 @@ public abstract class BinaryPrimitives {
     public static byte[] readByteArray(long ptr, int off, int len) {
         byte[] arr0 = new byte[len];
 
-        GridUnsafe.copyMemory(null, ptr + off, arr0, GridUnsafe.BYTE_ARR_OFF, len);
+        GridUnsafe.copyOffheapHeap(ptr + off, arr0, GridUnsafe.BYTE_ARR_OFF, len);
 
         return arr0;
     }
@@ -215,7 +215,7 @@ public abstract class BinaryPrimitives {
     public static char[] readCharArray(long ptr, int off, int len) {
         char[] arr0 = new char[len];
 
-        GridUnsafe.copyMemory(null, ptr + off, arr0, GridUnsafe.CHAR_ARR_OFF, len << 1);
+        GridUnsafe.copyOffheapHeap(ptr + off, arr0, GridUnsafe.CHAR_ARR_OFF, len << 1);
 
         if (BIG_ENDIAN) {
             for (int i = 0; i < len; i++)

http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryHeapInputStream.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryHeapInputStream.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryHeapInputStream.java
index b5edc02..322894e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryHeapInputStream.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryHeapInputStream.java
@@ -78,7 +78,7 @@ public final class BinaryHeapInputStream extends BinaryAbstractInputStream {
         if (data.length < len) {
             byte[] data0 = new byte[len];
 
-            GridUnsafe.copyMemory(data, GridUnsafe.BYTE_ARR_OFF, data0, GridUnsafe.BYTE_ARR_OFF, data.length);
+            System.arraycopy(data, 0, data0, 0, data.length);
 
             data = data0;
         }
@@ -105,7 +105,7 @@ public final class BinaryHeapInputStream extends BinaryAbstractInputStream {
     @Override public byte[] arrayCopy() {
         byte[] res = new byte[len];
 
-        GridUnsafe.copyMemory(data, GridUnsafe.BYTE_ARR_OFF, res, GridUnsafe.BYTE_ARR_OFF, res.length);
+        System.arraycopy(data, 0, res, 0, len);
 
         return res;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryHeapOutputStream.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryHeapOutputStream.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryHeapOutputStream.java
index f06c980..17bcdf6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryHeapOutputStream.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryHeapOutputStream.java
@@ -75,7 +75,7 @@ public final class BinaryHeapOutputStream extends BinaryAbstractOutputStream {
     @Override public byte[] arrayCopy() {
         byte[] res = new byte[pos];
 
-        GridUnsafe.copyMemory(data, GridUnsafe.BYTE_ARR_OFF, res, GridUnsafe.BYTE_ARR_OFF, pos);
+        System.arraycopy(data, 0, res, 0, pos);
 
         return res;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryMemoryAllocatorChunk.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryMemoryAllocatorChunk.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryMemoryAllocatorChunk.java
index f9db7da..09f8c3f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryMemoryAllocatorChunk.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryMemoryAllocatorChunk.java
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.internal.binary.streams;
 
-import org.apache.ignite.internal.util.GridUnsafe;
 import org.apache.ignite.internal.util.typedef.internal.U;
 
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_MARSHAL_BUFFERS_RECHECK;
@@ -72,7 +71,7 @@ public class BinaryMemoryAllocatorChunk {
         if (this.data == data)
             this.data = newData;
 
-        GridUnsafe.copyMemory(data, GridUnsafe.BYTE_ARR_OFF, newData, GridUnsafe.BYTE_ARR_OFF, data.length);
+        System.arraycopy(data, 0, newData, 0, data.length);
 
         return newData;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOffheapInputStream.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOffheapInputStream.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOffheapInputStream.java
index 9dc92c6..6f505b9 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOffheapInputStream.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOffheapInputStream.java
@@ -79,7 +79,7 @@ public class BinaryOffheapInputStream extends BinaryAbstractInputStream {
     @Override public byte[] arrayCopy() {
         byte[] res = new byte[len];
 
-        GridUnsafe.copyMemory(null, ptr, res, GridUnsafe.BYTE_ARR_OFF, res.length);
+        GridUnsafe.copyOffheapHeap(ptr, res, GridUnsafe.BYTE_ARR_OFF, res.length);
 
         return res;
     }
@@ -96,7 +96,7 @@ public class BinaryOffheapInputStream extends BinaryAbstractInputStream {
 
     /** {@inheritDoc} */
     @Override protected void copyAndShift(Object target, long off, int len) {
-        GridUnsafe.copyMemory(null, ptr + pos, target, off, len);
+        GridUnsafe.copyOffheapHeap(ptr + pos, target, off, len);
 
         shift(len);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOffheapOutputStream.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOffheapOutputStream.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOffheapOutputStream.java
index be9f7d3..d16e575 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOffheapOutputStream.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/streams/BinaryOffheapOutputStream.java
@@ -77,7 +77,7 @@ public class BinaryOffheapOutputStream extends BinaryAbstractOutputStream {
     @Override public byte[] arrayCopy() {
         byte[] res = new byte[pos];
 
-        GridUnsafe.copyMemory(null, ptr, res, GridUnsafe.BYTE_ARR_OFF, pos);
+        GridUnsafe.copyOffheapHeap(ptr, res, GridUnsafe.BYTE_ARR_OFF, pos);
 
         return res;
     }
@@ -101,7 +101,7 @@ public class BinaryOffheapOutputStream extends BinaryAbstractOutputStream {
 
     /** {@inheritDoc} */
     @Override protected void copyAndShift(Object src, long offset, int len) {
-        GridUnsafe.copyMemory(src, offset, null, ptr + pos, len);
+        GridUnsafe.copyHeapOffheap(src, offset, ptr + pos, len);
 
         shift(len);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformInputStreamImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformInputStreamImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformInputStreamImpl.java
index 859de39..f5b2c3a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformInputStreamImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformInputStreamImpl.java
@@ -286,7 +286,7 @@ public class PlatformInputStreamImpl implements PlatformInputStream {
         if (dataCopy == null) {
             dataCopy = new byte[len];
 
-            GridUnsafe.copyMemory(null, data, dataCopy, GridUnsafe.BYTE_ARR_OFF, dataCopy.length);
+            GridUnsafe.copyOffheapHeap(data, dataCopy, GridUnsafe.BYTE_ARR_OFF, dataCopy.length);
         }
 
         return dataCopy;
@@ -334,7 +334,7 @@ public class PlatformInputStreamImpl implements PlatformInputStream {
     private void copyAndShift(Object target, long off, int cnt) {
         ensureEnoughData(cnt);
 
-        GridUnsafe.copyMemory(null, data + pos, target, off, cnt);
+        GridUnsafe.copyOffheapHeap(data + pos, target, off, cnt);
 
         shift(cnt);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformOutputStreamImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformOutputStreamImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformOutputStreamImpl.java
index 1ece10b..334afb8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformOutputStreamImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformOutputStreamImpl.java
@@ -334,7 +334,7 @@ public class PlatformOutputStreamImpl implements PlatformOutputStream {
     private void copyAndShift(Object src, long off, int len) {
         ensureCapacity(pos + len);
 
-        GridUnsafe.copyMemory(src, off, null, data + pos, len);
+        GridUnsafe.copyHeapOffheap(src, off, data + pos, len);
 
         shift(len);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/modules/core/src/main/java/org/apache/ignite/internal/util/GridHandleTable.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridHandleTable.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridHandleTable.java
index 41a4da9..aace1ed 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridHandleTable.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridHandleTable.java
@@ -19,8 +19,6 @@ package org.apache.ignite.internal.util;
 
 import java.util.Arrays;
 
-import static org.apache.ignite.internal.util.GridUnsafe.INT_ARR_OFF;
-
 /**
  * Lightweight identity hash table which maps objects to integer handles,
  * assigned in ascending order.
@@ -109,8 +107,8 @@ public class GridHandleTable {
      * Resets table to its initial (empty) state.
      */
     public void clear() {
-        GridUnsafe.copyMemory(spineEmpty, INT_ARR_OFF, spine, INT_ARR_OFF, spineEmpty.length << 2);
-        GridUnsafe.copyMemory(nextEmpty, INT_ARR_OFF, next, INT_ARR_OFF, nextEmpty.length << 2);
+        System.arraycopy(spineEmpty, 0, spine, 0, spineEmpty.length);
+        System.arraycopy(nextEmpty, 0, next, 0, nextEmpty.length);
 
         Arrays.fill(objs, null);
 
@@ -151,7 +149,7 @@ public class GridHandleTable {
 
         Arrays.fill(spineEmpty, -1);
 
-        GridUnsafe.copyMemory(spineEmpty, INT_ARR_OFF, spine, INT_ARR_OFF, spineEmpty.length << 2);
+        System.arraycopy(spineEmpty, 0, spine, 0, spineEmpty.length);
 
         for (int i = 0; i < this.size; i++) {
             Object obj = objs[i];
@@ -169,7 +167,7 @@ public class GridHandleTable {
         int newLen = (next.length << 1) + 1;
         int[] newNext = new int[newLen];
 
-        GridUnsafe.copyMemory(next, INT_ARR_OFF, newNext, INT_ARR_OFF, size << 2);
+        System.arraycopy(next, 0, newNext, 0, size);
 
         next = newNext;
         nextEmpty = new int[newLen];

http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java
index 35b793a..6e9efdb 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java
@@ -51,6 +51,10 @@ public abstract class GridUnsafe {
     /** Unaligned flag. */
     private static final boolean UNALIGNED = unaligned();
 
+    /** Per-byte copy threshold. */
+    private static final long PER_BYTE_THRESHOLD =
+        IgniteSystemProperties.getLong(IgniteSystemProperties.IGNITE_MEMORY_PER_BYTE_COPY_THRESHOLD, 0L);
+
     /** Big endian. */
     public static final boolean BIG_ENDIAN = ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN;
 
@@ -1027,14 +1031,53 @@ public abstract class GridUnsafe {
     }
 
     /**
-     * Copies memory.
+     * Copy memory between offheap locations.
+     *
+     * @param srcAddr Source address.
+     * @param dstAddr Destination address.
+     * @param len Length.
+     */
+    public static void copyOffheapOffheap(long srcAddr, long dstAddr, long len) {
+        if (len <= PER_BYTE_THRESHOLD) {
+            for (int i = 0; i < len; i++)
+                UNSAFE.putByte(dstAddr + i, UNSAFE.getByte(srcAddr + i));
+        }
+        else
+            UNSAFE.copyMemory(srcAddr, dstAddr, len);
+    }
+
+    /**
+     * Copy memory from offheap to heap.
      *
-     * @param src Source.
-     * @param dst Dst.
+     * @param srcAddr Source address.
+     * @param dstBase Destination base.
+     * @param dstOff Destination offset.
      * @param len Length.
      */
-    public static void copyMemory(long src, long dst, long len) {
-        UNSAFE.copyMemory(src, dst, len);
+    public static void copyOffheapHeap(long srcAddr, Object dstBase, long dstOff, long len) {
+        if (len <= PER_BYTE_THRESHOLD) {
+            for (int i = 0; i < len; i++)
+                UNSAFE.putByte(dstBase, dstOff + i, UNSAFE.getByte(srcAddr + i));
+        }
+        else
+            UNSAFE.copyMemory(null, srcAddr, dstBase, dstOff, len);
+    }
+
+    /**
+     * Copy memory from heap to offheap.
+     *
+     * @param srcBase Source base.
+     * @param srcOff Source offset.
+     * @param dstAddr Destination address.
+     * @param len Length.
+     */
+    public static void copyHeapOffheap(Object srcBase, long srcOff, long dstAddr, long len) {
+        if (len <= PER_BYTE_THRESHOLD) {
+            for (int i = 0; i < len; i++)
+                UNSAFE.putByte(dstAddr + i, UNSAFE.getByte(srcBase, srcOff + i));
+        }
+        else
+            UNSAFE.copyMemory(srcBase, srcOff, null, dstAddr, len);
     }
 
     /**
@@ -1047,7 +1090,12 @@ public abstract class GridUnsafe {
      * @param len Length.
      */
     public static void copyMemory(Object srcBase, long srcOff, Object dstBase, long dstOff, long len) {
-        UNSAFE.copyMemory(srcBase, srcOff, dstBase, dstOff, len);
+        if (len <= PER_BYTE_THRESHOLD && srcBase != null && dstBase != null) {
+            for (int i = 0; i < len; i++)
+                UNSAFE.putByte(dstBase, dstOff + i, UNSAFE.getByte(srcBase, srcOff + i));
+        }
+        else
+            UNSAFE.copyMemory(srcBase, srcOff, dstBase, dstOff, len);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/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 3fa3f7b..e1937bb 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
@@ -265,9 +265,6 @@ import static org.apache.ignite.internal.util.GridUnsafe.staticFieldOffset;
  */
 @SuppressWarnings({"UnusedReturnValue", "UnnecessaryFullyQualifiedName", "RedundantStringConstructorCall"})
 public abstract class IgniteUtils {
-    /** {@code True} if {@code unsafe} should be used for array copy. */
-    private static final boolean UNSAFE_BYTE_ARR_CP = unsafeByteArrayCopyAvailable();
-
     /** Sun-specific JDK constructor factory for objects that don't have empty constructor. */
     private static final Method CTOR_FACTORY;
 
@@ -8482,28 +8479,6 @@ public abstract class IgniteUtils {
     }
 
     /**
-     * As long as array copying uses JVM-private API, which is not guaranteed
-     * to be available on all JVM, this method should be called to ensure
-     * logic could work properly.
-     *
-     * @return {@code True} if unsafe copying can work on the current JVM or
-     *      {@code false} if it can't.
-     */
-    @SuppressWarnings("TypeParameterExtendsFinalClass")
-    private static boolean unsafeByteArrayCopyAvailable() {
-        try {
-            Class<? extends Unsafe> unsafeCls = Unsafe.class;
-
-            unsafeCls.getMethod("copyMemory", Object.class, long.class, Object.class, long.class, long.class);
-
-            return true;
-        }
-        catch (Exception ignored) {
-            return false;
-        }
-    }
-
-    /**
      * @param src Buffer to copy from (length included).
      * @param off Offset in source buffer.
      * @param resBuf Result buffer.
@@ -8514,10 +8489,7 @@ public abstract class IgniteUtils {
     public static int arrayCopy(byte[] src, int off, byte[] resBuf, int resOff, int len) {
         assert resBuf.length >= resOff + len;
 
-        if (UNSAFE_BYTE_ARR_CP)
-            GridUnsafe.copyMemory(src, GridUnsafe.BYTE_ARR_OFF + off, resBuf, GridUnsafe.BYTE_ARR_OFF + resOff, len);
-        else
-            System.arraycopy(src, off, resBuf, resOff, len);
+        System.arraycopy(src, off, resBuf, resOff, len);
 
         return resOff + len;
     }
@@ -9284,7 +9256,7 @@ public abstract class IgniteUtils {
     public static byte[] copyMemory(long ptr, int size) {
         byte[] res = new byte[size];
 
-        GridUnsafe.copyMemory(null, ptr, res, GridUnsafe.BYTE_ARR_OFF, size);
+        GridUnsafe.copyOffheapHeap(ptr, res, GridUnsafe.BYTE_ARR_OFF, size);
 
         return res;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java b/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java
index 2f57e59..759b95e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java
@@ -135,7 +135,7 @@ public class GridUnsafeDataInput extends InputStream implements GridDataInput {
             if (maxOff < halfSize) {
                 byte[] newInBuf = new byte[halfSize]; // Shrink.
 
-                GridUnsafe.copyMemory(inBuf, BYTE_ARR_OFF, newInBuf, BYTE_ARR_OFF, off);
+                System.arraycopy(inBuf, 0, newInBuf, 0, off);
 
                 buf = inBuf = newInBuf;
             }
@@ -191,7 +191,7 @@ public class GridUnsafeDataInput extends InputStream implements GridDataInput {
 
         byte[] arr = new byte[arrSize];
 
-        GridUnsafe.copyMemory(buf, BYTE_ARR_OFF + offset(arrSize), arr, BYTE_ARR_OFF, arrSize);
+        System.arraycopy(buf, offset(arrSize), arr, 0, arrSize);
 
         return arr;
     }
@@ -364,14 +364,14 @@ public class GridUnsafeDataInput extends InputStream implements GridDataInput {
 
         fromStream(len);
 
-        GridUnsafe.copyMemory(buf, BYTE_ARR_OFF + offset(len), b, BYTE_ARR_OFF, len);
+        System.arraycopy(buf, offset(len), b, 0, len);
     }
 
     /** {@inheritDoc} */
     @Override public void readFully(byte[] b, int off, int len) throws IOException {
         fromStream(len);
 
-        GridUnsafe.copyMemory(buf, BYTE_ARR_OFF + offset(len), b, BYTE_ARR_OFF + off, len);
+        System.arraycopy(buf, offset(len), b, off, len);
     }
 
     /** {@inheritDoc} */
@@ -488,7 +488,7 @@ public class GridUnsafeDataInput extends InputStream implements GridDataInput {
         else {
             int toRead = Math.min(len, max - this.off);
 
-            GridUnsafe.copyMemory(buf, BYTE_ARR_OFF + offset(toRead), b, BYTE_ARR_OFF + off, toRead);
+            System.arraycopy(buf, offset(toRead), b, off, toRead);
 
             return toRead;
         }
@@ -552,7 +552,7 @@ public class GridUnsafeDataInput extends InputStream implements GridDataInput {
             else {
                 // shift and refill buffer manually
                 if (avail > 0)
-                    GridUnsafe.copyMemory(utfBuf, BYTE_ARR_OFF + pos, utfBuf, BYTE_ARR_OFF, avail);
+                    System.arraycopy(utfBuf, pos, utfBuf, 0, avail);
 
                 pos = 0;
                 end = (int)Math.min(MAX_BLOCK_SIZE, utfLen);

http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java b/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java
index c0fe0d3..c45b8fd 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java
@@ -97,7 +97,7 @@ public class GridUnsafeDataOutput extends OutputStream implements GridDataOutput
     @Override public byte[] array() {
         byte[] bytes0 = new byte[off];
 
-        GridUnsafe.copyMemory(bytes, BYTE_ARR_OFF, bytes0, BYTE_ARR_OFF, off);
+        System.arraycopy(bytes, 0, bytes0, 0, off);
 
         return bytes0;
     }
@@ -130,7 +130,7 @@ public class GridUnsafeDataOutput extends OutputStream implements GridDataOutput
         if (size > bytes.length) {
             byte[] newBytes = new byte[size << 1]; // Grow.
 
-            GridUnsafe.copyMemory(bytes, BYTE_ARR_OFF, newBytes, BYTE_ARR_OFF, off);
+            System.arraycopy(bytes, 0, newBytes, 0, off);
 
             bytes = newBytes;
         }
@@ -140,7 +140,7 @@ public class GridUnsafeDataOutput extends OutputStream implements GridDataOutput
             if (maxOff < halfSize) {
                 byte[] newBytes = new byte[halfSize]; // Shrink.
 
-                GridUnsafe.copyMemory(bytes, BYTE_ARR_OFF, newBytes, BYTE_ARR_OFF, off);
+                System.arraycopy(bytes, 0, newBytes, 0, off);
 
                 bytes = newBytes;
             }
@@ -165,7 +165,7 @@ public class GridUnsafeDataOutput extends OutputStream implements GridDataOutput
     @Override public void write(byte[] b) throws IOException {
         requestFreeSize(b.length);
 
-        GridUnsafe.copyMemory(b, BYTE_ARR_OFF, bytes, BYTE_ARR_OFF + off, b.length);
+        System.arraycopy(b, 0, bytes, off, b.length);
 
         onWrite(b.length);
     }
@@ -174,7 +174,7 @@ public class GridUnsafeDataOutput extends OutputStream implements GridDataOutput
     @Override public void write(byte[] b, int off, int len) throws IOException {
         requestFreeSize(len);
 
-        GridUnsafe.copyMemory(b, BYTE_ARR_OFF + off, bytes, BYTE_ARR_OFF + this.off, len);
+        System.arraycopy(b, off, bytes, this.off, len);
 
         onWrite(len);
     }
@@ -293,7 +293,7 @@ public class GridUnsafeDataOutput extends OutputStream implements GridDataOutput
 
         requestFreeSize(arr.length);
 
-        GridUnsafe.copyMemory(arr, BYTE_ARR_OFF, bytes, BYTE_ARR_OFF + off, arr.length);
+        System.arraycopy(arr, 0, bytes, off, arr.length);
 
         onWrite(arr.length);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/modules/core/src/main/java/org/apache/ignite/internal/util/offheap/unsafe/GridUnsafeMemory.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/offheap/unsafe/GridUnsafeMemory.java b/modules/core/src/main/java/org/apache/ignite/internal/util/offheap/unsafe/GridUnsafeMemory.java
index 718e1a6..41cb586 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/offheap/unsafe/GridUnsafeMemory.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/offheap/unsafe/GridUnsafeMemory.java
@@ -607,7 +607,7 @@ public class GridUnsafeMemory {
      * @return The same array as passed in one.
      */
     public byte[] readBytes(long ptr, byte[] arr) {
-        GridUnsafe.copyMemory(null, ptr, arr, GridUnsafe.BYTE_ARR_OFF, arr.length);
+        GridUnsafe.copyOffheapHeap(ptr, arr, GridUnsafe.BYTE_ARR_OFF, arr.length);
 
         return arr;
     }
@@ -620,7 +620,7 @@ public class GridUnsafeMemory {
      * @return The same array as passed in one.
      */
     public byte[] readBytes(long ptr, byte[] arr, int off, int len) {
-        GridUnsafe.copyMemory(null, ptr, arr, GridUnsafe.BYTE_ARR_OFF + off, len);
+        GridUnsafe.copyOffheapHeap(ptr, arr, GridUnsafe.BYTE_ARR_OFF + off, len);
 
         return arr;
     }
@@ -632,7 +632,7 @@ public class GridUnsafeMemory {
      * @param arr Array.
      */
     public void writeBytes(long ptr, byte[] arr) {
-        GridUnsafe.copyMemory(arr, GridUnsafe.BYTE_ARR_OFF, null, ptr, arr.length);
+        GridUnsafe.copyHeapOffheap(arr, GridUnsafe.BYTE_ARR_OFF, ptr, arr.length);
     }
 
     /**
@@ -644,7 +644,7 @@ public class GridUnsafeMemory {
      * @param len Length.
      */
     public void writeBytes(long ptr, byte[] arr, int off, int len) {
-        GridUnsafe.copyMemory(arr, GridUnsafe.BYTE_ARR_OFF + off, null, ptr, len);
+        GridUnsafe.copyHeapOffheap(arr, GridUnsafe.BYTE_ARR_OFF + off, ptr, len);
     }
 
     /**
@@ -655,7 +655,7 @@ public class GridUnsafeMemory {
      * @param len Length in bytes.
      */
     public void copyMemory(long srcPtr, long destPtr, long len) {
-        GridUnsafe.copyMemory(srcPtr, destPtr, len);
+        GridUnsafe.copyOffheapOffheap(srcPtr, destPtr, len);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFieldsOffheapSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFieldsOffheapSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFieldsOffheapSelfTest.java
index 1546252..ca4bdd2 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFieldsOffheapSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFieldsOffheapSelfTest.java
@@ -46,7 +46,7 @@ public class BinaryFieldsOffheapSelfTest extends BinaryFieldsAbstractSelfTest {
 
         ptrs.add(ptr);
 
-        GridUnsafe.copyMemory(arr, GridUnsafe.BYTE_ARR_OFF, null, ptr, arr.length);
+        GridUnsafe.copyHeapOffheap(arr, GridUnsafe.BYTE_ARR_OFF, ptr, arr.length);
 
         return new BinaryObjectOffheapImpl(binaryContext(marsh), ptr, 0, arr.length);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFooterOffsetsOffheapSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFooterOffsetsOffheapSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFooterOffsetsOffheapSelfTest.java
index 796c027..052e652 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFooterOffsetsOffheapSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFooterOffsetsOffheapSelfTest.java
@@ -46,7 +46,7 @@ public class BinaryFooterOffsetsOffheapSelfTest extends BinaryFooterOffsetsAbstr
 
         ptrs.add(ptr);
 
-        GridUnsafe.copyMemory(arr, GridUnsafe.BYTE_ARR_OFF, null, ptr, arr.length);
+        GridUnsafe.copyHeapOffheap(arr, GridUnsafe.BYTE_ARR_OFF, ptr, arr.length);
 
         return new BinaryObjectOffheapImpl(ctx, ptr, 0, arr.length);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java
index 39a4d32..70df1e6 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java
@@ -3346,7 +3346,7 @@ public class BinaryMarshallerSelfTest extends GridCommonAbstractTest {
 
         long ptr = GridUnsafe.allocateMemory(arr.length);
 
-        GridUnsafe.copyMemory(arr, GridUnsafe.BYTE_ARR_OFF, null, ptr, arr.length);
+        GridUnsafe.copyHeapOffheap(arr, GridUnsafe.BYTE_ARR_OFF, ptr, arr.length);
 
         return ptr;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectBuilderDefaultMappersSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectBuilderDefaultMappersSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectBuilderDefaultMappersSelfTest.java
index 4fc5c6c..b623c62 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectBuilderDefaultMappersSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectBuilderDefaultMappersSelfTest.java
@@ -791,7 +791,7 @@ public class BinaryObjectBuilderDefaultMappersSelfTest extends GridCommonAbstrac
             else
                 GridUnsafe.putInt(ptr0, len);
 
-            GridUnsafe.copyMemory(arr, GridUnsafe.BYTE_ARR_OFF, null, ptr0 + 4, arr.length);
+            GridUnsafe.copyHeapOffheap(arr, GridUnsafe.BYTE_ARR_OFF, ptr0 + 4, arr.length);
 
             BinaryObject offheapObj = (BinaryObject)
                 ((CacheObjectBinaryProcessorImpl)(grid(0)).context().cacheObjects()).unmarshal(ptr, false);

http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
index e5af8f1..025c4da 100644
--- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
+++ b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
@@ -311,7 +311,7 @@ public class HadoopShuffleJob<T> implements AutoCloseable {
 
         /** */
         @Override public void copyTo(long ptr) {
-            GridUnsafe.copyMemory(buf, GridUnsafe.BYTE_ARR_OFF + off, null, ptr, size);
+            GridUnsafe.copyHeapOffheap(buf, GridUnsafe.BYTE_ARR_OFF + off, ptr, size);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleMessage.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleMessage.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleMessage.java
index 69dfe64..71a314b 100644
--- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleMessage.java
+++ b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleMessage.java
@@ -169,7 +169,7 @@ public class HadoopShuffleMessage implements HadoopMessage {
 
         off += 4;
 
-        GridUnsafe.copyMemory(null, ptr, buf, GridUnsafe.BYTE_ARR_OFF + off, size);
+        GridUnsafe.copyOffheapHeap(ptr, buf, GridUnsafe.BYTE_ARR_OFF + off, size);
 
         off += size;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/streams/HadoopDataOutStream.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/streams/HadoopDataOutStream.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/streams/HadoopDataOutStream.java
index f7b1a73..bb5acba 100644
--- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/streams/HadoopDataOutStream.java
+++ b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/streams/HadoopDataOutStream.java
@@ -67,7 +67,7 @@ public class HadoopDataOutStream extends OutputStream implements DataOutput {
 
     /** {@inheritDoc} */
     @Override public void write(byte[] b, int off, int len) {
-        GridUnsafe.copyMemory(b, GridUnsafe.BYTE_ARR_OFF + off, null, move(len), len);
+        GridUnsafe.copyHeapOffheap(b, GridUnsafe.BYTE_ARR_OFF + off, move(len), len);
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/shuffle/collections/HadoopConcurrentHashMultimapSelftest.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/shuffle/collections/HadoopConcurrentHashMultimapSelftest.java b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/shuffle/collections/HadoopConcurrentHashMultimapSelftest.java
index 019b172..7862d6e 100644
--- a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/shuffle/collections/HadoopConcurrentHashMultimapSelftest.java
+++ b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/shuffle/collections/HadoopConcurrentHashMultimapSelftest.java
@@ -162,7 +162,7 @@ public class HadoopConcurrentHashMultimapSelftest extends HadoopAbstractMapTest
             private void read(long ptr, int size, Writable w) {
                 assert size == 4 : size;
 
-                GridUnsafe.copyMemory(null, ptr, buf, GridUnsafe.BYTE_ARR_OFF, size);
+                GridUnsafe.copyOffheapHeap(ptr, buf, GridUnsafe.BYTE_ARR_OFF, size);
 
                 dataInput.bytes(buf, size);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/530d8c8d/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/shuffle/collections/HadoopSkipListSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/shuffle/collections/HadoopSkipListSelfTest.java b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/shuffle/collections/HadoopSkipListSelfTest.java
index d04beca..111ea78 100644
--- a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/shuffle/collections/HadoopSkipListSelfTest.java
+++ b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/shuffle/collections/HadoopSkipListSelfTest.java
@@ -202,7 +202,7 @@ public class HadoopSkipListSelfTest extends HadoopAbstractMapTest {
             private void read(long ptr, int size, Writable w) {
                 assert size == 4 : size;
 
-                GridUnsafe.copyMemory(null, ptr, buf, GridUnsafe.BYTE_ARR_OFF, size);
+                GridUnsafe.copyOffheapHeap(ptr, buf, GridUnsafe.BYTE_ARR_OFF, size);
 
                 dataInput.bytes(buf, size);
 


[20/50] ignite git commit: IGNITE-4287 DmlStatementsProcessor logic fix (always force keepBinary for SELECTs inside DML logic). This closes #1280.

Posted by sb...@apache.org.
IGNITE-4287 DmlStatementsProcessor logic fix (always force keepBinary for SELECTs inside DML logic). This closes #1280.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: e7c0d453e53821d11f92f102ccfc06e2426d2dce
Parents: dda4fc9
Author: Alexander Paschenko <al...@gmail.com>
Authored: Fri Nov 25 19:07:50 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Fri Nov 25 19:07:50 2016 +0300

----------------------------------------------------------------------
 .../query/h2/DmlStatementsProcessor.java        | 209 +++++++++----------
 .../processors/query/h2/sql/DmlAstUtils.java    |  19 +-
 .../IgniteCacheAbstractSqlDmlQuerySelfTest.java |  46 ++--
 .../IgniteCacheDeleteSqlQuerySelfTest.java      |  25 +++
 4 files changed, 162 insertions(+), 137 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/e7c0d453/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java
index 7634965..469e36c 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java
@@ -46,7 +46,6 @@ import org.apache.ignite.cache.query.SqlFieldsQuery;
 import org.apache.ignite.internal.processors.cache.CacheOperationContext;
 import org.apache.ignite.internal.processors.cache.GridCacheAdapter;
 import org.apache.ignite.internal.processors.cache.GridCacheContext;
-import org.apache.ignite.internal.processors.cache.GridCacheUtils;
 import org.apache.ignite.internal.processors.cache.QueryCursorImpl;
 import org.apache.ignite.internal.processors.cache.query.IgniteQueryErrorCode;
 import org.apache.ignite.internal.processors.query.GridQueryCacheObjectsIterator;
@@ -130,9 +129,34 @@ public class DmlStatementsProcessor {
 
         UpdatePlan plan = getPlanForStatement(spaceName, stmt, null);
 
+        GridCacheContext<?, ?> cctx = plan.tbl.rowDescriptor().context();
+
         for (int i = 0; i < DFLT_DML_RERUN_ATTEMPTS; i++) {
-            UpdateResult r = executeUpdateStatement(plan.tbl.rowDescriptor().context(), stmt, fieldsQry, loc, filters,
-                cancel, errKeys);
+            CacheOperationContext opCtx = cctx.operationContextPerCall();
+
+            // Force keepBinary for operation context to avoid binary deserialization inside entry processor
+            if (cctx.binaryMarshaller()) {
+                CacheOperationContext newOpCtx = null;
+
+                if (opCtx == null)
+                    // Mimics behavior of GridCacheAdapter#keepBinary and GridCacheProxyImpl#keepBinary
+                    newOpCtx = new CacheOperationContext(false, null, true, null, false, null);
+                else if (!opCtx.isKeepBinary())
+                    newOpCtx = opCtx.keepBinary();
+
+                if (newOpCtx != null)
+                    cctx.operationContextPerCall(newOpCtx);
+            }
+
+            UpdateResult r;
+
+            try {
+                r = executeUpdateStatement(cctx, stmt, fieldsQry, loc, filters,
+                    cancel, errKeys);
+            }
+            finally {
+                cctx.operationContextPerCall(opCtx);
+            }
 
             if (F.isEmpty(r.errKeys))
                 return r.cnt + items;
@@ -195,12 +219,16 @@ public class DmlStatementsProcessor {
         throws IgniteCheckedException {
         Integer errKeysPos = null;
 
-        if (!F.isEmpty(failedKeys))
-            errKeysPos = F.isEmpty(fieldsQry.getArgs()) ? 1 : fieldsQry.getArgs().length + 1;
+        Object[] params = fieldsQry.getArgs();
 
-        UpdatePlan plan = getPlanForStatement(cctx.name(), prepStmt, errKeysPos);
+        if (!F.isEmpty(failedKeys)) {
+            int paramsCnt = F.isEmpty(params) ? 0 : params.length;
+            params = Arrays.copyOf(U.firstNotNull(params, X.EMPTY_OBJECT_ARRAY), paramsCnt + 1);
+            params[paramsCnt] = failedKeys;
+            errKeysPos = paramsCnt; // Last position
+        }
 
-        Object[] params = fieldsQry.getArgs();
+        UpdatePlan plan = getPlanForStatement(cctx.name(), prepStmt, errKeysPos);
 
         if (plan.fastUpdateArgs != null) {
             assert F.isEmpty(failedKeys) && errKeysPos == null;
@@ -351,78 +379,58 @@ public class DmlStatementsProcessor {
         // With DELETE, we have only two columns - key and value.
         long res = 0;
 
-        CacheOperationContext opCtx = cctx.operationContextPerCall();
-
-        // Force keepBinary for operation context to avoid binary deserialization inside entry processor
-        if (cctx.binaryMarshaller()) {
-            CacheOperationContext newOpCtx = null;
-
-            if (opCtx == null)
-                // Mimics behavior of GridCacheAdapter#keepBinary and GridCacheProxyImpl#keepBinary
-                newOpCtx = new CacheOperationContext(false, null, true, null, false, null);
-            else if (!opCtx.isKeepBinary())
-                newOpCtx = opCtx.keepBinary();
-
-            if (newOpCtx != null)
-                cctx.operationContextPerCall(newOpCtx);
-        }
-
         // Keys that failed to DELETE due to concurrent updates.
         List<Object> failedKeys = new ArrayList<>();
 
         SQLException resEx = null;
 
-        try {
-            Iterator<List<?>> it = cursor.iterator();
-            Map<Object, EntryProcessor<Object, Object, Boolean>> rows = new LinkedHashMap<>();
 
-            while (it.hasNext()) {
-                List<?> e = it.next();
-                if (e.size() != 2) {
-                    U.warn(indexing.getLogger(), "Invalid row size on DELETE - expected 2, got " + e.size());
-                    continue;
-                }
+        Iterator<List<?>> it = cursor.iterator();
+        Map<Object, EntryProcessor<Object, Object, Boolean>> rows = new LinkedHashMap<>();
 
-                rows.put(e.get(0), new ModifyingEntryProcessor(e.get(1), RMV));
+        while (it.hasNext()) {
+            List<?> e = it.next();
+            if (e.size() != 2) {
+                U.warn(indexing.getLogger(), "Invalid row size on DELETE - expected 2, got " + e.size());
+                continue;
+            }
 
-                if ((pageSize > 0 && rows.size() == pageSize) || (!it.hasNext())) {
-                    PageProcessingResult pageRes = processPage(cctx, rows);
+            rows.put(e.get(0), new ModifyingEntryProcessor(e.get(1), RMV));
 
-                    res += pageRes.cnt;
+            if ((pageSize > 0 && rows.size() == pageSize) || (!it.hasNext())) {
+                PageProcessingResult pageRes = processPage(cctx, rows);
 
-                    failedKeys.addAll(F.asList(pageRes.errKeys));
+                res += pageRes.cnt;
 
-                    if (pageRes.ex != null) {
-                        if (resEx == null)
-                            resEx = pageRes.ex;
-                        else
-                            resEx.setNextException(pageRes.ex);
-                    }
+                failedKeys.addAll(F.asList(pageRes.errKeys));
 
-                    if (it.hasNext())
-                        rows.clear(); // No need to clear after the last batch.
+                if (pageRes.ex != null) {
+                    if (resEx == null)
+                        resEx = pageRes.ex;
+                    else
+                        resEx.setNextException(pageRes.ex);
                 }
-            }
 
-            if (resEx != null) {
-                if (!F.isEmpty(failedKeys)) {
-                    // Don't go for a re-run if processing of some keys yielded exceptions and report keys that
-                    // had been modified concurrently right away.
-                    String msg = "Failed to DELETE some keys because they had been modified concurrently " +
-                        "[keys=" + failedKeys + ']';
+                if (it.hasNext())
+                    rows.clear(); // No need to clear after the last batch.
+            }
+        }
 
-                    SQLException conEx = createJdbcSqlException(msg, IgniteQueryErrorCode.CONCURRENT_UPDATE);
+        if (resEx != null) {
+            if (!F.isEmpty(failedKeys)) {
+                // Don't go for a re-run if processing of some keys yielded exceptions and report keys that
+                // had been modified concurrently right away.
+                String msg = "Failed to DELETE some keys because they had been modified concurrently " +
+                    "[keys=" + failedKeys + ']';
 
-                    conEx.setNextException(resEx);
+                SQLException conEx = createJdbcSqlException(msg, IgniteQueryErrorCode.CONCURRENT_UPDATE);
 
-                    resEx = conEx;
-                }
+                conEx.setNextException(resEx);
 
-                throw new IgniteSQLException(resEx);
+                resEx = conEx;
             }
-        }
-        finally {
-            cctx.operationContextPerCall(opCtx);
+
+            throw new IgniteSQLException(resEx);
         }
 
         return new UpdateResult(res, failedKeys.toArray());
@@ -689,22 +697,6 @@ public class DmlStatementsProcessor {
                     IgniteQueryErrorCode.DUPLICATE_KEY);
         }
         else {
-            CacheOperationContext opCtx = cctx.operationContextPerCall();
-
-            // Force keepBinary for operation context to avoid binary deserialization inside entry processor
-            if (cctx.binaryMarshaller()) {
-                CacheOperationContext newOpCtx = null;
-
-                if (opCtx == null)
-                    // Mimics behavior of GridCacheAdapter#keepBinary and GridCacheProxyImpl#keepBinary
-                    newOpCtx = new CacheOperationContext(false, null, true, null, false, null);
-                else if (!opCtx.isKeepBinary())
-                    newOpCtx = opCtx.keepBinary();
-
-                if (newOpCtx != null)
-                    cctx.operationContextPerCall(newOpCtx);
-            }
-
             Map<Object, EntryProcessor<Object, Object, Boolean>> rows = plan.isLocSubqry ?
                 new LinkedHashMap<Object, EntryProcessor<Object, Object, Boolean>>(plan.rowsNum) :
                 new LinkedHashMap<Object, EntryProcessor<Object, Object, Boolean>>();
@@ -716,55 +708,50 @@ public class DmlStatementsProcessor {
 
             SQLException resEx = null;
 
-            try {
-                Iterator<List<?>> it = cursor.iterator();
-
-                while (it.hasNext()) {
-                    List<?> row = it.next();
+            Iterator<List<?>> it = cursor.iterator();
 
-                    final IgniteBiTuple t = rowToKeyValue(cctx, row.toArray(), plan.colNames, plan.keySupplier,
-                        plan.valSupplier, plan.keyColIdx, plan.valColIdx, desc.type());
+            while (it.hasNext()) {
+                List<?> row = it.next();
 
-                    rows.put(t.getKey(), new InsertEntryProcessor(t.getValue()));
+                final IgniteBiTuple t = rowToKeyValue(cctx, row.toArray(), plan.colNames, plan.keySupplier,
+                    plan.valSupplier, plan.keyColIdx, plan.valColIdx, desc.type());
 
-                    if (!it.hasNext() || (pageSize > 0 && rows.size() == pageSize)) {
-                        PageProcessingResult pageRes = processPage(cctx, rows);
+                rows.put(t.getKey(), new InsertEntryProcessor(t.getValue()));
 
-                        resCnt += pageRes.cnt;
+                if (!it.hasNext() || (pageSize > 0 && rows.size() == pageSize)) {
+                    PageProcessingResult pageRes = processPage(cctx, rows);
 
-                        duplicateKeys.addAll(F.asList(pageRes.errKeys));
+                    resCnt += pageRes.cnt;
 
-                        if (pageRes.ex != null) {
-                            if (resEx == null)
-                                resEx = pageRes.ex;
-                            else
-                                resEx.setNextException(pageRes.ex);
-                        }
+                    duplicateKeys.addAll(F.asList(pageRes.errKeys));
 
-                        rows.clear();
+                    if (pageRes.ex != null) {
+                        if (resEx == null)
+                            resEx = pageRes.ex;
+                        else
+                            resEx.setNextException(pageRes.ex);
                     }
+
+                    rows.clear();
                 }
+            }
 
-                if (!F.isEmpty(duplicateKeys)) {
-                    String msg = "Failed to INSERT some keys because they are already in cache " +
-                        "[keys=" + duplicateKeys + ']';
+            if (!F.isEmpty(duplicateKeys)) {
+                String msg = "Failed to INSERT some keys because they are already in cache " +
+                    "[keys=" + duplicateKeys + ']';
 
-                    SQLException dupEx = new SQLException(msg, null, IgniteQueryErrorCode.DUPLICATE_KEY);
+                SQLException dupEx = new SQLException(msg, null, IgniteQueryErrorCode.DUPLICATE_KEY);
 
-                    if (resEx == null)
-                        resEx = dupEx;
-                    else
-                        resEx.setNextException(dupEx);
-                }
+                if (resEx == null)
+                    resEx = dupEx;
+                else
+                    resEx.setNextException(dupEx);
+            }
 
-                if (resEx != null)
-                    throw new IgniteSQLException(resEx);
+            if (resEx != null)
+                throw new IgniteSQLException(resEx);
 
-                return resCnt;
-            }
-            finally {
-                cctx.operationContextPerCall(opCtx);
-            }
+            return resCnt;
         }
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7c0d453/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/DmlAstUtils.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/DmlAstUtils.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/DmlAstUtils.java
index 39b1b74..5ff715e 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/DmlAstUtils.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/DmlAstUtils.java
@@ -417,7 +417,24 @@ public final class DmlAstUtils {
      * @return New condition.
      */
     private static GridSqlElement injectKeysFilterParam(GridSqlElement where, GridSqlColumn keyCol, int paramIdx) {
-        GridSqlElement e = new GridSqlOperation(GridSqlOperationType.IN, keyCol, new GridSqlParameter(paramIdx));
+        // Yes, we need a subquery for "WHERE _key IN ?" to work with param being an array without dirty query rewriting.
+        GridSqlSelect sel = new GridSqlSelect();
+
+        GridSqlFunction from = new GridSqlFunction(GridSqlFunctionType.TABLE);
+
+        sel.from(from);
+
+        GridSqlColumn col = new GridSqlColumn(null, from, "_IGNITE_ERR_KEYS", "TABLE._IGNITE_ERR_KEYS");
+
+        sel.addColumn(col, true);
+
+        GridSqlAlias alias = new GridSqlAlias("_IGNITE_ERR_KEYS", new GridSqlParameter(paramIdx));
+
+        alias.resultType(keyCol.resultType());
+
+        from.addChild(alias);
+
+        GridSqlElement e = new GridSqlOperation(GridSqlOperationType.IN, keyCol, new GridSqlSubquery(sel));
 
         if (where == null)
             return e;

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7c0d453/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractSqlDmlQuerySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractSqlDmlQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractSqlDmlQuerySelfTest.java
index 2dbf1b4..22116a9 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractSqlDmlQuerySelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractSqlDmlQuerySelfTest.java
@@ -88,45 +88,41 @@ public abstract class IgniteCacheAbstractSqlDmlQuerySelfTest extends GridCommonA
     @Override protected void beforeTestsStarted() throws Exception {
         startGridsMultiThreaded(3, true);
 
-        ignite(0).createCache(cacheConfig());
+        ignite(0).createCache(cacheConfig("S2P", true, false).setIndexedTypes(String.class, Person.class));
+        ignite(0).createCache(createBinCacheConfig());
     }
 
     /** {@inheritDoc} */
     @Override protected void beforeTest() throws Exception {
         super.beforeTest();
-        ignite(0).cache("S2P").put("FirstKey", createPerson(1, "John", "White"));
-        ignite(0).cache("S2P").put("SecondKey", createPerson(2, "Joe", "Black"));
-        ignite(0).cache("S2P").put("k3", createPerson(3, "Sylvia", "Green"));
-        ignite(0).cache("S2P").put("f0u4thk3y", createPerson(4, "Jane", "Silver"));
+        ignite(0).cache("S2P").put("FirstKey", new Person(1, "John", "White"));
+        ignite(0).cache("S2P").put("SecondKey", new Person(2, "Joe", "Black"));
+        ignite(0).cache("S2P").put("k3", new Person(3, "Sylvia", "Green"));
+        ignite(0).cache("S2P").put("f0u4thk3y", new Person(4, "Jane", "Silver"));
+
+        ignite(0).cache("S2P-bin").put("FirstKey", createPerson(1, "John", "White"));
+        ignite(0).cache("S2P-bin").put("SecondKey", createPerson(2, "Joe", "Black"));
+        ignite(0).cache("S2P-bin").put("k3", createPerson(3, "Sylvia", "Green"));
+        ignite(0).cache("S2P-bin").put("f0u4thk3y", createPerson(4, "Jane", "Silver"));
     }
 
     /** */
     Object createPerson(int id, String name, String secondName) {
-        if (!isBinaryMarshaller())
-            return new Person(id, name, secondName);
-        else {
-            BinaryObjectBuilder bldr = ignite(0).binary().builder("Person");
-
-            bldr.setField("id", id);
-            bldr.setField("name", name);
-            bldr.setField("secondName", secondName);
-
-            return bldr.build();
-        }
+        BinaryObjectBuilder bldr = ignite(0).binary().builder("Person");
 
-    }
+        bldr.setField("id", id);
+        bldr.setField("name", name);
+        bldr.setField("secondName", secondName);
 
-    /** */
-    protected IgniteCache<?, ?> cache() {
-        return ignite(0).cache("S2P").withKeepBinary();
+        return bldr.build();
     }
 
     /** */
-    protected CacheConfiguration cacheConfig() {
+    protected IgniteCache cache() {
         if (!isBinaryMarshaller())
-            return cacheConfig("S2P", true, false).setIndexedTypes(String.class, Person.class);
+            return ignite(0).cache("S2P");
         else
-            return createBinCacheConfig();
+            return ignite(0).cache("S2P-bin").withKeepBinary();
     }
 
     /** {@inheritDoc} */
@@ -153,7 +149,7 @@ public abstract class IgniteCacheAbstractSqlDmlQuerySelfTest extends GridCommonA
      *
      */
     private static CacheConfiguration createBinCacheConfig() {
-        CacheConfiguration ccfg = cacheConfig("S2P", true, false);
+        CacheConfiguration ccfg = cacheConfig("S2P-bin", true, false);
 
         QueryEntity e = new QueryEntity(String.class.getName(), "Person");
 
@@ -177,7 +173,7 @@ public abstract class IgniteCacheAbstractSqlDmlQuerySelfTest extends GridCommonA
     /**
      *
      */
-    private static class Person implements Serializable {
+    static class Person implements Serializable {
         /** */
         public Person(int id, String name, String secondName) {
             this.id = id;

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7c0d453/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheDeleteSqlQuerySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheDeleteSqlQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheDeleteSqlQuerySelfTest.java
index 8b0a033..12662db 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheDeleteSqlQuerySelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheDeleteSqlQuerySelfTest.java
@@ -78,4 +78,29 @@ public class IgniteCacheDeleteSqlQuerySelfTest extends IgniteCacheAbstractSqlDml
         assertEqualsCollections(Arrays.asList("f0u4thk3y", createPerson(4, "Jane", "Silver"), 4, "Jane", "Silver"),
             leftovers.get(2));
     }
+
+    /**
+     * In binary mode, this test checks that inner forcing of keepBinary works - without it, EntryProcessors
+     * inside DML engine would compare binary and non-binary objects with the same keys and thus fail.
+     */
+    public void testDeleteSimpleWithoutKeepBinary() {
+        IgniteCache p = ignite(0).cache("S2P");
+
+        QueryCursor<List<?>> c = p.query(new SqlFieldsQuery("delete from Person p where length(p._key) = 2 " +
+            "or p.secondName like '%ite'"));
+
+        c.iterator();
+
+        c = p.query(new SqlFieldsQuery("select * from Person order by id"));
+
+        List<List<?>> leftovers = c.getAll();
+
+        assertEquals(2, leftovers.size());
+
+        assertEqualsCollections(Arrays.asList("SecondKey", new Person(2, "Joe", "Black"), 2, "Joe", "Black"),
+            leftovers.get(0));
+
+        assertEqualsCollections(Arrays.asList("f0u4thk3y", new Person(4, "Jane", "Silver"), 4, "Jane", "Silver"),
+            leftovers.get(1));
+    }
 }


[29/50] ignite git commit: IGNITE-4017: Added DML example. This closes #1293.

Posted by sb...@apache.org.
IGNITE-4017: Added DML example. This closes #1293.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: e205214ab4680f3b873a5cd4cb41ce877d2d3f17
Parents: a53fd38
Author: Alexander Paschenko <al...@gmail.com>
Authored: Mon Nov 28 15:51:24 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Mon Nov 28 15:51:24 2016 +0300

----------------------------------------------------------------------
 .../examples/datagrid/CacheQueryDmlExample.java | 163 +++++++++++++++++++
 .../ignite/examples/CacheExamplesSelfTest.java  |   8 +
 2 files changed, 171 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/e205214a/examples/src/main/java/org/apache/ignite/examples/datagrid/CacheQueryDmlExample.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/CacheQueryDmlExample.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/CacheQueryDmlExample.java
new file mode 100644
index 0000000..21027d0
--- /dev/null
+++ b/examples/src/main/java/org/apache/ignite/examples/datagrid/CacheQueryDmlExample.java
@@ -0,0 +1,163 @@
+/*
+ * 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.examples.datagrid;
+
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.Ignition;
+import org.apache.ignite.cache.query.SqlFieldsQuery;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.examples.model.Organization;
+import org.apache.ignite.examples.model.Person;
+
+import java.util.List;
+
+/**
+ * Example to showcase DML capabilities of Ignite's SQL engine.
+ */
+public class CacheQueryDmlExample {
+    /** Organizations cache name. */
+    private static final String ORG_CACHE = CacheQueryDmlExample.class.getSimpleName() + "Organizations";
+
+    /** Persons cache name. */
+    private static final String PERSON_CACHE = CacheQueryDmlExample.class.getSimpleName() + "Persons";
+
+    /**
+     * Executes example.
+     *
+     * @param args Command line arguments, none required.
+     * @throws Exception If example execution failed.
+     */
+    @SuppressWarnings({"unused", "ThrowFromFinallyBlock"})
+    public static void main(String[] args) throws Exception {
+        try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) {
+            print("Cache query DML example started.");
+
+            CacheConfiguration<Long, Organization> orgCacheCfg = new CacheConfiguration<>(ORG_CACHE);
+            orgCacheCfg.setIndexedTypes(Long.class, Organization.class);
+
+            CacheConfiguration<Long, Person> personCacheCfg = new CacheConfiguration<>(PERSON_CACHE);
+            personCacheCfg.setIndexedTypes(Long.class, Person.class);
+
+            // Auto-close cache at the end of the example.
+            try (
+                IgniteCache<Long, Organization> orgCache = ignite.getOrCreateCache(orgCacheCfg);
+                IgniteCache<Long, Person> personCache = ignite.getOrCreateCache(personCacheCfg)
+            ) {
+                insert(orgCache, personCache);
+                select(personCache, "Insert data");
+
+                update(personCache);
+                select(personCache, "Update salary for Master degrees");
+
+                delete(personCache);
+                select(personCache, "Delete non-Apache employees");
+            }
+            finally {
+                // Distributed cache could be removed from cluster only by #destroyCache() call.
+                ignite.destroyCache(PERSON_CACHE);
+                ignite.destroyCache(ORG_CACHE);
+            }
+
+            print("Cache query DML example finished.");
+        }
+    }
+
+    /**
+     * Populate cache with test data.
+     *
+     * @param orgCache Organization cache,
+     * @param personCache Person cache.
+     */
+    private static void insert(IgniteCache<Long, Organization> orgCache, IgniteCache<Long, Person> personCache) {
+        // Insert organizations.
+        SqlFieldsQuery qry = new SqlFieldsQuery("insert into Organization (_key, id, name) values (?, ?, ?)");
+
+        orgCache.query(qry.setArgs(1L, 1L, "ASF"));
+        orgCache.query(qry.setArgs(2L, 2L, "Eclipse"));
+
+        // Insert persons.
+        qry = new SqlFieldsQuery(
+            "insert into Person (_key, id, orgId, firstName, lastName, salary, resume) values (?, ?, ?, ?, ?, ?, ?)");
+
+        personCache.query(qry.setArgs(1L, 1L, 1L, "John", "Doe", 4000, "Master"));
+        personCache.query(qry.setArgs(2L, 2L, 1L, "Jane", "Roe", 2000, "Bachelor"));
+        personCache.query(qry.setArgs(3L, 3L, 2L, "Mary", "Major", 5000, "Master"));
+        personCache.query(qry.setArgs(4L, 4L, 2L, "Richard", "Miles", 3000, "Bachelor"));
+    }
+
+    /**
+     * Example of conditional UPDATE query: raise salary by 10% to everyone who has Master degree.
+     *
+     * @param personCache Person cache.
+     */
+    private static void update(IgniteCache<Long, Person> personCache) {
+        String sql =
+            "update Person set salary = salary * 1.1 " +
+            "where resume = ?";
+
+        personCache.query(new SqlFieldsQuery(sql).setArgs("Master"));
+    }
+
+    /**
+     * Example of conditional DELETE query: delete non-Apache employees.
+     *
+     * @param personCache Person cache.
+     */
+    private static void delete(IgniteCache<Long, Person> personCache) {
+        String sql =
+            "delete from Person " +
+            "where id in (" +
+                "select p.id " +
+                "from Person p, \"" + ORG_CACHE + "\".Organization as o " +
+                "where o.name != ? and p.orgId = o.id" +
+            ")";
+
+        personCache.query(new SqlFieldsQuery(sql).setArgs("ASF")).getAll();
+    }
+
+    /**
+     * Query current data.
+     *
+     * @param personCache Person cache.
+     * @param msg Message.
+     */
+    private static void select(IgniteCache<Long, Person> personCache, String msg) {
+        String sql =
+            "select p.id, concat(p.firstName, ' ', p.lastName), o.name, p.resume, p.salary " +
+            "from Person as p, \"" + ORG_CACHE + "\".Organization as o " +
+            "where p.orgId = o.id";
+
+        List<List<?>> res = personCache.query(new SqlFieldsQuery(sql).setDistributedJoins(true)).getAll();
+
+        print(msg);
+
+        for (Object next : res)
+            System.out.println(">>>     " + next);
+    }
+
+    /**
+     * Prints message.
+     *
+     * @param msg Message to print before all objects are printed.
+     */
+    private static void print(String msg) {
+        System.out.println();
+        System.out.println(">>> " + msg);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/e205214a/examples/src/test/java/org/apache/ignite/examples/CacheExamplesSelfTest.java
----------------------------------------------------------------------
diff --git a/examples/src/test/java/org/apache/ignite/examples/CacheExamplesSelfTest.java b/examples/src/test/java/org/apache/ignite/examples/CacheExamplesSelfTest.java
index 43b05b5..4bec419 100644
--- a/examples/src/test/java/org/apache/ignite/examples/CacheExamplesSelfTest.java
+++ b/examples/src/test/java/org/apache/ignite/examples/CacheExamplesSelfTest.java
@@ -23,6 +23,7 @@ import org.apache.ignite.examples.datagrid.CacheApiExample;
 import org.apache.ignite.examples.datagrid.CacheContinuousQueryExample;
 import org.apache.ignite.examples.datagrid.CacheDataStreamerExample;
 import org.apache.ignite.examples.datagrid.CachePutGetExample;
+import org.apache.ignite.examples.datagrid.CacheQueryDmlExample;
 import org.apache.ignite.examples.datagrid.CacheQueryExample;
 import org.apache.ignite.examples.datagrid.CacheTransactionExample;
 import org.apache.ignite.examples.datagrid.starschema.CacheStarSchemaExample;
@@ -129,6 +130,13 @@ public class CacheExamplesSelfTest extends GridAbstractExamplesTest {
     /**
      * @throws Exception If failed.
      */
+    public void testCacheQueryDmlExample() throws Exception {
+        CacheQueryDmlExample.main(EMPTY_ARGS);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
     public void testCacheApiExample() throws Exception {
         CacheApiExample.main(EMPTY_ARGS);
     }


[34/50] ignite git commit: IGNITE-4353 Parent Cassandra module deployed on maven repository

Posted by sb...@apache.org.
IGNITE-4353 Parent Cassandra module deployed on maven repository


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 4ba8fcd08e9fb7c876e3532a0caef6d416df8a66
Parents: f2d8d07
Author: Anton Vinogradov <av...@apache.org>
Authored: Thu Dec 1 17:45:20 2016 +0300
Committer: Anton Vinogradov <av...@apache.org>
Committed: Thu Dec 1 17:45:20 2016 +0300

----------------------------------------------------------------------
 modules/cassandra/pom.xml | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/4ba8fcd0/modules/cassandra/pom.xml
----------------------------------------------------------------------
diff --git a/modules/cassandra/pom.xml b/modules/cassandra/pom.xml
index 733d53c..124c9b2 100644
--- a/modules/cassandra/pom.xml
+++ b/modules/cassandra/pom.xml
@@ -49,4 +49,20 @@
         <module>store</module>
         <module>serializers</module>
     </modules>
+
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-deploy-plugin</artifactId>
+                    <version>2.8.2</version>
+                    <inherited>false</inherited>
+                    <configuration>
+                        <skip>true</skip>
+                    </configuration>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
 </project>


[43/50] ignite git commit: IGNITE-4274: Hadoop: added new property to control shuffle message size.

Posted by sb...@apache.org.
IGNITE-4274: Hadoop: added new property to control shuffle message size.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 6e8c35b42adf36c2600d6ea423d468e5cc11add4
Parents: 214197c
Author: devozerov <vo...@gridgain.com>
Authored: Mon Dec 5 15:28:54 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Mon Dec 5 15:28:54 2016 +0300

----------------------------------------------------------------------
 .../processors/hadoop/HadoopJobProperty.java    | 37 ++++++++++++--------
 .../hadoop/shuffle/HadoopShuffleJob.java        | 12 +++++--
 2 files changed, 32 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/6e8c35b4/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopJobProperty.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopJobProperty.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopJobProperty.java
index e7bf565..e713caa 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopJobProperty.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopJobProperty.java
@@ -28,40 +28,40 @@ public enum HadoopJobProperty {
      * <p>
      * Setting it right allows to avoid rehashing.
      */
-    COMBINER_HASHMAP_SIZE,
+    COMBINER_HASHMAP_SIZE("ignite.combiner.hashmap.size"),
 
     /**
      * Initial size for hashmap which stores output of mapper or combiner and will be used as input of reducer.
      * <p>
      * Setting it right allows to avoid rehashing.
      */
-    PARTITION_HASHMAP_SIZE,
+    PARTITION_HASHMAP_SIZE("ignite.partition.hashmap.size"),
 
     /**
      * Specifies number of concurrently running mappers for external execution mode.
      * <p>
      * If not specified, defaults to {@code Runtime.getRuntime().availableProcessors()}.
      */
-    EXTERNAL_CONCURRENT_MAPPERS,
+    EXTERNAL_CONCURRENT_MAPPERS("ignite.external.concurrent.mappers"),
 
     /**
      * Specifies number of concurrently running reducers for external execution mode.
      * <p>
      * If not specified, defaults to {@code Runtime.getRuntime().availableProcessors()}.
      */
-    EXTERNAL_CONCURRENT_REDUCERS,
+    EXTERNAL_CONCURRENT_REDUCERS("ignite.external.concurrent.reducers"),
 
     /**
      * Delay in milliseconds after which Ignite server will reply job status.
      */
-    JOB_STATUS_POLL_DELAY,
+    JOB_STATUS_POLL_DELAY("ignite.job.status.poll.delay"),
 
     /**
      * Size in bytes of single memory page which will be allocated for data structures in shuffle.
      * <p>
      * By default is {@code 32 * 1024}.
      */
-    SHUFFLE_OFFHEAP_PAGE_SIZE,
+    SHUFFLE_OFFHEAP_PAGE_SIZE("ignite.shuffle.offheap.page.size"),
 
     /**
      * If set to {@code true} then input for combiner will not be sorted by key.
@@ -71,7 +71,7 @@ public enum HadoopJobProperty {
      * <p>
      * By default is {@code false}.
      */
-    SHUFFLE_COMBINER_NO_SORTING,
+    SHUFFLE_COMBINER_NO_SORTING("ignite.shuffle.combiner.no.sorting"),
 
     /**
      * If set to {@code true} then input for reducer will not be sorted by key.
@@ -81,7 +81,14 @@ public enum HadoopJobProperty {
      * <p>
      * By default is {@code false}.
      */
-    SHUFFLE_REDUCER_NO_SORTING,
+    SHUFFLE_REDUCER_NO_SORTING("ignite.shuffle.reducer.no.sorting"),
+
+    /**
+     * Defines approximate size in bytes of shuffle message which will be passed over wire from mapper to reducer.
+     * <p>
+     * Defaults to 128Kb.
+     */
+    SHUFFLE_MSG_SIZE("ignite.shuffle.message.size"),
 
     /**
      * Shuffle job throttle in milliseconds. When job is executed with separate shuffle thread, this parameter
@@ -89,23 +96,25 @@ public enum HadoopJobProperty {
      * <p>
      * Defaults to {@code 0}.
      */
-    SHUFFLE_JOB_THROTTLE;
+    SHUFFLE_JOB_THROTTLE("ignite.shuffle.job.throttle");
 
-    /** */
-    private final String ptyName;
+    /** Property name. */
+    private final String propName;
 
     /**
+     * Constrcutor.
      *
+     * @param propName Property name.
      */
-    HadoopJobProperty() {
-        ptyName = "ignite." + name().toLowerCase().replace('_', '.');
+    HadoopJobProperty(String propName) {
+        this.propName = propName;
     }
 
     /**
      * @return Property name.
      */
     public String propertyName() {
-        return ptyName;
+        return propName;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/6e8c35b4/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
index 8c731c0..e5af8f1 100644
--- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
+++ b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
@@ -55,6 +55,7 @@ import org.apache.ignite.lang.IgniteInClosure;
 import org.apache.ignite.thread.IgniteThread;
 
 import static org.apache.ignite.internal.processors.hadoop.HadoopJobProperty.PARTITION_HASHMAP_SIZE;
+import static org.apache.ignite.internal.processors.hadoop.HadoopJobProperty.SHUFFLE_MSG_SIZE;
 import static org.apache.ignite.internal.processors.hadoop.HadoopJobProperty.SHUFFLE_JOB_THROTTLE;
 import static org.apache.ignite.internal.processors.hadoop.HadoopJobProperty.SHUFFLE_REDUCER_NO_SORTING;
 import static org.apache.ignite.internal.processors.hadoop.HadoopJobProperty.get;
@@ -64,7 +65,7 @@ import static org.apache.ignite.internal.processors.hadoop.HadoopJobProperty.get
  */
 public class HadoopShuffleJob<T> implements AutoCloseable {
     /** */
-    private static final int MSG_BUF_SIZE = 128 * 1024;
+    private static final int DFLT_SHUFFLE_MSG_SIZE = 128 * 1024;
 
     /** */
     private final HadoopJob job;
@@ -109,6 +110,9 @@ public class HadoopShuffleJob<T> implements AutoCloseable {
     /** */
     private final IgniteLogger log;
 
+    /** Message size. */
+    private final int msgSize;
+
     /** */
     private final long throttle;
 
@@ -128,6 +132,8 @@ public class HadoopShuffleJob<T> implements AutoCloseable {
         this.mem = mem;
         this.log = log.getLogger(HadoopShuffleJob.class);
 
+        msgSize = get(job.info(), SHUFFLE_MSG_SIZE, DFLT_SHUFFLE_MSG_SIZE);
+
         if (!F.isEmpty(locReducers)) {
             for (int rdc : locReducers) {
                 HadoopTaskInfo taskInfo = new HadoopTaskInfo(HadoopTaskType.REDUCE, job.id(), rdc, 0, null);
@@ -320,7 +326,7 @@ public class HadoopShuffleJob<T> implements AutoCloseable {
                 continue; // Skip empty map and local node.
 
             if (msgs[i] == null)
-                msgs[i] = new HadoopShuffleMessage(job.id(), i, MSG_BUF_SIZE);
+                msgs[i] = new HadoopShuffleMessage(job.id(), i, msgSize);
 
             final int idx = i;
 
@@ -425,7 +431,7 @@ public class HadoopShuffleJob<T> implements AutoCloseable {
         });
 
         msgs[idx] = newBufMinSize == 0 ? null : new HadoopShuffleMessage(job.id(), idx,
-            Math.max(MSG_BUF_SIZE, newBufMinSize));
+            Math.max(msgSize, newBufMinSize));
     }
 
     /** {@inheritDoc} */


[38/50] ignite git commit: IGNITE-4310: Added release notes for 1.8.

Posted by sb...@apache.org.
IGNITE-4310: Added release notes for 1.8.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 445cde777370fd1320dfec65c377c32acf3be1c7
Parents: b2692ad
Author: devozerov <vo...@gridgain.com>
Authored: Fri Dec 2 13:16:32 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Fri Dec 2 13:16:32 2016 +0300

----------------------------------------------------------------------
 RELEASE_NOTES.txt | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/445cde77/RELEASE_NOTES.txt
----------------------------------------------------------------------
diff --git a/RELEASE_NOTES.txt b/RELEASE_NOTES.txt
index 5f5d190..ea88455 100644
--- a/RELEASE_NOTES.txt
+++ b/RELEASE_NOTES.txt
@@ -3,7 +3,25 @@ Apache Ignite Release Notes
 
 Apache Ignite In-Memory Data Fabric 1.8
 ---------------------------------------
-TBD
+Ignite:
+* SQL: Added DML operations support (INSERT, UPDATE, DELETE, MERGE)
+* SQL: Improved DISTINCT keyword handling in aggregates
+* Hadoop: Added MapR distribution support
+* Visor: Improved SQL statistics
+* Added Redis protocol support
+* Added transactions deadlock detection
+* Many stability and fault-tolerance fixes
+
+Ignite.NET:
+* ASP.NET session state store provider
+* Entity Framework second level cache
+* Custom loggers support: NLog, Apache log4Net
+
+ODBC driver:
+* Added DML operations support
+* Added distributed joins support
+* Added DSN support
+* Performance improvements
 
 Apache Ignite In-Memory Data Fabric 1.7
 ---------------------------------------


[15/50] ignite git commit: Release notes template.

Posted by sb...@apache.org.
Release notes template.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: a6cb18a9375f3f0b9c6cb7def0380999a78138c5
Parents: 7b8d530
Author: devozerov <vo...@gridgain.com>
Authored: Fri Nov 25 15:07:30 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Fri Nov 25 15:07:30 2016 +0300

----------------------------------------------------------------------
 RELEASE_NOTES.txt | 4 ++++
 1 file changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/a6cb18a9/RELEASE_NOTES.txt
----------------------------------------------------------------------
diff --git a/RELEASE_NOTES.txt b/RELEASE_NOTES.txt
index d8a13e7..5f5d190 100644
--- a/RELEASE_NOTES.txt
+++ b/RELEASE_NOTES.txt
@@ -1,6 +1,10 @@
 Apache Ignite Release Notes
 ===========================
 
+Apache Ignite In-Memory Data Fabric 1.8
+---------------------------------------
+TBD
+
 Apache Ignite In-Memory Data Fabric 1.7
 ---------------------------------------
 Ignite:


[22/50] ignite git commit: IGNITE-4308: Ignore QueryEntity.keyFields when key is an SQL type. This closes #1286.

Posted by sb...@apache.org.
IGNITE-4308: Ignore QueryEntity.keyFields when key is an SQL type. This closes #1286.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 2ca709f8efb83c33ebe85d4b45844644a6fee7d4
Parents: ac6d910
Author: Alexander Paschenko <al...@gmail.com>
Authored: Fri Nov 25 19:17:49 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Fri Nov 25 19:17:49 2016 +0300

----------------------------------------------------------------------
 .../jdbc2/JdbcAbstractDmlStatementSelfTest.java       |  2 --
 .../internal/processors/query/GridQueryProcessor.java | 14 +++++++++++++-
 .../IgniteCacheAbstractInsertSqlQuerySelfTest.java    |  8 --------
 .../cache/IgniteCacheAbstractSqlDmlQuerySelfTest.java |  2 --
 4 files changed, 13 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/2ca709f8/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcAbstractDmlStatementSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcAbstractDmlStatementSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcAbstractDmlStatementSelfTest.java
index 1590067..4a97aef 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcAbstractDmlStatementSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcAbstractDmlStatementSelfTest.java
@@ -118,8 +118,6 @@ public abstract class JdbcAbstractDmlStatementSelfTest extends GridCommonAbstrac
         e.addQueryField("firstName", String.class.getName(), null);
         e.addQueryField("lastName", String.class.getName(), null);
 
-        e.setKeyFields(Collections.<String>emptySet());
-
         ccfg.setQueryEntities(Collections.singletonList(e));
 
         return cfg;

http://git-wip-us.apache.org/repos/asf/ignite/blob/2ca709f8/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 0fc6044..1594cee 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
@@ -1502,10 +1502,22 @@ public class GridQueryProcessor extends GridProcessorAdapter {
             aliases = Collections.emptyMap();
 
         Set<String> keyFields = qryEntity.getKeyFields();
+
+        // We have to distinguish between empty and null keyFields when the key is not of SQL type -
+        // when a key is not of SQL type, absence of a field in nonnull keyFields tell us that this field
+        // is a value field, and null keyFields tells us that current configuration
+        // does not tell us anything about this field's ownership.
         boolean hasKeyFields = (keyFields != null);
 
+        boolean isKeyClsSqlType = isSqlType(d.keyClass());
+
         for (Map.Entry<String, String> entry : qryEntity.getFields().entrySet()) {
-            Boolean isKeyField = (hasKeyFields ? keyFields.contains(entry.getKey()) : null);
+            Boolean isKeyField;
+
+            if (isKeyClsSqlType) // We don't care about keyFields in this case - it might be null, or empty, or anything
+                isKeyField = false;
+            else
+                isKeyField = (hasKeyFields ? keyFields.contains(entry.getKey()) : null);
 
             BinaryProperty prop = buildBinaryProperty(entry.getKey(), U.classForName(entry.getValue(), Object.class, true),
                 aliases, isKeyField);

http://git-wip-us.apache.org/repos/asf/ignite/blob/2ca709f8/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractInsertSqlQuerySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractInsertSqlQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractInsertSqlQuerySelfTest.java
index 2c3ab23..47369ee 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractInsertSqlQuerySelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractInsertSqlQuerySelfTest.java
@@ -148,8 +148,6 @@ public abstract class IgniteCacheAbstractInsertSqlQuerySelfTest extends GridComm
 
             QueryEntity s2p = new QueryEntity(String.class.getName(), "Person");
 
-            s2p.setKeyFields(Collections.<String>emptySet());
-
             LinkedHashMap<String, String> flds = new LinkedHashMap<>();
 
             flds.put("id", Integer.class.getName());
@@ -161,8 +159,6 @@ public abstract class IgniteCacheAbstractInsertSqlQuerySelfTest extends GridComm
 
             QueryEntity s2s = new QueryEntity(String.class.getName(), String.class.getName());
 
-            s2s.setKeyFields(Collections.<String>emptySet());
-
             s2pCcfg.setQueryEntities(Arrays.asList(s2p, s2s));
 
             ignite(0).createCache(s2pCcfg);
@@ -173,8 +169,6 @@ public abstract class IgniteCacheAbstractInsertSqlQuerySelfTest extends GridComm
 
             QueryEntity i2p = new QueryEntity(Integer.class.getName(), "Person");
 
-            i2p.setKeyFields(Collections.<String>emptySet());
-
             LinkedHashMap<String, String> flds = new LinkedHashMap<>();
 
             flds.put("id", Integer.class.getName());
@@ -285,8 +279,6 @@ public abstract class IgniteCacheAbstractInsertSqlQuerySelfTest extends GridComm
 
             QueryEntity i2i = new QueryEntity(Integer.class.getName(), Integer.class.getName());
 
-            i2i.setKeyFields(Collections.<String>emptySet());
-
             i2i.setFields(new LinkedHashMap<String, String>());
 
             i2i.setIndexes(Collections.<QueryIndex>emptyList());

http://git-wip-us.apache.org/repos/asf/ignite/blob/2ca709f8/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractSqlDmlQuerySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractSqlDmlQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractSqlDmlQuerySelfTest.java
index 22116a9..123c32a 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractSqlDmlQuerySelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractSqlDmlQuerySelfTest.java
@@ -153,8 +153,6 @@ public abstract class IgniteCacheAbstractSqlDmlQuerySelfTest extends GridCommonA
 
         QueryEntity e = new QueryEntity(String.class.getName(), "Person");
 
-        e.setKeyFields(Collections.<String>emptySet());
-
         LinkedHashMap<String, String> flds = new LinkedHashMap<>();
 
         flds.put("id", Integer.class.getName());


[42/50] ignite git commit: Merge branch 'ignite-1.7.4'

Posted by sb...@apache.org.
Merge branch 'ignite-1.7.4'


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 214197cdc397ed15b12032edf9e56726f3966d7a
Parents: 27753f9 b4aedfd
Author: devozerov <vo...@gridgain.com>
Authored: Mon Dec 5 14:58:55 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Mon Dec 5 14:58:55 2016 +0300

----------------------------------------------------------------------
 .../internal/binary/GridBinaryMarshaller.java   |   2 +-
 .../binary/builder/BinaryBuilderReader.java     |  11 ++
 .../binary/builder/BinaryBuilderSerializer.java |   4 +
 .../binary/builder/BinaryObjectBuilderImpl.java |  10 ++
 .../processors/odbc/OdbcRequestHandler.java     |  10 +-
 .../BinaryObjectBuilderAdditionalSelfTest.java  | 157 ++++++++++++++++++-
 6 files changed, 189 insertions(+), 5 deletions(-)
----------------------------------------------------------------------



[33/50] ignite git commit: IGNITE-4321 Minor update of README.txt in ignite-cassandra-serializers module.

Posted by sb...@apache.org.
IGNITE-4321 Minor update of README.txt in ignite-cassandra-serializers module.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: f2d8d078597ee46fef40b07a8d263be0a76d0385
Parents: ca28001
Author: Alexey Kuznetsov <ak...@apache.org>
Authored: Wed Nov 30 17:17:36 2016 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Wed Nov 30 17:17:36 2016 +0700

----------------------------------------------------------------------
 modules/cassandra/serializers/README.txt | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d8d078/modules/cassandra/serializers/README.txt
----------------------------------------------------------------------
diff --git a/modules/cassandra/serializers/README.txt b/modules/cassandra/serializers/README.txt
index 01948ec..aaa309f 100644
--- a/modules/cassandra/serializers/README.txt
+++ b/modules/cassandra/serializers/README.txt
@@ -4,9 +4,10 @@ Apache Ignite Cassandra Serializers Module
 Apache Ignite Cassandra Serializers module provides additional serializers to store objects as BLOBs in Cassandra. The
 module could be used as an addition to Ignite Cassandra Store module.
 
-To enable Cassandra Serializers module when starting a standalone node, move 'optional/ignite-cassandra-serializers' folder to
-'libs' folder before running 'ignite.{sh|bat}' script. The content of the module folder will
-be added to classpath in this case.
+To enable Cassandra Serializers module when starting a standalone node, move 'optional/ignite-cassandra-serializers'
+folder to 'libs' folder before running 'ignite.{sh|bat}' script. The content of the module folder will be added to
+classpath in this case. Note, copying folder 'optional/ignite-cassandra-serializers' requires copying
+'optional/ignite-cassandra-store' folder.
 
 Importing Cassandra Serializers Module In Maven Project
 -------------------------------------


[48/50] ignite git commit: IGNITE-4281: Hadoop: decoupled remote and local maps to simplify further optimizations. This closes #1264. This closes #1315.

Posted by sb...@apache.org.
IGNITE-4281: Hadoop: decoupled remote and local maps to simplify further optimizations. This closes #1264. This closes #1315.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 9e9e371468baef4e2bc7b9fc4c3089e6d073c014
Parents: acbb8ae
Author: devozerov <vo...@gridgain.com>
Authored: Mon Dec 5 17:09:28 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Mon Dec 5 17:09:28 2016 +0300

----------------------------------------------------------------------
 .../hadoop/shuffle/HadoopShuffleJob.java        | 85 ++++++++++++++------
 1 file changed, 61 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/9e9e3714/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
index aca5fdf..3afb55a 100644
--- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
+++ b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
@@ -17,9 +17,7 @@
 
 package org.apache.ignite.internal.processors.hadoop.shuffle;
 
-import java.util.HashMap;
 import java.util.Iterator;
-import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.CountDownLatch;
@@ -56,8 +54,8 @@ import org.apache.ignite.lang.IgniteInClosure;
 import org.apache.ignite.thread.IgniteThread;
 
 import static org.apache.ignite.internal.processors.hadoop.HadoopJobProperty.PARTITION_HASHMAP_SIZE;
-import static org.apache.ignite.internal.processors.hadoop.HadoopJobProperty.SHUFFLE_MSG_SIZE;
 import static org.apache.ignite.internal.processors.hadoop.HadoopJobProperty.SHUFFLE_JOB_THROTTLE;
+import static org.apache.ignite.internal.processors.hadoop.HadoopJobProperty.SHUFFLE_MSG_SIZE;
 import static org.apache.ignite.internal.processors.hadoop.HadoopJobProperty.SHUFFLE_REDUCER_NO_SORTING;
 import static org.apache.ignite.internal.processors.hadoop.HadoopJobProperty.get;
 
@@ -77,20 +75,26 @@ public class HadoopShuffleJob<T> implements AutoCloseable {
     /** */
     private final boolean needPartitioner;
 
-    /** Collection of task contexts for each reduce task. */
-    private final Map<Integer, LocalTaskContextProxy> reducersCtx = new HashMap<>();
+    /** Task contexts for each reduce task. */
+    private final AtomicReferenceArray<LocalTaskContextProxy> locReducersCtx;
 
     /** Reducers addresses. */
     private T[] reduceAddrs;
 
+    /** Total reducer count. */
+    private final int totalReducerCnt;
+
     /** Local reducers address. */
     private final T locReduceAddr;
 
     /** */
     private final HadoopShuffleMessage[] msgs;
 
-    /** */
-    private final AtomicReferenceArray<HadoopMultimap> maps;
+    /** Maps for local reducers. */
+    private final AtomicReferenceArray<HadoopMultimap> locMaps;
+
+    /** Maps for remote reducers. */
+    private final AtomicReferenceArray<HadoopMultimap> rmtMaps;
 
     /** */
     private volatile IgniteInClosure2X<T, HadoopMessage> io;
@@ -129,23 +133,27 @@ public class HadoopShuffleJob<T> implements AutoCloseable {
     public HadoopShuffleJob(T locReduceAddr, IgniteLogger log, HadoopJob job, GridUnsafeMemory mem,
         int totalReducerCnt, int[] locReducers) throws IgniteCheckedException {
         this.locReduceAddr = locReduceAddr;
+        this.totalReducerCnt = totalReducerCnt;
         this.job = job;
         this.mem = mem;
         this.log = log.getLogger(HadoopShuffleJob.class);
 
         msgSize = get(job.info(), SHUFFLE_MSG_SIZE, DFLT_SHUFFLE_MSG_SIZE);
 
+        locReducersCtx = new AtomicReferenceArray<>(totalReducerCnt);
+
         if (!F.isEmpty(locReducers)) {
             for (int rdc : locReducers) {
                 HadoopTaskInfo taskInfo = new HadoopTaskInfo(HadoopTaskType.REDUCE, job.id(), rdc, 0, null);
 
-                reducersCtx.put(rdc, new LocalTaskContextProxy(taskInfo));
+                locReducersCtx.set(rdc, new LocalTaskContextProxy(taskInfo));
             }
         }
 
         needPartitioner = totalReducerCnt > 1;
 
-        maps = new AtomicReferenceArray<>(totalReducerCnt);
+        locMaps = new AtomicReferenceArray<>(totalReducerCnt);
+        rmtMaps = new AtomicReferenceArray<>(totalReducerCnt);
         msgs = new HadoopShuffleMessage[totalReducerCnt];
 
         throttle = get(job.info(), SHUFFLE_JOB_THROTTLE, 0);
@@ -237,13 +245,13 @@ public class HadoopShuffleJob<T> implements AutoCloseable {
         assert msg.buffer() != null;
         assert msg.offset() > 0;
 
-        HadoopTaskContext taskCtx = reducersCtx.get(msg.reducer()).get();
+        HadoopTaskContext taskCtx = locReducersCtx.get(msg.reducer()).get();
 
         HadoopPerformanceCounter perfCntr = HadoopPerformanceCounter.getCounter(taskCtx.counters(), null);
 
         perfCntr.onShuffleMessage(msg.reducer(), U.currentTimeMillis());
 
-        HadoopMultimap map = getOrCreateMap(maps, msg.reducer());
+        HadoopMultimap map = getOrCreateMap(locMaps, msg.reducer());
 
         // Add data from message to the map.
         try (HadoopMultimap.Adder adder = map.startAdding(taskCtx)) {
@@ -320,10 +328,10 @@ public class HadoopShuffleJob<T> implements AutoCloseable {
      * Sends map updates to remote reducers.
      */
     private void collectUpdatesAndSend(boolean flush) throws IgniteCheckedException {
-        for (int i = 0; i < maps.length(); i++) {
-            HadoopMultimap map = maps.get(i);
+        for (int i = 0; i < rmtMaps.length(); i++) {
+            HadoopMultimap map = rmtMaps.get(i);
 
-            if (map == null || locReduceAddr.equals(reduceAddrs[i]))
+            if (map == null)
                 continue; // Skip empty map and local node.
 
             if (msgs[i] == null)
@@ -448,7 +456,8 @@ public class HadoopShuffleJob<T> implements AutoCloseable {
             }
         }
 
-        close(maps);
+        close(locMaps);
+        close(rmtMaps);
     }
 
     /**
@@ -473,7 +482,7 @@ public class HadoopShuffleJob<T> implements AutoCloseable {
 
         flushed = true;
 
-        if (maps.length() == 0)
+        if (totalReducerCnt == 0)
             return new GridFinishedFuture<>();
 
         U.await(ioInitLatch);
@@ -544,7 +553,7 @@ public class HadoopShuffleJob<T> implements AutoCloseable {
             case REDUCE:
                 int reducer = taskCtx.taskInfo().taskNumber();
 
-                HadoopMultimap m = maps.get(reducer);
+                HadoopMultimap m = locMaps.get(reducer);
 
                 if (m != null)
                     return m.input(taskCtx);
@@ -573,11 +582,24 @@ public class HadoopShuffleJob<T> implements AutoCloseable {
     }
 
     /**
+     * Check if certain partition (reducer) is local.
+     *
+     * @param part Partition.
+     * @return {@code True} if local.
+     */
+    private boolean isLocalPartition(int part) {
+        return locReducersCtx.get(part) != null;
+    }
+
+    /**
      * Partitioned output.
      */
     private class PartitionedOutput implements HadoopTaskOutput {
         /** */
-        private final HadoopTaskOutput[] adders = new HadoopTaskOutput[maps.length()];
+        private final HadoopTaskOutput[] locAdders = new HadoopTaskOutput[locMaps.length()];
+
+        /** */
+        private final HadoopTaskOutput[] rmtAdders = new HadoopTaskOutput[rmtMaps.length()];
 
         /** */
         private HadoopPartitioner partitioner;
@@ -601,23 +623,38 @@ public class HadoopShuffleJob<T> implements AutoCloseable {
             int part = 0;
 
             if (partitioner != null) {
-                part = partitioner.partition(key, val, adders.length);
+                part = partitioner.partition(key, val, totalReducerCnt);
 
-                if (part < 0 || part >= adders.length)
+                if (part < 0 || part >= totalReducerCnt)
                     throw new IgniteCheckedException("Invalid partition: " + part);
             }
 
-            HadoopTaskOutput out = adders[part];
+            HadoopTaskOutput out;
 
-            if (out == null)
-                adders[part] = out = getOrCreateMap(maps, part).startAdding(taskCtx);
+            if (isLocalPartition(part)) {
+                out = locAdders[part];
+
+                if (out == null)
+                    locAdders[part] = out = getOrCreateMap(locMaps, part).startAdding(taskCtx);
+            }
+            else {
+                out = rmtAdders[part];
+
+                if (out == null)
+                    rmtAdders[part] = out = getOrCreateMap(rmtMaps, part).startAdding(taskCtx);
+            }
 
             out.write(key, val);
         }
 
         /** {@inheritDoc} */
         @Override public void close() throws IgniteCheckedException {
-            for (HadoopTaskOutput adder : adders) {
+            for (HadoopTaskOutput adder : locAdders) {
+                if (adder != null)
+                    adder.close();
+            }
+
+            for (HadoopTaskOutput adder : rmtAdders) {
                 if (adder != null)
                     adder.close();
             }


[25/50] ignite git commit: IGNITE-4320: Minor fixes inside DML engine. This closes #1292.

Posted by sb...@apache.org.
IGNITE-4320: Minor fixes inside DML engine. This closes #1292.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: b0127d3c57601c475d186dd3becbc17829a657ce
Parents: 0b7c62d
Author: Alexander Paschenko <al...@gmail.com>
Authored: Mon Nov 28 13:24:41 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Mon Nov 28 13:24:41 2016 +0300

----------------------------------------------------------------------
 .../query/h2/DmlStatementsProcessor.java        | 143 +++++++++----------
 .../query/h2/dml/UpdatePlanBuilder.java         |  16 +--
 2 files changed, 74 insertions(+), 85 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/b0127d3c/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java
index 469e36c..d57f95f 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java
@@ -53,6 +53,7 @@ import org.apache.ignite.internal.processors.query.GridQueryCancel;
 import org.apache.ignite.internal.processors.query.GridQueryFieldMetadata;
 import org.apache.ignite.internal.processors.query.GridQueryFieldsResult;
 import org.apache.ignite.internal.processors.query.GridQueryFieldsResultAdapter;
+import org.apache.ignite.internal.processors.query.GridQueryProperty;
 import org.apache.ignite.internal.processors.query.GridQueryTypeDescriptor;
 import org.apache.ignite.internal.processors.query.IgniteSQLException;
 import org.apache.ignite.internal.processors.query.h2.dml.FastUpdateArguments;
@@ -464,22 +465,6 @@ public class DmlStatementsProcessor {
 
         long res = 0;
 
-        CacheOperationContext opCtx = cctx.operationContextPerCall();
-
-        // Force keepBinary for operation context to avoid binary deserialization inside entry processor
-        if (cctx.binaryMarshaller()) {
-            CacheOperationContext newOpCtx = null;
-
-            if (opCtx == null)
-                // Mimics behavior of GridCacheAdapter#keepBinary and GridCacheProxyImpl#keepBinary
-                newOpCtx = new CacheOperationContext(false, null, true, null, false, null);
-            else if (!opCtx.isKeepBinary())
-                newOpCtx = opCtx.keepBinary();
-
-            if (newOpCtx != null)
-                cctx.operationContextPerCall(newOpCtx);
-        }
-
         Map<Object, EntryProcessor<Object, Object, Boolean>> rows = new LinkedHashMap<>();
 
         // Keys that failed to UPDATE due to concurrent updates.
@@ -487,97 +472,101 @@ public class DmlStatementsProcessor {
 
         SQLException resEx = null;
 
-        try {
-            Iterator<List<?>> it = cursor.iterator();
+        Iterator<List<?>> it = cursor.iterator();
 
-            while (it.hasNext()) {
-                List<?> e = it.next();
-                Object key = e.get(0);
-                Object val = (hasNewVal ? e.get(valColIdx) : e.get(1));
+        while (it.hasNext()) {
+            List<?> e = it.next();
+            Object key = e.get(0);
+            Object val = (hasNewVal ? e.get(valColIdx) : e.get(1));
 
-                Object newVal;
+            Object newVal;
 
-                Map<String, Object> newColVals = new HashMap<>();
+            Map<String, Object> newColVals = new HashMap<>();
 
-                for (int i = 0; i < plan.colNames.length; i++) {
-                    if (hasNewVal && i == valColIdx - 2)
-                        continue;
+            for (int i = 0; i < plan.colNames.length; i++) {
+                if (hasNewVal && i == valColIdx - 2)
+                    continue;
 
-                    newColVals.put(plan.colNames[i], e.get(i + 2));
-                }
+                newColVals.put(plan.colNames[i], e.get(i + 2));
+            }
 
-                newVal = plan.valSupplier.apply(e);
+            newVal = plan.valSupplier.apply(e);
 
-                if (bin && !(val instanceof BinaryObject))
-                    val = cctx.grid().binary().toBinary(val);
+            if (bin && !(val instanceof BinaryObject))
+                val = cctx.grid().binary().toBinary(val);
 
-                // Skip key and value - that's why we start off with 2nd column
-                for (int i = 0; i < plan.tbl.getColumns().length - 2; i++) {
-                    Column c = plan.tbl.getColumn(i + 2);
+            // Skip key and value - that's why we start off with 2nd column
+            for (int i = 0; i < plan.tbl.getColumns().length - 2; i++) {
+                Column c = plan.tbl.getColumn(i + 2);
 
-                    boolean hasNewColVal = newColVals.containsKey(c.getName());
+                GridQueryProperty prop = desc.type().property(c.getName());
 
-                    // Binary objects get old field values from the Builder, so we can skip what we're not updating
-                    if (bin && !hasNewColVal)
-                        continue;
+                if (prop.key())
+                    continue; // Don't get values of key's columns - we won't use them anyway
 
-                    Object colVal = hasNewColVal ? newColVals.get(c.getName()) : desc.columnValue(key, val, i);
+                boolean hasNewColVal = newColVals.containsKey(c.getName());
 
-                    desc.setColumnValue(key, newVal, colVal, i);
-                }
+                // Binary objects get old field values from the Builder, so we can skip what we're not updating
+                if (bin && !hasNewColVal)
+                    continue;
 
-                if (bin && hasProps) {
-                    assert newVal instanceof BinaryObjectBuilder;
+                // Column values that have been explicitly specified have priority over field values in old or new _val
+                // If no value given for the column, then we expect to find it in value, and not in key - hence null arg.
+                Object colVal = hasNewColVal ? newColVals.get(c.getName()) : prop.value(null, val);
 
-                    newVal = ((BinaryObjectBuilder) newVal).build();
-                }
+                // UPDATE currently does not allow to modify key or its fields, so we must be safe to pass null as key.
+                desc.setColumnValue(null, newVal, colVal, i);
+            }
 
-                Object srcVal = e.get(1);
+            if (bin && hasProps) {
+                assert newVal instanceof BinaryObjectBuilder;
 
-                if (bin && !(srcVal instanceof BinaryObject))
-                    srcVal = cctx.grid().binary().toBinary(srcVal);
+                newVal = ((BinaryObjectBuilder) newVal).build();
+            }
 
-                rows.put(key, new ModifyingEntryProcessor(srcVal, new EntryValueUpdater(newVal)));
+            Object srcVal = e.get(1);
 
-                if ((pageSize > 0 && rows.size() == pageSize) || (!it.hasNext())) {
-                    PageProcessingResult pageRes = processPage(cctx, rows);
+            if (bin && !(srcVal instanceof BinaryObject))
+                srcVal = cctx.grid().binary().toBinary(srcVal);
 
-                    res += pageRes.cnt;
+            rows.put(key, new ModifyingEntryProcessor(srcVal, new EntryValueUpdater(newVal)));
 
-                    failedKeys.addAll(F.asList(pageRes.errKeys));
+            if ((pageSize > 0 && rows.size() == pageSize) || (!it.hasNext())) {
+                PageProcessingResult pageRes = processPage(cctx, rows);
 
-                    if (pageRes.ex != null) {
-                        if (resEx == null)
-                            resEx = pageRes.ex;
-                        else
-                            resEx.setNextException(pageRes.ex);
-                    }
+                res += pageRes.cnt;
 
-                    if (it.hasNext())
-                        rows.clear(); // No need to clear after the last batch.
+                failedKeys.addAll(F.asList(pageRes.errKeys));
+
+                if (pageRes.ex != null) {
+                    if (resEx == null)
+                        resEx = pageRes.ex;
+                    else
+                        resEx.setNextException(pageRes.ex);
                 }
-            }
 
-            if (resEx != null) {
-                if (!F.isEmpty(failedKeys)) {
-                    // Don't go for a re-run if processing of some keys yielded exceptions and report keys that
-                    // had been modified concurrently right away.
-                    String msg = "Failed to UPDATE some keys because they had been modified concurrently " +
-                        "[keys=" + failedKeys + ']';
+                if (it.hasNext())
+                    rows.clear(); // No need to clear after the last batch.
+            }
+        }
 
-                    SQLException dupEx = createJdbcSqlException(msg, IgniteQueryErrorCode.CONCURRENT_UPDATE);
+        if (resEx != null) {
+            if (!F.isEmpty(failedKeys)) {
+                // Don't go for a re-run if processing of some keys yielded exceptions and report keys that
+                // had been modified concurrently right away.
+                String msg = "Failed to UPDATE some keys because they had been modified concurrently " +
+                    "[keys=" + failedKeys + ']';
 
-                    dupEx.setNextException(resEx);
+                SQLException dupEx = createJdbcSqlException(msg, IgniteQueryErrorCode.CONCURRENT_UPDATE);
 
-                    resEx = dupEx;
-                }
+                dupEx.setNextException(resEx);
 
-                throw new IgniteSQLException(resEx);
+                resEx = dupEx;
             }
+
+            throw new IgniteSQLException(resEx);
         }
-        finally {
-            cctx.operationContextPerCall(opCtx);
-        }
+
 
         return new UpdateResult(res, failedKeys.toArray());
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/b0127d3c/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlanBuilder.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlanBuilder.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlanBuilder.java
index 15c94c3..549b901 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlanBuilder.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlanBuilder.java
@@ -99,7 +99,7 @@ public final class UpdatePlanBuilder {
 
         GridSqlColumn[] cols;
 
-        boolean isTableSubqry;
+        boolean isTwoStepSubqry;
 
         int rowsNum;
 
@@ -116,8 +116,8 @@ public final class UpdatePlanBuilder {
 
             cols = ins.columns();
             sel = DmlAstUtils.selectForInsertOrMerge(cols, ins.rows(), ins.query(), desc);
-            isTableSubqry = (ins.query() != null);
-            rowsNum = isTableSubqry ? 0 : ins.rows().size();
+            isTwoStepSubqry = (ins.query() != null);
+            rowsNum = isTwoStepSubqry ? 0 : ins.rows().size();
         }
         else if (stmt instanceof GridSqlMerge) {
             GridSqlMerge merge = (GridSqlMerge) stmt;
@@ -137,14 +137,14 @@ public final class UpdatePlanBuilder {
 
             cols = merge.columns();
             sel = DmlAstUtils.selectForInsertOrMerge(cols, merge.rows(), merge.query(), desc);
-            isTableSubqry = (merge.query() != null);
-            rowsNum = isTableSubqry ? 0 : merge.rows().size();
+            isTwoStepSubqry = (merge.query() != null);
+            rowsNum = isTwoStepSubqry ? 0 : merge.rows().size();
         }
         else throw new IgniteSQLException("Unexpected DML operation [cls=" + stmt.getClass().getName() + ']',
                 IgniteQueryErrorCode.UNEXPECTED_OPERATION);
 
         // Let's set the flag only for subqueries that have their FROM specified.
-        isTableSubqry = (isTableSubqry && (sel instanceof GridSqlUnion ||
+        isTwoStepSubqry = (isTwoStepSubqry && (sel instanceof GridSqlUnion ||
             (sel instanceof GridSqlSelect && ((GridSqlSelect) sel).from() != null)));
 
         int keyColIdx = -1;
@@ -189,10 +189,10 @@ public final class UpdatePlanBuilder {
 
         if (stmt instanceof GridSqlMerge)
             return UpdatePlan.forMerge(tbl.dataTable(), colNames, keySupplier, valSupplier, keyColIdx, valColIdx,
-                sel.getSQL(), !isTableSubqry, rowsNum);
+                sel.getSQL(), !isTwoStepSubqry, rowsNum);
         else
             return UpdatePlan.forInsert(tbl.dataTable(), colNames, keySupplier, valSupplier, keyColIdx, valColIdx,
-                sel.getSQL(), !isTableSubqry, rowsNum);
+                sel.getSQL(), !isTwoStepSubqry, rowsNum);
     }
 
     /**


[03/50] ignite git commit: IGNITE-4299: ODBC Minor example fix. This closes #1277.

Posted by sb...@apache.org.
IGNITE-4299: ODBC Minor example fix. This closes #1277.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: d5dc5815416cc13f7b2b8a323fa5a39ec95ecb95
Parents: 4a758d1
Author: isapego <ig...@gmail.com>
Authored: Thu Nov 24 15:53:35 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Thu Nov 24 15:53:35 2016 +0300

----------------------------------------------------------------------
 .../cpp/examples/putget-example/src/putget_example.cpp       | 2 +-
 .../cpp/examples/query-example/src/query_example.cpp         | 8 +-------
 2 files changed, 2 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/d5dc5815/modules/platforms/cpp/examples/putget-example/src/putget_example.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/examples/putget-example/src/putget_example.cpp b/modules/platforms/cpp/examples/putget-example/src/putget_example.cpp
index 0b57886..8bf9c8c 100644
--- a/modules/platforms/cpp/examples/putget-example/src/putget_example.cpp
+++ b/modules/platforms/cpp/examples/putget-example/src/putget_example.cpp
@@ -117,7 +117,7 @@ int main()
     }
 
     std::cout << std::endl;
-    std::cout << ">>> Example finished, press any key to exit ..." << std::endl;
+    std::cout << ">>> Example finished, press 'Enter' to exit ..." << std::endl;
     std::cout << std::endl;
 
     std::cin.get();

http://git-wip-us.apache.org/repos/asf/ignite/blob/d5dc5815/modules/platforms/cpp/examples/query-example/src/query_example.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/examples/query-example/src/query_example.cpp b/modules/platforms/cpp/examples/query-example/src/query_example.cpp
index 8b8d008..9524100 100644
--- a/modules/platforms/cpp/examples/query-example/src/query_example.cpp
+++ b/modules/platforms/cpp/examples/query-example/src/query_example.cpp
@@ -416,12 +416,6 @@ int main()
         // Populate cache.
         Initialize();
 
-        std::cout << std::endl;
-        std::cout << ">>> Ready" << std::endl;
-        std::cout << std::endl;
-
-        std::cin.get();
-
         // Example for SCAN-based query based on a predicate.
         DoScanQuery();
 
@@ -456,7 +450,7 @@ int main()
     }
 
     std::cout << std::endl;
-    std::cout << ">>> Example finished, press any key to exit ..." << std::endl;
+    std::cout << ">>> Example finished, press 'Enter' to exit ..." << std::endl;
     std::cout << std::endl;
 
     std::cin.get();


[46/50] ignite git commit: IGNITE-4271: Hadoop: shuffle messages now use "direct-marshallable" path this avoiding unnecessary copying as opposed to user messages which were used previously. This closes #1266. This closes #1313.

Posted by sb...@apache.org.
IGNITE-4271: Hadoop: shuffle messages now use "direct-marshallable" path this avoiding unnecessary copying as opposed to user messages which were used previously. This closes #1266. This closes #1313.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: bc33d19ed8702d648c90fe25caff639d3a8e0249
Parents: 530d8c8
Author: devozerov <vo...@gridgain.com>
Authored: Mon Dec 5 15:49:01 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Mon Dec 5 15:49:01 2016 +0300

----------------------------------------------------------------------
 .../org/apache/ignite/internal/GridTopic.java   |   3 +
 .../communication/GridIoMessageFactory.java     |  18 +
 .../internal/processors/hadoop/HadoopJobId.java |  79 +++-
 .../hadoop/message/HadoopMessage.java           |  27 ++
 .../hadoop/shuffle/HadoopShuffleAck.java        | 170 +++++++++
 .../hadoop/shuffle/HadoopShuffleMessage.java    | 361 +++++++++++++++++++
 .../hadoop/message/HadoopMessage.java           |  27 --
 .../hadoop/shuffle/HadoopShuffle.java           |  25 +-
 .../hadoop/shuffle/HadoopShuffleAck.java        |  92 -----
 .../hadoop/shuffle/HadoopShuffleJob.java        |   5 +-
 .../hadoop/shuffle/HadoopShuffleMessage.java    | 242 -------------
 .../child/HadoopChildProcessRunner.java         |   6 +-
 12 files changed, 682 insertions(+), 373 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/bc33d19e/modules/core/src/main/java/org/apache/ignite/internal/GridTopic.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridTopic.java b/modules/core/src/main/java/org/apache/ignite/internal/GridTopic.java
index 248f75b..b5608db 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/GridTopic.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/GridTopic.java
@@ -91,6 +91,9 @@ public enum GridTopic {
     TOPIC_HADOOP,
 
     /** */
+    TOPIC_HADOOP_MSG,
+
+    /** */
     TOPIC_QUERY,
 
     /** */

http://git-wip-us.apache.org/repos/asf/ignite/blob/bc33d19e/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java
index f36191c..dd68984 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java
@@ -117,6 +117,9 @@ import org.apache.ignite.internal.processors.continuous.GridContinuousMessage;
 import org.apache.ignite.internal.processors.datastreamer.DataStreamerEntry;
 import org.apache.ignite.internal.processors.datastreamer.DataStreamerRequest;
 import org.apache.ignite.internal.processors.datastreamer.DataStreamerResponse;
+import org.apache.ignite.internal.processors.hadoop.HadoopJobId;
+import org.apache.ignite.internal.processors.hadoop.shuffle.HadoopShuffleAck;
+import org.apache.ignite.internal.processors.hadoop.shuffle.HadoopShuffleMessage;
 import org.apache.ignite.internal.processors.igfs.IgfsAckMessage;
 import org.apache.ignite.internal.processors.igfs.IgfsBlockKey;
 import org.apache.ignite.internal.processors.igfs.IgfsBlocksMessage;
@@ -165,6 +168,21 @@ public class GridIoMessageFactory implements MessageFactory {
         Message msg = null;
 
         switch (type) {
+            case -30:
+                msg = new HadoopJobId();
+
+                break;
+
+            case -29:
+                msg = new HadoopShuffleAck();
+
+                break;
+
+            case -28:
+                msg = new HadoopShuffleMessage();
+
+                break;
+
             case -27:
                 msg = new GridDhtTxOnePhaseCommitAckRequest();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/bc33d19e/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopJobId.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopJobId.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopJobId.java
index 8c61fab..740ab89 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopJobId.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopJobId.java
@@ -21,14 +21,18 @@ import java.io.Externalizable;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import java.nio.ByteBuffer;
 import java.util.UUID;
 import org.apache.ignite.internal.processors.cache.GridCacheInternal;
 import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.plugin.extensions.communication.Message;
+import org.apache.ignite.plugin.extensions.communication.MessageReader;
+import org.apache.ignite.plugin.extensions.communication.MessageWriter;
 
 /**
  * Job ID.
  */
-public class HadoopJobId implements GridCacheInternal, Externalizable {
+public class HadoopJobId implements Message, GridCacheInternal, Externalizable {
     /** */
     private static final long serialVersionUID = 0L;
 
@@ -63,6 +67,79 @@ public class HadoopJobId implements GridCacheInternal, Externalizable {
     }
 
     /** {@inheritDoc} */
+    @Override public boolean writeTo(ByteBuffer buf, MessageWriter writer) {
+        writer.setBuffer(buf);
+
+        if (!writer.isHeaderWritten()) {
+            if (!writer.writeHeader(directType(), fieldsCount()))
+                return false;
+
+            writer.onHeaderWritten();
+        }
+
+        switch (writer.state()) {
+            case 0:
+                if (!writer.writeUuid("nodeId", nodeId))
+                    return false;
+
+                writer.incrementState();
+
+            case 1:
+                if (!writer.writeInt("localId", jobId))
+                    return false;
+
+                writer.incrementState();
+
+        }
+
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean readFrom(ByteBuffer buf, MessageReader reader) {
+        reader.setBuffer(buf);
+
+        if (!reader.beforeMessageRead())
+            return false;
+
+        switch (reader.state()) {
+            case 0:
+                nodeId = reader.readUuid("nodeId");
+
+                if (!reader.isLastRead())
+                    return false;
+
+                reader.incrementState();
+
+            case 1:
+                jobId = reader.readInt("jobId");
+
+                if (!reader.isLastRead())
+                    return false;
+
+                reader.incrementState();
+
+        }
+
+        return reader.afterMessageRead(HadoopJobId.class);
+    }
+
+    /** {@inheritDoc} */
+    @Override public byte directType() {
+        return -30;
+    }
+
+    /** {@inheritDoc} */
+    @Override public byte fieldsCount() {
+        return 2;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void onAckReceived() {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
     @Override public void writeExternal(ObjectOutput out) throws IOException {
         U.writeUuid(out, nodeId);
         out.writeInt(jobId);

http://git-wip-us.apache.org/repos/asf/ignite/blob/bc33d19e/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/message/HadoopMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/message/HadoopMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/message/HadoopMessage.java
new file mode 100644
index 0000000..0d7bd3a
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/message/HadoopMessage.java
@@ -0,0 +1,27 @@
+/*
+ * 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.hadoop.message;
+
+import java.io.Externalizable;
+
+/**
+ * Marker interface for all hadoop messages.
+ */
+public interface HadoopMessage extends Externalizable {
+    // No-op.
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/bc33d19e/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleAck.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleAck.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleAck.java
new file mode 100644
index 0000000..6dd2c2d
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleAck.java
@@ -0,0 +1,170 @@
+/*
+ * 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.hadoop.shuffle;
+
+import org.apache.ignite.internal.processors.hadoop.HadoopJobId;
+import org.apache.ignite.internal.processors.hadoop.message.HadoopMessage;
+import org.apache.ignite.internal.util.tostring.GridToStringInclude;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.plugin.extensions.communication.MessageReader;
+import org.apache.ignite.plugin.extensions.communication.MessageWriter;
+import org.apache.ignite.plugin.extensions.communication.Message;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.nio.ByteBuffer;
+
+/**
+ * Acknowledgement message.
+ */
+public class HadoopShuffleAck implements HadoopMessage, Message {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** */
+    @GridToStringInclude
+    private long msgId;
+
+    /** */
+    @GridToStringInclude
+    private HadoopJobId jobId;
+
+    /**
+     *
+     */
+    public HadoopShuffleAck() {
+        // No-op.
+    }
+
+    /**
+     * @param msgId Message ID.
+     */
+    public HadoopShuffleAck(long msgId, HadoopJobId jobId) {
+        assert jobId != null;
+
+        this.msgId = msgId;
+        this.jobId = jobId;
+    }
+
+    /**
+     * @return Message ID.
+     */
+    public long id() {
+        return msgId;
+    }
+
+    /**
+     * @return Job ID.
+     */
+    public HadoopJobId jobId() {
+        return jobId;
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean writeTo(ByteBuffer buf, MessageWriter writer) {
+        writer.setBuffer(buf);
+
+        if (!writer.isHeaderWritten()) {
+            if (!writer.writeHeader(directType(), fieldsCount()))
+                return false;
+
+            writer.onHeaderWritten();
+        }
+
+        switch (writer.state()) {
+            case 0:
+                if (!writer.writeLong("msgId", msgId))
+                    return false;
+
+                writer.incrementState();
+
+            case 1:
+                if (!writer.writeMessage("jobId", jobId))
+                    return false;
+
+                writer.incrementState();
+
+        }
+
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean readFrom(ByteBuffer buf, MessageReader reader) {
+        reader.setBuffer(buf);
+
+        if (!reader.beforeMessageRead())
+            return false;
+
+        switch (reader.state()) {
+            case 0:
+                msgId = reader.readLong("msgId");
+
+                if (!reader.isLastRead())
+                    return false;
+
+                reader.incrementState();
+
+            case 1:
+                jobId = reader.readMessage("jobId");
+
+                if (!reader.isLastRead())
+                    return false;
+
+                reader.incrementState();
+
+        }
+
+        return reader.afterMessageRead(HadoopShuffleAck.class);
+    }
+
+    /** {@inheritDoc} */
+    @Override public byte directType() {
+        return -29;
+    }
+
+    /** {@inheritDoc} */
+    @Override public byte fieldsCount() {
+        return 2;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void onAckReceived() {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
+    @Override public void writeExternal(ObjectOutput out) throws IOException {
+        jobId.writeExternal(out);
+        out.writeLong(msgId);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        jobId = new HadoopJobId();
+
+        jobId.readExternal(in);
+        msgId = in.readLong();
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(HadoopShuffleAck.class, this);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/bc33d19e/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleMessage.java
new file mode 100644
index 0000000..3732bc2
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleMessage.java
@@ -0,0 +1,361 @@
+/*
+ * 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.hadoop.shuffle;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.nio.ByteBuffer;
+import java.util.concurrent.atomic.AtomicLong;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.internal.processors.hadoop.HadoopJobId;
+import org.apache.ignite.internal.processors.hadoop.message.HadoopMessage;
+import org.apache.ignite.internal.util.GridUnsafe;
+import org.apache.ignite.internal.util.tostring.GridToStringInclude;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.plugin.extensions.communication.Message;
+import org.apache.ignite.plugin.extensions.communication.MessageReader;
+import org.apache.ignite.plugin.extensions.communication.MessageWriter;
+
+/**
+ * Shuffle message.
+ */
+public class HadoopShuffleMessage implements Message, HadoopMessage {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** */
+    private static final AtomicLong ids = new AtomicLong();
+
+    /** */
+    private static final byte MARKER_KEY = (byte)17;
+
+    /** */
+    private static final byte MARKER_VALUE = (byte)31;
+
+    /** */
+    @GridToStringInclude
+    private long msgId;
+
+    /** */
+    @GridToStringInclude
+    private HadoopJobId jobId;
+
+    /** */
+    @GridToStringInclude
+    private int reducer;
+
+    /** */
+    private byte[] buf;
+
+    /** */
+    @GridToStringInclude
+    private int off;
+
+    /**
+     *
+     */
+    public HadoopShuffleMessage() {
+        // No-op.
+    }
+
+    /**
+     * @param size Size.
+     */
+    public HadoopShuffleMessage(HadoopJobId jobId, int reducer, int size) {
+        assert jobId != null;
+
+        buf = new byte[size];
+
+        this.jobId = jobId;
+        this.reducer = reducer;
+
+        msgId = ids.incrementAndGet();
+    }
+
+    /**
+     * @return Message ID.
+     */
+    public long id() {
+        return msgId;
+    }
+
+    /**
+     * @return Job ID.
+     */
+    public HadoopJobId jobId() {
+        return jobId;
+    }
+
+    /**
+     * @return Reducer.
+     */
+    public int reducer() {
+        return reducer;
+    }
+
+    /**
+     * @return Buffer.
+     */
+    public byte[] buffer() {
+        return buf;
+    }
+
+    /**
+     * @return Offset.
+     */
+    public int offset() {
+        return off;
+    }
+
+    /**
+     * @param size Size.
+     * @param valOnly Only value wll be added.
+     * @return {@code true} If this message can fit additional data of this size
+     */
+    public boolean available(int size, boolean valOnly) {
+        size += valOnly ? 5 : 10;
+
+        if (off + size > buf.length) {
+            if (off == 0) { // Resize if requested size is too big.
+                buf = new byte[size];
+
+                return true;
+            }
+
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * @param keyPtr Key pointer.
+     * @param keySize Key size.
+     */
+    public void addKey(long keyPtr, int keySize) {
+        add(MARKER_KEY, keyPtr, keySize);
+    }
+
+    /**
+     * @param valPtr Value pointer.
+     * @param valSize Value size.
+     */
+    public void addValue(long valPtr, int valSize) {
+        add(MARKER_VALUE, valPtr, valSize);
+    }
+
+    /**
+     * @param marker Marker.
+     * @param ptr Pointer.
+     * @param size Size.
+     */
+    private void add(byte marker, long ptr, int size) {
+        buf[off++] = marker;
+
+        GridUnsafe.putInt(buf, GridUnsafe.BYTE_ARR_OFF + off, size);
+
+        off += 4;
+
+        GridUnsafe.copyOffheapHeap(ptr, buf, GridUnsafe.BYTE_ARR_OFF + off, size);
+
+        off += size;
+    }
+
+    /**
+     * @param v Visitor.
+     */
+    public void visit(Visitor v) throws IgniteCheckedException {
+        for (int i = 0; i < off;) {
+            byte marker = buf[i++];
+
+            int size = GridUnsafe.getInt(buf, GridUnsafe.BYTE_ARR_OFF + i);
+
+            i += 4;
+
+            if (marker == MARKER_VALUE)
+                v.onValue(buf, i, size);
+            else if (marker == MARKER_KEY)
+                v.onKey(buf, i, size);
+            else
+                throw new IllegalStateException();
+
+            i += size;
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean writeTo(ByteBuffer buf, MessageWriter writer) {
+        writer.setBuffer(buf);
+
+        if (!writer.isHeaderWritten()) {
+            if (!writer.writeHeader(directType(), fieldsCount()))
+                return false;
+
+            writer.onHeaderWritten();
+        }
+
+        switch (writer.state()) {
+            case 0:
+                if (!writer.writeLong("msgId", msgId))
+                    return false;
+
+                writer.incrementState();
+
+            case 1:
+                if (!writer.writeMessage("jobId", jobId))
+                    return false;
+
+                writer.incrementState();
+
+            case 2:
+                if (!writer.writeInt("reducer", reducer))
+                    return false;
+
+                writer.incrementState();
+
+            case 3:
+                if (!writer.writeByteArray("buf", this.buf))
+                    return false;
+
+                writer.incrementState();
+
+            case 4:
+                if (!writer.writeInt("off", off))
+                    return false;
+
+                writer.incrementState();
+
+        }
+
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean readFrom(ByteBuffer buf, MessageReader reader) {
+        reader.setBuffer(buf);
+
+        if (!reader.beforeMessageRead())
+            return false;
+
+        switch (reader.state()) {
+            case 0:
+                msgId = reader.readLong("msgId");
+
+                if (!reader.isLastRead())
+                    return false;
+
+                reader.incrementState();
+
+            case 1:
+                jobId = reader.readMessage("jobId");
+
+                if (!reader.isLastRead())
+                    return false;
+
+                reader.incrementState();
+
+            case 2:
+                reducer = reader.readInt("reducer");
+
+                if (!reader.isLastRead())
+                    return false;
+
+                reader.incrementState();
+
+            case 3:
+                this.buf = reader.readByteArray("buf");
+
+                if (!reader.isLastRead())
+                    return false;
+
+                reader.incrementState();
+
+            case 4:
+                off = reader.readInt("off");
+
+                if (!reader.isLastRead())
+                    return false;
+
+                reader.incrementState();
+
+        }
+
+        return reader.afterMessageRead(HadoopShuffleMessage.class);
+    }
+
+    /** {@inheritDoc} */
+    @Override public byte directType() {
+        return -28;
+    }
+
+    /** {@inheritDoc} */
+    @Override public byte fieldsCount() {
+        return 5;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void onAckReceived() {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
+    @Override public void writeExternal(ObjectOutput out) throws IOException {
+        jobId.writeExternal(out);
+        out.writeLong(msgId);
+        out.writeInt(reducer);
+        out.writeInt(off);
+        U.writeByteArray(out, buf);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        jobId = new HadoopJobId();
+
+        jobId.readExternal(in);
+        msgId = in.readLong();
+        reducer = in.readInt();
+        off = in.readInt();
+        buf = U.readByteArray(in);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(HadoopShuffleMessage.class, this);
+    }
+
+    /**
+     * Visitor.
+     */
+    public static interface Visitor {
+        /**
+         * @param buf Buffer.
+         * @param off Offset.
+         * @param len Length.
+         */
+        public void onKey(byte[] buf, int off, int len) throws IgniteCheckedException;
+
+        /**
+         * @param buf Buffer.
+         * @param off Offset.
+         * @param len Length.
+         */
+        public void onValue(byte[] buf, int off, int len) throws IgniteCheckedException;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/bc33d19e/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/message/HadoopMessage.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/message/HadoopMessage.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/message/HadoopMessage.java
deleted file mode 100644
index 0d7bd3a..0000000
--- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/message/HadoopMessage.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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.hadoop.message;
-
-import java.io.Externalizable;
-
-/**
- * Marker interface for all hadoop messages.
- */
-public interface HadoopMessage extends Externalizable {
-    // No-op.
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/bc33d19e/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffle.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffle.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffle.java
index 769bdc4..a69e779 100644
--- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffle.java
+++ b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffle.java
@@ -17,13 +17,12 @@
 
 package org.apache.ignite.internal.processors.hadoop.shuffle;
 
-import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.GridTopic;
 import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.managers.communication.GridIoPolicy;
+import org.apache.ignite.internal.managers.communication.GridMessageListener;
 import org.apache.ignite.internal.processors.hadoop.HadoopComponent;
 import org.apache.ignite.internal.processors.hadoop.HadoopContext;
 import org.apache.ignite.internal.processors.hadoop.HadoopJobId;
@@ -38,6 +37,11 @@ import org.apache.ignite.internal.util.offheap.unsafe.GridUnsafeMemory;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteBiPredicate;
+import org.apache.ignite.plugin.extensions.communication.Message;
+
+import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
 /**
  * Shuffle.
@@ -53,6 +57,12 @@ public class HadoopShuffle extends HadoopComponent {
     @Override public void start(HadoopContext ctx) throws IgniteCheckedException {
         super.start(ctx);
 
+        ctx.kernalContext().io().addMessageListener(GridTopic.TOPIC_HADOOP_MSG, new GridMessageListener() {
+            @Override public void onMessage(UUID nodeId, Object msg) {
+                onMessageReceived(nodeId, (HadoopMessage)msg);
+            }
+        });
+
         ctx.kernalContext().io().addUserMessageListener(GridTopic.TOPIC_HADOOP,
             new IgniteBiPredicate<UUID, Object>() {
                 @Override public boolean apply(UUID nodeId, Object msg) {
@@ -117,7 +127,10 @@ public class HadoopShuffle extends HadoopComponent {
     private void send0(UUID nodeId, Object msg) throws IgniteCheckedException {
         ClusterNode node = ctx.kernalContext().discovery().node(nodeId);
 
-        ctx.kernalContext().io().sendUserMessage(F.asList(node), msg, GridTopic.TOPIC_HADOOP, false, 0);
+        if (msg instanceof Message)
+            ctx.kernalContext().io().send(node, GridTopic.TOPIC_HADOOP_MSG, (Message)msg, GridIoPolicy.PUBLIC_POOL);
+        else
+            ctx.kernalContext().io().sendUserMessage(F.asList(node), msg, GridTopic.TOPIC_HADOOP, false, 0);
     }
 
     /**
@@ -151,8 +164,8 @@ public class HadoopShuffle extends HadoopComponent {
      */
     private void startSending(HadoopShuffleJob<UUID> shuffleJob) {
         shuffleJob.startSending(ctx.kernalContext().gridName(),
-            new IgniteInClosure2X<UUID, HadoopShuffleMessage>() {
-                @Override public void applyx(UUID dest, HadoopShuffleMessage msg) throws IgniteCheckedException {
+            new IgniteInClosure2X<UUID, HadoopMessage>() {
+                @Override public void applyx(UUID dest, HadoopMessage msg) throws IgniteCheckedException {
                     send0(dest, msg);
                 }
             }

http://git-wip-us.apache.org/repos/asf/ignite/blob/bc33d19e/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleAck.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleAck.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleAck.java
deleted file mode 100644
index 6013ec6..0000000
--- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleAck.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * 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.hadoop.shuffle;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import org.apache.ignite.internal.processors.hadoop.HadoopJobId;
-import org.apache.ignite.internal.processors.hadoop.message.HadoopMessage;
-import org.apache.ignite.internal.util.tostring.GridToStringInclude;
-import org.apache.ignite.internal.util.typedef.internal.S;
-
-/**
- * Acknowledgement message.
- */
-public class HadoopShuffleAck implements HadoopMessage {
-    /** */
-    private static final long serialVersionUID = 0L;
-
-    /** */
-    @GridToStringInclude
-    private long msgId;
-
-    /** */
-    @GridToStringInclude
-    private HadoopJobId jobId;
-
-    /**
-     *
-     */
-    public HadoopShuffleAck() {
-        // No-op.
-    }
-
-    /**
-     * @param msgId Message ID.
-     */
-    public HadoopShuffleAck(long msgId, HadoopJobId jobId) {
-        assert jobId != null;
-
-        this.msgId = msgId;
-        this.jobId = jobId;
-    }
-
-    /**
-     * @return Message ID.
-     */
-    public long id() {
-        return msgId;
-    }
-
-    /**
-     * @return Job ID.
-     */
-    public HadoopJobId jobId() {
-        return jobId;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writeExternal(ObjectOutput out) throws IOException {
-        jobId.writeExternal(out);
-        out.writeLong(msgId);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-        jobId = new HadoopJobId();
-
-        jobId.readExternal(in);
-        msgId = in.readLong();
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(HadoopShuffleAck.class, this);
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/bc33d19e/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
index 025c4da..9392b2c 100644
--- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
+++ b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
@@ -36,6 +36,7 @@ import org.apache.ignite.internal.processors.hadoop.HadoopTaskInput;
 import org.apache.ignite.internal.processors.hadoop.HadoopTaskOutput;
 import org.apache.ignite.internal.processors.hadoop.HadoopTaskType;
 import org.apache.ignite.internal.processors.hadoop.counter.HadoopPerformanceCounter;
+import org.apache.ignite.internal.processors.hadoop.message.HadoopMessage;
 import org.apache.ignite.internal.processors.hadoop.shuffle.collections.HadoopConcurrentHashMultimap;
 import org.apache.ignite.internal.processors.hadoop.shuffle.collections.HadoopMultimap;
 import org.apache.ignite.internal.processors.hadoop.shuffle.collections.HadoopSkipList;
@@ -92,7 +93,7 @@ public class HadoopShuffleJob<T> implements AutoCloseable {
     private final AtomicReferenceArray<HadoopMultimap> maps;
 
     /** */
-    private volatile IgniteInClosure2X<T, HadoopShuffleMessage> io;
+    private volatile IgniteInClosure2X<T, HadoopMessage> io;
 
     /** */
     protected ConcurrentMap<Long, IgniteBiTuple<HadoopShuffleMessage, GridFutureAdapter<?>>> sentMsgs =
@@ -176,7 +177,7 @@ public class HadoopShuffleJob<T> implements AutoCloseable {
      * @param io IO Closure for sending messages.
      */
     @SuppressWarnings("BusyWait")
-    public void startSending(String gridName, IgniteInClosure2X<T, HadoopShuffleMessage> io) {
+    public void startSending(String gridName, IgniteInClosure2X<T, HadoopMessage> io) {
         assert snd == null;
         assert io != null;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/bc33d19e/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleMessage.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleMessage.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleMessage.java
deleted file mode 100644
index 71a314b..0000000
--- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleMessage.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * 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.hadoop.shuffle;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.util.concurrent.atomic.AtomicLong;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.internal.processors.hadoop.HadoopJobId;
-import org.apache.ignite.internal.processors.hadoop.message.HadoopMessage;
-import org.apache.ignite.internal.util.GridUnsafe;
-import org.apache.ignite.internal.util.tostring.GridToStringInclude;
-import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.internal.util.typedef.internal.U;
-
-/**
- * Shuffle message.
- */
-public class HadoopShuffleMessage implements HadoopMessage {
-    /** */
-    private static final long serialVersionUID = 0L;
-
-    /** */
-    private static final AtomicLong ids = new AtomicLong();
-
-    /** */
-    private static final byte MARKER_KEY = (byte)17;
-
-    /** */
-    private static final byte MARKER_VALUE = (byte)31;
-
-    /** */
-    @GridToStringInclude
-    private long msgId;
-
-    /** */
-    @GridToStringInclude
-    private HadoopJobId jobId;
-
-    /** */
-    @GridToStringInclude
-    private int reducer;
-
-    /** */
-    private byte[] buf;
-
-    /** */
-    @GridToStringInclude
-    private int off;
-
-    /**
-     *
-     */
-    public HadoopShuffleMessage() {
-        // No-op.
-    }
-
-    /**
-     * @param size Size.
-     */
-    public HadoopShuffleMessage(HadoopJobId jobId, int reducer, int size) {
-        assert jobId != null;
-
-        buf = new byte[size];
-
-        this.jobId = jobId;
-        this.reducer = reducer;
-
-        msgId = ids.incrementAndGet();
-    }
-
-    /**
-     * @return Message ID.
-     */
-    public long id() {
-        return msgId;
-    }
-
-    /**
-     * @return Job ID.
-     */
-    public HadoopJobId jobId() {
-        return jobId;
-    }
-
-    /**
-     * @return Reducer.
-     */
-    public int reducer() {
-        return reducer;
-    }
-
-    /**
-     * @return Buffer.
-     */
-    public byte[] buffer() {
-        return buf;
-    }
-
-    /**
-     * @return Offset.
-     */
-    public int offset() {
-        return off;
-    }
-
-    /**
-     * @param size Size.
-     * @param valOnly Only value wll be added.
-     * @return {@code true} If this message can fit additional data of this size
-     */
-    public boolean available(int size, boolean valOnly) {
-        size += valOnly ? 5 : 10;
-
-        if (off + size > buf.length) {
-            if (off == 0) { // Resize if requested size is too big.
-                buf = new byte[size];
-
-                return true;
-            }
-
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * @param keyPtr Key pointer.
-     * @param keySize Key size.
-     */
-    public void addKey(long keyPtr, int keySize) {
-        add(MARKER_KEY, keyPtr, keySize);
-    }
-
-    /**
-     * @param valPtr Value pointer.
-     * @param valSize Value size.
-     */
-    public void addValue(long valPtr, int valSize) {
-        add(MARKER_VALUE, valPtr, valSize);
-    }
-
-    /**
-     * @param marker Marker.
-     * @param ptr Pointer.
-     * @param size Size.
-     */
-    private void add(byte marker, long ptr, int size) {
-        buf[off++] = marker;
-
-        GridUnsafe.putInt(buf, GridUnsafe.BYTE_ARR_OFF + off, size);
-
-        off += 4;
-
-        GridUnsafe.copyOffheapHeap(ptr, buf, GridUnsafe.BYTE_ARR_OFF + off, size);
-
-        off += size;
-    }
-
-    /**
-     * @param v Visitor.
-     */
-    public void visit(Visitor v) throws IgniteCheckedException {
-        for (int i = 0; i < off;) {
-            byte marker = buf[i++];
-
-            int size = GridUnsafe.getInt(buf, GridUnsafe.BYTE_ARR_OFF + i);
-
-            i += 4;
-
-            if (marker == MARKER_VALUE)
-                v.onValue(buf, i, size);
-            else if (marker == MARKER_KEY)
-                v.onKey(buf, i, size);
-            else
-                throw new IllegalStateException();
-
-            i += size;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writeExternal(ObjectOutput out) throws IOException {
-        jobId.writeExternal(out);
-        out.writeLong(msgId);
-        out.writeInt(reducer);
-        out.writeInt(off);
-        U.writeByteArray(out, buf);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-        jobId = new HadoopJobId();
-
-        jobId.readExternal(in);
-        msgId = in.readLong();
-        reducer = in.readInt();
-        off = in.readInt();
-        buf = U.readByteArray(in);
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(HadoopShuffleMessage.class, this);
-    }
-
-    /**
-     * Visitor.
-     */
-    public static interface Visitor {
-        /**
-         * @param buf Buffer.
-         * @param off Offset.
-         * @param len Length.
-         */
-        public void onKey(byte[] buf, int off, int len) throws IgniteCheckedException;
-
-        /**
-         * @param buf Buffer.
-         * @param off Offset.
-         * @param len Length.
-         */
-        public void onValue(byte[] buf, int off, int len) throws IgniteCheckedException;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/bc33d19e/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/taskexecutor/external/child/HadoopChildProcessRunner.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/taskexecutor/external/child/HadoopChildProcessRunner.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/taskexecutor/external/child/HadoopChildProcessRunner.java
index 45d9a27..7001b8c 100644
--- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/taskexecutor/external/child/HadoopChildProcessRunner.java
+++ b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/taskexecutor/external/child/HadoopChildProcessRunner.java
@@ -259,9 +259,9 @@ public class HadoopChildProcessRunner {
                 if (req.reducersAddresses() != null) {
                     if (shuffleJob.initializeReduceAddresses(req.reducersAddresses())) {
                         shuffleJob.startSending("external",
-                            new IgniteInClosure2X<HadoopProcessDescriptor, HadoopShuffleMessage>() {
-                                @Override public void applyx(HadoopProcessDescriptor dest,
-                                    HadoopShuffleMessage msg) throws IgniteCheckedException {
+                            new IgniteInClosure2X<HadoopProcessDescriptor, HadoopMessage>() {
+                                @Override public void applyx(HadoopProcessDescriptor dest, HadoopMessage msg)
+                                    throws IgniteCheckedException {
                                     comm.sendMessage(dest, msg);
                                 }
                             });


[41/50] ignite git commit: IGNITE-4276: Hadoop: added configurable throttle for shuffle message sending. Disabled by default.

Posted by sb...@apache.org.
IGNITE-4276: Hadoop: added configurable throttle for shuffle message sending. Disabled by default.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 27753f9d5a7fd3c81ee852eedf3ed27248028d4c
Parents: 31bc3bf
Author: devozerov <vo...@gridgain.com>
Authored: Mon Dec 5 14:57:25 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Mon Dec 5 14:57:25 2016 +0300

----------------------------------------------------------------------
 .../internal/processors/hadoop/HadoopJobProperty.java     | 10 +++++++++-
 .../processors/hadoop/shuffle/HadoopShuffleJob.java       |  9 ++++++++-
 2 files changed, 17 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/27753f9d/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopJobProperty.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopJobProperty.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopJobProperty.java
index dcfbcba..e7bf565 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopJobProperty.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopJobProperty.java
@@ -81,7 +81,15 @@ public enum HadoopJobProperty {
      * <p>
      * By default is {@code false}.
      */
-    SHUFFLE_REDUCER_NO_SORTING;
+    SHUFFLE_REDUCER_NO_SORTING,
+
+    /**
+     * Shuffle job throttle in milliseconds. When job is executed with separate shuffle thread, this parameter
+     * controls sleep duration between iterations through intermediate reducer maps.
+     * <p>
+     * Defaults to {@code 0}.
+     */
+    SHUFFLE_JOB_THROTTLE;
 
     /** */
     private final String ptyName;

http://git-wip-us.apache.org/repos/asf/ignite/blob/27753f9d/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
index b940c72..8c731c0 100644
--- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
+++ b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
@@ -55,6 +55,7 @@ import org.apache.ignite.lang.IgniteInClosure;
 import org.apache.ignite.thread.IgniteThread;
 
 import static org.apache.ignite.internal.processors.hadoop.HadoopJobProperty.PARTITION_HASHMAP_SIZE;
+import static org.apache.ignite.internal.processors.hadoop.HadoopJobProperty.SHUFFLE_JOB_THROTTLE;
 import static org.apache.ignite.internal.processors.hadoop.HadoopJobProperty.SHUFFLE_REDUCER_NO_SORTING;
 import static org.apache.ignite.internal.processors.hadoop.HadoopJobProperty.get;
 
@@ -108,6 +109,9 @@ public class HadoopShuffleJob<T> implements AutoCloseable {
     /** */
     private final IgniteLogger log;
 
+    /** */
+    private final long throttle;
+
     /**
      * @param locReduceAddr Local reducer address.
      * @param log Logger.
@@ -136,6 +140,8 @@ public class HadoopShuffleJob<T> implements AutoCloseable {
 
         maps = new AtomicReferenceArray<>(totalReducerCnt);
         msgs = new HadoopShuffleMessage[totalReducerCnt];
+
+        throttle = get(job.info(), SHUFFLE_JOB_THROTTLE, 0);
     }
 
     /**
@@ -175,7 +181,8 @@ public class HadoopShuffleJob<T> implements AutoCloseable {
                 @Override protected void body() throws InterruptedException {
                     try {
                         while (!isCancelled()) {
-                            Thread.sleep(5);
+                            if (throttle > 0)
+                                Thread.sleep(throttle);
 
                             collectUpdatesAndSend(false);
                         }


[14/50] ignite git commit: IGNITE-4279: Fixed JdbcResultSetSelfTest. This closes #1284.

Posted by sb...@apache.org.
IGNITE-4279: Fixed JdbcResultSetSelfTest. This closes #1284.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 7b8d530858b997aeedc2f0281bbb707d9d8b86ef
Parents: 5b2eacf
Author: Alexander Paschenko <al...@gmail.com>
Authored: Fri Nov 25 14:22:17 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Fri Nov 25 14:22:17 2016 +0300

----------------------------------------------------------------------
 .../internal/jdbc2/JdbcResultSetSelfTest.java   | 18 ++++++++
 .../ignite/internal/jdbc2/JdbcResultSet.java    | 47 +++++++++++++++++---
 .../ignite/internal/jdbc2/JdbcStatement.java    |  4 +-
 3 files changed, 62 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/7b8d5308/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcResultSetSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcResultSetSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcResultSetSelfTest.java
index 131ed74..1b5223e 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcResultSetSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcResultSetSelfTest.java
@@ -596,6 +596,24 @@ public class JdbcResultSetSelfTest extends GridCommonAbstractTest {
         stmt.setFetchSize(0);
     }
 
+    /**
+     * @throws Exception If failed.
+     */
+    public void testNewQueryTaskFetchSize() throws Exception {
+        stmt.setFetchSize(1);
+
+        boolean res = stmt.execute("select * from TestObject where id > 0");
+
+        assertTrue(res);
+
+        ResultSet rs = stmt.getResultSet();
+
+        assertTrue(rs.next());
+        assertTrue(rs.next());
+        assertTrue(rs.next());
+
+        stmt.setFetchSize(0);
+    }
 
     /**
      * @throws Exception If failed.

http://git-wip-us.apache.org/repos/asf/ignite/blob/7b8d5308/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSet.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSet.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSet.java
index c1a5f4c..b53521e 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSet.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSet.java
@@ -88,10 +88,11 @@ public class JdbcResultSet implements ResultSet {
     /** Fetch size. */
     private int fetchSize;
 
+    /** Which query task to use under the hood - {@link JdbcQueryTaskV2} if {@code true}, {@link JdbcQueryTask} otherwise. */
+    private final boolean useNewQryTask;
+
     /**
-     * Creates new result set with predefined fields.
-     * Result set created with this constructor will
-     * never execute remote tasks.
+     * Creates new result set.
      *
      * @param uuid Query UUID.
      * @param stmt Statement.
@@ -102,6 +103,39 @@ public class JdbcResultSet implements ResultSet {
      */
     JdbcResultSet(@Nullable UUID uuid, JdbcStatement stmt, List<String> tbls, List<String> cols,
         List<String> types, Collection<List<?>> fields, boolean finished) {
+        this(uuid, stmt, tbls, cols, types, fields, finished, false);
+    }
+
+    /**
+     * Creates new result set that will be based on {@link JdbcQueryTaskV2}. This method is intended for use inside
+     *     {@link JdbcStatement} only.
+     *
+     * @param uuid Query UUID.
+     * @param stmt Statement.
+     * @param tbls Table names.
+     * @param cols Column names.
+     * @param types Types.
+     * @param fields Fields.
+     */
+    static JdbcResultSet resultSetForQueryTaskV2(@Nullable UUID uuid, JdbcStatement stmt, List<String> tbls,
+            List<String> cols, List<String> types, Collection<List<?>> fields, boolean finished) {
+        return new JdbcResultSet(uuid, stmt, tbls, cols, types, fields, finished, true);
+    }
+
+    /**
+     * Creates new result set.
+     *
+     * @param uuid Query UUID.
+     * @param stmt Statement.
+     * @param tbls Table names.
+     * @param cols Column names.
+     * @param types Types.
+     * @param fields Fields.
+     * @param useNewQryTask Which query task to use under the hood - {@link JdbcQueryTaskV2} if {@code true},
+     *     {@link JdbcQueryTask} otherwise.
+     */
+    private JdbcResultSet(@Nullable UUID uuid, JdbcStatement stmt, List<String> tbls, List<String> cols,
+        List<String> types, Collection<List<?>> fields, boolean finished, boolean useNewQryTask) {
         assert stmt != null;
         assert tbls != null;
         assert cols != null;
@@ -116,6 +150,8 @@ public class JdbcResultSet implements ResultSet {
         this.finished = finished;
 
         this.it = fields.iterator();
+
+        this.useNewQryTask = useNewQryTask;
     }
 
     /** {@inheritDoc} */
@@ -147,7 +183,7 @@ public class JdbcResultSet implements ResultSet {
 
             boolean loc = nodeId == null;
 
-            if (conn.isDmlSupported()) {
+            if (useNewQryTask) {
                 // Connections from new clients send queries with new tasks, so we have to continue in the same manner
                 JdbcQueryTaskV2 qryTask = new JdbcQueryTaskV2(loc ? ignite : null, conn.cacheName(), null, true, loc, null,
                     fetchSize, uuid, conn.isLocalQuery(), conn.isCollocatedQuery(), conn.isDistributedJoins());
@@ -209,8 +245,9 @@ public class JdbcResultSet implements ResultSet {
      * If this result set is associated with locally executed query then query cursor will also closed.
      */
     void closeInternal() throws SQLException  {
-        if (((JdbcConnection)stmt.getConnection()).nodeId() == null && uuid != null)
+        if (((JdbcConnection)stmt.getConnection()).nodeId() == null && uuid != null) {
             JdbcQueryTask.remove(uuid);
+        }
 
         closed = true;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/7b8d5308/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcStatement.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcStatement.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcStatement.java
index dbb2390..5621058 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcStatement.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcStatement.java
@@ -346,8 +346,8 @@ public class JdbcStatement implements Statement {
                 loc ? qryTask.call() : ignite.compute(ignite.cluster().forNodeId(nodeId)).call(qryTask);
 
             if (res.isQuery()) {
-                JdbcResultSet rs = new JdbcResultSet(uuid, this, res.getTbls(), res.getCols(), res.getTypes(),
-                    res.getRows(), res.isFinished());
+                JdbcResultSet rs = JdbcResultSet.resultSetForQueryTaskV2(uuid, this, res.getTbls(), res.getCols(),
+                    res.getTypes(), res.getRows(), res.isFinished());
 
                 rs.setFetchSize(fetchSize);
 


[18/50] ignite git commit: ignite-4305 marshalling fix in GridNearAtomicSingleUpdateInvokeRequest

Posted by sb...@apache.org.
ignite-4305 marshalling fix in GridNearAtomicSingleUpdateInvokeRequest


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 30b442e871471ef08fbecf2dfb8423aaf8ff8f78
Parents: 2fccde7
Author: Konstantin Dudkov <kd...@ya.ru>
Authored: Fri Nov 25 16:30:16 2016 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Fri Nov 25 16:30:16 2016 +0300

----------------------------------------------------------------------
 .../dht/atomic/GridNearAtomicSingleUpdateInvokeRequest.java     | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/30b442e8/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateInvokeRequest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateInvokeRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateInvokeRequest.java
index 42b51d6..f18a13c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateInvokeRequest.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateInvokeRequest.java
@@ -202,8 +202,11 @@ public class GridNearAtomicSingleUpdateInvokeRequest extends GridNearAtomicSingl
         if (!addDepInfo && ctx.deploymentEnabled())
             addDepInfo = true;
 
-        if (entryProcessor != null && entryProcessorBytes == null)
+        if (entryProcessor != null && entryProcessorBytes == null) {
+            prepareObject(entryProcessor, cctx);
+
             entryProcessorBytes = CU.marshal(cctx, entryProcessor);
+        }
 
         if (invokeArgsBytes == null)
             invokeArgsBytes = marshalInvokeArguments(invokeArgs, cctx);


[40/50] ignite git commit: IGNITE-4347: Fixed NPE.

Posted by sb...@apache.org.
IGNITE-4347: Fixed NPE.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: b4aedfd5350b4a318f1608596a171789513835a4
Parents: cc13d9d
Author: Igor Sapego <is...@gridgain.com>
Authored: Fri Dec 2 20:10:09 2016 +0300
Committer: Igor Sapego <is...@gridgain.com>
Committed: Fri Dec 2 20:10:09 2016 +0300

----------------------------------------------------------------------
 .../internal/processors/odbc/OdbcRequestHandler.java      | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/b4aedfd5/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcRequestHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcRequestHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcRequestHandler.java
index eef9945..0a70a68 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcRequestHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcRequestHandler.java
@@ -184,11 +184,17 @@ public class OdbcRequestHandler {
             qry.setDistributedJoins(distributedJoins);
             qry.setEnforceJoinOrder(enforceJoinOrder);
 
-            IgniteCache<Object, Object> cache = ctx.grid().cache(req.cacheName());
+            IgniteCache<Object, Object> cache0 = ctx.grid().cache(req.cacheName());
+
+            if (cache0 == null)
+                return new OdbcResponse(OdbcResponse.STATUS_FAILED,
+                        "Cache doesn't exist (did you configure it?): " + req.cacheName());
+
+            IgniteCache<Object, Object> cache = cache0.withKeepBinary();
 
             if (cache == null)
                 return new OdbcResponse(OdbcResponse.STATUS_FAILED,
-                    "Cache doesn't exist (did you configure it?): " + req.cacheName());
+                    "Can not get cache with keep binary: " + req.cacheName());
 
             QueryCursor qryCur = cache.query(qry);
 


[09/50] ignite git commit: .NET: Remove unused code, sort example tests

Posted by sb...@apache.org.
.NET: Remove unused code, sort example tests


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 3f797b67384f6237a51d358727bc406c5610d0cf
Parents: b04460c
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Fri Nov 25 12:36:46 2016 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Fri Nov 25 12:36:46 2016 +0300

----------------------------------------------------------------------
 .../dotnet/Apache.Ignite.Core.Tests/Examples/Example.cs        | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/3f797b67/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/Example.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/Example.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/Example.cs
index 663711c..4df012c 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/Example.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/Example.cs
@@ -37,9 +37,6 @@ namespace Apache.Ignite.Core.Tests.Examples
         /** Config url */
         public string ConfigPath { get; private set; }
 
-        /** Source path */
-        public string SourceFilePath { get; private set; }
-
         /** Dll load flag */
         public bool NeedsTestDll { get; private set; }
 
@@ -75,7 +72,7 @@ namespace Apache.Ignite.Core.Tests.Examples
 
             Assert.IsTrue(sourceFiles.Any());
 
-            var types = examplesAsm.GetTypes().Where(x => x.GetMethod("Main") != null).ToArray();
+            var types = examplesAsm.GetTypes().Where(x => x.GetMethod("Main") != null).OrderBy(x => x.Name).ToArray();
 
             Assert.IsTrue(types.Any());
 
@@ -89,7 +86,6 @@ namespace Apache.Ignite.Core.Tests.Examples
 
                 yield return new Example
                 {
-                    SourceFilePath = sourceFile,
                     ConfigPath = GetConfigPath(sourceCode),
                     NeedsTestDll = sourceCode.Contains(examplesDllName),
                     _runAction = GetRunAction(type),


[21/50] ignite git commit: Merge remote-tracking branch 'origin/ignite-1.8' into ignite-1.8

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


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

Branch: refs/heads/ignite-comm-balance-master
Commit: ac6d910576f2b51298ab171a9ad87e71e0ade532
Parents: e7c0d45 4a4082a
Author: devozerov <vo...@gridgain.com>
Authored: Fri Nov 25 19:08:14 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Fri Nov 25 19:08:14 2016 +0300

----------------------------------------------------------------------
 .../dht/atomic/GridNearAtomicSingleUpdateInvokeRequest.java  | 5 ++++-
 .../dotnet/Apache.Ignite.AspNet/Apache.Ignite.AspNet.nuspec  | 4 ++--
 .../Datagrid/MultiTieredCacheExample.cs                      | 8 +++++---
 3 files changed, 11 insertions(+), 6 deletions(-)
----------------------------------------------------------------------



[02/50] ignite git commit: IGNITE-4288: ODBC: Fixed DML interoperability. This closes #1272.

Posted by sb...@apache.org.
IGNITE-4288: ODBC: Fixed DML interoperability. This closes #1272.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 4a758d1a6285f9441af7c894e2a31e0df895cb03
Parents: d2b915e
Author: isapego <ig...@gmail.com>
Authored: Thu Nov 24 15:49:08 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Thu Nov 24 15:49:08 2016 +0300

----------------------------------------------------------------------
 .../internal/processors/odbc/OdbcNioListener.java     |  2 +-
 .../internal/processors/odbc/OdbcRequestHandler.java  | 14 +++++++-------
 .../ignite/internal/processors/odbc/OdbcUtils.java    |  4 ++--
 .../cpp/odbc/include/ignite/odbc/common_types.h       |  1 +
 .../platforms/cpp/odbc/include/ignite/odbc/message.h  |  9 +--------
 .../cpp/odbc/include/ignite/odbc/statement.h          |  4 ++--
 modules/platforms/cpp/odbc/src/connection.cpp         |  4 +++-
 modules/platforms/cpp/odbc/src/statement.cpp          |  4 ++--
 modules/platforms/cpp/odbc/src/utility.cpp            |  6 ------
 9 files changed, 19 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/4a758d1a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcNioListener.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcNioListener.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcNioListener.java
index e7baaff..378e5f2 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcNioListener.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcNioListener.java
@@ -137,7 +137,7 @@ public class OdbcNioListener extends GridNioServerListenerAdapter<byte[]> {
         catch (Exception e) {
             log.error("Failed to process ODBC request [id=" + reqId + ", err=" + e + ']');
 
-            ses.send(parser.encode(new OdbcResponse(OdbcResponse.STATUS_FAILED, e.getMessage())));
+            ses.send(parser.encode(new OdbcResponse(OdbcResponse.STATUS_FAILED, e.toString())));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a758d1a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcRequestHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcRequestHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcRequestHandler.java
index 588fc66..32fb9db 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcRequestHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcRequestHandler.java
@@ -164,7 +164,7 @@ public class OdbcRequestHandler {
         catch (Exception e) {
             U.error(log, "Failed to perform handshake [reqId=" + reqId + ", req=" + req + ']', e);
 
-            return new OdbcResponse(OdbcResponse.STATUS_FAILED, e.getMessage());
+            return new OdbcResponse(OdbcResponse.STATUS_FAILED, e.toString());
         }
     }
 
@@ -220,7 +220,7 @@ public class OdbcRequestHandler {
 
             U.error(log, "Failed to execute SQL query [reqId=" + reqId + ", req=" + req + ']', e);
 
-            return new OdbcResponse(OdbcResponse.STATUS_FAILED, e.getMessage());
+            return new OdbcResponse(OdbcResponse.STATUS_FAILED, e.toString());
         }
     }
 
@@ -255,7 +255,7 @@ public class OdbcRequestHandler {
 
             U.error(log, "Failed to close SQL query [reqId=" + reqId + ", req=" + req.queryId() + ']', e);
 
-            return new OdbcResponse(OdbcResponse.STATUS_FAILED, e.getMessage());
+            return new OdbcResponse(OdbcResponse.STATUS_FAILED, e.toString());
         }
     }
 
@@ -295,7 +295,7 @@ public class OdbcRequestHandler {
         catch (Exception e) {
             U.error(log, "Failed to fetch SQL query result [reqId=" + reqId + ", req=" + req + ']', e);
 
-            return new OdbcResponse(OdbcResponse.STATUS_FAILED, e.getMessage());
+            return new OdbcResponse(OdbcResponse.STATUS_FAILED, e.toString());
         }
     }
 
@@ -352,7 +352,7 @@ public class OdbcRequestHandler {
         catch (Exception e) {
             U.error(log, "Failed to get columns metadata [reqId=" + reqId + ", req=" + req + ']', e);
 
-            return new OdbcResponse(OdbcResponse.STATUS_FAILED, e.getMessage());
+            return new OdbcResponse(OdbcResponse.STATUS_FAILED, e.toString());
         }
     }
 
@@ -397,7 +397,7 @@ public class OdbcRequestHandler {
         catch (Exception e) {
             U.error(log, "Failed to get tables metadata [reqId=" + reqId + ", req=" + req + ']', e);
 
-            return new OdbcResponse(OdbcResponse.STATUS_FAILED, e.getMessage());
+            return new OdbcResponse(OdbcResponse.STATUS_FAILED, e.toString());
         }
     }
 
@@ -429,7 +429,7 @@ public class OdbcRequestHandler {
         catch (Exception e) {
             U.error(log, "Failed to get params metadata [reqId=" + reqId + ", req=" + req + ']', e);
 
-            return new OdbcResponse(OdbcResponse.STATUS_FAILED, e.getMessage());
+            return new OdbcResponse(OdbcResponse.STATUS_FAILED, e.toString());
         }
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a758d1a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcUtils.java
index 300b079..3903562 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcUtils.java
@@ -28,7 +28,7 @@ public class OdbcUtils {
      * @return String surrounded with quotation marks.
      */
     public static String addQuotationMarksIfNeeded(String str) {
-        if (!str.startsWith("\"") && !str.isEmpty())
+        if (str != null && !str.isEmpty() && !(str.startsWith("\"") && str.endsWith("\"")))
             return "\"" + str + "\"";
 
         return str;
@@ -41,7 +41,7 @@ public class OdbcUtils {
      * @return String without leading and trailing quotation marks.
      */
     public static String removeQuotationMarksIfNeeded(String str) {
-        if (str.startsWith("\"") && str.endsWith("\""))
+        if (str != null && str.startsWith("\"") && str.endsWith("\""))
             return str.substring(1, str.length() - 1);
 
         return str;

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a758d1a/modules/platforms/cpp/odbc/include/ignite/odbc/common_types.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/common_types.h b/modules/platforms/cpp/odbc/include/ignite/odbc/common_types.h
index a61be53..517fe4e 100644
--- a/modules/platforms/cpp/odbc/include/ignite/odbc/common_types.h
+++ b/modules/platforms/cpp/odbc/include/ignite/odbc/common_types.h
@@ -30,6 +30,7 @@ namespace ignite
     namespace odbc
     {
         typedef SQLLEN SqlLen;
+        typedef SQLULEN SqlUlen;
 
         /**
          * SQL result.

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a758d1a/modules/platforms/cpp/odbc/include/ignite/odbc/message.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/message.h b/modules/platforms/cpp/odbc/include/ignite/odbc/message.h
index 5c6a933..a2bbd99 100644
--- a/modules/platforms/cpp/odbc/include/ignite/odbc/message.h
+++ b/modules/platforms/cpp/odbc/include/ignite/odbc/message.h
@@ -461,16 +461,9 @@ namespace ignite
                 status = reader.ReadInt8();
 
                 if (status == RESPONSE_STATUS_SUCCESS)
-                {
                     ReadOnSuccess(reader);
-                }
                 else
-                {
-                    int32_t errorLen = reader.ReadString(0, 0);
-                    error.resize(errorLen);
-
-                    reader.ReadString(&error[0], static_cast<int32_t>(error.size()));
-                }
+                    utility::ReadString(reader, error);;
             }
             
             /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a758d1a/modules/platforms/cpp/odbc/include/ignite/odbc/statement.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/statement.h b/modules/platforms/cpp/odbc/include/ignite/odbc/statement.h
index 8adcc60..db56660 100644
--- a/modules/platforms/cpp/odbc/include/ignite/odbc/statement.h
+++ b/modules/platforms/cpp/odbc/include/ignite/odbc/statement.h
@@ -357,7 +357,7 @@ namespace ignite
              * @param nullable - Nullability flag.
              */
             void DescribeParam(int16_t paramNum, int16_t* dataType,
-                size_t* paramSize, int16_t* decimalDigits, int16_t* nullable);
+                SqlUlen* paramSize, int16_t* decimalDigits, int16_t* nullable);
 
         private:
             IGNITE_NO_COPY_ASSIGNMENT(Statement);
@@ -583,7 +583,7 @@ namespace ignite
              * @return Operation result.
              */
             SqlResult InternalDescribeParam(int16_t paramNum, int16_t* dataType,
-                size_t* paramSize, int16_t* decimalDigits, int16_t* nullable);
+                SqlUlen* paramSize, int16_t* decimalDigits, int16_t* nullable);
 
             /**
              * Make request to data source to update parameters metadata.

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a758d1a/modules/platforms/cpp/odbc/src/connection.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/src/connection.cpp b/modules/platforms/cpp/odbc/src/connection.cpp
index e8db376..38f8cba 100644
--- a/modules/platforms/cpp/odbc/src/connection.cpp
+++ b/modules/platforms/cpp/odbc/src/connection.cpp
@@ -180,7 +180,9 @@ namespace ignite
             if (!connected)
                 IGNITE_ERROR_1(IgniteError::IGNITE_ERR_ILLEGAL_STATE, "Connection is not established");
 
-            common::FixedSizeArray<int8_t> msg(len + sizeof(OdbcProtocolHeader));
+            int32_t newLen = static_cast<int32_t>(len + sizeof(OdbcProtocolHeader));
+
+            common::FixedSizeArray<int8_t> msg(newLen);
 
             OdbcProtocolHeader *hdr = reinterpret_cast<OdbcProtocolHeader*>(msg.GetData());
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a758d1a/modules/platforms/cpp/odbc/src/statement.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/src/statement.cpp b/modules/platforms/cpp/odbc/src/statement.cpp
index a0b38d7..02c6dd9 100644
--- a/modules/platforms/cpp/odbc/src/statement.cpp
+++ b/modules/platforms/cpp/odbc/src/statement.cpp
@@ -821,14 +821,14 @@ namespace ignite
         }
 
         void Statement::DescribeParam(int16_t paramNum, int16_t* dataType,
-            size_t* paramSize, int16_t* decimalDigits, int16_t* nullable)
+            SqlUlen* paramSize, int16_t* decimalDigits, int16_t* nullable)
         {
             IGNITE_ODBC_API_CALL(InternalDescribeParam(paramNum,
                 dataType, paramSize, decimalDigits, nullable));
         }
 
         SqlResult Statement::InternalDescribeParam(int16_t paramNum, int16_t* dataType,
-            size_t* paramSize, int16_t* decimalDigits, int16_t* nullable)
+            SqlUlen* paramSize, int16_t* decimalDigits, int16_t* nullable)
         {
             query::Query *qry = currentQuery.get();
             if (!qry)

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a758d1a/modules/platforms/cpp/odbc/src/utility.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc/src/utility.cpp b/modules/platforms/cpp/odbc/src/utility.cpp
index 9763144..22191eb 100644
--- a/modules/platforms/cpp/odbc/src/utility.cpp
+++ b/modules/platforms/cpp/odbc/src/utility.cpp
@@ -63,13 +63,7 @@ namespace ignite
                 reader.ReadString(&str[0], static_cast<int32_t>(str.size()));
             }
             else
-            {
                 str.clear();
-
-                char dummy;
-
-                reader.ReadString(&dummy, sizeof(dummy));
-            }
         }
 
         void WriteString(ignite::impl::binary::BinaryWriterImpl& writer, const std::string & str)


[35/50] ignite git commit: IGNITE-4347: ODBC: Fixed NPE in OdbcRequestHandler appearing when cache doesn't exist. This closes #1305.

Posted by sb...@apache.org.
IGNITE-4347: ODBC: Fixed NPE in OdbcRequestHandler appearing when cache doesn't exist. This closes #1305.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: af24a9e2c3b61dff7c9116f1a3bea8c398b7ce78
Parents: 4ba8fcd
Author: isapego <ig...@gmail.com>
Authored: Fri Dec 2 12:35:13 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Fri Dec 2 12:35:13 2016 +0300

----------------------------------------------------------------------
 .../ignite/internal/processors/odbc/OdbcRequestHandler.java | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/af24a9e2/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcRequestHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcRequestHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcRequestHandler.java
index 32fb9db..ea3ae8b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcRequestHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcRequestHandler.java
@@ -18,7 +18,6 @@
 package org.apache.ignite.internal.processors.odbc;
 
 import org.apache.ignite.IgniteCache;
-import org.apache.ignite.IgniteException;
 import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.cache.query.QueryCursor;
 import org.apache.ignite.cache.query.SqlFieldsQuery;
@@ -199,13 +198,13 @@ public class OdbcRequestHandler {
             qry.setDistributedJoins(distributedJoins);
             qry.setEnforceJoinOrder(enforceJoinOrder);
 
-            IgniteCache<Object, Object> cache = ctx.grid().cache(req.cacheName()).withKeepBinary();
+            IgniteCache<Object, Object> cache = ctx.grid().cache(req.cacheName());
 
             if (cache == null)
-                return new OdbcResponse(OdbcResponse.STATUS_FAILED,
-                    "Cache doesn't exist (did you configure it?): " + req.cacheName());
+                return new OdbcResponse(OdbcResponse.STATUS_FAILED, "Cache doesn't exist (did you configure it?): " +
+                    req.cacheName());
 
-            QueryCursor qryCur = cache.query(qry);
+            QueryCursor qryCur = cache.withKeepBinary().query(qry);
 
             qryCursors.put(qryId, new IgniteBiTuple<QueryCursor, Iterator>(qryCur, null));
 


[47/50] ignite git commit: IGNITE-4355: Hadoop: Implemented parallel task context initialization during shuffle. This closes #1310. This closes #1313.

Posted by sb...@apache.org.
IGNITE-4355: Hadoop: Implemented parallel task context initialization during shuffle. This closes #1310. This closes #1313.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: acbb8aea8ddfab89947526241a6f47853efc5096
Parents: bc33d19
Author: devozerov <vo...@gridgain.com>
Authored: Mon Dec 5 16:28:05 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Mon Dec 5 16:28:05 2016 +0300

----------------------------------------------------------------------
 .../hadoop/shuffle/HadoopShuffle.java           | 23 ++++++---
 .../hadoop/shuffle/HadoopShuffleJob.java        | 53 ++++++++++++++++++--
 2 files changed, 66 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/acbb8aea/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffle.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffle.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffle.java
index a69e779..4450bf2 100644
--- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffle.java
+++ b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffle.java
@@ -53,6 +53,9 @@ public class HadoopShuffle extends HadoopComponent {
     /** */
     protected final GridUnsafeMemory mem = new GridUnsafeMemory(0);
 
+    /** Mutex for iternal synchronization. */
+    private final Object mux = new Object();
+
     /** {@inheritDoc} */
     @Override public void start(HadoopContext ctx) throws IgniteCheckedException {
         super.start(ctx);
@@ -141,17 +144,23 @@ public class HadoopShuffle extends HadoopComponent {
         HadoopShuffleJob<UUID> res = jobs.get(jobId);
 
         if (res == null) {
-            res = newJob(jobId);
+            synchronized (mux) {
+                res = jobs.get(jobId);
+
+                if (res == null) {
+                    res = newJob(jobId);
 
-            HadoopShuffleJob<UUID> old = jobs.putIfAbsent(jobId, res);
+                    HadoopShuffleJob<UUID> old = jobs.putIfAbsent(jobId, res);
 
-            if (old != null) {
-                res.close();
+                    if (old != null) {
+                        res.close();
 
-                res = old;
+                        res = old;
+                    }
+                    else if (res.reducersInitialized())
+                        startSending(res);
+                }
             }
-            else if (res.reducersInitialized())
-                startSending(res);
         }
 
         return res;

http://git-wip-us.apache.org/repos/asf/ignite/blob/acbb8aea/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
index 9392b2c..aca5fdf 100644
--- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
+++ b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/HadoopShuffleJob.java
@@ -78,7 +78,7 @@ public class HadoopShuffleJob<T> implements AutoCloseable {
     private final boolean needPartitioner;
 
     /** Collection of task contexts for each reduce task. */
-    private final Map<Integer, HadoopTaskContext> reducersCtx = new HashMap<>();
+    private final Map<Integer, LocalTaskContextProxy> reducersCtx = new HashMap<>();
 
     /** Reducers addresses. */
     private T[] reduceAddrs;
@@ -139,7 +139,7 @@ public class HadoopShuffleJob<T> implements AutoCloseable {
             for (int rdc : locReducers) {
                 HadoopTaskInfo taskInfo = new HadoopTaskInfo(HadoopTaskType.REDUCE, job.id(), rdc, 0, null);
 
-                reducersCtx.put(rdc, job.getTaskContext(taskInfo));
+                reducersCtx.put(rdc, new LocalTaskContextProxy(taskInfo));
             }
         }
 
@@ -237,7 +237,7 @@ public class HadoopShuffleJob<T> implements AutoCloseable {
         assert msg.buffer() != null;
         assert msg.offset() > 0;
 
-        HadoopTaskContext taskCtx = reducersCtx.get(msg.reducer());
+        HadoopTaskContext taskCtx = reducersCtx.get(msg.reducer()).get();
 
         HadoopPerformanceCounter perfCntr = HadoopPerformanceCounter.getCounter(taskCtx.counters(), null);
 
@@ -623,4 +623,51 @@ public class HadoopShuffleJob<T> implements AutoCloseable {
             }
         }
     }
+
+    /**
+     * Local task context proxy with delayed initialization.
+     */
+    private class LocalTaskContextProxy {
+        /** Mutex for synchronization. */
+        private final Object mux = new Object();
+
+        /** Task info. */
+        private final HadoopTaskInfo taskInfo;
+
+        /** Task context. */
+        private volatile HadoopTaskContext ctx;
+
+        /**
+         * Constructor.
+         *
+         * @param taskInfo Task info.
+         */
+        public LocalTaskContextProxy(HadoopTaskInfo taskInfo) {
+            this.taskInfo = taskInfo;
+        }
+
+        /**
+         * Get task context.
+         *
+         * @return Task context.
+         * @throws IgniteCheckedException If failed.
+         */
+        public HadoopTaskContext get() throws IgniteCheckedException {
+            HadoopTaskContext ctx0 = ctx;
+
+            if (ctx0 == null) {
+                synchronized (mux) {
+                    ctx0 = ctx;
+
+                    if (ctx0 == null) {
+                        ctx0 = job.getTaskContext(taskInfo);
+
+                        ctx = ctx0;
+                    }
+                }
+            }
+
+            return ctx0;
+        }
+    }
 }
\ No newline at end of file


[23/50] ignite git commit: IGNITE-4244: INCR/DECR to operate on AtomicLong.

Posted by sb...@apache.org.
IGNITE-4244: INCR/DECR to operate on AtomicLong.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: d1cc292583b9358ffb7efab5f15ab84bcfb67e9e
Parents: 2ca709f
Author: shtykh_roman <rs...@yahoo.com>
Authored: Mon Nov 28 16:55:47 2016 +0900
Committer: shtykh_roman <rs...@yahoo.com>
Committed: Mon Nov 28 16:55:47 2016 +0900

----------------------------------------------------------------------
 .../tcp/redis/RedisProtocolSelfTest.java        | 101 ++++++++++++++++---
 .../string/GridRedisGetCommandHandler.java      |  27 ++++-
 .../string/GridRedisIncrDecrCommandHandler.java |  63 ++++++++++--
 .../string/GridRedisSetCommandHandler.java      |  24 ++++-
 .../tcp/redis/GridRedisNioListener.java         |   4 +-
 5 files changed, 193 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/d1cc2925/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/protocols/tcp/redis/RedisProtocolSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/protocols/tcp/redis/RedisProtocolSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/protocols/tcp/redis/RedisProtocolSelfTest.java
index c059205..a0066aa 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/protocols/tcp/redis/RedisProtocolSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/protocols/tcp/redis/RedisProtocolSelfTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.internal.processors.rest.protocols.tcp.redis;
 
-import java.math.BigInteger;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -264,15 +263,20 @@ public class RedisProtocolSelfTest extends GridCommonAbstractTest {
             Assert.assertEquals(1, (long)jedis.incr("newKeyIncr"));
             Assert.assertEquals(-1, (long)jedis.decr("newKeyDecr"));
 
-            jcache().put("incrKey1", 1L);
+            Assert.assertEquals("1", jedis.get("newKeyIncr"));
+            Assert.assertEquals("-1", jedis.get("newKeyDecr"));
 
-            Assert.assertEquals(2L, (long)jedis.incr("incrKey1"));
+            Assert.assertEquals(1, (long)jedis.incr("incrKey1"));
 
-            jcache().put("decrKey1", 1L);
+            jedis.set("incrKey1", "10");
 
-            Assert.assertEquals(0L, (long)jedis.decr("decrKey1"));
+            Assert.assertEquals(11L, (long)jedis.incr("incrKey1"));
 
-            jcache().put("nonInt", "abc");
+            jedis.set("decrKey1", "10");
+
+            Assert.assertEquals(9L, (long)jedis.decr("decrKey1"));
+
+            jedis.set("nonInt", "abc");
 
             try {
                 jedis.incr("nonInt");
@@ -282,6 +286,7 @@ public class RedisProtocolSelfTest extends GridCommonAbstractTest {
             catch (JedisDataException e) {
                 assertTrue(e.getMessage().startsWith("ERR"));
             }
+
             try {
                 jedis.decr("nonInt");
 
@@ -291,9 +296,39 @@ public class RedisProtocolSelfTest extends GridCommonAbstractTest {
                 assertTrue(e.getMessage().startsWith("ERR"));
             }
 
-            jcache().put("outOfRange", new BigInteger("234293482390480948029348230948"));
+            jedis.set("outOfRangeIncr1", "9223372036854775808");
             try {
-                jedis.incr("outOfRange");
+                jedis.incr("outOfRangeIncr1");
+
+                assert false : "Exception has to be thrown!";
+            }
+            catch (JedisDataException e) {
+                assertTrue(e.getMessage().startsWith("ERR"));
+            }
+
+            jedis.set("outOfRangeDecr1", "-9223372036854775809");
+            try {
+                jedis.decr("outOfRangeDecr1");
+
+                assert false : "Exception has to be thrown!";
+            }
+            catch (JedisDataException e) {
+                assertTrue(e.getMessage().startsWith("ERR"));
+            }
+
+            jedis.set("outOfRangeInc2", String.valueOf(Long.MAX_VALUE));
+            try {
+                jedis.incr("outOfRangeInc2");
+
+                assert false : "Exception has to be thrown!";
+            }
+            catch (JedisDataException e) {
+                assertTrue(e.getMessage().startsWith("ERR"));
+            }
+
+            jedis.set("outOfRangeDecr2", String.valueOf(Long.MIN_VALUE));
+            try {
+                jedis.decr("outOfRangeDecr2");
 
                 assert false : "Exception has to be thrown!";
             }
@@ -308,16 +343,54 @@ public class RedisProtocolSelfTest extends GridCommonAbstractTest {
      */
     public void testIncrDecrBy() throws Exception {
         try (Jedis jedis = pool.getResource()) {
-            Assert.assertEquals(2, (long)jedis.incrBy("newKeyIncr1", 2));
-            Assert.assertEquals(-2, (long)jedis.decrBy("newKeyDecr1", 2));
+            Assert.assertEquals(2, (long)jedis.incrBy("newKeyIncrBy", 2));
+            Assert.assertEquals(-2, (long)jedis.decrBy("newKeyDecrBy", 2));
+
+            jedis.set("incrDecrKeyBy", "1");
+
+            Assert.assertEquals(11L, (long)jedis.incrBy("incrDecrKeyBy", 10));
 
-            jcache().put("incrKey2", 1L);
+            Assert.assertEquals(9L, (long)jedis.decrBy("incrDecrKeyBy", 2));
 
-            Assert.assertEquals(3L, (long)jedis.incrBy("incrKey2", 2));
+            jedis.set("outOfRangeIncrBy", "1");
+            try {
+                jedis.incrBy("outOfRangeIncrBy", Long.MAX_VALUE);
+
+                assert false : "Exception has to be thrown!";
+            }
+            catch (JedisDataException e) {
+                assertTrue(e.getMessage().startsWith("ERR"));
+            }
 
-            jcache().put("decrKey2", 2L);
+            jedis.set("outOfRangeDecrBy", "-1");
+            try {
+                jedis.decrBy("outOfRangeDecrBy", Long.MIN_VALUE);
 
-            Assert.assertEquals(0L, (long)jedis.decrBy("decrKey2", 2));
+                assert false : "Exception has to be thrown!";
+            }
+            catch (JedisDataException e) {
+                assertTrue(e.getMessage().startsWith("ERR"));
+            }
+
+            jedis.set("outOfRangeIncBy2", String.valueOf(Long.MAX_VALUE));
+            try {
+                jedis.incrBy("outOfRangeIncBy2", Long.MAX_VALUE);
+
+                assert false : "Exception has to be thrown!";
+            }
+            catch (JedisDataException e) {
+                assertTrue(e.getMessage().startsWith("ERR"));
+            }
+
+            jedis.set("outOfRangeDecrBy2", String.valueOf(Long.MIN_VALUE));
+            try {
+                jedis.decrBy("outOfRangeDecrBy2", Long.MIN_VALUE);
+
+                assert false : "Exception has to be thrown!";
+            }
+            catch (JedisDataException e) {
+                assertTrue(e.getMessage().startsWith("ERR"));
+            }
         }
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/d1cc2925/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetCommandHandler.java
index a275522..aac4170 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetCommandHandler.java
@@ -20,8 +20,10 @@ package org.apache.ignite.internal.processors.rest.handlers.redis.string;
 import java.nio.ByteBuffer;
 import java.util.Collection;
 import java.util.List;
+import org.apache.ignite.IgniteAtomicLong;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteLogger;
+import org.apache.ignite.internal.GridKernalContext;
 import org.apache.ignite.internal.processors.rest.GridRestProtocolHandler;
 import org.apache.ignite.internal.processors.rest.GridRestResponse;
 import org.apache.ignite.internal.processors.rest.handlers.redis.GridRedisRestCommandHandler;
@@ -44,14 +46,21 @@ public class GridRedisGetCommandHandler extends GridRedisRestCommandHandler {
         GET
     );
 
+    /** Grid context. */
+    private final GridKernalContext ctx;
+
     /**
      * Constructor.
      *
      * @param log Logger.
      * @param hnd Handler.
+     * @param ctx Context.
      */
-    public GridRedisGetCommandHandler(IgniteLogger log, GridRestProtocolHandler hnd) {
+    public GridRedisGetCommandHandler(final IgniteLogger log, final GridRestProtocolHandler hnd,
+        GridKernalContext ctx) {
         super(log, hnd);
+
+        this.ctx = ctx;
     }
 
     /** {@inheritDoc} */
@@ -75,8 +84,20 @@ public class GridRedisGetCommandHandler extends GridRedisRestCommandHandler {
 
     /** {@inheritDoc} */
     @Override public ByteBuffer makeResponse(final GridRestResponse restRes, List<String> params) {
-        if (restRes.getResponse() == null)
-            return GridRedisProtocolParser.nil();
+        if (restRes.getResponse() == null) {
+            // check if an atomic long with the key exists (related to incr/decr).
+            IgniteAtomicLong l = ctx.grid().atomicLong(params.get(0), 0, false);
+
+            long val;
+            try {
+                val = l.get();
+            }
+            catch (Exception ignored) {
+                return GridRedisProtocolParser.nil();
+            }
+
+            return GridRedisProtocolParser.toBulkString(val);
+        }
 
         if (restRes.getResponse() instanceof String)
             return GridRedisProtocolParser.toBulkString(restRes.getResponse());

http://git-wip-us.apache.org/repos/asf/ignite/blob/d1cc2925/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisIncrDecrCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisIncrDecrCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisIncrDecrCommandHandler.java
index 4052ad5..2036d76 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisIncrDecrCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisIncrDecrCommandHandler.java
@@ -26,6 +26,7 @@ import org.apache.ignite.internal.processors.rest.GridRestProtocolHandler;
 import org.apache.ignite.internal.processors.rest.GridRestResponse;
 import org.apache.ignite.internal.processors.rest.handlers.redis.GridRedisRestCommandHandler;
 import org.apache.ignite.internal.processors.rest.handlers.redis.exception.GridRedisGenericException;
+import org.apache.ignite.internal.processors.rest.handlers.redis.exception.GridRedisTypeException;
 import org.apache.ignite.internal.processors.rest.protocols.tcp.redis.GridRedisCommand;
 import org.apache.ignite.internal.processors.rest.protocols.tcp.redis.GridRedisMessage;
 import org.apache.ignite.internal.processors.rest.protocols.tcp.redis.GridRedisProtocolParser;
@@ -37,6 +38,7 @@ import org.apache.ignite.internal.util.typedef.internal.U;
 import static org.apache.ignite.internal.processors.rest.GridRestCommand.ATOMIC_DECREMENT;
 import static org.apache.ignite.internal.processors.rest.GridRestCommand.ATOMIC_INCREMENT;
 import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_GET;
+import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_REMOVE;
 import static org.apache.ignite.internal.processors.rest.protocols.tcp.redis.GridRedisCommand.DECR;
 import static org.apache.ignite.internal.processors.rest.protocols.tcp.redis.GridRedisCommand.DECRBY;
 import static org.apache.ignite.internal.processors.rest.protocols.tcp.redis.GridRedisCommand.INCR;
@@ -89,10 +91,38 @@ public class GridRedisIncrDecrCommandHandler extends GridRedisRestCommandHandler
         if (getResp.getResponse() == null)
             restReq.initial(0L);
         else {
-            if (getResp.getResponse() instanceof Long && (Long)getResp.getResponse() <= Long.MAX_VALUE)
-                restReq.initial((Long)getResp.getResponse());
+            if (getResp.getResponse() instanceof String) {
+                Long init;
+
+                try {
+                    init = Long.parseLong((String)getResp.getResponse());
+
+                    restReq.initial(init);
+                }
+                catch (Exception e) {
+                    U.error(log, "An initial value must be numeric and in range", e);
+
+                    throw new GridRedisGenericException("An initial value must be numeric and in range");
+                }
+
+                if ((init == Long.MAX_VALUE && (msg.command() == INCR || msg.command() == INCRBY))
+                    || (init == Long.MIN_VALUE && (msg.command() == DECR || msg.command() == DECRBY)))
+                    throw new GridRedisGenericException("Increment or decrement would overflow");
+            }
             else
-                throw new GridRedisGenericException("An initial value must be numeric and in range");
+                throw new GridRedisTypeException("Operation against a key holding the wrong kind of value");
+
+            // remove from cache.
+            GridRestCacheRequest rmReq = new GridRestCacheRequest();
+
+            rmReq.clientId(msg.clientId());
+            rmReq.key(msg.key());
+            rmReq.command(CACHE_REMOVE);
+
+            Object rmResp = hnd.handle(rmReq).getResponse();
+
+            if (rmResp == null || !(boolean)rmResp)
+                throw new GridRedisGenericException("Cannot incr/decr on the non-atomiclong key");
         }
 
         restReq.clientId(msg.clientId());
@@ -101,10 +131,16 @@ public class GridRedisIncrDecrCommandHandler extends GridRedisRestCommandHandler
 
         if (msg.messageSize() > 2) {
             try {
-                restReq.delta(Long.valueOf(msg.aux(DELTA_POS)));
+                Long delta = Long.valueOf(msg.aux(DELTA_POS));
+
+                // check if it can be safely added.
+                safeAdd(restReq.initial(), delta);
+
+                restReq.delta(delta);
             }
-            catch (NumberFormatException e) {
-                U.error(log, "Wrong increment delta", e);
+            catch (NumberFormatException | ArithmeticException e) {
+                U.error(log, "An increment value must be numeric and in range", e);
+
                 throw new GridRedisGenericException("An increment value must be numeric and in range");
             }
         }
@@ -139,4 +175,19 @@ public class GridRedisIncrDecrCommandHandler extends GridRedisRestCommandHandler
         else
             return GridRedisProtocolParser.toTypeError("Value is non-numeric or out of range");
     }
+
+    /**
+     * Safely add long values.
+     *
+     * @param left A long value.
+     * @param right A long value.
+     * @return An addition result or an exception is thrown when overflow occurs.
+     */
+    private static long safeAdd(long left, long right) {
+        if (right > 0 ? left > Long.MAX_VALUE - right
+            : left < Long.MIN_VALUE - right) {
+            throw new ArithmeticException("Long overflow");
+        }
+        return left + right;
+    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/d1cc2925/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java
index 956d4cb..2eea0e1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java
@@ -20,8 +20,11 @@ package org.apache.ignite.internal.processors.rest.handlers.redis.string;
 import java.nio.ByteBuffer;
 import java.util.Collection;
 import java.util.List;
+import org.apache.ignite.IgniteAtomicLong;
 import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteException;
 import org.apache.ignite.IgniteLogger;
+import org.apache.ignite.internal.GridKernalContext;
 import org.apache.ignite.internal.processors.rest.GridRestProtocolHandler;
 import org.apache.ignite.internal.processors.rest.GridRestResponse;
 import org.apache.ignite.internal.processors.rest.handlers.redis.GridRedisRestCommandHandler;
@@ -52,14 +55,21 @@ public class GridRedisSetCommandHandler extends GridRedisRestCommandHandler {
     /** Value position in Redis message. */
     private static final int VAL_POS = 2;
 
+    /** Grid context. */
+    private final GridKernalContext ctx;
+
     /**
      * Constructor.
      *
      * @param log Logger.
      * @param hnd Handler.
+     * @param ctx Context.
      */
-    public GridRedisSetCommandHandler(IgniteLogger log, GridRestProtocolHandler hnd) {
+    public GridRedisSetCommandHandler(final IgniteLogger log, final GridRestProtocolHandler hnd,
+        GridKernalContext ctx) {
         super(log, hnd);
+
+        this.ctx = ctx;
     }
 
     /** {@inheritDoc} */
@@ -71,6 +81,18 @@ public class GridRedisSetCommandHandler extends GridRedisRestCommandHandler {
     @Override public GridRestRequest asRestRequest(GridRedisMessage msg) throws IgniteCheckedException {
         assert msg != null;
 
+        // check if an atomic long with the key exists (related to incr/decr).
+        IgniteAtomicLong l = ctx.grid().atomicLong(msg.key(), 0, false);
+
+        if (l != null) {
+            try {
+                l.close();
+            }
+            catch (IgniteException e) {
+                U.warn(log, "Failed to remove atomic long for key [" + msg.key() + "]");
+            }
+        }
+
         GridRestCacheRequest restReq = new GridRestCacheRequest();
 
         restReq.clientId(msg.clientId());

http://git-wip-us.apache.org/repos/asf/ignite/blob/d1cc2925/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/redis/GridRedisNioListener.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/redis/GridRedisNioListener.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/redis/GridRedisNioListener.java
index 45c8061..1042bdb 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/redis/GridRedisNioListener.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/redis/GridRedisNioListener.java
@@ -67,8 +67,8 @@ public class GridRedisNioListener extends GridNioServerListenerAdapter<GridRedis
         addCommandHandler(new GridRedisConnectionCommandHandler());
 
         // string commands.
-        addCommandHandler(new GridRedisGetCommandHandler(log, hnd));
-        addCommandHandler(new GridRedisSetCommandHandler(log, hnd));
+        addCommandHandler(new GridRedisGetCommandHandler(log, hnd, ctx));
+        addCommandHandler(new GridRedisSetCommandHandler(log, hnd, ctx));
         addCommandHandler(new GridRedisMSetCommandHandler(log, hnd));
         addCommandHandler(new GridRedisMGetCommandHandler(log, hnd));
         addCommandHandler(new GridRedisIncrDecrCommandHandler(log, hnd));


[07/50] ignite git commit: IGNITE-4270: Fixed system property name.

Posted by sb...@apache.org.
IGNITE-4270: Fixed system property name.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 7b35ba730edbb91a30a59b1efdc22eceea7298e1
Parents: deee3b9
Author: devozerov <vo...@gridgain.com>
Authored: Fri Nov 25 11:22:05 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Fri Nov 25 11:22:05 2016 +0300

----------------------------------------------------------------------
 .../src/main/java/org/apache/ignite/IgniteSystemProperties.java    | 2 +-
 .../src/main/java/org/apache/ignite/internal/util/GridUnsafe.java  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/7b35ba73/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
index 043c95a..16fc759 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
@@ -491,7 +491,7 @@ public final class IgniteSystemProperties {
      * <p>
      * Defaults to {@code} false, meaning that unaligned access will be performed only on x86 architecture.
      */
-    public static final String IGNITE_UNALIGNED_MEMORY_ACCESS = "IGNITE_UNALIGNED_MEMORY_ACCESS";
+    public static final String IGNITE_MEMORY_UNALIGNED_ACCESS = "IGNITE_MEMORY_UNALIGNED_ACCESS";
 
     /**
      * Enforces singleton.

http://git-wip-us.apache.org/repos/asf/ignite/blob/7b35ba73/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java
index 1c492ef..35b793a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java
@@ -1209,7 +1209,7 @@ public abstract class GridUnsafe {
         boolean res = arch.equals("i386") || arch.equals("x86") || arch.equals("amd64") || arch.equals("x86_64");
 
         if (!res)
-            res = IgniteSystemProperties.getBoolean(IgniteSystemProperties.IGNITE_UNALIGNED_MEMORY_ACCESS, false);
+            res = IgniteSystemProperties.getBoolean(IgniteSystemProperties.IGNITE_MEMORY_UNALIGNED_ACCESS, false);
 
         return res;
     }


[28/50] ignite git commit: IGNITE-4243 Fixed link in Redis examples.

Posted by sb...@apache.org.
IGNITE-4243 Fixed link in Redis examples.

(cherry picked from commit 7af7a99)


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

Branch: refs/heads/ignite-comm-balance-master
Commit: a53fd38c0bdb65c454affa947b2edb7b694973c4
Parents: 1073b2c
Author: Andrey Novikov <an...@gridgain.com>
Authored: Mon Nov 28 17:03:52 2016 +0700
Committer: Andrey Novikov <an...@gridgain.com>
Committed: Mon Nov 28 17:56:50 2016 +0700

----------------------------------------------------------------------
 examples/redis/redis-example.php | 2 +-
 examples/redis/redis-example.py  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/a53fd38c/examples/redis/redis-example.php
----------------------------------------------------------------------
diff --git a/examples/redis/redis-example.php b/examples/redis/redis-example.php
index 0054f16..f015b5c 100644
--- a/examples/redis/redis-example.php
+++ b/examples/redis/redis-example.php
@@ -22,7 +22,7 @@
  * To execute this script, you need to have Predis extension installed and Ignite running.
  * See https://github.com/nrk/predis for Predis details.
  *
- * See https://apacheignite.readme.io/ for more details on Redis integration.
+ * See https://apacheignite.readme.io/docs/redis for more details on Redis integration.
  */
 
 // Load the library.

http://git-wip-us.apache.org/repos/asf/ignite/blob/a53fd38c/examples/redis/redis-example.py
----------------------------------------------------------------------
diff --git a/examples/redis/redis-example.py b/examples/redis/redis-example.py
index 15b847b..f6c4f36 100644
--- a/examples/redis/redis-example.py
+++ b/examples/redis/redis-example.py
@@ -20,7 +20,7 @@ import redis
 To execute this, you will have redis-py installed and Ignite running.
 See https://github.com/andymccurdy/redis-py for the details on redis-py.
 
-See https://apacheignite.readme.io/ for more details on Redis integration.
+See https://apacheignite.readme.io/docs/redis for more details on Redis integration.
 '''
 
 r = redis.StrictRedis(host='localhost', port=11211, db=0)


[17/50] ignite git commit: .NET: Update ASP.NET nuget package info

Posted by sb...@apache.org.
.NET: Update ASP.NET nuget package info


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 2fccde7227704cb04abb310b650ac7060db726c0
Parents: dda4fc9
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Fri Nov 25 16:14:43 2016 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Fri Nov 25 16:14:43 2016 +0300

----------------------------------------------------------------------
 .../dotnet/Apache.Ignite.AspNet/Apache.Ignite.AspNet.nuspec      | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/2fccde72/modules/platforms/dotnet/Apache.Ignite.AspNet/Apache.Ignite.AspNet.nuspec
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.AspNet/Apache.Ignite.AspNet.nuspec b/modules/platforms/dotnet/Apache.Ignite.AspNet/Apache.Ignite.AspNet.nuspec
index 3b3b5ac..49f2fe8 100644
--- a/modules/platforms/dotnet/Apache.Ignite.AspNet/Apache.Ignite.AspNet.nuspec
+++ b/modules/platforms/dotnet/Apache.Ignite.AspNet/Apache.Ignite.AspNet.nuspec
@@ -39,8 +39,8 @@ Creating NuGet package:
         <iconUrl>https://ignite.apache.org/images/logo_ignite_32_32.png</iconUrl>
         <requireLicenseAcceptance>false</requireLicenseAcceptance>
         <description>
-Apache Ignite ASP.NET Output Cache Provider: caches page output in a distributed in-memory cache.
-Ideal for web farms: share cached data between servers effortlessly.
+Output Cache Provider: caches page output in a distributed in-memory cache.
+Session State Store Provider: stores session state data in a distributed in-memory cache.
             
 More info: https://apacheignite-net.readme.io/
         </description>


[11/50] ignite git commit: Merge remote-tracking branch 'origin/ignite-1.8' into ignite-1.8

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


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

Branch: refs/heads/ignite-comm-balance-master
Commit: ccbe60076f32edc642515351cb69044dabea3436
Parents: 0822dc2 3f797b6
Author: devozerov <vo...@gridgain.com>
Authored: Fri Nov 25 12:38:45 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Fri Nov 25 12:38:45 2016 +0300

----------------------------------------------------------------------
 .../Examples/Example.cs                         |  6 +--
 .../Examples/ExamplesTest.cs                    |  7 +++-
 .../Process/IgniteProcess.cs                    | 40 ++++++--------------
 3 files changed, 17 insertions(+), 36 deletions(-)
----------------------------------------------------------------------



[32/50] ignite git commit: IGNITE-4321 Cassandra modules (useless optional dependency removed)

Posted by sb...@apache.org.
IGNITE-4321 Cassandra modules (useless optional dependency removed)


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

Branch: refs/heads/ignite-comm-balance-master
Commit: ca28001f490df29df18d5f875d3d834715093c9f
Parents: d0e0eaa
Author: Anton Vinogradov <av...@apache.org>
Authored: Wed Nov 30 12:16:54 2016 +0300
Committer: Anton Vinogradov <av...@apache.org>
Committed: Wed Nov 30 12:16:54 2016 +0300

----------------------------------------------------------------------
 assembly/dependencies-fabric-lgpl.xml | 1 +
 assembly/dependencies-fabric.xml      | 1 +
 2 files changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/ca28001f/assembly/dependencies-fabric-lgpl.xml
----------------------------------------------------------------------
diff --git a/assembly/dependencies-fabric-lgpl.xml b/assembly/dependencies-fabric-lgpl.xml
index 2b4cf62..82f63d8 100644
--- a/assembly/dependencies-fabric-lgpl.xml
+++ b/assembly/dependencies-fabric-lgpl.xml
@@ -132,6 +132,7 @@
                 <exclude>org.apache.ignite:ignite-apache-license-gen</exclude>
                 <exclude>org.apache.ignite:ignite-appserver-test</exclude>
                 <exclude>org.apache.ignite:ignite-websphere-test</exclude>
+                <exclude>org.apache.ignite:ignite-cassandra</exclude>
             </excludes>
             <sources>
                 <includeModuleDirectory>true</includeModuleDirectory>

http://git-wip-us.apache.org/repos/asf/ignite/blob/ca28001f/assembly/dependencies-fabric.xml
----------------------------------------------------------------------
diff --git a/assembly/dependencies-fabric.xml b/assembly/dependencies-fabric.xml
index ff4075a..63e6ac8 100644
--- a/assembly/dependencies-fabric.xml
+++ b/assembly/dependencies-fabric.xml
@@ -135,6 +135,7 @@
                 <exclude>org.apache.ignite:ignite-geospatial</exclude>
                 <exclude>org.apache.ignite:ignite-appserver-test</exclude>
                 <exclude>org.apache.ignite:ignite-websphere-test</exclude>
+                <exclude>org.apache.ignite:ignite-cassandra</exclude>
             </excludes>
             <sources>
                 <includeModuleDirectory>true</includeModuleDirectory>


[19/50] ignite git commit: IGNITE-4311 .NET: Fix comments in MultiTieredCacheExample

Posted by sb...@apache.org.
IGNITE-4311 .NET: Fix comments in MultiTieredCacheExample


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 4a4082a6ec59211585a9fb16b8e2a5a2b2cec16a
Parents: 30b442e
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Fri Nov 25 16:30:54 2016 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Fri Nov 25 16:31:24 2016 +0300

----------------------------------------------------------------------
 .../Datagrid/MultiTieredCacheExample.cs                      | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/4a4082a6/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/MultiTieredCacheExample.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/MultiTieredCacheExample.cs b/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/MultiTieredCacheExample.cs
index 096c743..629ed89 100644
--- a/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/MultiTieredCacheExample.cs
+++ b/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/MultiTieredCacheExample.cs
@@ -52,7 +52,7 @@ namespace Apache.Ignite.Examples.Datagrid
         public static void Main()
         {
             Console.WriteLine();
-            Console.WriteLine(">>> Lifecycle example started.");
+            Console.WriteLine(">>> Multi-tiered cache example started.");
 
             // Configure swap in the current bin directory (where our assembly is located).
             var binDir = Path.GetDirectoryName(typeof(MultiTieredCacheExample).Assembly.Location);
@@ -85,8 +85,10 @@ namespace Apache.Ignite.Examples.Datagrid
                     {
                         MaxSize = 10 // Maximum number of entries that will be stored in Java heap. 
                     },
-                    OffHeapMaxMemory = EntrySize * 10, // Limit off-heap to 10 entries.
-                    EnableSwap = true // Data will be swapped to disk if there is no more space in off-heap space.
+                    // Limit off-heap to roughly 10 entries. Actual entry count will be lower due to metadata overhead.
+                    OffHeapMaxMemory = EntrySize * 10,
+                    // Data will be swapped to disk if there is no more space in off-heap space.
+                    EnableSwap = true 
                 };
 
                 ICache<int, byte[]> cache = ignite.GetOrCreateCache<int, byte[]>(cacheCfg);


[50/50] ignite git commit: Merge remote-tracking branch 'remotes/origin/master' into ignite-comm-balance-master

Posted by sb...@apache.org.
Merge remote-tracking branch 'remotes/origin/master' into ignite-comm-balance-master


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 8e510d7b09589e4e4ac2c43e2bdef02a4de5a628
Parents: 8f45a3b 4e1fc40
Author: sboikov <sb...@gridgain.com>
Authored: Tue Dec 6 11:38:28 2016 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Tue Dec 6 11:38:28 2016 +0300

----------------------------------------------------------------------
 RELEASE_NOTES.txt                               |   22 +
 assembly/dependencies-fabric-lgpl.xml           |    1 +
 assembly/dependencies-fabric.xml                |    1 +
 assembly/release-fabric-base.xml                |    1 +
 .../examples/datagrid/CacheQueryDmlExample.java |  163 +++
 .../CacheExamplesMultiNodeSelfTest.java         |    7 +
 .../ignite/examples/CacheExamplesSelfTest.java  |    8 +
 modules/cassandra/pom.xml                       |   16 +
 modules/cassandra/serializers/README.txt        |    7 +-
 .../clients/src/test/config/jdbc-bin-config.xml |   54 +
 .../jdbc2/JdbcAbstractDmlStatementSelfTest.java |  263 +++++
 .../JdbcAbstractUpdateStatementSelfTest.java    |   37 +
 ...BinaryMarshallerInsertStatementSelfTest.java |   37 +
 ...cBinaryMarshallerMergeStatementSelfTest.java |   37 +
 .../jdbc2/JdbcDeleteStatementSelfTest.java      |   49 +
 .../jdbc2/JdbcInsertStatementSelfTest.java      |  122 ++
 .../jdbc2/JdbcMergeStatementSelfTest.java       |   91 ++
 .../internal/jdbc2/JdbcNoDefaultCacheTest.java  |   40 +-
 .../internal/jdbc2/JdbcResultSetSelfTest.java   |   18 +
 .../tcp/redis/RedisProtocolSelfTest.java        |  101 +-
 .../jdbc/suite/IgniteJdbcDriverTestSuite.java   |    5 +
 .../java/org/apache/ignite/IgniteCache.java     |    2 +
 .../apache/ignite/IgniteSystemProperties.java   |   10 +-
 .../binary/BinaryAbstractIdentityResolver.java  |   53 +
 .../binary/BinaryArrayIdentityResolver.java     |  224 ++++
 .../binary/BinaryFieldIdentityResolver.java     |  307 +++++
 .../ignite/binary/BinaryIdentityResolver.java   |   42 +
 .../ignite/binary/BinaryTypeConfiguration.java  |   27 +-
 .../org/apache/ignite/cache/QueryEntity.java    |   27 +
 .../ignite/cache/query/SqlFieldsQuery.java      |    2 +-
 .../configuration/CacheConfiguration.java       |   19 +-
 .../org/apache/ignite/internal/GridTopic.java   |    3 +
 .../internal/binary/BinaryClassDescriptor.java  |   15 +
 .../ignite/internal/binary/BinaryContext.java   |   76 +-
 .../ignite/internal/binary/BinaryFieldImpl.java |   10 +-
 .../internal/binary/BinaryObjectExImpl.java     |   90 +-
 .../internal/binary/BinaryObjectImpl.java       |   48 +-
 .../binary/BinaryObjectOffheapImpl.java         |   42 +-
 .../internal/binary/BinaryPrimitives.java       |   30 +-
 .../binary/BinarySerializedFieldComparator.java |  343 ++++++
 .../ignite/internal/binary/BinaryUtils.java     |    2 +-
 .../internal/binary/BinaryWriterExImpl.java     |   47 +-
 .../internal/binary/GridBinaryMarshaller.java   |    2 +-
 .../binary/builder/BinaryBuilderReader.java     |   11 +
 .../binary/builder/BinaryBuilderSerializer.java |    4 +
 .../binary/builder/BinaryObjectBuilderImpl.java |   16 +
 .../streams/BinaryAbstractInputStream.java      |    5 +
 .../streams/BinaryAbstractOutputStream.java     |    5 +
 .../binary/streams/BinaryHeapInputStream.java   |    9 +-
 .../binary/streams/BinaryHeapOutputStream.java  |    7 +-
 .../streams/BinaryMemoryAllocatorChunk.java     |    3 +-
 .../streams/BinaryOffheapInputStream.java       |   14 +-
 .../streams/BinaryOffheapOutputStream.java      |    8 +-
 .../internal/binary/streams/BinaryStream.java   |   12 +-
 .../ignite/internal/jdbc2/JdbcConnection.java   |   17 +
 .../internal/jdbc2/JdbcPreparedStatement.java   |   71 +-
 .../ignite/internal/jdbc2/JdbcQueryTask.java    |    5 +-
 .../ignite/internal/jdbc2/JdbcQueryTaskV2.java  |  406 +++++++
 .../ignite/internal/jdbc2/JdbcResultSet.java    |   72 +-
 .../internal/jdbc2/JdbcSqlFieldsQuery.java      |   49 +
 .../ignite/internal/jdbc2/JdbcStatement.java    |  213 +++-
 .../apache/ignite/internal/jdbc2/JdbcUtils.java |   25 +-
 .../communication/GridIoMessageFactory.java     |   18 +
 .../processors/cache/QueryCursorImpl.java       |   31 +-
 ...GridNearAtomicSingleUpdateInvokeRequest.java |    1 +
 .../cache/query/GridCacheTwoStepQuery.java      |  253 ----
 .../cache/query/IgniteQueryErrorCode.java       |   91 ++
 .../cache/transactions/IgniteTxManager.java     |    7 +-
 .../internal/processors/hadoop/HadoopJobId.java |   79 +-
 .../processors/hadoop/HadoopJobProperty.java    |   43 +-
 .../hadoop/message/HadoopMessage.java           |   27 +
 .../hadoop/shuffle/HadoopShuffleAck.java        |  170 +++
 .../hadoop/shuffle/HadoopShuffleMessage.java    |  361 ++++++
 .../processors/odbc/OdbcMessageParser.java      |   16 +
 .../processors/odbc/OdbcNioListener.java        |    2 +-
 .../odbc/OdbcQueryGetParamsMetaRequest.java     |   60 +
 .../odbc/OdbcQueryGetParamsMetaResult.java      |   40 +
 .../internal/processors/odbc/OdbcRequest.java   |    3 +
 .../processors/odbc/OdbcRequestHandler.java     |  143 ++-
 .../internal/processors/odbc/OdbcUtils.java     |    4 +-
 .../memory/PlatformInputStreamImpl.java         |   14 +-
 .../memory/PlatformOutputStreamImpl.java        |   14 +-
 .../processors/query/GridQueryIndexing.java     |   23 +-
 .../processors/query/GridQueryProcessor.java    |  589 ++++++++--
 .../processors/query/GridQueryProperty.java     |   20 +
 .../query/GridQueryTypeDescriptor.java          |   25 +
 .../processors/query/IgniteSQLException.java    |   89 ++
 .../string/GridRedisGetCommandHandler.java      |   27 +-
 .../string/GridRedisIncrDecrCommandHandler.java |   63 +-
 .../string/GridRedisSetCommandHandler.java      |   24 +-
 .../tcp/redis/GridRedisNioListener.java         |    4 +-
 .../ignite/internal/util/GridHandleTable.java   |   10 +-
 .../apache/ignite/internal/util/GridUnsafe.java |   62 +-
 .../ignite/internal/util/IgniteUtils.java       |   32 +-
 .../internal/util/io/GridUnsafeDataInput.java   |   12 +-
 .../internal/util/io/GridUnsafeDataOutput.java  |   12 +-
 .../util/lang/IgniteSingletonIterator.java      |   56 +
 .../util/offheap/unsafe/GridUnsafeMemory.java   |   10 +-
 .../BinaryArrayIdentityResolverSelfTest.java    |  300 +++++
 .../BinaryFieldIdentityResolverSelfTest.java    |  333 ++++++
 .../binary/BinaryFieldsOffheapSelfTest.java     |    2 +-
 .../BinaryFooterOffsetsOffheapSelfTest.java     |    2 +-
 ...ryIdentityResolverConfigurationSelfTest.java |  138 +++
 .../binary/BinaryMarshallerSelfTest.java        |    2 +-
 .../BinaryObjectBuilderAdditionalSelfTest.java  |  157 ++-
 ...naryObjectBuilderDefaultMappersSelfTest.java |    2 +-
 .../BinarySerialiedFieldComparatorSelfTest.java |  568 +++++++++
 .../GridCacheBinaryObjectsAbstractSelfTest.java |  260 ++++-
 .../IgniteBinaryObjectsTestSuite.java           |   10 +
 .../hadoop/message/HadoopMessage.java           |   27 -
 .../hadoop/shuffle/HadoopShuffle.java           |   48 +-
 .../hadoop/shuffle/HadoopShuffleAck.java        |   92 --
 .../hadoop/shuffle/HadoopShuffleJob.java        |  158 ++-
 .../hadoop/shuffle/HadoopShuffleMessage.java    |  242 ----
 .../shuffle/streams/HadoopDataOutStream.java    |    2 +-
 .../child/HadoopChildProcessRunner.java         |    6 +-
 .../HadoopConcurrentHashMultimapSelftest.java   |    2 +-
 .../collections/HadoopSkipListSelfTest.java     |    2 +-
 .../cache/query/GridCacheTwoStepQuery.java      |  253 ++++
 .../query/h2/DmlStatementsProcessor.java        | 1083 ++++++++++++++++++
 .../query/h2/GridH2ResultSetIterator.java       |    3 +-
 .../processors/query/h2/IgniteH2Indexing.java   |  130 ++-
 .../query/h2/dml/FastUpdateArgument.java        |   27 +
 .../query/h2/dml/FastUpdateArguments.java       |   53 +
 .../query/h2/dml/KeyValueSupplier.java          |   30 +
 .../processors/query/h2/dml/UpdateMode.java     |   36 +
 .../processors/query/h2/dml/UpdatePlan.java     |  128 +++
 .../query/h2/dml/UpdatePlanBuilder.java         |  486 ++++++++
 .../processors/query/h2/dml/package-info.java   |   22 +
 .../query/h2/opt/GridH2RowDescriptor.java       |   23 +
 .../query/h2/opt/GridH2TreeIndex.java           |    2 +-
 .../processors/query/h2/sql/DmlAstUtils.java    |  616 ++++++++++
 .../processors/query/h2/sql/GridSqlArray.java   |    8 +
 .../processors/query/h2/sql/GridSqlConst.java   |    6 +
 .../processors/query/h2/sql/GridSqlDelete.java  |   68 ++
 .../query/h2/sql/GridSqlFunction.java           |    5 +-
 .../processors/query/h2/sql/GridSqlInsert.java  |  149 +++
 .../processors/query/h2/sql/GridSqlKeyword.java |   46 +
 .../processors/query/h2/sql/GridSqlMerge.java   |  143 +++
 .../processors/query/h2/sql/GridSqlQuery.java   |   44 +-
 .../query/h2/sql/GridSqlQueryParser.java        |  323 +++++-
 .../query/h2/sql/GridSqlQuerySplitter.java      |    6 +-
 .../processors/query/h2/sql/GridSqlSelect.java  |    3 +-
 .../query/h2/sql/GridSqlStatement.java          |   64 ++
 .../processors/query/h2/sql/GridSqlUpdate.java  |  105 ++
 .../h2/twostep/GridReduceQueryExecutor.java     |   28 +-
 ...niteCacheAbstractInsertSqlQuerySelfTest.java |  559 +++++++++
 .../IgniteCacheAbstractSqlDmlQuerySelfTest.java |  243 ++++
 .../IgniteCacheDeleteSqlQuerySelfTest.java      |  106 ++
 .../IgniteCacheInsertSqlQuerySelfTest.java      |  203 ++++
 .../cache/IgniteCacheMergeSqlQuerySelfTest.java |  153 +++
 .../IgniteCacheUpdateSqlQuerySelfTest.java      |  472 ++++++++
 .../IgniteCacheAtomicFieldsQuerySelfTest.java   |   21 -
 .../h2/GridIndexingSpiAbstractSelfTest.java     |   40 +-
 .../query/h2/sql/GridQueryParsingTest.java      |  109 +-
 .../IgniteCacheQuerySelfTestSuite.java          |    9 +
 .../cpp/core-test/config/cache-query.xml        |   10 +
 .../odbc-example/config/example-odbc.xml        |   38 +-
 .../project/vs/odbc-example.vcxproj             |    7 +-
 .../project/vs/odbc-example.vcxproj.filters     |    8 +
 .../examples/odbc-example/src/odbc_example.cpp  |  514 +++++++--
 .../query-example/src/query_example.cpp         |    2 +-
 .../odbc-test/config/queries-test-noodbc.xml    |    4 +
 .../cpp/odbc-test/config/queries-test.xml       |    4 +
 .../src/application_data_buffer_test.cpp        |    2 +-
 .../cpp/odbc-test/src/queries_test.cpp          |  336 ++++++
 .../platforms/cpp/odbc/include/ignite/odbc.h    |   14 +-
 .../ignite/odbc/app/application_data_buffer.h   |    4 +-
 .../odbc/include/ignite/odbc/app/parameter.h    |    2 +-
 .../cpp/odbc/include/ignite/odbc/common_types.h |    3 +
 .../cpp/odbc/include/ignite/odbc/message.h      |  138 ++-
 .../odbc/include/ignite/odbc/query/data_query.h |   12 +-
 .../cpp/odbc/include/ignite/odbc/query/query.h  |   44 +-
 .../cpp/odbc/include/ignite/odbc/statement.h    |   83 +-
 .../cpp/odbc/include/ignite/odbc/type_traits.h  |    2 +-
 .../cpp/odbc/include/ignite/odbc/utility.h      |   11 +-
 .../odbc/src/app/application_data_buffer.cpp    |   57 +-
 .../platforms/cpp/odbc/src/app/parameter.cpp    |    3 +-
 modules/platforms/cpp/odbc/src/connection.cpp   |    4 +-
 modules/platforms/cpp/odbc/src/entry_points.cpp |   32 +-
 modules/platforms/cpp/odbc/src/odbc.cpp         |   25 +-
 .../odbc/src/query/column_metadata_query.cpp    |    2 +-
 .../platforms/cpp/odbc/src/query/data_query.cpp |    6 +-
 .../cpp/odbc/src/query/foreign_keys_query.cpp   |    2 +-
 .../cpp/odbc/src/query/primary_keys_query.cpp   |    2 +-
 .../odbc/src/query/special_columns_query.cpp    |    2 +-
 .../cpp/odbc/src/query/table_metadata_query.cpp |    2 +-
 .../cpp/odbc/src/query/type_info_query.cpp      |    2 +-
 modules/platforms/cpp/odbc/src/statement.cpp    |  230 +++-
 modules/platforms/cpp/odbc/src/utility.cpp      |   22 +-
 .../Apache.Ignite.AspNet.nuspec                 |    4 +-
 .../Examples/Example.cs                         |    6 +-
 .../Examples/ExamplesTest.cs                    |    7 +-
 .../Process/IgniteProcess.cs                    |   21 +-
 .../Datagrid/MultiTieredCacheExample.cs         |    8 +-
 .../config/benchmark-bin-identity.properties    |   94 ++
 .../config/benchmark-multicast.properties       |   15 +
 .../config/benchmark-sql-dml.properties         |   72 ++
 modules/yardstick/config/ignite-base-config.xml |   73 +-
 .../config/ignite-bin-multicast-config.xml      |   86 ++
 .../cache/IgniteBinaryIdentityBenchmark.java    |  108 ++
 .../cache/IgniteBinaryIdentityGetBenchmark.java |   34 +
 .../cache/IgniteBinaryIdentityPutBenchmark.java |   35 +
 .../IgniteFieldsBinaryIdentityGetBenchmark.java |   30 +
 .../IgniteFieldsBinaryIdentityPutBenchmark.java |   30 +
 .../IgniteLegacyBinaryIdentityGetBenchmark.java |   30 +
 .../IgniteLegacyBinaryIdentityPutBenchmark.java |   30 +
 ...IgnitePutIfAbsentIndexedValue1Benchmark.java |   45 +
 .../IgniteReplaceIndexedValue1Benchmark.java    |   79 ++
 .../cache/dml/IgniteSqlDeleteBenchmark.java     |   83 ++
 .../dml/IgniteSqlDeleteFilteredBenchmark.java   |   88 ++
 .../IgniteSqlInsertIndexedValue1Benchmark.java  |   48 +
 .../IgniteSqlInsertIndexedValue2Benchmark.java  |   48 +
 .../IgniteSqlInsertIndexedValue8Benchmark.java  |   48 +
 .../cache/dml/IgniteSqlMergeAllBenchmark.java   |   82 ++
 .../cache/dml/IgniteSqlMergeBenchmark.java      |   42 +
 .../IgniteSqlMergeIndexedValue1Benchmark.java   |   43 +
 .../IgniteSqlMergeIndexedValue2Benchmark.java   |   43 +
 .../IgniteSqlMergeIndexedValue8Benchmark.java   |   43 +
 .../cache/dml/IgniteSqlMergeQueryBenchmark.java |  116 ++
 .../cache/dml/IgniteSqlUpdateBenchmark.java     |   82 ++
 .../dml/IgniteSqlUpdateFilteredBenchmark.java   |   88 ++
 .../yardstick/cache/model/SampleValue.java      |    2 +
 223 files changed, 15747 insertions(+), 1591 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/8e510d7b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/8e510d7b/modules/core/src/main/java/org/apache/ignite/internal/GridTopic.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/8e510d7b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java
----------------------------------------------------------------------

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


[37/50] ignite git commit: IGNITE-4026: Fixed BinaryObjectBuilder.build() can fail if one of the fields is Externalizable, enum from binary object. This closes #1281. This closes #1289.

Posted by sb...@apache.org.
IGNITE-4026: Fixed BinaryObjectBuilder.build() can fail if one of the fields is Externalizable, enum from binary object. This closes #1281. This closes #1289.

(cherry picked from commit 0b7c62d)


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

Branch: refs/heads/ignite-comm-balance-master
Commit: cc13d9d155f70e22e08ef203ac64e5cc0aa0a50f
Parents: 33dda46
Author: dkarachentsev <dk...@gridgain.com>
Authored: Mon Nov 28 11:30:14 2016 +0300
Committer: dkarachentsev <dk...@gridgain.com>
Committed: Fri Dec 2 12:59:36 2016 +0300

----------------------------------------------------------------------
 .../internal/binary/GridBinaryMarshaller.java   |   2 +-
 .../binary/builder/BinaryBuilderReader.java     |  11 ++
 .../binary/builder/BinaryBuilderSerializer.java |   4 +
 .../binary/builder/BinaryObjectBuilderImpl.java |  10 ++
 .../BinaryObjectBuilderAdditionalSelfTest.java  | 157 ++++++++++++++++++-
 5 files changed, 181 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/cc13d9d1/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java
index ad63521..624fa33 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java
@@ -43,7 +43,7 @@ public class GridBinaryMarshaller {
     private static final ThreadLocal<BinaryContext> BINARY_CTX = new ThreadLocal<>();
 
     /** */
-    static final byte OPTM_MARSH = -2;
+    public static final byte OPTM_MARSH = -2;
 
     /** */
     public static final byte BYTE = 1;

http://git-wip-us.apache.org/repos/asf/ignite/blob/cc13d9d1/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderReader.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderReader.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderReader.java
index 347fb2b..baaabd6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderReader.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderReader.java
@@ -33,6 +33,7 @@ import java.sql.Timestamp;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
+import org.apache.ignite.internal.util.typedef.internal.U;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 
@@ -757,6 +758,16 @@ public class BinaryBuilderReader implements BinaryPositionReadable {
                 return new BinaryPlainBinaryObject(binaryObj);
             }
 
+            case GridBinaryMarshaller.OPTM_MARSH: {
+                final BinaryHeapInputStream bin = BinaryHeapInputStream.create(arr, pos);
+
+                final Object obj = BinaryUtils.doReadOptimized(bin, ctx, U.resolveClassLoader(ctx.configuration()));
+
+                pos = bin.position();
+
+                return obj;
+            }
+
             default:
                 throw new BinaryObjectException("Invalid flag value: " + type);
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/cc13d9d1/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderSerializer.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderSerializer.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderSerializer.java
index b296437..6974176 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderSerializer.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderSerializer.java
@@ -116,8 +116,12 @@ class BinaryBuilderSerializer {
             String typeName = writer.context().userTypeName(clsName);
 
             BinaryMetadata meta = new BinaryMetadata(typeId, typeName, null, null, null, true);
+
             writer.context().updateMetadata(typeId, meta);
 
+            // Need register class for marshaller to be able to deserialize enum value.
+            writer.context().descriptorForClass(val.getClass(), false);
+
             writer.writeByte(GridBinaryMarshaller.ENUM);
             writer.writeInt(typeId);
             writer.writeInt(((Enum)val).ordinal());

http://git-wip-us.apache.org/repos/asf/ignite/blob/cc13d9d1/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java
index f0bc874..6ea9e7e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java
@@ -22,6 +22,7 @@ import org.apache.ignite.binary.BinaryObject;
 import org.apache.ignite.binary.BinaryObjectBuilder;
 import org.apache.ignite.binary.BinaryObjectException;
 import org.apache.ignite.binary.BinaryType;
+import org.apache.ignite.internal.binary.BinaryEnumObjectImpl;
 import org.apache.ignite.internal.binary.BinaryMetadata;
 import org.apache.ignite.internal.binary.BinaryObjectImpl;
 import org.apache.ignite.internal.binary.BinaryWriterExImpl;
@@ -385,6 +386,15 @@ public class BinaryObjectBuilderImpl implements BinaryObjectBuilder {
             if (((BinaryValueWithType)newVal).value() == null)
                 nullFieldVal = true;
         }
+        // Detect Enum and Enum array type.
+        else if (newVal instanceof BinaryEnumObjectImpl)
+            newFldTypeId = GridBinaryMarshaller.ENUM;
+        else if (newVal.getClass().isArray() && newVal.getClass().getComponentType() == BinaryObject.class) {
+            BinaryObject[] arr = (BinaryObject[])newVal;
+
+            newFldTypeId = arr.length > 0 && arr[0] instanceof BinaryEnumObjectImpl ?
+                GridBinaryMarshaller.ENUM_ARR : GridBinaryMarshaller.OBJ_ARR;
+        }
         else
             newFldTypeId = BinaryUtils.typeByClass(newVal.getClass());
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/cc13d9d1/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectBuilderAdditionalSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectBuilderAdditionalSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectBuilderAdditionalSelfTest.java
index 24806cb..507aa6b 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectBuilderAdditionalSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectBuilderAdditionalSelfTest.java
@@ -21,6 +21,10 @@ import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
 import java.math.BigInteger;
@@ -1423,11 +1427,19 @@ public class BinaryObjectBuilderAdditionalSelfTest extends GridCommonAbstractTes
      * @return Wrapper.
      */
     private BinaryObjectBuilderImpl newWrapper(Class<?> aCls) {
+        return newWrapper(aCls.getName());
+    }
+
+    /**
+     * @param typeName Type name.
+     * @return Wrapper.
+     */
+    private BinaryObjectBuilderImpl newWrapper(String typeName) {
         CacheObjectBinaryProcessorImpl processor = (CacheObjectBinaryProcessorImpl)(
             (IgniteBinaryImpl)binaries()).processor();
 
-        return new BinaryObjectBuilderImpl(processor.binaryContext(), processor.typeId(aCls.getName()),
-            processor.binaryContext().userTypeName(aCls.getName()));
+        return new BinaryObjectBuilderImpl(processor.binaryContext(), processor.typeId(typeName),
+            processor.binaryContext().userTypeName(typeName));
     }
 
     /**
@@ -1508,4 +1520,145 @@ public class BinaryObjectBuilderAdditionalSelfTest extends GridCommonAbstractTes
         assert OBJ.equals(binaryObj.type().fieldTypeName("asSetHint"));
         assert OBJ.equals(binaryObj.type().fieldTypeName("asMapHint"));
     }
+
+    /**
+     * Checks that externalizable value is correctly serialized/deserialized.
+     *
+     * @throws Exception If failed.
+     */
+    public void testBuilderExternalizable() throws Exception {
+        BinaryObjectBuilder builder = newWrapper("TestType");
+
+        final TestObjectExternalizable exp = new TestObjectExternalizable("test");
+        final TestObjectExternalizable[] expArr = new TestObjectExternalizable[]{
+            new TestObjectExternalizable("test1"), new TestObjectExternalizable("test2")};
+
+        BinaryObject extObj = builder.setField("extVal", exp).setField("extArr", expArr).build();
+
+        assertEquals(exp, extObj.field("extVal"));
+        Assert.assertArrayEquals(expArr, (Object[])extObj.field("extArr"));
+
+        builder = extObj.toBuilder();
+
+        extObj = builder.setField("intVal", 10).build();
+
+        assertEquals(exp, extObj.field("extVal"));
+        Assert.assertArrayEquals(expArr, (Object[])extObj.field("extArr"));
+        assertEquals(Integer.valueOf(10), extObj.field("intVal"));
+
+        builder = extObj.toBuilder();
+
+        extObj = builder.setField("strVal", "some string").build();
+
+        assertEquals(exp, extObj.field("extVal"));
+        Assert.assertArrayEquals(expArr, (Object[])extObj.field("extArr"));
+        assertEquals(Integer.valueOf(10), extObj.field("intVal"));
+        assertEquals("some string", extObj.field("strVal"));
+    }
+
+    /**
+     * Checks correct serialization/deserialization of enums in builder.
+     *
+     * @throws Exception If failed.
+     */
+    public void testEnum() throws Exception {
+        BinaryObjectBuilder builder = newWrapper("TestType");
+
+        final TestEnum exp = TestEnum.A;
+        final TestEnum[] expArr = {TestEnum.A, TestEnum.B};
+
+        BinaryObject enumObj = builder.setField("testEnum", exp).setField("testEnumArr", expArr).build();
+
+        assertEquals(exp, ((BinaryObject)enumObj.field("testEnum")).deserialize());
+        Assert.assertArrayEquals(expArr, (Object[])deserializeEnumBinaryArray(enumObj.field("testEnumArr")));
+
+        builder = newWrapper(enumObj.type().typeName());
+
+        enumObj = builder.setField("testEnum", (Object)enumObj.field("testEnum"))
+            .setField("testEnumArr", (Object)enumObj.field("testEnumArr")).build();
+
+        assertEquals(exp, ((BinaryObject)enumObj.field("testEnum")).deserialize());
+        Assert.assertArrayEquals(expArr, (Object[])deserializeEnumBinaryArray(enumObj.field("testEnumArr")));
+    }
+
+    /**
+     * @param obj BinaryObject array.
+     * @return Deserialized enums.
+     */
+    private TestEnum[] deserializeEnumBinaryArray(Object obj) {
+        Object[] arr = (Object[])obj;
+
+        final TestEnum[] res = new TestEnum[arr.length];
+
+        for (int i = 0; i < arr.length; i++)
+            res[i] = ((BinaryObject)arr[i]).deserialize();
+
+        return res;
+    }
+
+    /**
+     *
+     */
+    private static class TestObjectExternalizable implements Externalizable {
+        /** */
+        private String val;
+
+        /**
+         *
+         */
+        public TestObjectExternalizable() {
+        }
+
+        /**
+         * @param val Value.
+         */
+        public TestObjectExternalizable(final String val) {
+            this.val = val;
+        }
+
+        /** {@inheritDoc} */
+        @Override public void writeExternal(final ObjectOutput out) throws IOException {
+            out.writeUTF(val);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException {
+            val = in.readUTF();
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean equals(final Object o) {
+            if (this == o)
+                return true;
+            if (o == null || getClass() != o.getClass())
+                return false;
+
+            final TestObjectExternalizable that = (TestObjectExternalizable)o;
+
+            return val != null ? val.equals(that.val) : that.val == null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public int hashCode() {
+            return val != null ? val.hashCode() : 0;
+        }
+
+        /** {@inheritDoc} */
+        @Override public String toString() {
+            return "TestObjectExternalizable{" +
+                "val='" + val + '\'' +
+                '}';
+        }
+    }
+
+    /**
+     *
+     */
+    private enum TestEnum {
+        /** */
+        A,
+
+        /** */
+        B
+    }
 }


[44/50] ignite git commit: Merge branch 'ignite-1.8'

Posted by sb...@apache.org.
Merge branch 'ignite-1.8'

# Conflicts:
#	modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateInvokeRequest.java
#	modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/OdbcRequestHandler.java
#	modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/key/GridRedisDelCommandHandler.java
#	modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/key/GridRedisExistsCommandHandler.java
#	modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/server/GridRedisDbSizeCommandHandler.java
#	modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisAppendCommandHandler.java
#	modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetCommandHandler.java
#	modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetRangeCommandHandler.java
#	modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetSetCommandHandler.java
#	modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisIncrDecrCommandHandler.java
#	modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisMGetCommandHandler.java
#	modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisMSetCommandHandler.java
#	modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java
#	modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetRangeCommandHandler.java
#	modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisStrlenCommandHandler.java


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 6d348aedaff492758111c17460d93fa904b90b9e
Parents: 6e8c35b 97a6515
Author: devozerov <vo...@gridgain.com>
Authored: Mon Dec 5 15:37:15 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Mon Dec 5 15:37:15 2016 +0300

----------------------------------------------------------------------
 RELEASE_NOTES.txt                               |   22 +
 assembly/dependencies-fabric-lgpl.xml           |    1 +
 assembly/dependencies-fabric.xml                |    1 +
 assembly/release-fabric-base.xml                |    1 +
 .../examples/datagrid/CacheQueryDmlExample.java |  163 +++
 .../CacheExamplesMultiNodeSelfTest.java         |    7 +
 .../ignite/examples/CacheExamplesSelfTest.java  |    8 +
 modules/cassandra/pom.xml                       |   16 +
 modules/cassandra/serializers/README.txt        |    7 +-
 .../clients/src/test/config/jdbc-bin-config.xml |   54 +
 .../jdbc2/JdbcAbstractDmlStatementSelfTest.java |  263 +++++
 .../JdbcAbstractUpdateStatementSelfTest.java    |   37 +
 ...BinaryMarshallerInsertStatementSelfTest.java |   37 +
 ...cBinaryMarshallerMergeStatementSelfTest.java |   37 +
 .../jdbc2/JdbcDeleteStatementSelfTest.java      |   49 +
 .../jdbc2/JdbcInsertStatementSelfTest.java      |  122 ++
 .../jdbc2/JdbcMergeStatementSelfTest.java       |   91 ++
 .../internal/jdbc2/JdbcNoDefaultCacheTest.java  |   40 +-
 .../internal/jdbc2/JdbcResultSetSelfTest.java   |   18 +
 .../tcp/redis/RedisProtocolSelfTest.java        |  101 +-
 .../jdbc/suite/IgniteJdbcDriverTestSuite.java   |    5 +
 .../java/org/apache/ignite/IgniteCache.java     |    2 +
 .../apache/ignite/IgniteSystemProperties.java   |    2 +-
 .../binary/BinaryAbstractIdentityResolver.java  |   53 +
 .../binary/BinaryArrayIdentityResolver.java     |  224 ++++
 .../binary/BinaryFieldIdentityResolver.java     |  307 +++++
 .../ignite/binary/BinaryIdentityResolver.java   |   42 +
 .../ignite/binary/BinaryTypeConfiguration.java  |   27 +-
 .../org/apache/ignite/cache/QueryEntity.java    |   27 +
 .../ignite/cache/query/SqlFieldsQuery.java      |    2 +-
 .../configuration/CacheConfiguration.java       |   19 +-
 .../internal/binary/BinaryClassDescriptor.java  |   15 +
 .../ignite/internal/binary/BinaryContext.java   |   76 +-
 .../ignite/internal/binary/BinaryFieldImpl.java |   10 +-
 .../internal/binary/BinaryObjectExImpl.java     |   90 +-
 .../internal/binary/BinaryObjectImpl.java       |   48 +-
 .../binary/BinaryObjectOffheapImpl.java         |   42 +-
 .../internal/binary/BinaryPrimitives.java       |   24 +
 .../binary/BinarySerializedFieldComparator.java |  343 ++++++
 .../ignite/internal/binary/BinaryUtils.java     |    2 +-
 .../internal/binary/BinaryWriterExImpl.java     |   47 +-
 .../binary/builder/BinaryObjectBuilderImpl.java |    6 +
 .../streams/BinaryAbstractInputStream.java      |    5 +
 .../streams/BinaryAbstractOutputStream.java     |    5 +
 .../binary/streams/BinaryHeapInputStream.java   |    5 +
 .../binary/streams/BinaryHeapOutputStream.java  |    5 +
 .../streams/BinaryOffheapInputStream.java       |   10 +
 .../streams/BinaryOffheapOutputStream.java      |    4 +-
 .../internal/binary/streams/BinaryStream.java   |   12 +-
 .../ignite/internal/jdbc2/JdbcConnection.java   |   17 +
 .../internal/jdbc2/JdbcPreparedStatement.java   |   71 +-
 .../ignite/internal/jdbc2/JdbcQueryTask.java    |    5 +-
 .../ignite/internal/jdbc2/JdbcQueryTaskV2.java  |  406 +++++++
 .../ignite/internal/jdbc2/JdbcResultSet.java    |   72 +-
 .../internal/jdbc2/JdbcSqlFieldsQuery.java      |   49 +
 .../ignite/internal/jdbc2/JdbcStatement.java    |  213 +++-
 .../apache/ignite/internal/jdbc2/JdbcUtils.java |   25 +-
 .../processors/cache/QueryCursorImpl.java       |   31 +-
 ...GridNearAtomicSingleUpdateInvokeRequest.java |    1 +
 .../cache/query/GridCacheTwoStepQuery.java      |  253 ----
 .../cache/query/IgniteQueryErrorCode.java       |   91 ++
 .../cache/transactions/IgniteTxManager.java     |    7 +-
 .../processors/odbc/OdbcMessageParser.java      |   16 +
 .../processors/odbc/OdbcNioListener.java        |    2 +-
 .../odbc/OdbcQueryGetParamsMetaRequest.java     |   60 +
 .../odbc/OdbcQueryGetParamsMetaResult.java      |   40 +
 .../internal/processors/odbc/OdbcRequest.java   |    3 +
 .../processors/odbc/OdbcRequestHandler.java     |  151 ++-
 .../internal/processors/odbc/OdbcUtils.java     |    4 +-
 .../memory/PlatformInputStreamImpl.java         |   10 +
 .../memory/PlatformOutputStreamImpl.java        |   12 +
 .../processors/query/GridQueryIndexing.java     |   23 +-
 .../processors/query/GridQueryProcessor.java    |  589 ++++++++--
 .../processors/query/GridQueryProperty.java     |   20 +
 .../query/GridQueryTypeDescriptor.java          |   25 +
 .../processors/query/IgniteSQLException.java    |   89 ++
 .../string/GridRedisGetCommandHandler.java      |   27 +-
 .../string/GridRedisIncrDecrCommandHandler.java |   63 +-
 .../string/GridRedisSetCommandHandler.java      |   24 +-
 .../tcp/redis/GridRedisNioListener.java         |    4 +-
 .../apache/ignite/internal/util/GridUnsafe.java |    2 +-
 .../util/lang/IgniteSingletonIterator.java      |   56 +
 .../BinaryArrayIdentityResolverSelfTest.java    |  300 +++++
 .../BinaryFieldIdentityResolverSelfTest.java    |  333 ++++++
 ...ryIdentityResolverConfigurationSelfTest.java |  138 +++
 .../BinarySerialiedFieldComparatorSelfTest.java |  568 +++++++++
 .../GridCacheBinaryObjectsAbstractSelfTest.java |  260 ++++-
 .../IgniteBinaryObjectsTestSuite.java           |   10 +
 .../cache/query/GridCacheTwoStepQuery.java      |  253 ++++
 .../query/h2/DmlStatementsProcessor.java        | 1083 ++++++++++++++++++
 .../query/h2/GridH2ResultSetIterator.java       |    3 +-
 .../processors/query/h2/IgniteH2Indexing.java   |  130 ++-
 .../query/h2/dml/FastUpdateArgument.java        |   27 +
 .../query/h2/dml/FastUpdateArguments.java       |   53 +
 .../query/h2/dml/KeyValueSupplier.java          |   30 +
 .../processors/query/h2/dml/UpdateMode.java     |   36 +
 .../processors/query/h2/dml/UpdatePlan.java     |  128 +++
 .../query/h2/dml/UpdatePlanBuilder.java         |  486 ++++++++
 .../processors/query/h2/dml/package-info.java   |   22 +
 .../query/h2/opt/GridH2RowDescriptor.java       |   23 +
 .../query/h2/opt/GridH2TreeIndex.java           |    2 +-
 .../processors/query/h2/sql/DmlAstUtils.java    |  616 ++++++++++
 .../processors/query/h2/sql/GridSqlArray.java   |    8 +
 .../processors/query/h2/sql/GridSqlConst.java   |    6 +
 .../processors/query/h2/sql/GridSqlDelete.java  |   68 ++
 .../query/h2/sql/GridSqlFunction.java           |    5 +-
 .../processors/query/h2/sql/GridSqlInsert.java  |  149 +++
 .../processors/query/h2/sql/GridSqlKeyword.java |   46 +
 .../processors/query/h2/sql/GridSqlMerge.java   |  143 +++
 .../processors/query/h2/sql/GridSqlQuery.java   |   44 +-
 .../query/h2/sql/GridSqlQueryParser.java        |  323 +++++-
 .../query/h2/sql/GridSqlQuerySplitter.java      |    6 +-
 .../processors/query/h2/sql/GridSqlSelect.java  |    3 +-
 .../query/h2/sql/GridSqlStatement.java          |   64 ++
 .../processors/query/h2/sql/GridSqlUpdate.java  |  105 ++
 .../h2/twostep/GridReduceQueryExecutor.java     |   28 +-
 ...niteCacheAbstractInsertSqlQuerySelfTest.java |  559 +++++++++
 .../IgniteCacheAbstractSqlDmlQuerySelfTest.java |  243 ++++
 .../IgniteCacheDeleteSqlQuerySelfTest.java      |  106 ++
 .../IgniteCacheInsertSqlQuerySelfTest.java      |  203 ++++
 .../cache/IgniteCacheMergeSqlQuerySelfTest.java |  153 +++
 .../IgniteCacheUpdateSqlQuerySelfTest.java      |  472 ++++++++
 .../IgniteCacheAtomicFieldsQuerySelfTest.java   |   21 -
 .../h2/GridIndexingSpiAbstractSelfTest.java     |   40 +-
 .../query/h2/sql/GridQueryParsingTest.java      |  109 +-
 .../IgniteCacheQuerySelfTestSuite.java          |    9 +
 .../cpp/core-test/config/cache-query.xml        |   10 +
 .../odbc-example/config/example-odbc.xml        |   38 +-
 .../project/vs/odbc-example.vcxproj             |    7 +-
 .../project/vs/odbc-example.vcxproj.filters     |    8 +
 .../examples/odbc-example/src/odbc_example.cpp  |  514 +++++++--
 .../query-example/src/query_example.cpp         |    2 +-
 .../odbc-test/config/queries-test-noodbc.xml    |    4 +
 .../cpp/odbc-test/config/queries-test.xml       |    4 +
 .../src/application_data_buffer_test.cpp        |    2 +-
 .../cpp/odbc-test/src/queries_test.cpp          |  336 ++++++
 .../platforms/cpp/odbc/include/ignite/odbc.h    |   14 +-
 .../ignite/odbc/app/application_data_buffer.h   |    4 +-
 .../odbc/include/ignite/odbc/app/parameter.h    |    2 +-
 .../cpp/odbc/include/ignite/odbc/common_types.h |    3 +
 .../cpp/odbc/include/ignite/odbc/message.h      |  138 ++-
 .../odbc/include/ignite/odbc/query/data_query.h |   12 +-
 .../cpp/odbc/include/ignite/odbc/query/query.h  |   44 +-
 .../cpp/odbc/include/ignite/odbc/statement.h    |   83 +-
 .../cpp/odbc/include/ignite/odbc/type_traits.h  |    2 +-
 .../cpp/odbc/include/ignite/odbc/utility.h      |   11 +-
 .../odbc/src/app/application_data_buffer.cpp    |   57 +-
 .../platforms/cpp/odbc/src/app/parameter.cpp    |    3 +-
 modules/platforms/cpp/odbc/src/connection.cpp   |    4 +-
 modules/platforms/cpp/odbc/src/entry_points.cpp |   32 +-
 modules/platforms/cpp/odbc/src/odbc.cpp         |   25 +-
 .../odbc/src/query/column_metadata_query.cpp    |    2 +-
 .../platforms/cpp/odbc/src/query/data_query.cpp |    6 +-
 .../cpp/odbc/src/query/foreign_keys_query.cpp   |    2 +-
 .../cpp/odbc/src/query/primary_keys_query.cpp   |    2 +-
 .../odbc/src/query/special_columns_query.cpp    |    2 +-
 .../cpp/odbc/src/query/table_metadata_query.cpp |    2 +-
 .../cpp/odbc/src/query/type_info_query.cpp      |    2 +-
 modules/platforms/cpp/odbc/src/statement.cpp    |  230 +++-
 modules/platforms/cpp/odbc/src/utility.cpp      |   22 +-
 .../Apache.Ignite.AspNet.nuspec                 |    4 +-
 .../Examples/Example.cs                         |    6 +-
 .../Examples/ExamplesTest.cs                    |    7 +-
 .../Process/IgniteProcess.cs                    |   40 +-
 .../Datagrid/MultiTieredCacheExample.cs         |    8 +-
 .../config/benchmark-bin-identity.properties    |   94 ++
 .../config/benchmark-multicast.properties       |   15 +
 .../config/benchmark-sql-dml.properties         |   72 ++
 modules/yardstick/config/ignite-base-config.xml |   73 +-
 .../config/ignite-bin-multicast-config.xml      |   86 ++
 .../cache/IgniteBinaryIdentityBenchmark.java    |  108 ++
 .../cache/IgniteBinaryIdentityGetBenchmark.java |   34 +
 .../cache/IgniteBinaryIdentityPutBenchmark.java |   35 +
 .../IgniteFieldsBinaryIdentityGetBenchmark.java |   30 +
 .../IgniteFieldsBinaryIdentityPutBenchmark.java |   30 +
 .../IgniteLegacyBinaryIdentityGetBenchmark.java |   30 +
 .../IgniteLegacyBinaryIdentityPutBenchmark.java |   30 +
 ...IgnitePutIfAbsentIndexedValue1Benchmark.java |   45 +
 .../IgniteReplaceIndexedValue1Benchmark.java    |   79 ++
 .../cache/dml/IgniteSqlDeleteBenchmark.java     |   83 ++
 .../dml/IgniteSqlDeleteFilteredBenchmark.java   |   88 ++
 .../IgniteSqlInsertIndexedValue1Benchmark.java  |   48 +
 .../IgniteSqlInsertIndexedValue2Benchmark.java  |   48 +
 .../IgniteSqlInsertIndexedValue8Benchmark.java  |   48 +
 .../cache/dml/IgniteSqlMergeAllBenchmark.java   |   82 ++
 .../cache/dml/IgniteSqlMergeBenchmark.java      |   42 +
 .../IgniteSqlMergeIndexedValue1Benchmark.java   |   43 +
 .../IgniteSqlMergeIndexedValue2Benchmark.java   |   43 +
 .../IgniteSqlMergeIndexedValue8Benchmark.java   |   43 +
 .../cache/dml/IgniteSqlMergeQueryBenchmark.java |  116 ++
 .../cache/dml/IgniteSqlUpdateBenchmark.java     |   82 ++
 .../dml/IgniteSqlUpdateFilteredBenchmark.java   |   88 ++
 .../yardstick/cache/model/SampleValue.java      |    2 +
 193 files changed, 14608 insertions(+), 1112 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/6d348aed/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/6d348aed/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/6d348aed/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetCommandHandler.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetCommandHandler.java
index ded66af,aac4170..cc7008f
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetCommandHandler.java
@@@ -44,14 -46,21 +46,21 @@@ public class GridRedisGetCommandHandle
          GET
      );
  
+     /** Grid context. */
+     private final GridKernalContext ctx;
+ 
      /**
 -     * Constructor.
 +     * Handler constructor.
       *
 -     * @param log Logger.
 -     * @param hnd Handler.
 +     * @param log Logger to use.
 +     * @param hnd Rest handler.
+      * @param ctx Context.
       */
-     public GridRedisGetCommandHandler(final IgniteLogger log, final GridRestProtocolHandler hnd) {
+     public GridRedisGetCommandHandler(final IgniteLogger log, final GridRestProtocolHandler hnd,
+         GridKernalContext ctx) {
          super(log, hnd);
+ 
+         this.ctx = ctx;
      }
  
      /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/6d348aed/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisIncrDecrCommandHandler.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/6d348aed/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java
index 9e53055,2eea0e1..8a7adf4
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java
@@@ -52,14 -55,21 +55,21 @@@ public class GridRedisSetCommandHandle
      /** Value position in Redis message. */
      private static final int VAL_POS = 2;
  
+     /** Grid context. */
+     private final GridKernalContext ctx;
+ 
      /**
 -     * Constructor.
 +     * Handler constructor.
       *
 -     * @param log Logger.
 -     * @param hnd Handler.
 +     * @param log Logger to use.
 +     * @param hnd Rest handler.
+      * @param ctx Context.
       */
-     public GridRedisSetCommandHandler(final IgniteLogger log, final GridRestProtocolHandler hnd) {
+     public GridRedisSetCommandHandler(final IgniteLogger log, final GridRestProtocolHandler hnd,
+         GridKernalContext ctx) {
          super(log, hnd);
+ 
+         this.ctx = ctx;
      }
  
      /** {@inheritDoc} */


[39/50] ignite git commit: IGNITE-4340: Fixed implicit type conversion in DML. This closes #1303.

Posted by sb...@apache.org.
IGNITE-4340: Fixed implicit type conversion in DML. This closes #1303.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 97a6515b89cc4dcfa6d5fd971167c27a27c38911
Parents: 445cde7
Author: Alexander Paschenko <al...@gmail.com>
Authored: Fri Dec 2 17:17:42 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Fri Dec 2 17:17:42 2016 +0300

----------------------------------------------------------------------
 .../query/h2/DmlStatementsProcessor.java        |  94 +++++-
 .../processors/query/h2/IgniteH2Indexing.java   |  10 +-
 .../processors/query/h2/dml/UpdatePlan.java     |  29 +-
 .../query/h2/dml/UpdatePlanBuilder.java         |  64 ++--
 .../processors/query/h2/sql/DmlAstUtils.java    |   2 +-
 ...niteCacheAbstractInsertSqlQuerySelfTest.java |   8 +-
 .../IgniteCacheAbstractSqlDmlQuerySelfTest.java |   2 +-
 .../IgniteCacheInsertSqlQuerySelfTest.java      |   2 +-
 .../cache/IgniteCacheMergeSqlQuerySelfTest.java |   2 +-
 .../IgniteCacheUpdateSqlQuerySelfTest.java      | 322 +++++++++++++++++++
 10 files changed, 456 insertions(+), 79 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/97a6515b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java
index c2c8726..4030758 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java
@@ -17,11 +17,13 @@
 
 package org.apache.ignite.internal.processors.query.h2;
 
+import java.lang.reflect.Array;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
@@ -73,6 +75,8 @@ import org.apache.ignite.spi.indexing.IndexingQueryFilter;
 import org.h2.command.Prepared;
 import org.h2.jdbc.JdbcPreparedStatement;
 import org.h2.table.Column;
+import org.h2.value.DataType;
+import org.h2.value.Value;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 import org.jsr166.ConcurrentHashMap8;
@@ -487,7 +491,8 @@ public class DmlStatementsProcessor {
                 if (hasNewVal && i == valColIdx - 2)
                     continue;
 
-                newColVals.put(plan.colNames[i], e.get(i + 2));
+                newColVals.put(plan.colNames[i], convert(e.get(i + 2), plan.colNames[i],
+                    plan.tbl.rowDescriptor(), plan.colTypes[i]));
             }
 
             newVal = plan.valSupplier.apply(e);
@@ -575,6 +580,64 @@ public class DmlStatementsProcessor {
     }
 
     /**
+     * Convert value to column's expected type by means of H2.
+     *
+     * @param val Source value.
+     * @param colName Column name to search for property.
+     * @param desc Row descriptor.
+     * @param type Expected column type to convert to.
+     * @return Converted object.
+     * @throws IgniteCheckedException if failed.
+     */
+    @SuppressWarnings({"ConstantConditions", "SuspiciousSystemArraycopy"})
+    private static Object convert(Object val, String colName, GridH2RowDescriptor desc, int type)
+        throws IgniteCheckedException {
+        if (val == null)
+            return null;
+
+        GridQueryProperty prop = desc.type().property(colName);
+
+        assert prop != null;
+
+        Class<?> expCls = prop.type();
+
+        Class<?> currCls = val.getClass();
+
+        if (val instanceof Date && currCls != Date.class && expCls == Date.class) {
+            // H2 thinks that java.util.Date is always a Timestamp, while binary marshaller expects
+            // precise Date instance. Let's satisfy it.
+            return new Date(((Date) val).getTime());
+        }
+
+        // We have to convert arrays of reference types manually - see https://issues.apache.org/jira/browse/IGNITE-4327
+        // Still, we only can convert from Object[] to something more precise.
+        if (type == Value.ARRAY && currCls != expCls) {
+            if (currCls != Object[].class)
+                throw new IgniteCheckedException("Unexpected array type - only conversion from Object[] is assumed");
+
+            // Why would otherwise type be Value.ARRAY?
+            assert expCls.isArray();
+
+            Object[] curr = (Object[]) val;
+
+            Object newArr = Array.newInstance(expCls.getComponentType(), curr.length);
+
+            System.arraycopy(curr, 0, newArr, 0, curr.length);
+
+            return newArr;
+        }
+
+        int objType = DataType.getTypeFromClass(val.getClass());
+
+        if (objType == type)
+            return val;
+
+        Value h2Val = desc.wrap(val, objType);
+
+        return h2Val.convertTo(type).getObject();
+    }
+
+    /**
      * Process errors of entry processor - split the keys into duplicated/concurrently modified and those whose
      * processing yielded an exception.
      *
@@ -633,8 +696,8 @@ public class DmlStatementsProcessor {
 
         // If we have just one item to put, just do so
         if (plan.rowsNum == 1) {
-            IgniteBiTuple t = rowToKeyValue(cctx, cursor.iterator().next().toArray(), plan.colNames, plan.keySupplier,
-                plan.valSupplier, plan.keyColIdx, plan.valColIdx, desc.type());
+            IgniteBiTuple t = rowToKeyValue(cctx, cursor.iterator().next().toArray(), plan.colNames, plan.colTypes, plan.keySupplier,
+                plan.valSupplier, plan.keyColIdx, plan.valColIdx, desc);
 
             cctx.cache().put(t.getKey(), t.getValue());
             return 1;
@@ -646,8 +709,8 @@ public class DmlStatementsProcessor {
             for (Iterator<List<?>> it = cursor.iterator(); it.hasNext();) {
                 List<?> row = it.next();
 
-                IgniteBiTuple t = rowToKeyValue(cctx, row.toArray(), plan.colNames, plan.keySupplier, plan.valSupplier,
-                    plan.keyColIdx, plan.valColIdx, desc.type());
+                IgniteBiTuple t = rowToKeyValue(cctx, row.toArray(), plan.colNames, plan.colTypes, plan.keySupplier, plan.valSupplier,
+                    plan.keyColIdx, plan.valColIdx, desc);
 
                 rows.put(t.getKey(), t.getValue());
 
@@ -679,8 +742,8 @@ public class DmlStatementsProcessor {
 
         // If we have just one item to put, just do so
         if (plan.rowsNum == 1) {
-            IgniteBiTuple t = rowToKeyValue(cctx, cursor.iterator().next().toArray(), plan.colNames, plan.keySupplier,
-                plan.valSupplier, plan.keyColIdx, plan.valColIdx, desc.type());
+            IgniteBiTuple t = rowToKeyValue(cctx, cursor.iterator().next().toArray(), plan.colNames, plan.colTypes,
+                plan.keySupplier, plan.valSupplier, plan.keyColIdx, plan.valColIdx, desc);
 
             if (cctx.cache().putIfAbsent(t.getKey(), t.getValue()))
                 return 1;
@@ -705,8 +768,8 @@ public class DmlStatementsProcessor {
             while (it.hasNext()) {
                 List<?> row = it.next();
 
-                final IgniteBiTuple t = rowToKeyValue(cctx, row.toArray(), plan.colNames, plan.keySupplier,
-                    plan.valSupplier, plan.keyColIdx, plan.valColIdx, desc.type());
+                final IgniteBiTuple t = rowToKeyValue(cctx, row.toArray(), plan.colNames, plan.colTypes, plan.keySupplier,
+                    plan.valSupplier, plan.keyColIdx, plan.valColIdx, desc);
 
                 rows.put(t.getKey(), new InsertEntryProcessor(t.getValue()));
 
@@ -772,22 +835,21 @@ public class DmlStatementsProcessor {
 
     /**
      * Convert row presented as an array of Objects into key-value pair to be inserted to cache.
-     *
      * @param cctx Cache context.
      * @param row Row to process.
      * @param cols Query cols.
+     * @param colTypes Column types to convert data from {@code row} to.
      * @param keySupplier Key instantiation method.
      * @param valSupplier Key instantiation method.
      * @param keyColIdx Key column index, or {@code -1} if no key column is mentioned in {@code cols}.
      * @param valColIdx Value column index, or {@code -1} if no value column is mentioned in {@code cols}.
-     * @param desc Table descriptor.
-     * @return Key-value pair.
+     * @param rowDesc Row descriptor.
      * @throws IgniteCheckedException if failed.
      */
     @SuppressWarnings({"unchecked", "ConstantConditions", "ResultOfMethodCallIgnored"})
     private IgniteBiTuple<?, ?> rowToKeyValue(GridCacheContext cctx, Object[] row, String[] cols,
-        KeyValueSupplier keySupplier, KeyValueSupplier valSupplier, int keyColIdx, int valColIdx,
-        GridQueryTypeDescriptor desc) throws IgniteCheckedException {
+        int[] colTypes, KeyValueSupplier keySupplier, KeyValueSupplier valSupplier, int keyColIdx, int valColIdx,
+        GridH2RowDescriptor rowDesc) throws IgniteCheckedException {
         Object key = keySupplier.apply(F.asList(row));
         Object val = valSupplier.apply(F.asList(row));
 
@@ -797,11 +859,13 @@ public class DmlStatementsProcessor {
         if (val == null)
             throw new IgniteSQLException("Value for INSERT or MERGE must not be null", IgniteQueryErrorCode.NULL_VALUE);
 
+        GridQueryTypeDescriptor desc = rowDesc.type();
+
         for (int i = 0; i < cols.length; i++) {
             if (i == keyColIdx || i == valColIdx)
                 continue;
 
-            desc.setValue(cols[i], key, val, row[i]);
+            desc.setValue(cols[i], key, val, convert(row[i], cols[i], rowDesc, colTypes[i]));
         }
 
         if (cctx.binaryMarshaller()) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/97a6515b/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 f4ffbc7..5df44db 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
@@ -212,10 +212,10 @@ public class IgniteH2Indexing implements GridQueryIndexing {
     private static final int TWO_STEP_QRY_CACHE_SIZE = 1024;
 
     /** Field name for key. */
-    public static final String KEY_FIELD_NAME = "_key";
+    public static final String KEY_FIELD_NAME = "_KEY";
 
     /** Field name for value. */
-    public static final String VAL_FIELD_NAME = "_val";
+    public static final String VAL_FIELD_NAME = "_VAL";
 
     /** */
     private static final Field COMMAND_FIELD;
@@ -1246,8 +1246,8 @@ public class IgniteH2Indexing implements GridQueryIndexing {
                             cachesCreated = true;
                         }
                         else
-                            throw new IgniteSQLException("Failed to parse query: " + sqlQry, e.getSQLState(),
-                                IgniteQueryErrorCode.PARSING);
+                            throw new IgniteSQLException("Failed to parse query: " + sqlQry,
+                                IgniteQueryErrorCode.PARSING, e);
                     }
                 }
             }
@@ -1459,7 +1459,7 @@ public class IgniteH2Indexing implements GridQueryIndexing {
         String ptrn = "Name ''{0}'' is reserved and cannot be used as a field name [type=" + type.name() + "]";
 
         for (String name : names) {
-            if (name.equals(KEY_FIELD_NAME) || name.equals(VAL_FIELD_NAME))
+            if (name.equalsIgnoreCase(KEY_FIELD_NAME) || name.equalsIgnoreCase(VAL_FIELD_NAME))
                 throw new IgniteCheckedException(MessageFormat.format(ptrn, name));
         }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/97a6515b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlan.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlan.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlan.java
index 5976f4c..b81ac60 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlan.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlan.java
@@ -33,6 +33,12 @@ public final class UpdatePlan {
     /** Column names to set or update. */
     public final String[] colNames;
 
+    /**
+     * Expected column types to set or insert/merge.
+     * @see org.h2.value.Value
+     */
+    public final int[] colTypes;
+
     /** Method to create key for INSERT or MERGE, ignored for UPDATE and DELETE. */
     public final KeyValueSupplier keySupplier;
 
@@ -59,10 +65,11 @@ public final class UpdatePlan {
     public final FastUpdateArguments fastUpdateArgs;
 
     /** */
-    private UpdatePlan(UpdateMode mode, GridH2Table tbl, String[] colNames, KeyValueSupplier keySupplier,
+    private UpdatePlan(UpdateMode mode, GridH2Table tbl, String[] colNames, int[] colTypes, KeyValueSupplier keySupplier,
         KeyValueSupplier valSupplier, int keyColIdx, int valColIdx, String selectQry, boolean isLocSubqry,
         int rowsNum, FastUpdateArguments fastUpdateArgs) {
         this.colNames = colNames;
+        this.colTypes = colTypes;
         this.rowsNum = rowsNum;
         assert mode != null;
         assert tbl != null;
@@ -79,43 +86,43 @@ public final class UpdatePlan {
     }
 
     /** */
-    public static UpdatePlan forMerge(GridH2Table tbl, String[] colNames, KeyValueSupplier keySupplier,
+    public static UpdatePlan forMerge(GridH2Table tbl, String[] colNames, int[] colTypes, KeyValueSupplier keySupplier,
         KeyValueSupplier valSupplier, int keyColIdx, int valColIdx, String selectQry, boolean isLocSubqry,
         int rowsNum) {
         assert !F.isEmpty(colNames);
 
-        return new UpdatePlan(UpdateMode.MERGE, tbl, colNames, keySupplier, valSupplier, keyColIdx, valColIdx,
+        return new UpdatePlan(UpdateMode.MERGE, tbl, colNames, colTypes, keySupplier, valSupplier, keyColIdx, valColIdx,
             selectQry, isLocSubqry, rowsNum, null);
     }
 
     /** */
-    public static UpdatePlan forInsert(GridH2Table tbl, String[] colNames, KeyValueSupplier keySupplier,
+    public static UpdatePlan forInsert(GridH2Table tbl, String[] colNames, int[] colTypes, KeyValueSupplier keySupplier,
         KeyValueSupplier valSupplier, int keyColIdx, int valColIdx, String selectQry, boolean isLocSubqry, int rowsNum) {
         assert !F.isEmpty(colNames);
 
-        return new UpdatePlan(UpdateMode.INSERT, tbl, colNames, keySupplier, valSupplier, keyColIdx, valColIdx, selectQry,
-            isLocSubqry, rowsNum, null);
+        return new UpdatePlan(UpdateMode.INSERT, tbl, colNames, colTypes, keySupplier, valSupplier, keyColIdx, valColIdx,
+            selectQry, isLocSubqry, rowsNum, null);
     }
 
     /** */
-    public static UpdatePlan forUpdate(GridH2Table tbl, String[] colNames, KeyValueSupplier valSupplier, int valColIdx,
-        String selectQry) {
+    public static UpdatePlan forUpdate(GridH2Table tbl, String[] colNames, int[] colTypes, KeyValueSupplier valSupplier,
+        int valColIdx, String selectQry) {
         assert !F.isEmpty(colNames);
 
-        return new UpdatePlan(UpdateMode.UPDATE, tbl, colNames, null, valSupplier, -1, valColIdx, selectQry,
+        return new UpdatePlan(UpdateMode.UPDATE, tbl, colNames, colTypes, null, valSupplier, -1, valColIdx, selectQry,
             false, 0, null);
     }
 
     /** */
     public static UpdatePlan forDelete(GridH2Table tbl, String selectQry) {
-        return new UpdatePlan(UpdateMode.DELETE, tbl, null, null, null, -1, -1, selectQry, false, 0, null);
+        return new UpdatePlan(UpdateMode.DELETE, tbl, null, null, null, null, -1, -1, selectQry, false, 0, null);
     }
 
     /** */
     public static UpdatePlan forFastUpdate(UpdateMode mode, GridH2Table tbl, FastUpdateArguments fastUpdateArgs) {
         assert mode == UpdateMode.UPDATE || mode == UpdateMode.DELETE;
 
-        return new UpdatePlan(mode, tbl, null, null, null, -1, -1, null, false, 0, fastUpdateArgs);
+        return new UpdatePlan(mode, tbl, null, null, null, null, -1, -1, null, false, 0, fastUpdateArgs);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/97a6515b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlanBuilder.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlanBuilder.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlanBuilder.java
index 549b901..fdcd164 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlanBuilder.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlanBuilder.java
@@ -132,7 +132,7 @@ public final class UpdatePlanBuilder {
             // not for updates, and hence will allow putting new pairs only.
             // We don't quote _key and _val column names on CREATE TABLE, so they are always uppercase here.
             GridSqlColumn[] keys = merge.keys();
-            if (keys.length != 1 || IgniteH2Indexing.KEY_FIELD_NAME.equals(keys[0].columnName()))
+            if (keys.length != 1 || !IgniteH2Indexing.KEY_FIELD_NAME.equals(keys[0].columnName()))
                 throw new CacheException("SQL MERGE does not support arbitrary keys");
 
             cols = merge.columns();
@@ -161,22 +161,30 @@ public final class UpdatePlanBuilder {
 
         String[] colNames = new String[cols.length];
 
+        int[] colTypes = new int[cols.length];
+
         for (int i = 0; i < cols.length; i++) {
-            colNames[i] = cols[i].columnName();
+            GridSqlColumn col = cols[i];
+
+            String colName = col.columnName();
+
+            colNames[i] = colName;
+
+            colTypes[i] = col.resultType().type();
 
-            if (isKeyColumn(cols[i].columnName(), desc)) {
+            if (KEY_FIELD_NAME.equals(colName)) {
                 keyColIdx = i;
                 continue;
             }
 
-            if (isValColumn(cols[i].columnName(), desc)) {
+            if (VAL_FIELD_NAME.equals(colName)) {
                 valColIdx = i;
                 continue;
             }
 
-            GridQueryProperty prop = desc.type().property(cols[i].columnName());
+            GridQueryProperty prop = desc.type().property(colName);
 
-            assert prop != null : "Property '" + cols[i].columnName() + "' not found.";
+            assert prop != null : "Property '" + colName + "' not found.";
 
             if (prop.key())
                 hasKeyProps = true;
@@ -188,11 +196,11 @@ public final class UpdatePlanBuilder {
         KeyValueSupplier valSupplier = createSupplier(cctx, desc.type(), valColIdx, hasValProps, false);
 
         if (stmt instanceof GridSqlMerge)
-            return UpdatePlan.forMerge(tbl.dataTable(), colNames, keySupplier, valSupplier, keyColIdx, valColIdx,
-                sel.getSQL(), !isTwoStepSubqry, rowsNum);
+            return UpdatePlan.forMerge(tbl.dataTable(), colNames, colTypes, keySupplier, valSupplier, keyColIdx,
+                valColIdx, sel.getSQL(), !isTwoStepSubqry, rowsNum);
         else
-            return UpdatePlan.forInsert(tbl.dataTable(), colNames, keySupplier, valSupplier, keyColIdx, valColIdx,
-                sel.getSQL(), !isTwoStepSubqry, rowsNum);
+            return UpdatePlan.forInsert(tbl.dataTable(), colNames, colTypes, keySupplier, valSupplier, keyColIdx,
+                valColIdx, sel.getSQL(), !isTwoStepSubqry, rowsNum);
     }
 
     /**
@@ -253,10 +261,14 @@ public final class UpdatePlanBuilder {
 
                 String[] colNames = new String[updatedCols.size()];
 
+                int[] colTypes = new int[updatedCols.size()];
+
                 for (int i = 0; i < updatedCols.size(); i++) {
                     colNames[i] = updatedCols.get(i).columnName();
 
-                    if (isValColumn(colNames[i], desc))
+                    colTypes[i] = updatedCols.get(i).resultType().type();
+
+                    if (VAL_FIELD_NAME.equals(colNames[i]))
                         valColIdx = i;
                 }
 
@@ -287,7 +299,7 @@ public final class UpdatePlanBuilder {
 
                 sel = DmlAstUtils.selectForUpdate((GridSqlUpdate) stmt, errKeysPos);
 
-                return UpdatePlan.forUpdate(gridTbl, colNames, newValSupplier, valColIdx, sel.getSQL());
+                return UpdatePlan.forUpdate(gridTbl, colNames, colTypes, newValSupplier, valColIdx, sel.getSQL());
             }
             else {
                 sel = DmlAstUtils.selectForDelete((GridSqlDelete) stmt, errKeysPos);
@@ -471,32 +483,4 @@ public final class UpdatePlanBuilder {
 
         return false;
     }
-
-    /**
-     * Check that given column corresponds to the key with respect to case sensitivity, if needed (should be considered
-     * when the schema escapes all identifiers on table creation).
-     * @param colName Column name.
-     * @param desc Row descriptor.
-     * @return {@code true} if column name corresponds to _key with respect to case sensitivity depending on schema.
-     */
-    private static boolean isKeyColumn(String colName, GridH2RowDescriptor desc) {
-        if (desc.quoteAllIdentifiers())
-            return KEY_FIELD_NAME.equals(colName);
-        else
-            return KEY_FIELD_NAME.equalsIgnoreCase(colName);
-    }
-
-    /**
-     * Check that given column corresponds to the key with respect to case sensitivity, if needed (should be considered
-     * when the schema escapes all identifiers on table creation).
-     * @param colName Column name.
-     * @param desc Row descriptor.
-     * @return {@code true} if column name corresponds to _key with respect to case sensitivity depending on schema.
-     */
-    private static boolean isValColumn(String colName, GridH2RowDescriptor desc) {
-        if (desc.quoteAllIdentifiers())
-            return VAL_FIELD_NAME.equals(colName);
-        else
-            return VAL_FIELD_NAME.equalsIgnoreCase(colName);
-    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/97a6515b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/DmlAstUtils.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/DmlAstUtils.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/DmlAstUtils.java
index 5ff715e..6deb146 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/DmlAstUtils.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/DmlAstUtils.java
@@ -280,7 +280,7 @@ public final class DmlAstUtils {
         GridSqlElement right = op.child(1);
 
         return left instanceof GridSqlColumn &&
-            colName.equalsIgnoreCase(((GridSqlColumn) left).columnName()) &&
+            colName.equals(((GridSqlColumn) left).columnName()) &&
             (right instanceof GridSqlConst || right instanceof GridSqlParameter);
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/97a6515b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractInsertSqlQuerySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractInsertSqlQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractInsertSqlQuerySelfTest.java
index 47369ee..df4259e 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractInsertSqlQuerySelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractInsertSqlQuerySelfTest.java
@@ -217,7 +217,7 @@ public abstract class IgniteCacheAbstractInsertSqlQuerySelfTest extends GridComm
             flds.put("Id", Integer.class.getName());
             flds.put("id", Integer.class.getName());
             flds.put("name", String.class.getName());
-            flds.put("_Val", Integer.class.getName());
+            flds.put("IntVal", Integer.class.getName());
 
             k22p.setFields(flds);
 
@@ -336,7 +336,7 @@ public abstract class IgniteCacheAbstractInsertSqlQuerySelfTest extends GridComm
         if (!isBinaryMarshaller()) {
             Person2 p = new Person2(id);
             p.name = name;
-            p._Val = valFld;
+            p.IntVal = valFld;
 
             return p;
         }
@@ -344,7 +344,7 @@ public abstract class IgniteCacheAbstractInsertSqlQuerySelfTest extends GridComm
             BinaryObjectBuilder o = grid(0).binary().builder("Person2");
             o.setField("id", id);
             o.setField("name", name);
-            o.setField("_Val", valFld);
+            o.setField("IntVal", valFld);
 
             return o.build();
         }
@@ -554,6 +554,6 @@ public abstract class IgniteCacheAbstractInsertSqlQuerySelfTest extends GridComm
 
         /** */
         @QuerySqlField
-        public int _Val;
+        public int IntVal;
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/97a6515b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractSqlDmlQuerySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractSqlDmlQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractSqlDmlQuerySelfTest.java
index 1424163..7f79ec4 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractSqlDmlQuerySelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractSqlDmlQuerySelfTest.java
@@ -166,7 +166,7 @@ public abstract class IgniteCacheAbstractSqlDmlQuerySelfTest extends GridCommonA
      * @param escapeSql whether identifiers should be quoted - see {@link CacheConfiguration#setSqlEscapeAll}
      * @return Cache configuration.
      */
-    private static CacheConfiguration cacheConfig(String name, boolean partitioned, boolean escapeSql) {
+    protected static CacheConfiguration cacheConfig(String name, boolean partitioned, boolean escapeSql) {
         return new CacheConfiguration()
             .setName(name)
             .setCacheMode(partitioned ? CacheMode.PARTITIONED : CacheMode.REPLICATED)

http://git-wip-us.apache.org/repos/asf/ignite/blob/97a6515b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheInsertSqlQuerySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheInsertSqlQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheInsertSqlQuerySelfTest.java
index 4f87740..04a352f 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheInsertSqlQuerySelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheInsertSqlQuerySelfTest.java
@@ -119,7 +119,7 @@ public class IgniteCacheInsertSqlQuerySelfTest extends IgniteCacheAbstractInsert
     public void testFieldsCaseSensitivity() {
         IgniteCache<Key2, Person> p = ignite(0).cache("K22P").withKeepBinary();
 
-        p.query(new SqlFieldsQuery("insert into \"Person2\" (\"Id\", \"id\", \"name\", \"_Val\") values (1, ?, ?, 5), " +
+        p.query(new SqlFieldsQuery("insert into \"Person2\" (\"Id\", \"id\", \"name\", \"IntVal\") values (1, ?, ?, 5), " +
             "(2, 3, 'Alex', 6)").setArgs(4, "Sergi"));
 
         assertEquals(createPerson2(4, "Sergi", 5), p.get(new Key2(1)));

http://git-wip-us.apache.org/repos/asf/ignite/blob/97a6515b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheMergeSqlQuerySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheMergeSqlQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheMergeSqlQuerySelfTest.java
index e487564..0ff3fda 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheMergeSqlQuerySelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheMergeSqlQuerySelfTest.java
@@ -95,7 +95,7 @@ public class IgniteCacheMergeSqlQuerySelfTest extends IgniteCacheAbstractInsertS
     public void testFieldsCaseSensitivity() {
         IgniteCache<Key2, Person> p = ignite(0).cache("K22P").withKeepBinary();
 
-        p.query(new SqlFieldsQuery("merge into \"Person2\" (\"Id\", \"id\", \"name\", \"_Val\") values (1, ?, ?, 5), " +
+        p.query(new SqlFieldsQuery("merge into \"Person2\" (\"Id\", \"id\", \"name\", \"IntVal\") values (1, ?, ?, 5), " +
             "(2, 3, 'Alex', 6)").setArgs(4, "Sergi"));
 
         assertEquals(createPerson2(4, "Sergi", 5), p.get(new Key2(1)));

http://git-wip-us.apache.org/repos/asf/ignite/blob/97a6515b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheUpdateSqlQuerySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheUpdateSqlQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheUpdateSqlQuerySelfTest.java
index 538141f..332a082 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheUpdateSqlQuerySelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheUpdateSqlQuerySelfTest.java
@@ -17,17 +17,44 @@
 
 package org.apache.ignite.internal.processors.cache;
 
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.cache.query.QueryCursor;
 import org.apache.ignite.cache.query.SqlFieldsQuery;
+import org.apache.ignite.cache.query.annotations.QuerySqlField;
+import org.apache.ignite.configuration.CacheConfiguration;
 
 /**
  *
  */
 @SuppressWarnings("unchecked")
 public class IgniteCacheUpdateSqlQuerySelfTest extends IgniteCacheAbstractSqlDmlQuerySelfTest {
+    /** {@inheritDoc} */
+    @Override protected void beforeTestsStarted() throws Exception {
+        super.beforeTestsStarted();
+
+        ignite(0).createCache(createAllTypesCacheConfig());
+    }
+
+    /**
+     *
+     */
+    private static CacheConfiguration createAllTypesCacheConfig() {
+        CacheConfiguration ccfg = cacheConfig("L2AT", true, true);
+
+        ccfg.setIndexedTypes(Long.class, AllTypes.class);
+
+        return ccfg;
+    }
+
     /**
      *
      */
@@ -147,4 +174,299 @@ public class IgniteCacheUpdateSqlQuerySelfTest extends IgniteCacheAbstractSqlDml
         assertEqualsCollections(Arrays.asList("k3", createPerson(3, "Sylvia", "Green"), 3, "Sylvia", "Green"),
             leftovers.get(3));
     }
+
+    /** */
+    public void testTypeConversions() throws ParseException {
+        IgniteCache cache = ignite(0).cache("L2AT");
+
+        cache.query(new SqlFieldsQuery("insert into \"AllTypes\"(_key, _val, \"dateCol\", \"booleanCol\"," +
+            "\"tsCol\") values(2, ?, '2016-11-30 12:00:00', false, DATE '2016-12-01')").setArgs(new AllTypes(2L)));
+
+        List<?> ll = cache.query(new SqlFieldsQuery("select \"primitiveIntsCol\" from \"AllTypes\"")).getAll();
+
+        cache.query(new SqlFieldsQuery("update \"AllTypes\" set \"doubleCol\" = CAST('50' as INT)," +
+            " \"booleanCol\" = 80, \"innerTypeCol\" = ?, \"strCol\" = PI(), \"shortCol\" = " +
+            "CAST(WEEK(PARSEDATETIME('2016-11-30', 'yyyy-MM-dd')) as VARCHAR), " +
+            "\"sqlDateCol\"=TIMESTAMP '2016-12-02 13:47:00', \"tsCol\"=TIMESTAMPADD('MI', 2, " +
+            "DATEADD('DAY', 2, \"tsCol\")), \"primitiveIntsCol\" = ?, \"bytesCol\" = ?")
+            .setArgs(new AllTypes.InnerType(80L), new int[] {2, 3}, new Byte[] {4, 5, 6}));
+
+        AllTypes res = (AllTypes) cache.get(2L);
+
+        assertEquals(new BigDecimal(301.0).doubleValue(), res.bigDecimalCol.doubleValue());
+        assertEquals(50.0, res.doubleCol);
+        assertEquals(2L, (long) res.longCol);
+        assertTrue(res.booleanCol);
+        assertEquals("3.141592653589793", res.strCol);
+        assertTrue(Arrays.equals(new byte[] {0, 1}, res.primitiveBytesCol));
+        assertTrue(Arrays.equals(new Byte[] {4, 5, 6}, res.bytesCol));
+        assertTrue(Arrays.deepEquals(new Integer[] {0, 1}, res.intsCol));
+        assertTrue(Arrays.equals(new int[] {2, 3}, res.primitiveIntsCol));
+        assertEquals(new AllTypes.InnerType(80L), res.innerTypeCol);
+        assertEquals(new SimpleDateFormat("yyyy-MM-dd HH:mm:SS").parse("2016-11-30 12:00:00"), res.dateCol);
+        assertEquals(new SimpleDateFormat("yyyy-MM-dd HH:mm:SS").parse("2016-12-03 00:02:00"), res.tsCol);
+        assertEquals(2, res.intCol);
+        assertEquals(AllTypes.EnumType.ENUMTRUE, res.enumCol);
+        assertEquals(new java.sql.Date(new SimpleDateFormat("yyyy-MM-dd").parse("2016-12-02").getTime()), res.sqlDateCol);
+
+        // 49th week, right?
+        assertEquals(49, res.shortCol);
+    }
+
+    /**
+     *
+     */
+    static final class AllTypes implements Serializable {
+        /**
+         * Data Long.
+         */
+        @QuerySqlField
+        Long longCol;
+
+        /**
+         * Data double.
+         */
+        @QuerySqlField
+        double doubleCol;
+
+        /**
+         * Data String.
+         */
+        @QuerySqlField
+        String strCol;
+
+        /**
+         * Data boolean.
+         */
+        @QuerySqlField
+        boolean booleanCol;
+
+        /**
+         * Date.
+         */
+        @QuerySqlField
+        Date dateCol;
+
+        /**
+         * SQL date (non timestamp).
+         */
+        @QuerySqlField
+        java.sql.Date sqlDateCol;
+
+        /**
+         * Timestamp.
+         */
+        @QuerySqlField
+        Timestamp tsCol;
+
+        /**
+         * Data int.
+         */
+        @QuerySqlField
+        int intCol;
+
+        /**
+         * BigDecimal
+         */
+        @QuerySqlField
+        BigDecimal bigDecimalCol;
+
+        /**
+         * Data bytes array.
+         */
+        @QuerySqlField
+        Byte[] bytesCol;
+
+        /**
+         * Data bytes primitive array.
+         */
+        @QuerySqlField
+        byte[] primitiveBytesCol;
+
+        /**
+         * Data bytes array.
+         */
+        @QuerySqlField
+        Integer[] intsCol;
+
+        /**
+         * Data bytes primitive array.
+         */
+        @QuerySqlField
+        int[] primitiveIntsCol;
+
+        /**
+         * Data bytes array.
+         */
+        @QuerySqlField
+        short shortCol;
+
+        /**
+         * Inner type object.
+         */
+        @QuerySqlField
+        InnerType innerTypeCol;
+
+        /** */
+        static final class InnerType implements Serializable {
+            /** */
+            @QuerySqlField
+            Long innerLongCol;
+
+            /** */
+            @QuerySqlField
+            String innerStrCol;
+
+            /** */
+            @QuerySqlField
+            ArrayList<Long> arrListCol = new ArrayList<>();
+
+            /** */
+            InnerType(Long key) {
+                innerLongCol = key;
+                innerStrCol = Long.toString(key);
+
+                Long m = key % 8;
+
+                for (Integer i = 0; i < m; i++)
+                    arrListCol.add(key + i);
+            }
+
+            /**
+             * {@inheritDoc}
+             */
+            @Override public String toString() {
+                return "[Long=" + Long.toString(innerLongCol) +
+                    ", String='" + innerStrCol + "'" +
+                    ", ArrayList=" + arrListCol.toString() +
+                    "]";
+            }
+
+            /** {@inheritDoc} */
+            @Override public boolean equals(Object o) {
+                if (this == o) return true;
+                if (o == null || getClass() != o.getClass()) return false;
+
+                InnerType innerType = (InnerType) o;
+
+                if (innerLongCol != null ? !innerLongCol.equals(innerType.innerLongCol) : innerType.innerLongCol != null)
+                    return false;
+                if (innerStrCol != null ? !innerStrCol.equals(innerType.innerStrCol) : innerType.innerStrCol != null)
+                    return false;
+                return arrListCol != null ? arrListCol.equals(innerType.arrListCol) : innerType.arrListCol == null;
+
+            }
+
+            /** {@inheritDoc} */
+            @Override public int hashCode() {
+                int res = innerLongCol != null ? innerLongCol.hashCode() : 0;
+                res = 31 * res + (innerStrCol != null ? innerStrCol.hashCode() : 0);
+                res = 31 * res + (arrListCol != null ? arrListCol.hashCode() : 0);
+                return res;
+            }
+        }
+
+        /** */
+        @QuerySqlField
+        EnumType enumCol;
+
+        /** */
+        enum EnumType {
+            /** */
+            ENUMTRUE,
+
+            /** */
+            ENUMFALSE
+        }
+
+        /** */
+        private void init(Long key, String str) {
+            this.longCol = key;
+            this.doubleCol = Math.round(1000 * Math.log10(longCol.doubleValue()));
+            this.bigDecimalCol = BigDecimal.valueOf(doubleCol);
+            this.doubleCol = doubleCol / 100;
+            this.strCol = str;
+            if (key % 2 == 0) {
+                this.booleanCol = true;
+                this.enumCol = EnumType.ENUMTRUE;
+                this.innerTypeCol = new InnerType(key);
+            }
+            else {
+                this.booleanCol = false;
+                this.enumCol = EnumType.ENUMFALSE;
+                this.innerTypeCol = null;
+            }
+            this.intCol = key.intValue();
+            this.bytesCol = new Byte[(int) (key % 10)];
+            this.intsCol = new Integer[(int) (key % 10)];
+            this.primitiveBytesCol = new byte[(int) (key % 10)];
+            this.primitiveIntsCol = new int[(int) (key % 10)];
+            //this.bytesCol = new Byte[10];
+            int b = 0;
+            for (int j = 0; j < bytesCol.length; j++) {
+                if (b == 256)
+                    b = 0;
+                bytesCol[j] = (byte) b;
+                primitiveBytesCol[j] = (byte) b;
+                intsCol[j] = b;
+                primitiveIntsCol[j] = b;
+                b++;
+            }
+            this.shortCol = (short) (((1000 * key) % 50000) - 25000);
+
+            dateCol = new Date();
+        }
+
+        /** */
+        AllTypes(Long key) {
+            this.init(key, Long.toString(key));
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean equals(Object o) {
+            if (this == o) return true;
+            if (o == null || getClass() != o.getClass()) return false;
+
+            AllTypes allTypes = (AllTypes) o;
+
+            if (Double.compare(allTypes.doubleCol, doubleCol) != 0) return false;
+            if (booleanCol != allTypes.booleanCol) return false;
+            if (intCol != allTypes.intCol) return false;
+            if (shortCol != allTypes.shortCol) return false;
+            if (longCol != null ? !longCol.equals(allTypes.longCol) : allTypes.longCol != null) return false;
+            if (strCol != null ? !strCol.equals(allTypes.strCol) : allTypes.strCol != null) return false;
+            if (dateCol != null ? !dateCol.equals(allTypes.dateCol) : allTypes.dateCol != null) return false;
+            if (sqlDateCol != null ? !sqlDateCol.equals(allTypes.sqlDateCol) : allTypes.sqlDateCol != null) return false;
+            if (tsCol != null ? !tsCol.equals(allTypes.tsCol) : allTypes.tsCol != null) return false;
+            if (bigDecimalCol != null ? !bigDecimalCol.equals(allTypes.bigDecimalCol) : allTypes.bigDecimalCol != null)
+                return false;
+            // Probably incorrect - comparing Object[] arrays with Arrays.equals
+            if (!Arrays.equals(bytesCol, allTypes.bytesCol)) return false;
+            if (innerTypeCol != null ? !innerTypeCol.equals(allTypes.innerTypeCol) : allTypes.innerTypeCol != null)
+                return false;
+            return enumCol == allTypes.enumCol;
+
+        }
+
+        /** {@inheritDoc} */
+        @Override public int hashCode() {
+            int res;
+            long temp;
+            res = longCol != null ? longCol.hashCode() : 0;
+            temp = Double.doubleToLongBits(doubleCol);
+            res = 31 * res + (int) (temp ^ (temp >>> 32));
+            res = 31 * res + (strCol != null ? strCol.hashCode() : 0);
+            res = 31 * res + (booleanCol ? 1 : 0);
+            res = 31 * res + (dateCol != null ? dateCol.hashCode() : 0);
+            res = 31 * res + (sqlDateCol != null ? sqlDateCol.hashCode() : 0);
+            res = 31 * res + (tsCol != null ? tsCol.hashCode() : 0);
+            res = 31 * res + intCol;
+            res = 31 * res + (bigDecimalCol != null ? bigDecimalCol.hashCode() : 0);
+            res = 31 * res + Arrays.hashCode(bytesCol);
+            res = 31 * res + (int) shortCol;
+            res = 31 * res + (innerTypeCol != null ? innerTypeCol.hashCode() : 0);
+            res = 31 * res + (enumCol != null ? enumCol.hashCode() : 0);
+            return res;
+        }
+    }
 }


[49/50] ignite git commit: .NET: Fix compilation (restore IgniteProcess.Join overload)

Posted by sb...@apache.org.
.NET: Fix compilation (restore IgniteProcess.Join overload)


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 4e1fc406581c65b89b0b98c7d376df3cb6b8d95b
Parents: 9e9e371
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Mon Dec 5 17:20:56 2016 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Mon Dec 5 17:20:56 2016 +0300

----------------------------------------------------------------------
 .../Process/IgniteProcess.cs                     | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/4e1fc406/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Process/IgniteProcess.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Process/IgniteProcess.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Process/IgniteProcess.cs
index 11fe614..5aec1ac 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Process/IgniteProcess.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Process/IgniteProcess.cs
@@ -260,6 +260,25 @@ namespace Apache.Ignite.Core.Tests.Process
         }
 
         /// <summary>
+        /// Join process with timeout.
+        /// </summary>
+        /// <param name="timeout">Timeout in milliseconds.</param>
+        /// <param name="exitCode">Exit code.</param>
+        /// <returns><c>True</c> if process exit occurred before timeout.</returns>
+        public bool Join(int timeout, out int exitCode)
+        {
+            if (_proc.WaitForExit(timeout))
+            {
+                exitCode = _proc.ExitCode;
+
+                return true;
+            }
+            exitCode = 0;
+
+            return false;
+        }
+
+        /// <summary>
         /// Attach output reader to the process.
         /// </summary>
         /// <param name="proc">Process.</param>


[30/50] ignite git commit: IGNITE-4243 Fixed build.

Posted by sb...@apache.org.
IGNITE-4243 Fixed build.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 44bb361491589cac93899ce9b45f9ad1a535a950
Parents: e205214
Author: Andrey Novikov <an...@gridgain.com>
Authored: Tue Nov 29 09:51:28 2016 +0700
Committer: Andrey Novikov <an...@gridgain.com>
Committed: Tue Nov 29 09:51:28 2016 +0700

----------------------------------------------------------------------
 assembly/release-fabric-base.xml | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/44bb3614/assembly/release-fabric-base.xml
----------------------------------------------------------------------
diff --git a/assembly/release-fabric-base.xml b/assembly/release-fabric-base.xml
index 7b3d8cf..c008083 100644
--- a/assembly/release-fabric-base.xml
+++ b/assembly/release-fabric-base.xml
@@ -203,6 +203,7 @@
             <includes>
                 <include>rest/**</include>
                 <include>memcached/**</include>
+                <include>redis/**</include>
                 <include>schema-import/src/**</include>
                 <include>schema-import/bin/**</include>
                 <include>schema-import/README.txt</include>


[04/50] ignite git commit: IGNITE-4297 .NET: Update NuGet scripts to clean up jars in bin folder

Posted by sb...@apache.org.
IGNITE-4297 .NET: Update NuGet scripts to clean up jars in bin folder


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

Branch: refs/heads/ignite-comm-balance-master
Commit: c4badeef809851c1ab890e2d6358834f698e94ad
Parents: d5dc581
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Thu Nov 24 16:32:02 2016 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Thu Nov 24 16:33:45 2016 +0300

----------------------------------------------------------------------
 .../dotnet/Apache.Ignite.Core/NuGet/Install.ps1       | 14 ++++++++++++++
 .../dotnet/Apache.Ignite.Core/NuGet/Uninstall.ps1     | 14 ++++++++++++++
 2 files changed, 28 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/c4badeef/modules/platforms/dotnet/Apache.Ignite.Core/NuGet/Install.ps1
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/NuGet/Install.ps1 b/modules/platforms/dotnet/Apache.Ignite.Core/NuGet/Install.ps1
index d4e97bb..e7cdad4 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/NuGet/Install.ps1
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/NuGet/Install.ps1
@@ -24,4 +24,18 @@ if (!$currentPostBuildCmd.Contains($IgnitePostBuildCmd)) {
     $project.Properties.Item("PostBuildEvent").Value += $IgnitePostBuildCmd
 }
 
+# Save
+$project.Save()
+
+# Remove bin\Libs folders with old jars
+$project.ConfigurationManager | % { 
+    $projPath = $project.Properties.Item("FullPath").Value
+    $binDir = ($_.Properties | Where Name -match OutputPath).Value
+
+    $binPath = Join-Path $projPath $binDir
+    $libsPath = Join-Path $binPath "Libs"
+
+    Remove-Item -Force -Recurse -ErrorAction SilentlyContinue $libsPath
+}
+
 Write-Host "Welcome to Apache Ignite.NET!"
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/c4badeef/modules/platforms/dotnet/Apache.Ignite.Core/NuGet/Uninstall.ps1
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/NuGet/Uninstall.ps1 b/modules/platforms/dotnet/Apache.Ignite.Core/NuGet/Uninstall.ps1
index f81f41c..634c78e 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/NuGet/Uninstall.ps1
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/NuGet/Uninstall.ps1
@@ -19,3 +19,17 @@ $currentPostBuildCmd = $project.Properties.Item("PostBuildEvent").Value
 
 # Remove our post build command from it (if it's there)
 $project.Properties.Item("PostBuildEvent").Value = $currentPostBuildCmd.Replace($IgnitePostBuildCmd, "")
+
+# Save
+$project.Save()
+
+# Remove bin\Libs folders with jars
+$project.ConfigurationManager | % { 
+    $projPath = $project.Properties.Item("FullPath").Value
+    $binDir = ($_.Properties | Where Name -match OutputPath).Value
+
+    $binPath = Join-Path $projPath $binDir
+    $libsPath = Join-Path $binPath "Libs"
+
+    Remove-Item -Force -Recurse -ErrorAction SilentlyContinue $libsPath
+}
\ No newline at end of file


[06/50] ignite git commit: Fixed JavaDoc warnings in Redis REST classes.

Posted by sb...@apache.org.
Fixed JavaDoc warnings in Redis REST classes.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: deee3b9f64406e084e65c1f7e48e14270e8ad688
Parents: fabb77d
Author: devozerov <vo...@gridgain.com>
Authored: Fri Nov 25 11:15:17 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Fri Nov 25 11:15:17 2016 +0300

----------------------------------------------------------------------
 .../rest/handlers/redis/key/GridRedisDelCommandHandler.java | 9 +++++++--
 .../handlers/redis/key/GridRedisExistsCommandHandler.java   | 9 +++++++--
 .../redis/server/GridRedisDbSizeCommandHandler.java         | 7 ++++++-
 .../redis/string/GridRedisAppendCommandHandler.java         | 9 +++++++--
 .../handlers/redis/string/GridRedisGetCommandHandler.java   | 9 +++++++--
 .../redis/string/GridRedisGetRangeCommandHandler.java       | 9 +++++++--
 .../redis/string/GridRedisGetSetCommandHandler.java         | 9 +++++++--
 .../redis/string/GridRedisIncrDecrCommandHandler.java       | 9 +++++++--
 .../handlers/redis/string/GridRedisMGetCommandHandler.java  | 9 +++++++--
 .../handlers/redis/string/GridRedisMSetCommandHandler.java  | 9 +++++++--
 .../handlers/redis/string/GridRedisSetCommandHandler.java   | 9 +++++++--
 .../redis/string/GridRedisSetRangeCommandHandler.java       | 9 +++++++--
 .../redis/string/GridRedisStrlenCommandHandler.java         | 9 +++++++--
 13 files changed, 90 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/deee3b9f/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/key/GridRedisDelCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/key/GridRedisDelCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/key/GridRedisDelCommandHandler.java
index dc9af19..0b2e79b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/key/GridRedisDelCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/key/GridRedisDelCommandHandler.java
@@ -46,8 +46,13 @@ public class GridRedisDelCommandHandler extends GridRedisRestCommandHandler {
         DEL
     );
 
-    /** {@inheritDoc} */
-    public GridRedisDelCommandHandler(final IgniteLogger log, final GridRestProtocolHandler hnd) {
+    /**
+     * Constructor.
+     *
+     * @param log Logger.
+     * @param hnd Handler.
+     */
+    public GridRedisDelCommandHandler(IgniteLogger log, GridRestProtocolHandler hnd) {
         super(log, hnd);
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/deee3b9f/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/key/GridRedisExistsCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/key/GridRedisExistsCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/key/GridRedisExistsCommandHandler.java
index 26b3871..c0248a0 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/key/GridRedisExistsCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/key/GridRedisExistsCommandHandler.java
@@ -46,8 +46,13 @@ public class GridRedisExistsCommandHandler extends GridRedisRestCommandHandler {
         EXISTS
     );
 
-    /** {@inheritDoc} */
-    public GridRedisExistsCommandHandler(final IgniteLogger log, final GridRestProtocolHandler hnd) {
+    /**
+     * Constructor.
+     *
+     * @param log Logger.
+     * @param hnd Handler.
+     */
+    public GridRedisExistsCommandHandler(IgniteLogger log, GridRestProtocolHandler hnd) {
         super(log, hnd);
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/deee3b9f/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/server/GridRedisDbSizeCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/server/GridRedisDbSizeCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/server/GridRedisDbSizeCommandHandler.java
index 56d5e28..c2a405e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/server/GridRedisDbSizeCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/server/GridRedisDbSizeCommandHandler.java
@@ -44,7 +44,12 @@ public class GridRedisDbSizeCommandHandler extends GridRedisRestCommandHandler {
         DBSIZE
     );
 
-    /** {@inheritDoc} */
+    /**
+     * Constructor.
+     *
+     * @param log Logger.
+     * @param hnd Handler.
+     */
     public GridRedisDbSizeCommandHandler(final IgniteLogger log, final GridRestProtocolHandler hnd) {
         super(log, hnd);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/deee3b9f/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisAppendCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisAppendCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisAppendCommandHandler.java
index 7e27621..54b828f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisAppendCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisAppendCommandHandler.java
@@ -50,8 +50,13 @@ public class GridRedisAppendCommandHandler extends GridRedisRestCommandHandler {
     /** Position of the value. */
     private static final int VAL_POS = 2;
 
-    /** {@inheritDoc} */
-    public GridRedisAppendCommandHandler(final IgniteLogger log, final GridRestProtocolHandler hnd) {
+    /**
+     * Constructor.
+     *
+     * @param log Logger.
+     * @param hnd Handler.
+     */
+    public GridRedisAppendCommandHandler(IgniteLogger log, GridRestProtocolHandler hnd) {
         super(log, hnd);
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/deee3b9f/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetCommandHandler.java
index 7be53b2..a275522 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetCommandHandler.java
@@ -44,8 +44,13 @@ public class GridRedisGetCommandHandler extends GridRedisRestCommandHandler {
         GET
     );
 
-    /** {@inheritDoc} */
-    public GridRedisGetCommandHandler(final IgniteLogger log, final GridRestProtocolHandler hnd) {
+    /**
+     * Constructor.
+     *
+     * @param log Logger.
+     * @param hnd Handler.
+     */
+    public GridRedisGetCommandHandler(IgniteLogger log, GridRestProtocolHandler hnd) {
         super(log, hnd);
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/deee3b9f/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetRangeCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetRangeCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetRangeCommandHandler.java
index 4478c19..38e3ffe 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetRangeCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetRangeCommandHandler.java
@@ -51,8 +51,13 @@ public class GridRedisGetRangeCommandHandler extends GridRedisRestCommandHandler
     /** End offset position in Redis message parameters. */
     private static final int END_OFFSET_POS = 2;
 
-    /** {@inheritDoc} */
-    public GridRedisGetRangeCommandHandler(final IgniteLogger log, final GridRestProtocolHandler hnd) {
+    /**
+     * Constructor.
+     *
+     * @param log Logger.
+     * @param hnd Handler.
+     */
+    public GridRedisGetRangeCommandHandler(IgniteLogger log, GridRestProtocolHandler hnd) {
         super(log, hnd);
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/deee3b9f/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetSetCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetSetCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetSetCommandHandler.java
index 781b8ab..88067e7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetSetCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetSetCommandHandler.java
@@ -48,8 +48,13 @@ public class GridRedisGetSetCommandHandler extends GridRedisRestCommandHandler {
     /** Value position in Redis message. */
     private static final int VAL_POS = 2;
 
-    /** {@inheritDoc} */
-    public GridRedisGetSetCommandHandler(final IgniteLogger log, final GridRestProtocolHandler hnd) {
+    /**
+     * Constructor.
+     *
+     * @param log Logger.
+     * @param hnd Handler.
+     */
+    public GridRedisGetSetCommandHandler(IgniteLogger log, GridRestProtocolHandler hnd) {
         super(log, hnd);
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/deee3b9f/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisIncrDecrCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisIncrDecrCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisIncrDecrCommandHandler.java
index 382696d..4052ad5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisIncrDecrCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisIncrDecrCommandHandler.java
@@ -57,8 +57,13 @@ public class GridRedisIncrDecrCommandHandler extends GridRedisRestCommandHandler
     /** Delta position in the message. */
     private static final int DELTA_POS = 2;
 
-    /** {@inheritDoc} */
-    public GridRedisIncrDecrCommandHandler(final IgniteLogger log, final GridRestProtocolHandler hnd) {
+    /**
+     * Constructor.
+     *
+     * @param log Logger.
+     * @param hnd Handler.
+     */
+    public GridRedisIncrDecrCommandHandler(IgniteLogger log, GridRestProtocolHandler hnd) {
         super(log, hnd);
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/deee3b9f/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisMGetCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisMGetCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisMGetCommandHandler.java
index 87557d6..1ef8348 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisMGetCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisMGetCommandHandler.java
@@ -46,8 +46,13 @@ public class GridRedisMGetCommandHandler extends GridRedisRestCommandHandler {
         MGET
     );
 
-    /** {@inheritDoc} */
-    public GridRedisMGetCommandHandler(final IgniteLogger log, final GridRestProtocolHandler hnd) {
+    /**
+     * Constructor.
+     *
+     * @param log Logger.
+     * @param hnd Handler.
+     */
+    public GridRedisMGetCommandHandler(IgniteLogger log, GridRestProtocolHandler hnd) {
         super(log, hnd);
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/deee3b9f/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisMSetCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisMSetCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisMSetCommandHandler.java
index 3e9076b..493a699 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisMSetCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisMSetCommandHandler.java
@@ -46,8 +46,13 @@ public class GridRedisMSetCommandHandler extends GridRedisRestCommandHandler {
         MSET
     );
 
-    /** {@inheritDoc} */
-    public GridRedisMSetCommandHandler(final IgniteLogger log, final GridRestProtocolHandler hnd) {
+    /**
+     * Constructor.
+     *
+     * @param log Logger.
+     * @param hnd Handler.
+     */
+    public GridRedisMSetCommandHandler(IgniteLogger log, GridRestProtocolHandler hnd) {
         super(log, hnd);
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/deee3b9f/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java
index c33a8ca..956d4cb 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java
@@ -52,8 +52,13 @@ public class GridRedisSetCommandHandler extends GridRedisRestCommandHandler {
     /** Value position in Redis message. */
     private static final int VAL_POS = 2;
 
-    /** {@inheritDoc} */
-    public GridRedisSetCommandHandler(final IgniteLogger log, final GridRestProtocolHandler hnd) {
+    /**
+     * Constructor.
+     *
+     * @param log Logger.
+     * @param hnd Handler.
+     */
+    public GridRedisSetCommandHandler(IgniteLogger log, GridRestProtocolHandler hnd) {
         super(log, hnd);
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/deee3b9f/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetRangeCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetRangeCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetRangeCommandHandler.java
index 2cd931e..0de4412 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetRangeCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetRangeCommandHandler.java
@@ -55,8 +55,13 @@ public class GridRedisSetRangeCommandHandler extends GridRedisRestCommandHandler
     /** Maximum offset. */
     private static final int MAX_OFFSET = 536870911;
 
-    /** {@inheritDoc} */
-    public GridRedisSetRangeCommandHandler(final IgniteLogger log, final GridRestProtocolHandler hnd) {
+    /**
+     * Constructor.
+     *
+     * @param log Logger.
+     * @param hnd Handler.
+     */
+    public GridRedisSetRangeCommandHandler(IgniteLogger log, GridRestProtocolHandler hnd) {
         super(log, hnd);
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/deee3b9f/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisStrlenCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisStrlenCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisStrlenCommandHandler.java
index b13ae62..79b0433 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisStrlenCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisStrlenCommandHandler.java
@@ -44,8 +44,13 @@ public class GridRedisStrlenCommandHandler extends GridRedisRestCommandHandler {
         STRLEN
     );
 
-    /** {@inheritDoc} */
-    public GridRedisStrlenCommandHandler(final IgniteLogger log, final GridRestProtocolHandler hnd) {
+    /**
+     * Constructor.
+     *
+     * @param log Logger.
+     * @param hnd Handler.
+     */
+    public GridRedisStrlenCommandHandler(IgniteLogger log, GridRestProtocolHandler hnd) {
         super(log, hnd);
     }
 


[08/50] ignite git commit: IGNITE-4306 .NET: Add diagnostic information to examples test

Posted by sb...@apache.org.
IGNITE-4306 .NET: Add diagnostic information to examples test


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

Branch: refs/heads/ignite-comm-balance-master
Commit: b04460c6b3ad5891f12a23ad6dc8a08625aad031
Parents: 7b35ba7
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Fri Nov 25 12:11:49 2016 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Fri Nov 25 12:11:49 2016 +0300

----------------------------------------------------------------------
 .../Examples/ExamplesTest.cs                    |  7 +++-
 .../Process/IgniteProcess.cs                    | 40 ++++++--------------
 2 files changed, 16 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/b04460c6/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExamplesTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExamplesTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExamplesTest.cs
index 8c017d1..61bfb5c 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExamplesTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExamplesTest.cs
@@ -92,8 +92,11 @@ namespace Apache.Ignite.Core.Tests.Examples
 
                     var proc = new IgniteProcess(args.ToArray());
 
-                    Assert.IsTrue(ignite.WaitTopology(i + 2));
-                    Assert.IsTrue(proc.Alive);
+                    Assert.IsTrue(ignite.WaitTopology(i + 2), 
+                        string.Format("Standalone node failed to join topology: [{0}]", proc.GetInfo()));
+
+                    Assert.IsTrue(proc.Alive, string.Format("Standalone node stopped unexpectedly: [{0}]", 
+                        proc.GetInfo()));
                 }
 
                 Ignition.ClientMode = clientMode;

http://git-wip-us.apache.org/repos/asf/ignite/blob/b04460c6/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Process/IgniteProcess.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Process/IgniteProcess.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Process/IgniteProcess.cs
index 852551a..11fe614 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Process/IgniteProcess.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Process/IgniteProcess.cs
@@ -214,6 +214,17 @@ namespace Apache.Ignite.Core.Tests.Process
         }
 
         /// <summary>
+        /// Gets the process.
+        /// </summary>
+        public string GetInfo()
+        {
+            return Alive
+                ? string.Format("Id={0}, Alive={1}", _proc.Id, Alive)
+                : string.Format("Id={0}, Alive={1}, ExitCode={2}, ExitTime={3}",
+                    _proc.Id, Alive, _proc.ExitCode, _proc.ExitTime);
+        }
+
+        /// <summary>
         /// Kill process.
         /// </summary>
         public void Kill()
@@ -249,35 +260,6 @@ namespace Apache.Ignite.Core.Tests.Process
         }
 
         /// <summary>
-        /// Join process with timeout.
-        /// </summary>
-        /// <param name="timeout">Timeout in milliseconds.</param>
-        /// <returns><c>True</c> if process exit occurred before timeout.</returns>
-        public bool Join(int timeout)
-        {
-            return _proc.WaitForExit(timeout);
-        }
-
-        /// <summary>
-        /// Join process with timeout.
-        /// </summary>
-        /// <param name="timeout">Timeout in milliseconds.</param>
-        /// <param name="exitCode">Exit code.</param>
-        /// <returns><c>True</c> if process exit occurred before timeout.</returns>
-        public bool Join(int timeout, out int exitCode)
-        {
-            if (_proc.WaitForExit(timeout))
-            {
-                exitCode = _proc.ExitCode;
-
-                return true;
-            }
-            exitCode = 0;
-
-            return false;
-        }
-
-        /// <summary>
         /// Attach output reader to the process.
         /// </summary>
         /// <param name="proc">Process.</param>


[36/50] ignite git commit: IGNITE-4343: Fixed update logic in DmlStatementsProcessor. This closes #1304.

Posted by sb...@apache.org.
IGNITE-4343: Fixed update logic in DmlStatementsProcessor. This closes #1304.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: b2692adace32b7308ce53d5f93bd56c506eeed36
Parents: af24a9e
Author: Alexander Paschenko <al...@gmail.com>
Authored: Fri Dec 2 12:48:08 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Fri Dec 2 12:48:08 2016 +0300

----------------------------------------------------------------------
 .../query/h2/DmlStatementsProcessor.java        | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/b2692ada/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java
index d57f95f..c2c8726 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java
@@ -492,6 +492,9 @@ public class DmlStatementsProcessor {
 
             newVal = plan.valSupplier.apply(e);
 
+            if (newVal == null)
+                throw new IgniteSQLException("New value for UPDATE must not be null", IgniteQueryErrorCode.NULL_VALUE);
+
             if (bin && !(val instanceof BinaryObject))
                 val = cctx.grid().binary().toBinary(val);
 
@@ -858,7 +861,7 @@ public class DmlStatementsProcessor {
 
         /** {@inheritDoc} */
         @Override public Boolean process(MutableEntry<Object, Object> entry, Object... arguments) throws EntryProcessorException {
-            if (entry.getValue() != null)
+            if (entry.exists())
                 return false;
 
             entry.setValue(val);
@@ -878,17 +881,28 @@ public class DmlStatementsProcessor {
 
         /** */
         private ModifyingEntryProcessor(Object val, IgniteInClosure<MutableEntry<Object, Object>> entryModifier) {
+            assert val != null;
+
             this.val = val;
             this.entryModifier = entryModifier;
         }
 
         /** {@inheritDoc} */
         @Override public Boolean process(MutableEntry<Object, Object> entry, Object... arguments) throws EntryProcessorException {
+            if (!entry.exists())
+                return null; // Someone got ahead of us and removed this entry, let's skip it.
+
+            Object entryVal = entry.getValue();
+
+            if (entryVal == null)
+                return null;
+
             // Something happened to the cache while we were performing map-reduce.
-            if (!F.eq(entry.getValue(), val))
+            if (!F.eq(entryVal, val))
                 return false;
 
             entryModifier.apply(entry);
+
             return null; // To leave out only erroneous keys - nulls are skipped on results' processing.
         }
     }
@@ -910,6 +924,8 @@ public class DmlStatementsProcessor {
 
         /** */
         private EntryValueUpdater(Object val) {
+            assert val != null;
+
             this.val = val;
         }
 


[31/50] ignite git commit: IGNITE-4305 marshalling fix

Posted by sb...@apache.org.
IGNITE-4305 marshalling fix

(cherry picked from commit f906dd6)


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

Branch: refs/heads/ignite-comm-balance-master
Commit: d0e0eaacce25d76199c20db2ad6ada615160fb4f
Parents: 44bb361
Author: Konstantin Dudkov <kd...@ya.ru>
Authored: Mon Nov 28 12:59:02 2016 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Tue Nov 29 11:49:24 2016 +0300

----------------------------------------------------------------------
 .../dht/atomic/GridNearAtomicSingleUpdateInvokeRequest.java       | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/d0e0eaac/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateInvokeRequest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateInvokeRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateInvokeRequest.java
index f18a13c..6582063 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateInvokeRequest.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateInvokeRequest.java
@@ -203,7 +203,8 @@ public class GridNearAtomicSingleUpdateInvokeRequest extends GridNearAtomicSingl
             addDepInfo = true;
 
         if (entryProcessor != null && entryProcessorBytes == null) {
-            prepareObject(entryProcessor, cctx);
+            if (addDepInfo)
+                prepareObject(entryProcessor, cctx);
 
             entryProcessorBytes = CU.marshal(cctx, entryProcessor);
         }


[10/50] ignite git commit: IGNITE-2294: Fixed incorrect merge of BinaryObjectOffheapImpl.typeId().

Posted by sb...@apache.org.
IGNITE-2294: Fixed incorrect merge of BinaryObjectOffheapImpl.typeId().


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 0822dc2370e75427078875bcd67051eb9cd44779
Parents: 7b35ba7
Author: devozerov <vo...@gridgain.com>
Authored: Fri Nov 25 12:38:13 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Fri Nov 25 12:38:13 2016 +0300

----------------------------------------------------------------------
 .../org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/0822dc23/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java
index 354ac11..f9a31db 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java
@@ -96,7 +96,7 @@ public class BinaryObjectOffheapImpl extends BinaryObjectExImpl implements Exter
         if (typeId == GridBinaryMarshaller.UNREGISTERED_TYPE_ID) {
             int off = start + GridBinaryMarshaller.DFLT_HDR_LEN;
 
-            String clsName = BinaryUtils.doReadClassName(new BinaryOffheapInputStream(off, size));
+            String clsName = BinaryUtils.doReadClassName(new BinaryOffheapInputStream(ptr + off, size));
 
             typeId = ctx.typeId(clsName);
         }


[13/50] ignite git commit: IGNITE-4304: Improved logging of deferred TX ack message in case remote node left the grid.

Posted by sb...@apache.org.
IGNITE-4304: Improved logging of deferred TX ack message in case remote node left the grid.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: 5b2eacfc25fcffad6f438b63e08d9187635f25d3
Parents: 43ec85f
Author: devozerov <vo...@gridgain.com>
Authored: Fri Nov 25 14:09:42 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Fri Nov 25 14:09:42 2016 +0300

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


http://git-wip-us.apache.org/repos/asf/ignite/blob/5b2eacfc/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
index c72d7f7..e2e9868 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
@@ -53,7 +53,6 @@ import org.apache.ignite.internal.processors.cache.GridCacheMvccFuture;
 import org.apache.ignite.internal.processors.cache.GridCacheReturnCompletableWrapper;
 import org.apache.ignite.internal.processors.cache.GridCacheSharedManagerAdapter;
 import org.apache.ignite.internal.processors.cache.GridDeferredAckMessageSender;
-import org.apache.ignite.internal.processors.cache.KeyCacheObject;
 import org.apache.ignite.internal.processors.cache.distributed.GridCacheMappedVersion;
 import org.apache.ignite.internal.processors.cache.distributed.GridCacheTxFinishSync;
 import org.apache.ignite.internal.processors.cache.distributed.GridCacheTxRecoveryFuture;
@@ -282,9 +281,12 @@ public class IgniteTxManager extends GridCacheSharedManagerAdapter {
                 try {
                     cctx.io().send(nodeId, ackReq, GridIoPolicy.SYSTEM_POOL);
                 }
+                catch (ClusterTopologyCheckedException e) {
+                    if (log.isDebugEnabled())
+                        log.debug("Failed to send one phase commit ack to backup node because it left grid: " + nodeId);
+                }
                 catch (IgniteCheckedException e) {
-                    log.error("Failed to send one phase commit ack to backup node [backup=" +
-                        nodeId + ']', e);
+                    log.error("Failed to send one phase commit ack to backup node [backup=" + nodeId + ']', e);
                 }
                 finally {
                     cctx.kernalContext().gateway().readUnlock();


[05/50] ignite git commit: IGNITE-4280 Test fix for IgniteBinaryCacheQueryTestSuite. This closes #1275.

Posted by sb...@apache.org.
IGNITE-4280 Test fix for IgniteBinaryCacheQueryTestSuite. This closes #1275.


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

Branch: refs/heads/ignite-comm-balance-master
Commit: fabb77d17859a0a6318c2fe11182ab753e2198e0
Parents: c4badee
Author: Alexander Paschenko <al...@gmail.com>
Authored: Thu Nov 24 18:51:07 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Thu Nov 24 18:51:07 2016 +0300

----------------------------------------------------------------------
 .../jdbc2/JdbcAbstractDmlStatementSelfTest.java |  2 ++
 .../org/apache/ignite/cache/QueryEntity.java    |  2 +-
 .../processors/query/GridQueryProcessor.java    | 23 ++++++++++----------
 .../odbc-example/config/example-odbc.xml        |  8 +++++++
 .../odbc-test/config/queries-test-noodbc.xml    |  4 ++++
 .../cpp/odbc-test/config/queries-test.xml       |  4 ++++
 6 files changed, 30 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/fabb77d1/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcAbstractDmlStatementSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcAbstractDmlStatementSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcAbstractDmlStatementSelfTest.java
index 4a97aef..1590067 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcAbstractDmlStatementSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcAbstractDmlStatementSelfTest.java
@@ -118,6 +118,8 @@ public abstract class JdbcAbstractDmlStatementSelfTest extends GridCommonAbstrac
         e.addQueryField("firstName", String.class.getName(), null);
         e.addQueryField("lastName", String.class.getName(), null);
 
+        e.setKeyFields(Collections.<String>emptySet());
+
         ccfg.setQueryEntities(Collections.singletonList(e));
 
         return cfg;

http://git-wip-us.apache.org/repos/asf/ignite/blob/fabb77d1/modules/core/src/main/java/org/apache/ignite/cache/QueryEntity.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/cache/QueryEntity.java b/modules/core/src/main/java/org/apache/ignite/cache/QueryEntity.java
index fc3b921..c8abdfa 100644
--- a/modules/core/src/main/java/org/apache/ignite/cache/QueryEntity.java
+++ b/modules/core/src/main/java/org/apache/ignite/cache/QueryEntity.java
@@ -45,7 +45,7 @@ public class QueryEntity implements Serializable {
     private LinkedHashMap<String, String> fields = new LinkedHashMap<>();
 
     /** Set of field names that belong to the key. */
-    private Set<String> keyFields = new HashSet<>();
+    private Set<String> keyFields;
 
     /** Aliases. */
     private Map<String, String> aliases = new HashMap<>();

http://git-wip-us.apache.org/repos/asf/ignite/blob/fabb77d1/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 fe773c1..0fc6044 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
@@ -44,7 +44,6 @@ import javax.cache.Cache;
 import javax.cache.CacheException;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
-import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.binary.BinaryField;
 import org.apache.ignite.binary.BinaryObject;
 import org.apache.ignite.binary.BinaryObjectBuilder;
@@ -1425,7 +1424,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
             aliases = Collections.emptyMap();
 
         for (Map.Entry<String, Class<?>> entry : meta.getAscendingFields().entrySet()) {
-            BinaryProperty prop = buildBinaryProperty(entry.getKey(), entry.getValue(), aliases, null, d);
+            BinaryProperty prop = buildBinaryProperty(entry.getKey(), entry.getValue(), aliases, null);
 
             d.addProperty(prop, false);
 
@@ -1437,7 +1436,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
         }
 
         for (Map.Entry<String, Class<?>> entry : meta.getDescendingFields().entrySet()) {
-            BinaryProperty prop = buildBinaryProperty(entry.getKey(), entry.getValue(), aliases, null, d);
+            BinaryProperty prop = buildBinaryProperty(entry.getKey(), entry.getValue(), aliases, null);
 
             d.addProperty(prop, false);
 
@@ -1449,7 +1448,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
         }
 
         for (String txtIdx : meta.getTextFields()) {
-            BinaryProperty prop = buildBinaryProperty(txtIdx, String.class, aliases, null, d);
+            BinaryProperty prop = buildBinaryProperty(txtIdx, String.class, aliases, null);
 
             d.addProperty(prop, false);
 
@@ -1468,7 +1467,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
 
                 for (Map.Entry<String, IgniteBiTuple<Class<?>, Boolean>> idxField : idxFields.entrySet()) {
                     BinaryProperty prop = buildBinaryProperty(idxField.getKey(), idxField.getValue().get1(), aliases,
-                        null, d);
+                        null);
 
                     d.addProperty(prop, false);
 
@@ -1482,7 +1481,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
         }
 
         for (Map.Entry<String, Class<?>> entry : meta.getQueryFields().entrySet()) {
-            BinaryProperty prop = buildBinaryProperty(entry.getKey(), entry.getValue(), aliases, null, d);
+            BinaryProperty prop = buildBinaryProperty(entry.getKey(), entry.getValue(), aliases, null);
 
             if (!d.props.containsKey(prop.name()))
                 d.addProperty(prop, false);
@@ -1509,7 +1508,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
             Boolean isKeyField = (hasKeyFields ? keyFields.contains(entry.getKey()) : null);
 
             BinaryProperty prop = buildBinaryProperty(entry.getKey(), U.classForName(entry.getValue(), Object.class, true),
-                aliases, isKeyField, d);
+                aliases, isKeyField);
 
             d.addProperty(prop, false);
         }
@@ -1609,12 +1608,12 @@ public class GridQueryProcessor extends GridProcessorAdapter {
      *      nested fields.
      * @param resType Result type.
      * @param aliases Aliases.
-     * @param isKeyField
-     *@param d Type descriptor.  @return Binary property.
+     * @param isKeyField Key ownership flag, as defined in {@link QueryEntity#keyFields}: {@code true} if field belongs
+     *      to key, {@code false} if it belongs to value, {@code null} if QueryEntity#keyFields is null.
+     * @return Binary property.
      */
     private BinaryProperty buildBinaryProperty(String pathStr, Class<?> resType, Map<String, String> aliases,
-        @Nullable Boolean isKeyField, TypeDescriptor d) throws IgniteCheckedException {
-
+        @Nullable Boolean isKeyField) throws IgniteCheckedException {
         String[] path = pathStr.split("\\.");
 
         BinaryProperty res = null;
@@ -2190,7 +2189,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
 
             if (isKeyProp0 == 0)
                 throw new IllegalStateException("Ownership flag not set for binary property. Have you set 'keyFields'" +
-                    " property of QueryEntity in configuration XML?");
+                    " property of QueryEntity in programmatic or XML configuration?");
 
             return isKeyProp0 == 1;
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/fabb77d1/modules/platforms/cpp/examples/odbc-example/config/example-odbc.xml
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/examples/odbc-example/config/example-odbc.xml b/modules/platforms/cpp/examples/odbc-example/config/example-odbc.xml
index 864f950..e19075e 100644
--- a/modules/platforms/cpp/examples/odbc-example/config/example-odbc.xml
+++ b/modules/platforms/cpp/examples/odbc-example/config/example-odbc.xml
@@ -56,6 +56,10 @@
                                     </map>
                                 </property>
 
+                                <property name="keyFields">
+                                    <list></list>
+                                </property>
+
                                 <property name="indexes">
                                     <list>
                                         <bean class="org.apache.ignite.cache.QueryIndex">
@@ -85,6 +89,10 @@
                                         <entry key="name" value="java.lang.String"/>
                                     </map>
                                 </property>
+
+                                <property name="keyFields">
+                                    <list></list>
+                                </property>
                             </bean>
                         </list>
                     </property>

http://git-wip-us.apache.org/repos/asf/ignite/blob/fabb77d1/modules/platforms/cpp/odbc-test/config/queries-test-noodbc.xml
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc-test/config/queries-test-noodbc.xml b/modules/platforms/cpp/odbc-test/config/queries-test-noodbc.xml
index db19669..82173de 100644
--- a/modules/platforms/cpp/odbc-test/config/queries-test-noodbc.xml
+++ b/modules/platforms/cpp/odbc-test/config/queries-test-noodbc.xml
@@ -61,6 +61,10 @@
                                     </map>
                                 </property>
 
+                                <property name="keyFields">
+                                    <list></list>
+                                </property>
+
                                 <property name="indexes">
                                     <list>
                                         <bean class="org.apache.ignite.cache.QueryIndex">

http://git-wip-us.apache.org/repos/asf/ignite/blob/fabb77d1/modules/platforms/cpp/odbc-test/config/queries-test.xml
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/odbc-test/config/queries-test.xml b/modules/platforms/cpp/odbc-test/config/queries-test.xml
index 26e6341..f511c7d 100644
--- a/modules/platforms/cpp/odbc-test/config/queries-test.xml
+++ b/modules/platforms/cpp/odbc-test/config/queries-test.xml
@@ -67,6 +67,10 @@
                                     </map>
                                 </property>
 
+                                <property name="keyFields">
+                                    <list></list>
+                                </property>
+
                                 <property name="indexes">
                                     <list>
                                         <bean class="org.apache.ignite.cache.QueryIndex">