You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sh...@apache.org on 2016/11/07 04:29:48 UTC

[01/50] [abbrv] ignite git commit: Validate hash code presence in BinaryObject. Fixes #928

Repository: ignite
Updated Branches:
  refs/heads/ignite-2788 a8dae9d00 -> 0cd6723d2


Validate hash code presence in BinaryObject. Fixes #928


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

Branch: refs/heads/ignite-2788
Commit: 2489b8afb408fec7760760aedd98d44085f95748
Parents: ed47392
Author: Alexander Paschenko <al...@gmail.com>
Authored: Wed Sep 28 16:46:46 2016 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Wed Sep 28 16:50:52 2016 +0300

----------------------------------------------------------------------
 .../internal/binary/BinaryClassDescriptor.java  | 16 ++++-
 .../internal/binary/BinaryEnumObjectImpl.java   |  5 ++
 .../ignite/internal/binary/BinaryObjectEx.java  |  8 +++
 .../internal/binary/BinaryObjectImpl.java       |  7 +++
 .../binary/BinaryObjectOffheapImpl.java         |  7 +++
 .../ignite/internal/binary/BinaryUtils.java     |  5 +-
 .../internal/binary/BinaryWriterExImpl.java     |  6 +-
 .../binary/builder/BinaryObjectBuilderImpl.java | 11 +++-
 .../processors/cache/GridCacheUtils.java        |  5 ++
 .../ignite/internal/util/IgniteUtils.java       | 23 ++++++-
 ...ridCacheStoreManagerDeserializationTest.java |  1 +
 .../cache/GridCacheUtilsSelfTest.java           | 64 +++++++++++++++++++-
 ...calCacheStoreManagerDeserializationTest.java |  2 +-
 .../GridCacheBinaryObjectsAbstractSelfTest.java | 31 ++++++++++
 14 files changed, 182 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/2489b8af/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
index 083057d..4c824d4 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
@@ -41,6 +41,7 @@ import org.apache.ignite.binary.BinarySerializer;
 import org.apache.ignite.binary.Binarylizable;
 import org.apache.ignite.internal.processors.cache.CacheObjectImpl;
 import org.apache.ignite.internal.util.GridUnsafe;
+import org.apache.ignite.internal.util.IgniteUtils;
 import org.apache.ignite.internal.util.tostring.GridToStringExclude;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
@@ -114,6 +115,9 @@ public class BinaryClassDescriptor {
     private final boolean excluded;
 
     /** */
+    private final boolean overridesHashCode;
+
+    /** */
     private final Class<?>[] intfs;
 
     /**
@@ -164,6 +168,8 @@ public class BinaryClassDescriptor {
         this.mapper = mapper;
         this.registered = registered;
 
+        overridesHashCode = IgniteUtils.overridesEqualsAndHashCode(cls);
+
         schemaReg = ctx.schemaRegistry(typeId);
 
         excluded = MarshallerExclusions.isExcluded(cls);
@@ -845,7 +851,15 @@ public class BinaryClassDescriptor {
      * @param obj Object.
      */
     private void postWrite(BinaryWriterExImpl writer, Object obj) {
-        writer.postWrite(userType, registered, obj instanceof CacheObjectImpl ? 0 : obj.hashCode());
+        if (obj instanceof CacheObjectImpl)
+            writer.postWrite(userType, registered, 0, false);
+        else if (obj instanceof BinaryObjectEx) {
+            boolean flagSet = ((BinaryObjectEx)obj).isFlagSet(BinaryUtils.FLAG_EMPTY_HASH_CODE);
+
+            writer.postWrite(userType, registered, obj.hashCode(), !flagSet);
+        }
+        else
+            writer.postWrite(userType, registered, obj.hashCode(), overridesHashCode);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/2489b8af/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java
index c9874ed..dcfcc9d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java
@@ -139,6 +139,11 @@ public class BinaryEnumObjectImpl implements BinaryObjectEx, Externalizable, Cac
     }
 
     /** {@inheritDoc} */
+    @Override public boolean isFlagSet(short flag) {
+        return false;
+    }
+
+    /** {@inheritDoc} */
     @Override public <F> F field(String fieldName) throws BinaryObjectException {
         return null;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2489b8af/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectEx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectEx.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectEx.java
index e3566bc..4e137b7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectEx.java
@@ -38,4 +38,12 @@ public interface BinaryObjectEx extends BinaryObject {
      * @throws BinaryObjectException If failed.
      */
     @Nullable public BinaryType rawType() throws BinaryObjectException;
+
+    /**
+     * Check if flag set.
+     *
+     * @param flag flag to check.
+     * @return {@code true} if flag is set, {@code false} otherwise.
+     */
+    public boolean isFlagSet(short flag);
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2489b8af/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
index 7b42c03..f37d7c2 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
@@ -246,6 +246,13 @@ public final class BinaryObjectImpl extends BinaryObjectExImpl implements Extern
     }
 
     /** {@inheritDoc} */
+    @Override public boolean isFlagSet(short flag) {
+        short flags = BinaryPrimitives.readShort(arr, start + GridBinaryMarshaller.FLAGS_POS);
+
+        return BinaryUtils.isFlagSet(flags, flag);
+    }
+
+    /** {@inheritDoc} */
     @Override public int typeId() {
         int off = start + GridBinaryMarshaller.TYPE_ID_POS;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/2489b8af/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 2225b7a..9cbbaa2 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
@@ -145,6 +145,13 @@ public class BinaryObjectOffheapImpl extends BinaryObjectExImpl implements Exter
     }
 
     /** {@inheritDoc} */
+    @Override public boolean isFlagSet(short flag) {
+        short flags = BinaryPrimitives.readShort(ptr, start + GridBinaryMarshaller.FLAGS_POS);
+
+        return BinaryUtils.isFlagSet(flags, flag);
+    }
+
+    /** {@inheritDoc} */
     @Nullable @Override public BinaryType type() throws BinaryObjectException {
         return BinaryUtils.typeProxy(ctx, this);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2489b8af/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
index b5834a5..25d87ff 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
@@ -109,6 +109,9 @@ public class BinaryUtils {
     /** Flag: compact footer, no field IDs. */
     public static final short FLAG_COMPACT_FOOTER = 0x0020;
 
+    /** Flag: no hash code has been set. */
+    public static final short FLAG_EMPTY_HASH_CODE = 0x0040;
+
     /** Offset which fits into 1 byte. */
     public static final int OFFSET_1 = 1;
 
@@ -305,7 +308,7 @@ public class BinaryUtils {
      * @param flag Flag.
      * @return {@code True} if flag is set in flags.
      */
-    private static boolean isFlagSet(short flags, short flag) {
+    static boolean isFlagSet(short flags, short flag) {
         return (flags & flag) == flag;
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/2489b8af/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
index 1a81819..22b4d1f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
@@ -245,8 +245,9 @@ public class BinaryWriterExImpl implements BinaryWriter, BinaryRawWriterEx, Obje
      * @param userType User type flag.
      * @param registered Whether type is registered.
      * @param hashCode Hash code.
+     * @param isHashCodeSet Hash code presence flag.
      */
-    public void postWrite(boolean userType, boolean registered, int hashCode) {
+    public void postWrite(boolean userType, boolean registered, int hashCode, boolean isHashCodeSet) {
         short flags;
         boolean useCompactFooter;
 
@@ -303,6 +304,9 @@ public class BinaryWriterExImpl implements BinaryWriter, BinaryRawWriterEx, Obje
             }
         }
 
+        if (!isHashCodeSet)
+            flags |= BinaryUtils.FLAG_EMPTY_HASH_CODE;
+
         // Actual write.
         int retPos = out.position();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/2489b8af/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 086da5c..2c76192 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
@@ -86,6 +86,9 @@ public class BinaryObjectBuilderImpl implements BinaryObjectBuilder {
     /** */
     private int hashCode;
 
+    /** */
+    private boolean isHashCodeSet;
+
     /**
      * @param clsName Class name.
      * @param ctx Binary context.
@@ -117,7 +120,7 @@ public class BinaryObjectBuilderImpl implements BinaryObjectBuilder {
      */
     public BinaryObjectBuilderImpl(BinaryObjectImpl obj) {
         this(new BinaryBuilderReader(obj), obj.start());
-
+        isHashCodeSet = !obj.isFlagSet(BinaryUtils.FLAG_EMPTY_HASH_CODE);
         reader.registerObject(this);
     }
 
@@ -329,7 +332,8 @@ public class BinaryObjectBuilderImpl implements BinaryObjectBuilder {
                 reader.position(start + BinaryUtils.length(reader, start));
             }
 
-            writer.postWrite(true, registeredType, hashCode);
+            //noinspection NumberEquality
+            writer.postWrite(true, registeredType, hashCode, isHashCodeSet);
 
             // Update metadata if needed.
             int schemaId = writer.schemaId();
@@ -408,9 +412,12 @@ public class BinaryObjectBuilderImpl implements BinaryObjectBuilder {
     }
 
     /** {@inheritDoc} */
+    @SuppressWarnings("UnnecessaryBoxing")
     @Override public BinaryObjectBuilderImpl hashCode(int hashCode) {
         this.hashCode = hashCode;
 
+        isHashCodeSet = true;
+
         return this;
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/2489b8af/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
index 1a4ffd5..0f4e89b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
@@ -1170,6 +1170,7 @@ public class GridCacheUtils {
 
     /**
      * Validates that cache key object has overridden equals and hashCode methods.
+     * Will also check that a BinaryObject has a hash code set.
      *
      * @param key Key.
      * @throws IllegalArgumentException If equals or hashCode is not implemented.
@@ -1181,6 +1182,10 @@ public class GridCacheUtils {
         if (!U.overridesEqualsAndHashCode(key))
             throw new IllegalArgumentException("Cache key must override hashCode() and equals() methods: " +
                 key.getClass().getName());
+
+        if (U.isHashCodeEmpty(key))
+            throw new IllegalArgumentException("Cache key created with BinaryBuilder is missing hash code - " +
+                "please set it explicitly during building by using BinaryBuilder.hashCode(int)");
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/2489b8af/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 93acc75..569a25f 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
@@ -149,6 +149,7 @@ import org.apache.ignite.IgniteException;
 import org.apache.ignite.IgniteInterruptedException;
 import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.IgniteSystemProperties;
+import org.apache.ignite.binary.BinaryObject;
 import org.apache.ignite.binary.BinaryRawReader;
 import org.apache.ignite.binary.BinaryRawWriter;
 import org.apache.ignite.cluster.ClusterGroupEmptyException;
@@ -170,6 +171,8 @@ import org.apache.ignite.internal.IgniteFutureTimeoutCheckedException;
 import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.IgniteInterruptedCheckedException;
 import org.apache.ignite.internal.IgniteNodeAttributes;
+import org.apache.ignite.internal.binary.BinaryObjectEx;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.cluster.ClusterGroupEmptyCheckedException;
 import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException;
 import org.apache.ignite.internal.compute.ComputeTaskCancelledCheckedException;
@@ -8514,9 +8517,15 @@ public abstract class IgniteUtils {
      * @return {@code True} if given object has overridden equals and hashCode method.
      */
     public static boolean overridesEqualsAndHashCode(Object obj) {
-        try {
-            Class<?> cls = obj.getClass();
+        return overridesEqualsAndHashCode(obj.getClass());
+    }
 
+    /**
+     * @param cls Class.
+     * @return {@code True} if given class has overridden equals and hashCode method.
+     */
+    public static boolean overridesEqualsAndHashCode(Class<?> cls) {
+        try {
             return !Object.class.equals(cls.getMethod("equals", Object.class).getDeclaringClass()) &&
                 !Object.class.equals(cls.getMethod("hashCode").getDeclaringClass());
         }
@@ -8526,6 +8535,16 @@ public abstract class IgniteUtils {
     }
 
     /**
+     * @param obj Object.
+     * @return {@code True} if given object is a {@link BinaryObjectEx} and
+     * has {@link BinaryUtils#FLAG_EMPTY_HASH_CODE} set
+     */
+    public static boolean isHashCodeEmpty(Object obj) {
+        return obj != null && obj instanceof BinaryObjectEx &&
+            ((BinaryObjectEx)obj).isFlagSet(BinaryUtils.FLAG_EMPTY_HASH_CODE);
+    }
+
+    /**
      * Checks if error is MAC invalid argument error which ususally requires special handling.
      *
      * @param e Exception.

http://git-wip-us.apache.org/repos/asf/ignite/blob/2489b8af/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManagerDeserializationTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManagerDeserializationTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManagerDeserializationTest.java
index 4a069a9..39ce33d 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManagerDeserializationTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManagerDeserializationTest.java
@@ -279,6 +279,7 @@ public class GridCacheStoreManagerDeserializationTest extends GridCommonAbstract
 
         for (int i = 0; i < 1; i++) {
             builder.setField("id", i);
+            builder.hashCode(i);
 
             entity = builder.build();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/2489b8af/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheUtilsSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheUtilsSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheUtilsSelfTest.java
index d5888e7..5f2c004 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheUtilsSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheUtilsSelfTest.java
@@ -18,7 +18,21 @@
 package org.apache.ignite.internal.processors.cache;
 
 import java.util.concurrent.Callable;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.binary.BinaryObject;
+import org.apache.ignite.configuration.BinaryConfiguration;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.binary.BinaryCachingMetadataHandler;
+import org.apache.ignite.internal.binary.BinaryContext;
+import org.apache.ignite.internal.binary.BinaryMarshaller;
+import org.apache.ignite.internal.binary.BinaryObjectImpl;
+import org.apache.ignite.internal.binary.GridBinaryMarshaller;
+import org.apache.ignite.internal.binary.builder.BinaryObjectBuilderImpl;
+import org.apache.ignite.internal.util.IgniteUtils;
 import org.apache.ignite.internal.util.typedef.internal.CU;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.logger.NullLogger;
+import org.apache.ignite.marshaller.MarshallerContextTestImpl;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 
@@ -104,7 +118,8 @@ public class GridCacheUtilsSelfTest extends GridCommonAbstractTest {
 
     /**
      */
-    public void testCacheKeyValidation() {
+    @SuppressWarnings("ResultOfMethodCallIgnored")
+    public void testCacheKeyValidation() throws IgniteCheckedException {
         CU.validateCacheKey("key");
 
         CU.validateCacheKey(1);
@@ -124,6 +139,53 @@ public class GridCacheUtilsSelfTest extends GridCommonAbstractTest {
         assertThrowsForInvalidKey(new NoHashCode());
 
         assertThrowsForInvalidKey(new WrongEquals());
+
+        BinaryObjectBuilderImpl binBuilder = new BinaryObjectBuilderImpl(binaryContext(),
+            EqualsAndHashCode.class.getName());
+
+        assertThrowsForInvalidKey(binBuilder.build());
+
+        binBuilder.hashCode(0xFE12);
+
+        BinaryObject binObj = binBuilder.build();
+
+        CU.validateCacheKey(binObj);
+
+        BinaryObjectBuilderImpl binBuilder2 = new BinaryObjectBuilderImpl((BinaryObjectImpl) binObj);
+
+        CU.validateCacheKey(binBuilder2.build());
+    }
+
+    /**
+     * @return Binary marshaller.
+     * @throws IgniteCheckedException if failed.
+     */
+    private BinaryMarshaller binaryMarshaller() throws IgniteCheckedException {
+        IgniteConfiguration iCfg = new IgniteConfiguration();
+
+        BinaryConfiguration bCfg = new BinaryConfiguration();
+
+        iCfg.setBinaryConfiguration(bCfg);
+
+        BinaryContext ctx = new BinaryContext(BinaryCachingMetadataHandler.create(), iCfg, new NullLogger());
+
+        BinaryMarshaller marsh = new BinaryMarshaller();
+
+        marsh.setContext(new MarshallerContextTestImpl(null));
+
+        IgniteUtils.invoke(BinaryMarshaller.class, marsh, "setBinaryContext", ctx, iCfg);
+
+        return marsh;
+    }
+
+    /**
+     * @return Binary context.
+     * @throws IgniteCheckedException if failed.
+     */
+    private BinaryContext binaryContext() throws IgniteCheckedException {
+        GridBinaryMarshaller impl = U.field(binaryMarshaller(), "impl");
+
+        return impl.context();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/2489b8af/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridLocalCacheStoreManagerDeserializationTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridLocalCacheStoreManagerDeserializationTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridLocalCacheStoreManagerDeserializationTest.java
index 827b3cf..b86fe53 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridLocalCacheStoreManagerDeserializationTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridLocalCacheStoreManagerDeserializationTest.java
@@ -86,7 +86,7 @@ public class GridLocalCacheStoreManagerDeserializationTest extends GridCacheStor
 
         final BinaryObjectBuilder builder = grid.binary().builder("custom_type");
 
-        final BinaryObject entity = builder.setField("id", 0).build();
+        final BinaryObject entity = builder.setField("id", 0).hashCode(0).build();
 
         cache.put(entity, entity);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/2489b8af/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java
index 3a510c3..7936ea4 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java
@@ -28,6 +28,7 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
+import java.util.concurrent.Callable;
 import javax.cache.Cache;
 import javax.cache.processor.EntryProcessor;
 import javax.cache.processor.EntryProcessorException;
@@ -887,6 +888,36 @@ public abstract class GridCacheBinaryObjectsAbstractSelfTest extends GridCommonA
     }
 
     /**
+     * @throws Exception If failed.
+     */
+    @SuppressWarnings({ "ThrowableResultOfMethodCallIgnored", "unchecked" })
+    public void testPutWithoutHashCode() throws Exception {
+        final IgniteCache c = jcache(0);
+
+        GridTestUtils.assertThrows(log, new Callable<Object>() {
+            /** {@inheritDoc} */
+            @Override public Object call() throws Exception {
+                c.put(new TestObject(5), 5);
+                return null;
+            }
+        }, IllegalArgumentException.class, "Cache key must override hashCode() and equals() methods: ");
+
+        BinaryObjectBuilder bldr = grid(0).binary().builder(TestObject.class.getName());
+        bldr.setField("val", 5);
+
+        final BinaryObject binKey = bldr.build();
+
+        GridTestUtils.assertThrows(log, new Callable<Object>() {
+            /** {@inheritDoc} */
+            @Override public Object call() throws Exception {
+                c.put(binKey, 5);
+                return null;
+            }
+        }, IllegalArgumentException.class, "Cache key created with BinaryBuilder is missing hash code - " +
+            "please set it explicitly during building by using BinaryBuilder.hashCode(int)");
+    }
+
+    /**
      * @throws Exception if failed.
      */
     public void testKeepBinaryTxOverwrite() throws Exception {


[29/50] [abbrv] ignite git commit: Merge branch community/ignite-1.7.3

Posted by sh...@apache.org.
Merge branch community/ignite-1.7.3


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

Branch: refs/heads/ignite-2788
Commit: 21377401b6d8715bf27252ee063b74feef1a7ccc
Parents: 443b4d4
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Mon Oct 3 13:26:22 2016 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Mon Oct 3 13:26:22 2016 +0300

----------------------------------------------------------------------
 .../Apache.Ignite.Core/IgniteConfigurationSection.xsd   | 12 ------------
 1 file changed, 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/21377401/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
index f17c896..40e3055 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
@@ -1107,18 +1107,6 @@
                         </xs:attribute>
                     </xs:complexType>
                 </xs:element>
-                <xs:element name="logger" minOccurs="0">
-                    <xs:annotation>
-                        <xs:documentation>The logger. If no logger is set, logging is delegated to Java, which uses the logger defined in Spring XML (if present) or logs to console otherwise.</xs:documentation>
-                    </xs:annotation>
-                    <xs:complexType>
-                        <xs:attribute name="type" type="xs:string" use="required">
-                            <xs:annotation>
-                                <xs:documentation>Assembly-qualified type name.</xs:documentation>
-                            </xs:annotation>
-                        </xs:attribute>
-                    </xs:complexType>
-                </xs:element>
             </xs:all>
             <xs:attribute name="gridName" type="xs:string">
                 <xs:annotation>


[45/50] [abbrv] ignite git commit: ignite-4088 Added methods to create/destroy multiple caches. This closes #1174.

Posted by sh...@apache.org.
ignite-4088 Added methods to create/destroy multiple caches. This closes #1174.


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

Branch: refs/heads/ignite-2788
Commit: f445e7bcb7d9e1a397ec593ebff44d8f77cb36f5
Parents: 3d9f892
Author: Konstantin Dudkov <kd...@ya.ru>
Authored: Fri Oct 28 16:27:34 2016 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Fri Oct 28 16:27:34 2016 +0300

----------------------------------------------------------------------
 .../src/main/java/org/apache/ignite/Ignite.java |  77 ++++-
 .../apache/ignite/internal/IgniteKernal.java    |  81 ++++++
 .../processors/cache/GridCacheProcessor.java    | 291 ++++++++++++++-----
 .../cache/IgniteDynamicCacheStartSelfTest.java  | 217 ++++++++++++--
 .../processors/igfs/IgfsIgniteMock.java         |  19 ++
 .../ignite/testframework/junits/IgniteMock.java |  15 +
 .../junits/multijvm/IgniteProcessProxy.java     |  15 +
 .../org/apache/ignite/IgniteSpringBean.java     |  21 ++
 8 files changed, 616 insertions(+), 120 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/f445e7bc/modules/core/src/main/java/org/apache/ignite/Ignite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/Ignite.java b/modules/core/src/main/java/org/apache/ignite/Ignite.java
index bd21468..0de08d5 100644
--- a/modules/core/src/main/java/org/apache/ignite/Ignite.java
+++ b/modules/core/src/main/java/org/apache/ignite/Ignite.java
@@ -20,6 +20,7 @@ package org.apache.ignite;
 import java.util.Collection;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutorService;
+import javax.cache.CacheException;
 import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.affinity.Affinity;
 import org.apache.ignite.cluster.ClusterGroup;
@@ -220,8 +221,24 @@ public interface Ignite extends AutoCloseable {
      *
      * @param cacheCfg Cache configuration to use.
      * @return Instance of started cache.
+     * @throws CacheException If a cache with the same name already exists or other error occurs.
      */
-    public <K, V> IgniteCache<K, V> createCache(CacheConfiguration<K, V> cacheCfg);
+    public <K, V> IgniteCache<K, V> createCache(CacheConfiguration<K, V> cacheCfg) throws CacheException;
+
+    /**
+     * Dynamically starts new caches with the given cache configurations.
+     * <p>
+     * If local node is an affinity node, this method will return the instance of started caches.
+     * Otherwise, it will create a client caches on local node.
+     * <p>
+     * If for one of configurations a cache with the same name already exists in the grid, an exception will be thrown regardless
+     * whether the given configuration matches the configuration of the existing cache or not.
+     *
+     * @param cacheCfgs Collection of cache configuration to use.
+     * @return Collection of instances of started caches.
+     * @throws CacheException If one of created caches exists or other error occurs.
+     */
+    public Collection<IgniteCache> createCaches(Collection<CacheConfiguration> cacheCfgs) throws CacheException;
 
     /**
      * Dynamically starts new cache using template configuration.
@@ -233,8 +250,9 @@ public interface Ignite extends AutoCloseable {
      *
      * @param cacheName Cache name.
      * @return Instance of started cache.
+     * @throws CacheException If a cache with the same name already exists or other error occurs.
      */
-    public <K, V> IgniteCache<K, V> createCache(String cacheName);
+    public <K, V> IgniteCache<K, V> createCache(String cacheName) throws CacheException;
 
     /**
      * Gets existing cache with the given name or creates new one with the given configuration.
@@ -245,23 +263,39 @@ public interface Ignite extends AutoCloseable {
      *
      * @param cacheCfg Cache configuration to use.
      * @return Existing or newly created cache.
+     * @throws CacheException If error occurs.
      */
-    public <K, V> IgniteCache<K, V> getOrCreateCache(CacheConfiguration<K, V> cacheCfg);
+    public <K, V> IgniteCache<K, V> getOrCreateCache(CacheConfiguration<K, V> cacheCfg) throws CacheException;
 
     /**
      * Gets existing cache with the given name or creates new one using template configuration.
      *
      * @param cacheName Cache name.
      * @return Existing or newly created cache.
+     * @throws CacheException If error occurs.
      */
-    public <K, V> IgniteCache<K, V> getOrCreateCache(String cacheName);
+    public <K, V> IgniteCache<K, V> getOrCreateCache(String cacheName) throws CacheException;
+
+    /**
+     * Gets existing caches with the given name or created one with the given configuration.
+     * <p>
+     * If a cache with the same name already exist, this method will not check that the given
+     * configuration matches the configuration of existing cache and will return an instance
+     * of the existing cache.
+     *
+     * @param cacheCfgs Collection of cache configuration to use.
+     * @return Collection of existing or newly created caches.
+     * @throws CacheException If error occurs.
+     */
+    public Collection<IgniteCache> getOrCreateCaches(Collection<CacheConfiguration> cacheCfgs) throws CacheException;
 
     /**
      * Adds cache configuration template.
      *
      * @param cacheCfg Cache configuration template.
+     * @throws CacheException If error occurs.
      */
-    public <K, V> void addCacheConfiguration(CacheConfiguration<K, V> cacheCfg);
+    public <K, V> void addCacheConfiguration(CacheConfiguration<K, V> cacheCfg) throws CacheException;
 
     /**
      * Dynamically starts new cache with the given cache configuration.
@@ -275,10 +309,11 @@ public interface Ignite extends AutoCloseable {
      * @param cacheCfg Cache configuration to use.
      * @param nearCfg Near cache configuration to use on local node in case it is not an
      *      affinity node.
+     * @throws CacheException If a cache with the same name already exists or other error occurs.
      * @return Instance of started cache.
      */
     public <K, V> IgniteCache<K, V> createCache(CacheConfiguration<K, V> cacheCfg,
-        NearCacheConfiguration<K, V> nearCfg);
+        NearCacheConfiguration<K, V> nearCfg) throws CacheException;
 
     /**
      * Gets existing cache with the given cache configuration or creates one if it does not exist.
@@ -293,9 +328,10 @@ public interface Ignite extends AutoCloseable {
      * @param cacheCfg Cache configuration.
      * @param nearCfg Near cache configuration for client.
      * @return {@code IgniteCache} instance.
+     * @throws CacheException If error occurs.
      */
     public <K, V> IgniteCache<K, V> getOrCreateCache(CacheConfiguration<K, V> cacheCfg,
-        NearCacheConfiguration<K, V> nearCfg);
+        NearCacheConfiguration<K, V> nearCfg) throws CacheException;
 
     /**
      * Starts a near cache on local node if cache was previously started with one of the
@@ -305,8 +341,10 @@ public interface Ignite extends AutoCloseable {
      * @param cacheName Cache name.
      * @param nearCfg Near cache configuration.
      * @return Cache instance.
+     * @throws CacheException If error occurs.
      */
-    public <K, V> IgniteCache<K, V> createNearCache(@Nullable String cacheName, NearCacheConfiguration<K, V> nearCfg);
+    public <K, V> IgniteCache<K, V> createNearCache(@Nullable String cacheName, NearCacheConfiguration<K, V> nearCfg)
+        throws CacheException;
 
     /**
      * Gets existing near cache with the given name or creates a new one.
@@ -314,15 +352,26 @@ public interface Ignite extends AutoCloseable {
      * @param cacheName Cache name.
      * @param nearCfg Near configuration.
      * @return {@code IgniteCache} instance.
+     * @throws CacheException If error occurs.
      */
-    public <K, V> IgniteCache<K, V> getOrCreateNearCache(@Nullable String cacheName, NearCacheConfiguration<K, V> nearCfg);
+    public <K, V> IgniteCache<K, V> getOrCreateNearCache(@Nullable String cacheName, NearCacheConfiguration<K, V> nearCfg)
+        throws CacheException;
 
     /**
      * Stops dynamically started cache.
      *
      * @param cacheName Cache name to stop.
+     * @throws CacheException If error occurs.
+     */
+    public void destroyCache(String cacheName) throws CacheException;
+
+    /**
+     * Stops dynamically started caches.
+     *
+     * @param cacheNames Collection of cache names to stop.
+     * @throws CacheException If error occurs.
      */
-    public void destroyCache(String cacheName);
+    public void destroyCaches(Collection<String> cacheNames) throws CacheException;
 
     /**
      * Gets an instance of {@link IgniteCache} API. {@code IgniteCache} is a fully-compatible
@@ -330,8 +379,9 @@ public interface Ignite extends AutoCloseable {
      *
      * @param name Cache name.
      * @return Instance of the cache for the specified name.
+     * @throws CacheException If error occurs.
      */
-    public <K, V> IgniteCache<K, V> cache(@Nullable String name);
+    public <K, V> IgniteCache<K, V> cache(@Nullable String name) throws CacheException;
 
     /**
      * Gets the collection of names of currently available caches.
@@ -357,8 +407,9 @@ public interface Ignite extends AutoCloseable {
      *
      * @param cacheName Cache name ({@code null} for default cache).
      * @return Data streamer.
+     * @throws IllegalStateException If node is stopping.
      */
-    public <K, V> IgniteDataStreamer<K, V> dataStreamer(@Nullable String cacheName);
+    public <K, V> IgniteDataStreamer<K, V> dataStreamer(@Nullable String cacheName) throws IllegalStateException;
 
     /**
      * Gets an instance of IGFS (Ignite In-Memory File System). If one is not
@@ -372,7 +423,7 @@ public interface Ignite extends AutoCloseable {
      * @return IGFS instance.
      * @throws IllegalArgumentException If IGFS with such name is not configured.
      */
-    public IgniteFileSystem fileSystem(String name);
+    public IgniteFileSystem fileSystem(String name) throws IllegalArgumentException;
 
     /**
      * Gets all instances of IGFS (Ignite In-Memory File System).

http://git-wip-us.apache.org/repos/asf/ignite/blob/f445e7bc/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index c521718..ff64ed5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@ -2522,6 +2522,33 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
         }
     }
 
+
+    /** {@inheritDoc} */
+    @Override public Collection<IgniteCache> createCaches(Collection<CacheConfiguration> cacheCfgs) {
+        A.notNull(cacheCfgs, "cacheCfgs");
+
+        guard();
+
+        try {
+            ctx.cache().dynamicStartCaches(cacheCfgs,
+                true,
+                true).get();
+
+            List<IgniteCache> createdCaches = new ArrayList<>(cacheCfgs.size());
+
+            for (CacheConfiguration cacheCfg : cacheCfgs)
+                createdCaches.add(ctx.cache().publicJCache(cacheCfg.getName()));
+
+            return createdCaches;
+        }
+        catch (IgniteCheckedException e) {
+            throw CU.convertToCacheException(e);
+        }
+        finally {
+            unguard();
+        }
+    }
+
     /** {@inheritDoc} */
     @Override public <K, V> IgniteCache<K, V> createCache(String cacheName) {
         guard();
@@ -2566,6 +2593,32 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
     }
 
     /** {@inheritDoc} */
+    @Override public Collection<IgniteCache> getOrCreateCaches(Collection<CacheConfiguration> cacheCfgs) {
+        A.notNull(cacheCfgs, "cacheCfgs");
+
+        guard();
+
+        try {
+            ctx.cache().dynamicStartCaches(cacheCfgs,
+                false,
+                true).get();
+
+            List<IgniteCache> createdCaches = new ArrayList<>(cacheCfgs.size());
+
+            for (CacheConfiguration cacheCfg : cacheCfgs)
+                createdCaches.add(ctx.cache().publicJCache(cacheCfg.getName()));
+
+            return createdCaches;
+        }
+        catch (IgniteCheckedException e) {
+            throw CU.convertToCacheException(e);
+        }
+        finally {
+            unguard();
+        }
+    }
+
+    /** {@inheritDoc} */
     @Override public <K, V> IgniteCache<K, V> createCache(
         CacheConfiguration<K, V> cacheCfg,
         NearCacheConfiguration<K, V> nearCfg
@@ -2726,6 +2779,18 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
         }
     }
 
+    /** {@inheritDoc} */
+    @Override public void destroyCaches(Collection<String> cacheNames) {
+        IgniteInternalFuture stopFut = destroyCachesAsync(cacheNames, true);
+
+        try {
+            stopFut.get();
+        }
+        catch (IgniteCheckedException e) {
+            throw CU.convertToCacheException(e);
+        }
+    }
+
     /**
      * @param cacheName Cache name.
      * @param checkThreadTx If {@code true} checks that current thread does not have active transactions.
@@ -2742,6 +2807,22 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
         }
     }
 
+    /**
+     * @param cacheNames Collection of cache names.
+     * @param checkThreadTx If {@code true} checks that current thread does not have active transactions.
+     * @return Ignite future.
+     */
+    public IgniteInternalFuture<?> destroyCachesAsync(Collection<String> cacheNames, boolean checkThreadTx) {
+        guard();
+
+        try {
+            return ctx.cache().dynamicDestroyCaches(cacheNames, checkThreadTx);
+        }
+        finally {
+            unguard();
+        }
+    }
+
     /** {@inheritDoc} */
     @Override public <K, V> IgniteCache<K, V> getOrCreateCache(String cacheName) {
         guard();

http://git-wip-us.apache.org/repos/asf/ignite/blob/f445e7bc/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
index 0a0b40a..c494646 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
@@ -2284,99 +2284,92 @@ public class GridCacheProcessor extends GridProcessorAdapter {
         if (checkThreadTx)
             checkEmptyTransactions();
 
-        DynamicCacheDescriptor desc = registeredCaches.get(maskNull(cacheName));
-
-        DynamicCacheChangeRequest req = new DynamicCacheChangeRequest(cacheName, ctx.localNodeId());
-
-        req.failIfExists(failIfExists);
-
-        if (ccfg != null) {
-            try {
-                cloneCheckSerializable(ccfg);
-            }
-            catch (IgniteCheckedException e) {
-                return new GridFinishedFuture<>(e);
-            }
-
-            if (desc != null) {
-                if (failIfExists) {
-                    return new GridFinishedFuture<>(new CacheExistsException("Failed to start cache " +
-                        "(a cache with the same name is already started): " + cacheName));
-                }
-                else {
-                    CacheConfiguration descCfg = desc.cacheConfiguration();
-
-                    // Check if we were asked to start a near cache.
-                    if (nearCfg != null) {
-                        if (CU.affinityNode(ctx.discovery().localNode(), descCfg.getNodeFilter())) {
-                            // If we are on a data node and near cache was enabled, return success, else - fail.
-                            if (descCfg.getNearConfiguration() != null)
-                                return new GridFinishedFuture<>();
-                            else
-                                return new GridFinishedFuture<>(new IgniteCheckedException("Failed to start near " +
-                                    "cache (local node is an affinity node for cache): " + cacheName));
-                        }
-                        else
-                            // If local node has near cache, return success.
-                            req.clientStartOnly(true);
-                    }
-                    else
-                        req.clientStartOnly(true);
+        try {
+            DynamicCacheChangeRequest req = prepareCacheChangeRequest(
+                ccfg,
+                cacheName,
+                nearCfg,
+                cacheType,
+                failIfExists,
+                failIfNotStarted);
 
-                    req.deploymentId(desc.deploymentId());
+            if (req != null)
+                return F.first(initiateCacheChanges(F.asList(req), failIfExists));
+            else
+                return new GridFinishedFuture<>();
+        }
+        catch (Exception e) {
+            return new GridFinishedFuture<>(e);
+        }
+    }
 
-                    req.startCacheConfiguration(descCfg);
-                }
-            }
-            else {
-                req.deploymentId(IgniteUuid.randomUuid());
+    /**
+     * Dynamically starts multiple caches.
+     *
+     * @param ccfgList Collection of cache configuration.
+     * @param failIfExists Fail if exists flag.
+     * @param checkThreadTx If {@code true} checks that current thread does not have active transactions.
+     * @return Future that will be completed when all caches are deployed.
+     */
+    public IgniteInternalFuture<?> dynamicStartCaches(
+        Collection<CacheConfiguration> ccfgList,
+        boolean failIfExists,
+        boolean checkThreadTx
+    ) {
+        return dynamicStartCaches(ccfgList, CacheType.USER, failIfExists, checkThreadTx);
+    }
 
-                try {
-                    CacheConfiguration cfg = new CacheConfiguration(ccfg);
+    /**
+     * Dynamically starts multiple caches.
+     *
+     * @param ccfgList Collection of cache configuration.
+     * @param cacheType Cache type.
+     * @param failIfExists Fail if exists flag.
+     * @param checkThreadTx If {@code true} checks that current thread does not have active transactions.
+     * @return Future that will be completed when all caches are deployed.
+     */
+    private IgniteInternalFuture<?> dynamicStartCaches(
+        Collection<CacheConfiguration> ccfgList,
+        CacheType cacheType,
+        boolean failIfExists,
+        boolean checkThreadTx
+    ) {
+        if (checkThreadTx)
+            checkEmptyTransactions();
 
-                    CacheObjectContext cacheObjCtx = ctx.cacheObjects().contextForCache(cfg);
+        List<DynamicCacheChangeRequest> reqList = new ArrayList<>(ccfgList.size());
 
-                    initialize(false, cfg, cacheObjCtx);
+        try {
+            for (CacheConfiguration ccfg : ccfgList) {
+                DynamicCacheChangeRequest req = prepareCacheChangeRequest(
+                    ccfg,
+                    ccfg.getName(),
+                    null,
+                    cacheType,
+                    failIfExists,
+                    true
+                );
 
-                    req.startCacheConfiguration(cfg);
-                }
-                catch (IgniteCheckedException e) {
-                    return new GridFinishedFuture(e);
-                }
+                if (req != null)
+                    reqList.add(req);
             }
         }
-        else {
-            req.clientStartOnly(true);
-
-            if (desc != null)
-                ccfg = desc.cacheConfiguration();
-
-            if (ccfg == null) {
-                if (failIfNotStarted)
-                    return new GridFinishedFuture<>(new CacheExistsException("Failed to start client cache " +
-                        "(a cache with the given name is not started): " + cacheName));
-                else
-                    return new GridFinishedFuture<>();
-            }
-
-            req.deploymentId(desc.deploymentId());
-            req.startCacheConfiguration(ccfg);
+        catch (Exception e) {
+            return new GridFinishedFuture<>(e);
         }
 
-        // Fail cache with swap enabled creation on grid without swap space SPI.
-        if (ccfg.isSwapEnabled())
-            for (ClusterNode n : ctx.discovery().allNodes())
-                if (!GridCacheUtils.clientNode(n) && !GridCacheUtils.isSwapEnabled(n))
-                    return new GridFinishedFuture<>(new IgniteCheckedException("Failed to start cache " +
-                        cacheName + " with swap enabled: Remote Node with ID " + n.id().toString().toUpperCase() +
-                        " has not swap SPI configured"));
+        if (!reqList.isEmpty()) {
+            GridCompoundFuture<?, ?> compoundFut = new GridCompoundFuture<>();
 
-        if (nearCfg != null)
-            req.nearCacheConfiguration(nearCfg);
+            for (DynamicCacheStartFuture fut : initiateCacheChanges(reqList, failIfExists))
+                compoundFut.add((IgniteInternalFuture)fut);
 
-        req.cacheType(cacheType);
+            compoundFut.markInitialized();
 
-        return F.first(initiateCacheChanges(F.asList(req), failIfExists));
+            return compoundFut;
+        }
+        else
+            return new GridFinishedFuture<>();
     }
 
     /**
@@ -2396,6 +2389,35 @@ public class GridCacheProcessor extends GridProcessorAdapter {
     }
 
     /**
+     * @param cacheNames Collection of cache names to destroy.
+     * @param checkThreadTx If {@code true} checks that current thread does not have active transactions.
+     * @return Future that will be completed when cache is destroyed.
+     */
+    public IgniteInternalFuture<?> dynamicDestroyCaches(Collection<String> cacheNames, boolean checkThreadTx) {
+        if (checkThreadTx)
+            checkEmptyTransactions();
+
+        List<DynamicCacheChangeRequest> reqs = new ArrayList<>(cacheNames.size());
+
+        for (String cacheName : cacheNames) {
+            DynamicCacheChangeRequest t = new DynamicCacheChangeRequest(cacheName, ctx.localNodeId());
+
+            t.stop(true);
+
+            reqs.add(t);
+        }
+
+        GridCompoundFuture<?, ?> compoundFut = new GridCompoundFuture<>();
+
+        for (DynamicCacheStartFuture fut : initiateCacheChanges(reqs, false))
+            compoundFut.add((IgniteInternalFuture)fut);
+
+        compoundFut.markInitialized();
+
+        return compoundFut;
+    }
+
+    /**
      * @param cacheName Cache name to close.
      * @return Future that will be completed when cache is closed.
      */
@@ -2416,6 +2438,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
 
     /**
      * @param reqs Requests.
+     * @param failIfExists Fail if exists flag.
      * @return Collection of futures.
      */
     @SuppressWarnings("TypeMayBeWeakened")
@@ -3608,6 +3631,114 @@ public class GridCacheProcessor extends GridProcessorAdapter {
     }
 
     /**
+     * Prepares DynamicCacheChangeRequest for cache creation.
+     *
+     * @param ccfg Cache configuration
+     * @param cacheName Cache name
+     * @param nearCfg Near cache configuration
+     * @param cacheType Cache type
+     * @param failIfExists Fail if exists flag.
+     * @param failIfNotStarted If {@code true} fails if cache is not started.
+     * @return Request or {@code null} if cache already exists.
+     * @throws IgniteCheckedException if some of pre-checks failed
+     * @throws CacheExistsException if cache exists and failIfExists flag is {@code true}
+     */
+    private DynamicCacheChangeRequest prepareCacheChangeRequest(
+        @Nullable CacheConfiguration ccfg,
+        String cacheName,
+        @Nullable NearCacheConfiguration nearCfg,
+        CacheType cacheType,
+        boolean failIfExists,
+        boolean failIfNotStarted
+    ) throws IgniteCheckedException {
+        DynamicCacheDescriptor desc = registeredCaches.get(maskNull(cacheName));
+
+        DynamicCacheChangeRequest req = new DynamicCacheChangeRequest(cacheName, ctx.localNodeId());
+
+        req.failIfExists(failIfExists);
+
+        if (ccfg != null) {
+            cloneCheckSerializable(ccfg);
+
+            if (desc != null) {
+                if (failIfExists) {
+                    throw new CacheExistsException("Failed to start cache " +
+                        "(a cache with the same name is already started): " + cacheName);
+                }
+                else {
+                    CacheConfiguration descCfg = desc.cacheConfiguration();
+
+                    // Check if we were asked to start a near cache.
+                    if (nearCfg != null) {
+                        if (CU.affinityNode(ctx.discovery().localNode(), descCfg.getNodeFilter())) {
+                            // If we are on a data node and near cache was enabled, return success, else - fail.
+                            if (descCfg.getNearConfiguration() != null)
+                                return null;
+                            else
+                                throw new IgniteCheckedException("Failed to start near " +
+                                    "cache (local node is an affinity node for cache): " + cacheName);
+                        }
+                        else
+                            // If local node has near cache, return success.
+                            req.clientStartOnly(true);
+                    }
+                    else
+                        req.clientStartOnly(true);
+
+                    req.deploymentId(desc.deploymentId());
+
+                    req.startCacheConfiguration(descCfg);
+                }
+            }
+            else {
+                req.deploymentId(IgniteUuid.randomUuid());
+
+                CacheConfiguration cfg = new CacheConfiguration(ccfg);
+
+                CacheObjectContext cacheObjCtx = ctx.cacheObjects().contextForCache(cfg);
+
+                initialize(false, cfg, cacheObjCtx);
+
+                req.startCacheConfiguration(cfg);
+            }
+        }
+        else {
+            req.clientStartOnly(true);
+
+            if (desc != null)
+                ccfg = desc.cacheConfiguration();
+
+            if (ccfg == null) {
+                if (failIfNotStarted) {
+                    throw new CacheExistsException("Failed to start client cache " +
+                        "(a cache with the given name is not started): " + cacheName);
+                }
+                else
+                    return null;
+            }
+
+            req.deploymentId(desc.deploymentId());
+            req.startCacheConfiguration(ccfg);
+        }
+
+        // Fail cache with swap enabled creation on grid without swap space SPI.
+        if (ccfg.isSwapEnabled())
+            for (ClusterNode n : ctx.discovery().allNodes())
+                if (!GridCacheUtils.clientNode(n) && !GridCacheUtils.isSwapEnabled(n)) {
+                    throw new IgniteCheckedException("Failed to start cache " +
+                        cacheName + " with swap enabled: Remote Node with ID " + n.id().toString().toUpperCase() +
+                        " has not swap SPI configured");
+                }
+
+        if (nearCfg != null)
+            req.nearCacheConfiguration(nearCfg);
+
+        req.cacheType(cacheType);
+
+        return req;
+    }
+
+    /**
      * @param obj Object to clone.
      * @return Object copy.
      * @throws IgniteCheckedException If failed.

http://git-wip-us.apache.org/repos/asf/ignite/blob/f445e7bc/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteDynamicCacheStartSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteDynamicCacheStartSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteDynamicCacheStartSelfTest.java
index c9cd750..48e06ee 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteDynamicCacheStartSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteDynamicCacheStartSelfTest.java
@@ -17,7 +17,9 @@
 
 package org.apache.ignite.internal.processors.cache;
 
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ConcurrentLinkedDeque;
 import java.util.concurrent.CountDownLatch;
@@ -181,7 +183,8 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
                 info("Succeeded: " + System.identityHashCode(fut));
 
                 succeeded++;
-            } catch (IgniteCheckedException e) {
+            }
+            catch (IgniteCheckedException e) {
                 info(e.getMessage());
 
                 failed++;
@@ -246,7 +249,8 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
                 info("Succeeded: " + System.identityHashCode(fut));
 
                 succeeded++;
-            } catch (IgniteCheckedException e) {
+            }
+            catch (IgniteCheckedException e) {
                 info(e.getMessage());
 
                 failed++;
@@ -289,6 +293,20 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
     }
 
     /**
+     * @throws Exception If failed.
+     */
+    public void testStartStopCachesSimpleTransactional() throws Exception {
+        checkStartStopCachesSimple(CacheAtomicityMode.TRANSACTIONAL);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testStartStopCachesSimpleAtomic() throws Exception {
+        checkStartStopCachesSimple(CacheAtomicityMode.ATOMIC);
+    }
+
+    /**
      * @param mode Cache atomicity mode.
      * @throws Exception If failed.
      */
@@ -325,10 +343,10 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
         for (int g = 0; g < nodeCount(); g++)
             caches[g] = grid(g).cache(DYNAMIC_CACHE_NAME);
 
-        kernal.context().cache().dynamicDestroyCache(DYNAMIC_CACHE_NAME, true).get();
+        kernal.destroyCache(DYNAMIC_CACHE_NAME);
 
         for (int g = 0; g < nodeCount(); g++) {
-            final IgniteKernal kernal0 = (IgniteKernal) grid(g);
+            final IgniteKernal kernal0 = (IgniteKernal)grid(g);
 
             final int idx = g;
 
@@ -346,6 +364,87 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
     }
 
     /**
+     * @param mode Cache atomicity mode.
+     * @throws Exception If failed.
+     */
+    private void checkStartStopCachesSimple(CacheAtomicityMode mode) throws Exception {
+        final IgniteEx kernal = grid(0);
+        final int cacheCnt = 3;
+
+        List<CacheConfiguration> ccfgList = new ArrayList<>();
+
+        for (int i = 0; i < cacheCnt; i++) {
+            CacheConfiguration ccfg = new CacheConfiguration();
+            ccfg.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC);
+            ccfg.setAtomicityMode(mode);
+            ccfg.setName(DYNAMIC_CACHE_NAME + Integer.toString(i));
+
+            ccfgList.add(ccfg);
+        }
+
+        kernal.createCaches(ccfgList);
+
+        for (int g = 0; g < nodeCount(); g++) {
+            IgniteEx kernal0 = grid(g);
+
+            for (IgniteInternalFuture f : kernal0.context().cache().context().exchange().exchangeFutures())
+                f.get();
+
+            info("Getting cache for node: " + g);
+
+            for (int i = 0; i < cacheCnt; i++)
+                assertNotNull(grid(g).cache(DYNAMIC_CACHE_NAME + Integer.toString(i)));
+        }
+
+        for (int i = 0; i < cacheCnt; i++)
+            grid(0).cache(DYNAMIC_CACHE_NAME + Integer.toString(i)).put(Integer.toString(i), Integer.toString(i));
+
+        for (int g = 0; g < nodeCount(); g++) {
+            for (int i = 0; i < cacheCnt; i++) {
+                assertEquals(
+                    Integer.toString(i),
+                    grid(g).cache(DYNAMIC_CACHE_NAME + Integer.toString(i)).get(Integer.toString(i))
+                );
+            }
+        }
+
+        // Grab caches before stop.
+        final IgniteCache[] caches = new IgniteCache[nodeCount() * cacheCnt];
+
+        for (int g = 0; g < nodeCount(); g++) {
+            for (int i = 0; i < cacheCnt; i++)
+                caches[g * nodeCount() + i] = grid(g).cache(DYNAMIC_CACHE_NAME + Integer.toString(i));
+        }
+
+        List<String> namesToDestroy = new ArrayList<>();
+
+        for (int i = 0; i < cacheCnt; i++)
+            namesToDestroy.add(DYNAMIC_CACHE_NAME + Integer.toString(i));
+
+        kernal.destroyCaches(namesToDestroy);
+
+        for (int g = 0; g < nodeCount(); g++) {
+            final IgniteKernal kernal0 = (IgniteKernal)grid(g);
+
+            for (int i = 0; i < cacheCnt; i++) {
+                final int idx = g * nodeCount() + i;
+                final int expVal = i;
+
+                for (IgniteInternalFuture f : kernal0.context().cache().context().exchange().exchangeFutures())
+                    f.get();
+
+                assertNull(kernal0.cache(DYNAMIC_CACHE_NAME));
+
+                GridTestUtils.assertThrows(log, new Callable<Object>() {
+                    @Override public Object call() throws Exception {
+                        return caches[idx].get(Integer.toString(expVal));
+                    }
+                }, IllegalStateException.class, null);
+            }
+        }
+    }
+
+    /**
      * @throws Exception If failed.
      */
     public void testStartStopCacheAddNode() throws Exception {
@@ -378,13 +477,13 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
             }
 
             // Undeploy cache.
-            kernal.context().cache().dynamicDestroyCache(DYNAMIC_CACHE_NAME, true).get();
+            kernal.destroyCache(DYNAMIC_CACHE_NAME);
 
             startGrid(nodeCount() + 1);
 
             // Check that cache is not deployed on new node after undeploy.
             for (int g = 0; g < nodeCount() + 2; g++) {
-                final IgniteKernal kernal0 = (IgniteKernal) grid(g);
+                final IgniteKernal kernal0 = (IgniteKernal)grid(g);
 
                 for (IgniteInternalFuture f : kernal0.context().cache().context().exchange().exchangeFutures())
                     f.get();
@@ -431,16 +530,16 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
             for (int g = 0; g < nodeCount(); g++) {
                 for (int i = 0; i < 100; i++) {
                     assertFalse(grid(g).affinity(DYNAMIC_CACHE_NAME).mapKeyToPrimaryAndBackups(i)
-                            .contains(grid(nodeCount()).cluster().localNode()));
+                        .contains(grid(nodeCount()).cluster().localNode()));
 
                     assertFalse(grid(g).affinity(DYNAMIC_CACHE_NAME).mapKeyToPrimaryAndBackups(i)
-                            .contains(grid(nodeCount() + 1).cluster().localNode()));
+                        .contains(grid(nodeCount() + 1).cluster().localNode()));
                 }
             }
 
             // Check that cache is not deployed on new node after undeploy.
             for (int g = 0; g < nodeCount() + 2; g++) {
-                final IgniteKernal kernal0 = (IgniteKernal) grid(g);
+                final IgniteKernal kernal0 = (IgniteKernal)grid(g);
 
                 for (IgniteInternalFuture f : kernal0.context().cache().context().exchange().exchangeFutures())
                     f.get();
@@ -455,7 +554,7 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
                     }, IllegalArgumentException.class, null);
             }
 
-            kernal.context().cache().dynamicDestroyCache(DYNAMIC_CACHE_NAME, true).get();
+            kernal.destroyCache(DYNAMIC_CACHE_NAME);
 
             stopGrid(nodeCount() + 1);
             stopGrid(nodeCount());
@@ -489,6 +588,36 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
     /**
      * @throws Exception If failed.
      */
+    public void testFailWhenOneOfConfiguredCacheExists() throws Exception {
+        GridTestUtils.assertThrowsInherited(log, new Callable<Object>() {
+            @Override public Object call() throws Exception {
+                final Ignite kernal = grid(0);
+
+                CacheConfiguration ccfgDynamic = new CacheConfiguration();
+                ccfgDynamic.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC);
+
+                ccfgDynamic.setName(DYNAMIC_CACHE_NAME);
+
+                ccfgDynamic.setNodeFilter(NODE_FILTER);
+
+                CacheConfiguration ccfgStatic = new CacheConfiguration();
+                ccfgStatic.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC);
+
+                // Cache is already configured, should fail.
+                ccfgStatic.setName(STATIC_CACHE_NAME);
+
+                ccfgStatic.setNodeFilter(NODE_FILTER);
+
+                return kernal.createCaches(F.asList(ccfgDynamic, ccfgStatic));
+            }
+        }, CacheExistsException.class, null);
+
+        assertNull(grid(0).cache(DYNAMIC_CACHE_NAME));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
     public void testClientCache() throws Exception {
         try {
             testAttribute = false;
@@ -522,7 +651,7 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
             for (int g = 0; g < nodeCount() + 1; g++)
                 assertEquals("1", ignite(g).cache(DYNAMIC_CACHE_NAME).get("1"));
 
-            kernal.context().cache().dynamicDestroyCache(DYNAMIC_CACHE_NAME, true).get();
+            kernal.destroyCache(DYNAMIC_CACHE_NAME);
         }
         finally {
             stopGrid(nodeCount());
@@ -547,7 +676,7 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
 
             ccfg.setNodeFilter(NODE_FILTER);
 
-            final IgniteKernal started = (IgniteKernal) grid(nodeCount());
+            final IgniteKernal started = (IgniteKernal)grid(nodeCount());
 
             started.createCache(ccfg);
 
@@ -564,14 +693,13 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
             for (int g = 0; g < nodeCount() + 1; g++)
                 assertEquals("1", ignite(g).cache(DYNAMIC_CACHE_NAME).get("1"));
 
-            kernal.context().cache().dynamicDestroyCache(DYNAMIC_CACHE_NAME, true).get();
+            kernal.destroyCache(DYNAMIC_CACHE_NAME);
         }
         finally {
             stopGrid(nodeCount());
         }
     }
 
-
     /**
      * @throws Exception If failed.
      */
@@ -610,7 +738,7 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
             for (int g = 0; g < nodeCount() + 1; g++)
                 assertEquals("1", ignite(g).cache(DYNAMIC_CACHE_NAME).get("1"));
 
-            kernal.context().cache().dynamicDestroyCache(DYNAMIC_CACHE_NAME, true).get();
+            kernal.destroyCache(DYNAMIC_CACHE_NAME);
         }
         finally {
             stopGrid(nodeCount());
@@ -760,7 +888,7 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
                 nearGrid.getOrCreateNearCache(DYNAMIC_CACHE_NAME, new NearCacheConfiguration());
 
                 GridCacheContext<Object, Object> nCtx = ((IgniteKernal)nearGrid)
-                        .internalCache(DYNAMIC_CACHE_NAME).context();
+                    .internalCache(DYNAMIC_CACHE_NAME).context();
 
                 assertTrue(nCtx.isNear());
                 assertFalse(nCtx.affinityNode());
@@ -771,11 +899,12 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
                 clientGrid.getOrCreateCache(cfg);
 
                 GridCacheContext<Object, Object> cCtx = ((IgniteKernal)clientGrid)
-                        .internalCache(DYNAMIC_CACHE_NAME).context();
+                    .internalCache(DYNAMIC_CACHE_NAME).context();
 
                 assertFalse(cCtx.isNear());
                 assertFalse(cCtx.affinityNode());
-            } finally {
+            }
+            finally {
                 stopGrid(nodeCount() + 1);
                 stopGrid(nodeCount());
             }
@@ -785,6 +914,40 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
         }
     }
 
+    /** {@inheritDoc} */
+    public void testGetOrCreateCollection() throws Exception {
+        final int cacheCnt = 3;
+
+        try {
+            final Collection<CacheConfiguration> ccfgs = new ArrayList<>();
+
+            for (int i = 0; i < cacheCnt; i++) {
+                final CacheConfiguration cfg = new CacheConfiguration();
+
+                cfg.setName(DYNAMIC_CACHE_NAME + Integer.toString(i));
+                cfg.setNodeFilter(NODE_FILTER);
+
+                ccfgs.add(cfg);
+
+                grid(0).getOrCreateCaches(ccfgs);
+            }
+
+            for (int i = 0; i < cacheCnt; i++) {
+                assertNotNull(grid(0).cache(DYNAMIC_CACHE_NAME + Integer.toString(i)));
+
+                IgniteCache<Object, Object> jcache = grid(0).cache(DYNAMIC_CACHE_NAME + Integer.toString(i));
+
+                jcache.put(Integer.toString(i), Integer.toString(i));
+
+                assertEquals(jcache.get(Integer.toString(i)), Integer.toString(i));
+            }
+        }
+        finally {
+            for (int i = 0; i < cacheCnt; i++)
+                grid(0).destroyCache(DYNAMIC_CACHE_NAME + Integer.toString(i));
+        }
+    }
+
     /**
      * @throws Exception If failed.
      */
@@ -813,7 +976,7 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
             assertNull(err.get());
 
             for (int i = 0; i < nodeCount(); i++) {
-                GridCacheContext<Object, Object> ctx = ((IgniteKernal) ignite(i)).internalCache(DYNAMIC_CACHE_NAME)
+                GridCacheContext<Object, Object> ctx = ((IgniteKernal)ignite(i)).internalCache(DYNAMIC_CACHE_NAME)
                     .context();
 
                 assertTrue(ctx.affinityNode());
@@ -906,7 +1069,7 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
                 assertNull(err.get());
 
                 for (int i = 0; i < nodeCount(); i++) {
-                    GridCacheContext<Object, Object> ctx = ((IgniteKernal) ignite(i)).internalCache(DYNAMIC_CACHE_NAME)
+                    GridCacheContext<Object, Object> ctx = ((IgniteKernal)ignite(i)).internalCache(DYNAMIC_CACHE_NAME)
                         .context();
 
                     assertTrue(ctx.affinityNode());
@@ -914,7 +1077,7 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
                 }
 
                 for (int i = 0; i < clientCnt; i++) {
-                    GridCacheContext<Object, Object> ctx = ((IgniteKernal) ignite(nodeCount() + i))
+                    GridCacheContext<Object, Object> ctx = ((IgniteKernal)ignite(nodeCount() + i))
                         .internalCache(DYNAMIC_CACHE_NAME).context();
 
                     assertFalse(ctx.affinityNode());
@@ -995,12 +1158,12 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
         for (int i = 0; i < nodeCount(); i++) {
             final int idx = i;
 
-                latches[i] = new CountDownLatch(1);
-                lsnrs[i] = new IgnitePredicate<CacheEvent>() {
-                    @Override public boolean apply(CacheEvent e) {
-                        switch (e.type()) {
-                            case EventType.EVT_CACHE_NODES_LEFT:
-                                latches[idx].countDown();
+            latches[i] = new CountDownLatch(1);
+            lsnrs[i] = new IgnitePredicate<CacheEvent>() {
+                @Override public boolean apply(CacheEvent e) {
+                    switch (e.type()) {
+                        case EventType.EVT_CACHE_NODES_LEFT:
+                            latches[idx].countDown();
 
                             break;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/f445e7bc/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsIgniteMock.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsIgniteMock.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsIgniteMock.java
index c9f77cd..1b779c2 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsIgniteMock.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsIgniteMock.java
@@ -291,6 +291,13 @@ public class IgfsIgniteMock implements IgniteEx {
     }
 
     /** {@inheritDoc} */
+    @Override public Collection<IgniteCache> createCaches(Collection<CacheConfiguration> cacheCfgs) {
+        throwUnsupported();
+
+        return null;
+    }
+
+    /** {@inheritDoc} */
     @Override public <K, V> IgniteCache<K, V> createCache(String cacheName) {
         throwUnsupported();
 
@@ -312,6 +319,13 @@ public class IgfsIgniteMock implements IgniteEx {
     }
 
     /** {@inheritDoc} */
+    @Override public Collection<IgniteCache> getOrCreateCaches(Collection<CacheConfiguration> cacheCfgs) {
+        throwUnsupported();
+
+        return null;
+    }
+
+    /** {@inheritDoc} */
     @Override public <K, V> void addCacheConfiguration(CacheConfiguration<K, V> cacheCfg) {
         throwUnsupported();
     }
@@ -354,6 +368,11 @@ public class IgfsIgniteMock implements IgniteEx {
     }
 
     /** {@inheritDoc} */
+    @Override public void destroyCaches(Collection<String> cacheNames) {
+        throwUnsupported();
+    }
+
+    /** {@inheritDoc} */
     @Override public <K, V> IgniteCache<K, V> cache(@Nullable String name) {
         throwUnsupported();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/f445e7bc/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteMock.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteMock.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteMock.java
index c9859fc..a2cc0b5 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteMock.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteMock.java
@@ -220,6 +220,11 @@ public class IgniteMock implements Ignite {
     }
 
     /** {@inheritDoc} */
+    @Override public Collection<IgniteCache> createCaches(Collection<CacheConfiguration> cacheCfgs) {
+        return null;
+    }
+
+    /** {@inheritDoc} */
     @Override public <K, V> IgniteCache<K, V> getOrCreateCache(CacheConfiguration<K, V> cacheCfg) {
         return null;
     }
@@ -251,6 +256,11 @@ public class IgniteMock implements Ignite {
     }
 
     /** {@inheritDoc} */
+    @Override public Collection<IgniteCache> getOrCreateCaches(Collection<CacheConfiguration> cacheCfgs) {
+        return null;
+    }
+
+    /** {@inheritDoc} */
     @Override public <K, V> IgniteCache<K, V> createCache(String cacheName) {
         return null;
     }
@@ -266,6 +276,11 @@ public class IgniteMock implements Ignite {
     }
 
     /** {@inheritDoc} */
+    @Override public void destroyCaches(Collection<String> cacheNames) {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
     @Override public IgniteTransactions transactions() {
         return null;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/f445e7bc/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java
index b1a1c62..9bb5205 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteProcessProxy.java
@@ -448,6 +448,11 @@ public class IgniteProcessProxy implements IgniteEx {
     }
 
     /** {@inheritDoc} */
+    @Override public Collection<IgniteCache> createCaches(Collection<CacheConfiguration> cacheCfgs) {
+        throw new UnsupportedOperationException("Operation isn't supported yet.");
+    }
+
+    /** {@inheritDoc} */
     @Override public <K, V> IgniteCache<K, V> createCache(String cacheName) {
         throw new UnsupportedOperationException("Operation isn't supported yet.");
     }
@@ -463,6 +468,11 @@ public class IgniteProcessProxy implements IgniteEx {
     }
 
     /** {@inheritDoc} */
+    @Override public Collection<IgniteCache> getOrCreateCaches(Collection<CacheConfiguration> cacheCfgs) {
+        throw new UnsupportedOperationException("Operation isn't supported yet.");
+    }
+
+    /** {@inheritDoc} */
     @Override public <K, V> void addCacheConfiguration(CacheConfiguration<K, V> cacheCfg) {
         throw new UnsupportedOperationException("Operation isn't supported yet.");
     }
@@ -499,6 +509,11 @@ public class IgniteProcessProxy implements IgniteEx {
     }
 
     /** {@inheritDoc} */
+    @Override public void destroyCaches(Collection<String> cacheNames) {
+        throw new UnsupportedOperationException("Operation isn't supported yet.");
+    }
+
+    /** {@inheritDoc} */
     @Override public <K, V> IgniteCache<K, V> cache(@Nullable final String name) {
         return new IgniteCacheProcessProxy<>(name, this);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/f445e7bc/modules/spring/src/main/java/org/apache/ignite/IgniteSpringBean.java
----------------------------------------------------------------------
diff --git a/modules/spring/src/main/java/org/apache/ignite/IgniteSpringBean.java b/modules/spring/src/main/java/org/apache/ignite/IgniteSpringBean.java
index b87d023..37a4b74 100644
--- a/modules/spring/src/main/java/org/apache/ignite/IgniteSpringBean.java
+++ b/modules/spring/src/main/java/org/apache/ignite/IgniteSpringBean.java
@@ -302,6 +302,13 @@ public class IgniteSpringBean implements Ignite, DisposableBean, InitializingBea
     }
 
     /** {@inheritDoc} */
+    @Override public Collection<IgniteCache> createCaches(Collection<CacheConfiguration> cacheCfgs) {
+        checkIgnite();
+
+        return g.createCaches(cacheCfgs);
+    }
+
+    /** {@inheritDoc} */
     @Override public <K, V> IgniteCache<K, V> getOrCreateCache(CacheConfiguration<K, V> cacheCfg, NearCacheConfiguration<K, V> nearCfg) {
         checkIgnite();
 
@@ -330,6 +337,13 @@ public class IgniteSpringBean implements Ignite, DisposableBean, InitializingBea
     }
 
     /** {@inheritDoc} */
+    @Override public Collection<IgniteCache> getOrCreateCaches(Collection<CacheConfiguration> cacheCfgs) {
+        checkIgnite();
+
+        return g.getOrCreateCaches(cacheCfgs);
+    }
+
+    /** {@inheritDoc} */
     @Override public <K, V> IgniteCache<K, V> createCache(String cacheName) {
         checkIgnite();
 
@@ -351,6 +365,13 @@ public class IgniteSpringBean implements Ignite, DisposableBean, InitializingBea
     }
 
     /** {@inheritDoc} */
+    @Override public void destroyCaches(Collection<String> cacheNames) {
+        checkIgnite();
+
+        g.destroyCaches(cacheNames);
+    }
+
+    /** {@inheritDoc} */
     @Override public IgniteTransactions transactions() {
         checkIgnite();
 


[27/50] [abbrv] ignite git commit: Merge branch community/ignite-1.7.3

Posted by sh...@apache.org.
Merge branch community/ignite-1.7.3


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

Branch: refs/heads/ignite-2788
Commit: afc892300935e09e41cc87218acdf1b549875966
Parents: e7b13cc
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Mon Oct 3 12:56:55 2016 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Mon Oct 3 12:56:55 2016 +0300

----------------------------------------------------------------------
 .../dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs  | 1 -
 1 file changed, 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/afc89230/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
index 1b58d17..e623969 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
@@ -23,7 +23,6 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
     using System.Diagnostics.CodeAnalysis;
     using System.Globalization;
     using System.IO;
-    using System.Globalization;
     using System.Runtime.InteropServices;
     using System.Threading;
     using Apache.Ignite.Core.Cache.Affinity;


[24/50] [abbrv] ignite git commit: IGNITE-1629 .NET: Introduced native logging facility

Posted by sh...@apache.org.
IGNITE-1629 .NET: Introduced native logging facility


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

Branch: refs/heads/ignite-2788
Commit: 3c9e254ee762dfef0b27b5b95a63502069904d70
Parents: 36087cf
Author: ptupitsyn <pt...@gridgain.com>
Authored: Mon Aug 15 16:40:24 2016 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Mon Oct 3 12:16:08 2016 +0300

----------------------------------------------------------------------
 .../logger/platform/PlatformLogger.java         | 223 ++++++++++
 .../platform/PlatformAbstractBootstrap.java     |  18 +-
 .../platform/PlatformConfigurationEx.java       |   6 +
 .../platform/PlatformNoopProcessor.java         |  10 +
 .../processors/platform/PlatformProcessor.java  |  16 +
 .../platform/PlatformProcessorImpl.java         |  56 +++
 .../callback/PlatformCallbackGateway.java       |  45 ++
 .../callback/PlatformCallbackUtils.java         |  20 +
 .../cpp/PlatformCppConfigurationEx.java         |   6 +
 .../dotnet/PlatformDotNetBootstrap.java         |   9 +
 .../PlatformDotNetConfigurationClosure.java     |  11 +-
 .../dotnet/PlatformDotNetConfigurationEx.java   |  12 +-
 .../cpp/jni/include/ignite/jni/exports.h        |   2 +
 .../platforms/cpp/jni/include/ignite/jni/java.h |  13 +
 modules/platforms/cpp/jni/project/vs/module.def |   3 +-
 modules/platforms/cpp/jni/src/exports.cpp       |  12 +-
 modules/platforms/cpp/jni/src/java.cpp          |  72 +++-
 .../Apache.Ignite.Core.Tests.csproj             |   8 +
 .../Binary/BinaryStringTest.cs                  |  26 +-
 .../Config/Log/custom-log.xml                   |  50 +++
 .../Config/Log/dotnet-log4j.xml                 | 143 ++++++
 .../IgniteConfigurationSerializerTest.cs        |  30 +-
 .../Log/CustomLoggerTest.cs                     | 430 +++++++++++++++++++
 .../Log/DefaultLoggerTest.cs                    | 114 +++++
 .../Apache.Ignite.Core.Tests/TestUtils.cs       |  26 ++
 .../Apache.Ignite.Core.csproj                   |   6 +-
 .../Cache/Configuration/CacheConfiguration.cs   |  19 +-
 .../Cache/Configuration/QueryEntity.cs          |  25 +-
 .../Cache/Configuration/QueryField.cs           |  19 +-
 .../dotnet/Apache.Ignite.Core/IIgnite.cs        |   8 +
 .../Apache.Ignite.Core/IgniteConfiguration.cs   |  88 ++++
 .../IgniteConfigurationSection.xsd              |  12 +
 .../dotnet/Apache.Ignite.Core/Ignition.cs       |  39 +-
 .../Apache.Ignite.Core/Impl/Binary/JavaTypes.cs |  29 +-
 .../Apache.Ignite.Core/Impl/Common/Logger.cs    |  37 --
 .../dotnet/Apache.Ignite.Core/Impl/Ignite.cs    |   9 +
 .../Apache.Ignite.Core/Impl/IgniteManager.cs    |   6 +-
 .../Apache.Ignite.Core/Impl/IgniteProxy.cs      |   7 +
 .../Apache.Ignite.Core/Impl/IgniteUtils.cs      |  26 +-
 .../Apache.Ignite.Core/Impl/Log/JavaLogger.cs   | 110 +++++
 .../Impl/Unmanaged/IgniteJniNativeMethods.cs    |   7 +
 .../Impl/Unmanaged/UnmanagedCallbackHandlers.cs |   3 +
 .../Impl/Unmanaged/UnmanagedCallbacks.cs        |  76 +++-
 .../Impl/Unmanaged/UnmanagedUtils.cs            |  27 +-
 .../Apache.Ignite.Core/Log/CategoryLogger.cs    |  82 ++++
 .../dotnet/Apache.Ignite.Core/Log/ILogger.cs    |  51 +++
 .../dotnet/Apache.Ignite.Core/Log/LogLevel.cs   |  53 +++
 .../Apache.Ignite.Core/Log/LoggerExtensions.cs  | 320 ++++++++++++++
 48 files changed, 2308 insertions(+), 112 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/core/src/main/java/org/apache/ignite/internal/logger/platform/PlatformLogger.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/logger/platform/PlatformLogger.java b/modules/core/src/main/java/org/apache/ignite/internal/logger/platform/PlatformLogger.java
new file mode 100644
index 0000000..0a0437e
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/logger/platform/PlatformLogger.java
@@ -0,0 +1,223 @@
+/*
+ * 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.logger.platform;
+
+import org.apache.ignite.IgniteLogger;
+import org.apache.ignite.internal.binary.BinaryRawWriterEx;
+import org.apache.ignite.internal.processors.platform.PlatformContext;
+import org.apache.ignite.internal.processors.platform.PlatformNativeException;
+import org.apache.ignite.internal.processors.platform.callback.PlatformCallbackGateway;
+import org.apache.ignite.internal.processors.platform.memory.PlatformMemory;
+import org.apache.ignite.internal.processors.platform.memory.PlatformOutputStream;
+import org.apache.ignite.internal.util.typedef.X;
+import org.jetbrains.annotations.Nullable;
+
+import static org.apache.ignite.IgniteSystemProperties.IGNITE_QUIET;
+
+/**
+ * Logger that delegates to platform.
+ */
+public class PlatformLogger implements IgniteLogger {
+    /** */
+    public static final int LVL_TRACE = 0;
+
+    /** */
+    public static final int LVL_DEBUG = 1;
+
+    /** */
+    public static final int LVL_INFO = 2;
+
+    /** */
+    public static final int LVL_WARN = 3;
+
+    /** */
+    public static final int LVL_ERROR = 4;
+
+    /** Callbacks. */
+    private volatile PlatformCallbackGateway gate;
+
+    /** Context. */
+    private volatile PlatformContext ctx;
+
+    /** Category. */
+    private final String category;
+
+    /** Trace flag. */
+    private volatile boolean traceEnabled;
+
+    /** Debug flag. */
+    private volatile boolean debugEnabled;
+
+    /** Info flag. */
+    private volatile boolean infoEnabled;
+
+    /** Quiet flag. */
+    private static final boolean isQuiet = Boolean.valueOf(System.getProperty(IGNITE_QUIET, "true"));
+
+    /**
+     * Ctor.
+     *
+     */
+    public PlatformLogger() {
+        category = null;
+    }
+
+    /**
+     * Ctor.
+     */
+    private PlatformLogger(PlatformCallbackGateway gate, PlatformContext ctx, String category,
+        boolean traceEnabled, boolean debugEnabled, boolean infoEnabled) {
+        this.gate = gate;
+        this.ctx = ctx;
+        this.category = category;
+        this.traceEnabled = traceEnabled;
+        this.debugEnabled = debugEnabled;
+        this.infoEnabled = infoEnabled;
+    }
+
+    /** {@inheritDoc} */
+    @Override public IgniteLogger getLogger(Object ctgr) {
+        return new PlatformLogger(gate, ctx, getCategoryString(ctgr), traceEnabled, debugEnabled, infoEnabled);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void trace(String msg) {
+        log(LVL_TRACE, msg, null);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void debug(String msg) {
+        log(LVL_DEBUG, msg, null);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void info(String msg) {
+        log(LVL_INFO, msg, null);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void warning(String msg) {
+        log(LVL_WARN, msg, null);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void warning(String msg, @Nullable Throwable e) {
+        log(LVL_WARN, msg, e);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void error(String msg) {
+        log(LVL_ERROR, msg, null);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void error(String msg, @Nullable Throwable e) {
+        log(LVL_ERROR, msg, e);
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean isTraceEnabled() {
+        return traceEnabled;
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean isDebugEnabled() {
+        return debugEnabled;
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean isInfoEnabled() {
+        return infoEnabled;
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean isQuiet() {
+        return isQuiet;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String fileName() {
+        return null;
+    }
+
+    /**
+     * Sets the gateway.
+     *
+     * @param gate Callback gateway.
+     */
+    public void setGateway(PlatformCallbackGateway gate) {
+        assert gate != null;
+        this.gate = gate;
+
+        // Pre-calculate enabled levels (JNI calls are expensive)
+        traceEnabled = gate.loggerIsLevelEnabled(LVL_TRACE);
+        debugEnabled = gate.loggerIsLevelEnabled(LVL_DEBUG);
+        infoEnabled = gate.loggerIsLevelEnabled(LVL_INFO);
+    }
+
+    /**
+     * Sets the context.
+     *
+     * @param ctx Platform context.
+     */
+    public void setContext(PlatformContext ctx) {
+        assert ctx != null;
+        this.ctx = ctx;
+    }
+
+    /**
+     * Logs the message.
+     *
+     * @param level Log level.
+     * @param msg Message.
+     * @param e Exception.
+     */
+    private void log(int level, String msg, @Nullable Throwable e) {
+        String errorInfo = null;
+
+        if (e != null)
+            errorInfo = X.getFullStackTrace(e);
+
+        PlatformNativeException e0 = X.cause(e, PlatformNativeException.class);
+        if (ctx != null && e0 != null) {
+            try (PlatformMemory mem = ctx.memory().allocate()) {
+                PlatformOutputStream out = mem.output();
+                BinaryRawWriterEx writer = ctx.writer(out);
+                writer.writeObject(e0.cause());
+                out.synchronize();
+
+                gate.loggerLog(level, msg, category, errorInfo, mem.pointer());
+            }
+        }
+        else {
+            gate.loggerLog(level, msg, category, errorInfo, 0);
+        }
+    }
+
+    /**
+     * Gets the category string.
+     *
+     * @param ctgr Category object.
+     * @return Category string.
+     */
+    private static String getCategoryString(Object ctgr) {
+        return ctgr instanceof Class
+            ? ((Class)ctgr).getName()
+            : (ctgr == null ? null : String.valueOf(ctgr));
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformAbstractBootstrap.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformAbstractBootstrap.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformAbstractBootstrap.java
index a28677f..8b4eb75 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformAbstractBootstrap.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformAbstractBootstrap.java
@@ -22,7 +22,9 @@ import org.apache.ignite.Ignition;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.IgnitionEx;
+import org.apache.ignite.internal.logger.platform.PlatformLogger;
 import org.apache.ignite.internal.processors.platform.memory.PlatformExternalMemory;
+import org.apache.ignite.internal.processors.platform.memory.PlatformInputStream;
 import org.apache.ignite.internal.processors.resource.GridSpringResourceContext;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteClosure;
@@ -35,7 +37,11 @@ public abstract class PlatformAbstractBootstrap implements PlatformBootstrap {
     /** {@inheritDoc} */
     @Override public PlatformProcessor start(IgniteConfiguration cfg, @Nullable GridSpringResourceContext springCtx,
         long envPtr, long dataPtr) {
-        Ignition.setClientMode(new PlatformExternalMemory(null, dataPtr).input().readBoolean());
+        final PlatformInputStream input = new PlatformExternalMemory(null, dataPtr).input();
+
+        Ignition.setClientMode(input.readBoolean());
+
+        processInput(input, cfg);
 
         IgniteConfiguration cfg0 = closure(envPtr).apply(cfg);
 
@@ -61,4 +67,14 @@ public abstract class PlatformAbstractBootstrap implements PlatformBootstrap {
      * @return Closure.
      */
     protected abstract IgniteClosure<IgniteConfiguration, IgniteConfiguration> closure(long envPtr);
+
+    /**
+     * Processes any additional input data.
+     *
+     * @param input Input stream.
+     * @param cfg Config.
+     */
+    protected void processInput(PlatformInputStream input, IgniteConfiguration cfg) {
+        // No-op.
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformConfigurationEx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformConfigurationEx.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformConfigurationEx.java
index b7c8895..97f0866 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformConfigurationEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformConfigurationEx.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.processors.platform;
 
 import org.apache.ignite.internal.processors.platform.cache.PlatformCacheExtension;
+import org.apache.ignite.internal.logger.platform.PlatformLogger;
 import org.apache.ignite.internal.processors.platform.callback.PlatformCallbackGateway;
 import org.apache.ignite.internal.processors.platform.memory.PlatformMemoryManagerImpl;
 import org.jetbrains.annotations.Nullable;
@@ -52,4 +53,9 @@ public interface PlatformConfigurationEx {
      * @return Available cache extensions.
      */
     @Nullable public Collection<PlatformCacheExtension> cacheExtensions();
+
+    /**
+     * @return Platform logger.
+     */
+    public PlatformLogger logger();
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformNoopProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformNoopProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformNoopProcessor.java
index cdf418f..a7b7a8d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformNoopProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformNoopProcessor.java
@@ -175,4 +175,14 @@ public class PlatformNoopProcessor extends GridProcessorAdapter implements Platf
     @Override public PlatformTarget getOrCreateNearCache(@Nullable String cacheName, long memPtr) {
         return null;
     }
+
+    /** {@inheritDoc} */
+    @Override public boolean loggerIsLevelEnabled(int level) {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void loggerLog(int level, String message, String category, String errorInfo) {
+        // No-op.
+    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessor.java
index f0201ef..1d9d3cd 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessor.java
@@ -255,4 +255,20 @@ public interface PlatformProcessor extends GridProcessor {
      */
     public PlatformTarget getOrCreateNearCache(@Nullable String cacheName, long memPtr);
 
+    /**
+     * Gets a value indicating whether Ignite logger has specified level enabled.
+     *
+     * @param level Log level.
+     */
+    public boolean loggerIsLevelEnabled(int level);
+
+    /**
+     * Logs to the Ignite logger.
+     *
+     * @param level Log level.
+     * @param message Message.
+     * @param category Category.
+     * @param errorInfo Error info.
+     */
+    public void loggerLog(int level, String message, String category, String errorInfo);
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessorImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessorImpl.java
index b364c4a..548145e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessorImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessorImpl.java
@@ -30,6 +30,7 @@ import org.apache.ignite.internal.GridKernalContext;
 import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.binary.BinaryRawReaderEx;
 import org.apache.ignite.internal.binary.BinaryRawWriterEx;
+import org.apache.ignite.internal.logger.platform.PlatformLogger;
 import org.apache.ignite.internal.processors.GridProcessorAdapter;
 import org.apache.ignite.internal.processors.cache.IgniteCacheProxy;
 import org.apache.ignite.internal.processors.datastreamer.DataStreamerImpl;
@@ -128,6 +129,9 @@ public class PlatformProcessorImpl extends GridProcessorAdapter implements Platf
 
         // Initialize cache extensions (if any).
         cacheExts = prepareCacheExtensions(interopCfg.cacheExtensions());
+
+        if (interopCfg.logger() != null)
+            interopCfg.logger().setContext(platformCtx);
     }
 
     /** {@inheritDoc} */
@@ -433,6 +437,58 @@ public class PlatformProcessorImpl extends GridProcessorAdapter implements Platf
         return new PlatformCache(platformCtx, cache, false, cacheExts);
     }
 
+    /** {@inheritDoc} */
+    @Override public boolean loggerIsLevelEnabled(int level) {
+        IgniteLogger log = ctx.grid().log();
+
+        switch (level) {
+            case PlatformLogger.LVL_TRACE:
+                return log.isTraceEnabled();
+            case PlatformLogger.LVL_DEBUG:
+                return log.isDebugEnabled();
+            case PlatformLogger.LVL_INFO:
+                return log.isInfoEnabled();
+            case PlatformLogger.LVL_WARN:
+                return true;
+            case PlatformLogger.LVL_ERROR:
+                return true;
+            default:
+                assert false;
+        }
+
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void loggerLog(int level, String message, String category, String errorInfo) {
+        IgniteLogger log = ctx.grid().log();
+
+        if (category != null)
+            log = log.getLogger(category);
+
+        Throwable err = errorInfo == null ? null : new IgniteException("Platform error:" + errorInfo);
+
+        switch (level) {
+            case PlatformLogger.LVL_TRACE:
+                log.trace(message);
+                break;
+            case PlatformLogger.LVL_DEBUG:
+                log.debug(message);
+                break;
+            case PlatformLogger.LVL_INFO:
+                log.info(message);
+                break;
+            case PlatformLogger.LVL_WARN:
+                log.warning(message, err);
+                break;
+            case PlatformLogger.LVL_ERROR:
+                log.error(message, err);
+                break;
+            default:
+                assert false;
+        }
+    }
+
     /**
      * Gets the near cache config.
      *

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/callback/PlatformCallbackGateway.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/callback/PlatformCallbackGateway.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/callback/PlatformCallbackGateway.java
index 41d3802..de23242 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/callback/PlatformCallbackGateway.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/callback/PlatformCallbackGateway.java
@@ -943,6 +943,44 @@ public class PlatformCallbackGateway {
     }
 
     /**
+     * Logs to the platform.
+     *
+     * @param level Log level.
+     * @param message Message.
+     * @param category Category.
+     * @param errorInfo Error info.
+     * @param memPtr Pointer to optional payload (serialized exception).
+     */
+    public void loggerLog(int level, String message, String category, String errorInfo, long memPtr) {
+        if (!tryEnter())
+            return;  // Do not lock for logger: this should work during shutdown
+
+        try {
+            PlatformCallbackUtils.loggerLog(envPtr, level, message, category, errorInfo, memPtr);
+        }
+        finally {
+            leave();
+        }
+    }
+
+    /**
+     * Gets a value indicating whether native logger has specified level enabled.
+     *
+     * @param level Log level.
+     */
+    public boolean loggerIsLevelEnabled(int level) {
+        if (!tryEnter())
+            return false;  // Do not lock for logger: this should work during shutdown
+
+        try {
+            return PlatformCallbackUtils.loggerIsLevelEnabled(envPtr, level);
+        }
+        finally {
+            leave();
+        }
+    }
+
+    /**
      * Kernal stop callback.
      */
     public void onStop() {
@@ -1058,6 +1096,13 @@ public class PlatformCallbackGateway {
     }
 
     /**
+     * Enter gateway.
+     */
+    protected boolean tryEnter() {
+        return lock.enterBusy();
+    }
+
+    /**
      * Leave gateway.
      */
     protected void leave() {

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/callback/PlatformCallbackUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/callback/PlatformCallbackUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/callback/PlatformCallbackUtils.java
index 63c6682..09a7f1b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/callback/PlatformCallbackUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/callback/PlatformCallbackUtils.java
@@ -553,6 +553,26 @@ public class PlatformCallbackUtils {
     static native void consoleWrite(String str, boolean isErr);
 
     /**
+     * Logs to the native logger.
+     *
+     * @param envPtr Environment pointer.
+     * @param level Log level.
+     * @param message Message.
+     * @param category Category.
+     * @param errorInfo Error info.
+     * @param memPtr Pointer to optional payload (serialized exception).
+     */
+    static native void loggerLog(long envPtr, int level, String message, String category, String errorInfo, long memPtr);
+
+    /**
+     * Gets a value indicating whether native logger has specified level enabled.
+     *
+     * @param envPtr Environment pointer.
+     * @param level Log level.
+     */
+    static native boolean loggerIsLevelEnabled(long envPtr, int level);
+
+    /**
      * Private constructor.
      */
     private PlatformCallbackUtils() {

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppConfigurationEx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppConfigurationEx.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppConfigurationEx.java
index 931a18e..785c9bd 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppConfigurationEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppConfigurationEx.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.processors.platform.cpp;
 
+import org.apache.ignite.internal.logger.platform.PlatformLogger;
 import org.apache.ignite.internal.processors.platform.PlatformConfigurationEx;
 import org.apache.ignite.internal.processors.platform.cache.PlatformCacheExtension;
 import org.apache.ignite.internal.processors.platform.callback.PlatformCallbackGateway;
@@ -80,6 +81,11 @@ public class PlatformCppConfigurationEx extends PlatformCppConfiguration impleme
         return null;
     }
 
+    /** {@inheritDoc} */
+    @Override public PlatformLogger logger() {
+        return null;
+    }
+
     /**
      * @param warnings Warnings.
      */

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetBootstrap.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetBootstrap.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetBootstrap.java
index 9278246..84a4577 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetBootstrap.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetBootstrap.java
@@ -17,8 +17,11 @@
 
 package org.apache.ignite.internal.processors.platform.dotnet;
 
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.logger.platform.PlatformLogger;
 import org.apache.ignite.internal.processors.platform.PlatformAbstractBootstrap;
 import org.apache.ignite.internal.processors.platform.PlatformAbstractConfigurationClosure;
+import org.apache.ignite.internal.processors.platform.memory.PlatformInputStream;
 
 import java.io.PrintStream;
 
@@ -40,4 +43,10 @@ public class PlatformDotNetBootstrap extends PlatformAbstractBootstrap {
     @Override protected PlatformAbstractConfigurationClosure closure(long envPtr) {
         return new PlatformDotNetConfigurationClosure(envPtr);
     }
+
+    /** {@inheritDoc} */
+    @Override protected void processInput(PlatformInputStream input, IgniteConfiguration cfg) {
+        if (input.readBoolean())
+            cfg.setGridLogger(new PlatformLogger());
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationClosure.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationClosure.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationClosure.java
index cb9696c..0c691af 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationClosure.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationClosure.java
@@ -31,6 +31,7 @@ import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.internal.binary.BinaryRawWriterEx;
 import org.apache.ignite.internal.binary.BinaryReaderExImpl;
 import org.apache.ignite.internal.binary.GridBinaryMarshaller;
+import org.apache.ignite.internal.logger.platform.PlatformLogger;
 import org.apache.ignite.internal.processors.platform.PlatformAbstractConfigurationClosure;
 import org.apache.ignite.internal.processors.platform.lifecycle.PlatformLifecycleBean;
 import org.apache.ignite.internal.processors.platform.memory.PlatformMemory;
@@ -89,7 +90,15 @@ public class PlatformDotNetConfigurationClosure extends PlatformAbstractConfigur
 
         memMgr = new PlatformMemoryManagerImpl(gate, 1024);
 
-        PlatformDotNetConfigurationEx dotNetCfg0 = new PlatformDotNetConfigurationEx(dotNetCfg, gate, memMgr);
+        PlatformLogger userLogger = null;
+
+        if (igniteCfg.getGridLogger() instanceof PlatformLogger) {
+            userLogger = (PlatformLogger)igniteCfg.getGridLogger();
+            userLogger.setGateway(gate);
+        }
+
+        PlatformDotNetConfigurationEx dotNetCfg0 = new PlatformDotNetConfigurationEx(dotNetCfg, gate, memMgr,
+            userLogger);
 
         igniteCfg.setPlatformConfiguration(dotNetCfg0);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationEx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationEx.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationEx.java
index 78fb755..eded0e7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationEx.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.processors.platform.dotnet;
 
+import org.apache.ignite.internal.logger.platform.PlatformLogger;
 import org.apache.ignite.internal.processors.platform.PlatformConfigurationEx;
 import org.apache.ignite.internal.processors.platform.cache.PlatformCacheExtension;
 import org.apache.ignite.internal.processors.platform.callback.PlatformCallbackGateway;
@@ -39,6 +40,9 @@ public class PlatformDotNetConfigurationEx extends PlatformDotNetConfiguration i
     /** Memory manager. */
     private final PlatformMemoryManagerImpl memMgr;
 
+    /** Logger. */
+    private final PlatformLogger logger;
+
     /** Warnings */
     private Collection<String> warnings;
 
@@ -50,11 +54,12 @@ public class PlatformDotNetConfigurationEx extends PlatformDotNetConfiguration i
      * @param memMgr Memory manager.
      */
     public PlatformDotNetConfigurationEx(PlatformDotNetConfiguration cfg, PlatformCallbackGateway gate,
-        PlatformMemoryManagerImpl memMgr) {
+        PlatformMemoryManagerImpl memMgr, PlatformLogger logger) {
         super(cfg);
 
         this.gate = gate;
         this.memMgr = memMgr;
+        this.logger = logger;
     }
 
     /** {@inheritDoc} */
@@ -82,6 +87,11 @@ public class PlatformDotNetConfigurationEx extends PlatformDotNetConfiguration i
         return Collections.<PlatformCacheExtension>singleton(new PlatformDotNetSessionCacheExtension());
     }
 
+    /** {@inheritDoc} */
+    @Override public PlatformLogger logger() {
+        return logger;
+    }
+
     /**
      * @param warnings Warnings.
      */

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/cpp/jni/include/ignite/jni/exports.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/jni/include/ignite/jni/exports.h b/modules/platforms/cpp/jni/include/ignite/jni/exports.h
index 3f400fb..7fae0d2 100644
--- a/modules/platforms/cpp/jni/include/ignite/jni/exports.h
+++ b/modules/platforms/cpp/jni/include/ignite/jni/exports.h
@@ -54,6 +54,8 @@ extern "C" {
     void* IGNITE_CALL IgniteProcessorAtomicReference(gcj::JniContext* ctx, void* obj, char* name, long long memPtr, bool create);
     void IGNITE_CALL IgniteProcessorGetIgniteConfiguration(gcj::JniContext* ctx, void* obj, long long memPtr);
     void IGNITE_CALL IgniteProcessorGetCacheNames(gcj::JniContext* ctx, void* obj, long long memPtr);
+    bool IGNITE_CALL IgniteProcessorLoggerIsLevelEnabled(gcj::JniContext* ctx, void* obj, int level);
+    void IGNITE_CALL IgniteProcessorLoggerLog(gcj::JniContext* ctx, void* obj, int level, char* message, char* category, char* errorInfo);
     
     long long IGNITE_CALL IgniteTargetInStreamOutLong(gcj::JniContext* ctx, void* obj, int opType, long long memPtr);
     void IGNITE_CALL IgniteTargetInStreamOutStream(gcj::JniContext* ctx, void* obj, int opType, long long inMemPtr, long long outMemPtr);

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/cpp/jni/include/ignite/jni/java.h
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/jni/include/ignite/jni/java.h b/modules/platforms/cpp/jni/include/ignite/jni/java.h
index 8d79a7d..4cf00a3 100644
--- a/modules/platforms/cpp/jni/include/ignite/jni/java.h
+++ b/modules/platforms/cpp/jni/include/ignite/jni/java.h
@@ -108,6 +108,9 @@ namespace ignite
 
             typedef void(JNICALL *ConsoleWriteHandler)(const char* chars, int charsLen, unsigned char isErr);
 
+            typedef void(JNICALL *LoggerLogHandler)(void* target, int level, const char* messageChars, int messageCharsLen, const char* categoryChars, int categoryCharsLen, const char* errorInfoChars, int errorInfoCharsLen, long long memPtr);
+            typedef bool(JNICALL *LoggerIsLevelEnabledHandler)(void* target, int level);
+
             /**
              * JNI handlers holder.
              */
@@ -191,6 +194,9 @@ namespace ignite
                 AffinityFunctionAssignPartitionsHandler affinityFunctionAssignPartitions;
                 AffinityFunctionRemoveNodeHandler affinityFunctionRemoveNode;
                 AffinityFunctionDestroyHandler affinityFunctionDestroy;
+
+                LoggerLogHandler loggerLog;
+                LoggerIsLevelEnabledHandler loggerIsLevelEnabled;
             };
 
             /**
@@ -335,6 +341,8 @@ namespace ignite
                 jmethodID m_PlatformProcessor_getCacheNames;
                 jmethodID m_PlatformProcessor_atomicSequence;
                 jmethodID m_PlatformProcessor_atomicReference;
+                jmethodID m_PlatformProcessor_loggerIsLevelEnabled;
+                jmethodID m_PlatformProcessor_loggerLog;
 
                 jclass c_PlatformTarget;
                 jmethodID m_PlatformTarget_inStreamOutLong;
@@ -554,6 +562,8 @@ namespace ignite
                 jobject ProcessorAtomicReference(jobject obj, char* name, long long memPtr, bool create);
 				void ProcessorGetIgniteConfiguration(jobject obj, long long memPtr);
 				void ProcessorGetCacheNames(jobject obj, long long memPtr);
+				bool ProcessorLoggerIsLevelEnabled(jobject obj, int level);
+				void ProcessorLoggerLog(jobject obj, int level, char* message, char* category, char* errorInfo);
 
                 long long TargetInStreamOutLong(jobject obj, int type, long long memPtr, JniErrorInfo* errInfo = NULL);
                 void TargetInStreamOutStream(jobject obj, int opType, long long inMemPtr, long long outMemPtr, JniErrorInfo* errInfo = NULL);
@@ -767,6 +777,9 @@ namespace ignite
             JNIEXPORT void JNICALL JniAffinityFunctionDestroy(JNIEnv *env, jclass cls, jlong envPtr, jlong ptr);
 
             JNIEXPORT void JNICALL JniConsoleWrite(JNIEnv *env, jclass cls, jstring str, jboolean isErr);
+
+            JNIEXPORT void JNICALL JniLoggerLog(JNIEnv *env, jclass cls, jlong envPtr, jint level, jstring message, jstring category, jstring errorInfo, jlong memPtr);
+            JNIEXPORT jboolean JNICALL JniLoggerIsLevelEnabled(JNIEnv *env, jclass cls, jlong envPtr, jint level);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/cpp/jni/project/vs/module.def
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/jni/project/vs/module.def b/modules/platforms/cpp/jni/project/vs/module.def
index ddddace..c1582e6 100644
--- a/modules/platforms/cpp/jni/project/vs/module.def
+++ b/modules/platforms/cpp/jni/project/vs/module.def
@@ -136,4 +136,5 @@ IgniteProcessorGetCacheNames @133
 IgniteProjectionForServers @134
 IgniteSetConsoleHandler @135
 IgniteRemoveConsoleHandler @136
- 
\ No newline at end of file
+IgniteProcessorLoggerIsLevelEnabled @137
+IgniteProcessorLoggerLog @138
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/cpp/jni/src/exports.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/jni/src/exports.cpp b/modules/platforms/cpp/jni/src/exports.cpp
index 2950d15..8ef8188 100644
--- a/modules/platforms/cpp/jni/src/exports.cpp
+++ b/modules/platforms/cpp/jni/src/exports.cpp
@@ -93,11 +93,11 @@ extern "C" {
     void*IGNITE_CALL IgniteProcessorDataStreamer(gcj::JniContext* ctx, void* obj, char* name, bool keepPortable) {
         return ctx->ProcessorDataStreamer(static_cast<jobject>(obj), name, keepPortable);
     }
-    
+
     void* IGNITE_CALL IgniteProcessorTransactions(gcj::JniContext* ctx, void* obj) {
         return ctx->ProcessorTransactions(static_cast<jobject>(obj));
     }
-        
+
     void* IGNITE_CALL IgniteProcessorCompute(gcj::JniContext* ctx, void* obj, void* prj) {
         return ctx->ProcessorCompute(static_cast<jobject>(obj), static_cast<jobject>(prj));
     }
@@ -138,6 +138,14 @@ extern "C" {
         return ctx->ProcessorGetCacheNames(static_cast<jobject>(obj), memPtr);
     }
 
+    bool IGNITE_CALL IgniteProcessorLoggerIsLevelEnabled(gcj::JniContext* ctx, void* obj, int level) {        
+        return ctx->ProcessorLoggerIsLevelEnabled(static_cast<jobject>(obj), level);
+    }
+
+    void IGNITE_CALL IgniteProcessorLoggerLog(gcj::JniContext* ctx, void* obj, int level, char* message, char* category, char* errorInfo) {
+        ctx->ProcessorLoggerLog(static_cast<jobject>(obj), level, message, category, errorInfo);
+    }
+
     long long IGNITE_CALL IgniteTargetInStreamOutLong(gcj::JniContext* ctx, void* obj, int opType, long long memPtr) {
         return ctx->TargetInStreamOutLong(static_cast<jobject>(obj), opType, memPtr);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/cpp/jni/src/java.cpp
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/jni/src/java.cpp b/modules/platforms/cpp/jni/src/java.cpp
index 7bd6287..eb0d89a 100644
--- a/modules/platforms/cpp/jni/src/java.cpp
+++ b/modules/platforms/cpp/jni/src/java.cpp
@@ -216,6 +216,8 @@ namespace ignite
             JniMethod M_PLATFORM_PROCESSOR_ATOMIC_REFERENCE = JniMethod("atomicReference", "(Ljava/lang/String;JZ)Lorg/apache/ignite/internal/processors/platform/PlatformTarget;", false);
             JniMethod M_PLATFORM_PROCESSOR_GET_IGNITE_CONFIGURATION = JniMethod("getIgniteConfiguration", "(J)V", false);
             JniMethod M_PLATFORM_PROCESSOR_GET_CACHE_NAMES = JniMethod("getCacheNames", "(J)V", false);
+            JniMethod M_PLATFORM_PROCESSOR_LOGGER_IS_LEVEL_ENABLED = JniMethod("loggerIsLevelEnabled", "(I)Z", false);
+            JniMethod M_PLATFORM_PROCESSOR_LOGGER_LOG = JniMethod("loggerLog", "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", false);
 
             const char* C_PLATFORM_TARGET = "org/apache/ignite/internal/processors/platform/PlatformTarget";
             JniMethod M_PLATFORM_TARGET_IN_STREAM_OUT_LONG = JniMethod("inStreamOutLong", "(IJ)J", false);
@@ -366,6 +368,9 @@ namespace ignite
             JniMethod M_PLATFORM_CALLBACK_UTILS_ON_CLIENT_DISCONNECTED = JniMethod("onClientDisconnected", "(J)V", true);
             JniMethod M_PLATFORM_CALLBACK_UTILS_ON_CLIENT_RECONNECTED = JniMethod("onClientReconnected", "(JZ)V", true);
 
+            JniMethod M_PLATFORM_CALLBACK_UTILS_LOGGER_LOG = JniMethod("loggerLog", "(JILjava/lang/String;Ljava/lang/String;Ljava/lang/String;J)V", true);
+            JniMethod M_PLATFORM_CALLBACK_UTILS_LOGGER_IS_LEVEL_ENABLED = JniMethod("loggerIsLevelEnabled", "(JI)Z", true);
+
             JniMethod M_PLATFORM_CALLBACK_UTILS_AFFINITY_FUNCTION_INIT = JniMethod("affinityFunctionInit", "(JJLorg/apache/ignite/internal/processors/platform/cache/affinity/PlatformAffinityFunctionTarget;)J", true);
             JniMethod M_PLATFORM_CALLBACK_UTILS_AFFINITY_FUNCTION_PARTITION = JniMethod("affinityFunctionPartition", "(JJJ)I", true);
             JniMethod M_PLATFORM_CALLBACK_UTILS_AFFINITY_FUNCTION_ASSIGN_PARTITIONS = JniMethod("affinityFunctionAssignPartitions", "(JJJJ)V", true);
@@ -716,6 +721,8 @@ namespace ignite
                 m_PlatformProcessor_atomicReference = FindMethod(env, c_PlatformProcessor, M_PLATFORM_PROCESSOR_ATOMIC_REFERENCE);
 				m_PlatformProcessor_getIgniteConfiguration = FindMethod(env, c_PlatformProcessor, M_PLATFORM_PROCESSOR_GET_IGNITE_CONFIGURATION);
 				m_PlatformProcessor_getCacheNames = FindMethod(env, c_PlatformProcessor, M_PLATFORM_PROCESSOR_GET_CACHE_NAMES);
+				m_PlatformProcessor_loggerIsLevelEnabled = FindMethod(env, c_PlatformProcessor, M_PLATFORM_PROCESSOR_LOGGER_IS_LEVEL_ENABLED);
+				m_PlatformProcessor_loggerLog = FindMethod(env, c_PlatformProcessor, M_PLATFORM_PROCESSOR_LOGGER_LOG);
 
                 c_PlatformTarget = FindClass(env, C_PLATFORM_TARGET);
                 m_PlatformTarget_inStreamOutLong = FindMethod(env, c_PlatformTarget, M_PLATFORM_TARGET_IN_STREAM_OUT_LONG);
@@ -851,7 +858,7 @@ namespace ignite
 
             void RegisterNatives(JNIEnv* env) {
                 {
-					JNINativeMethod methods[60];
+					JNINativeMethod methods[62];
 
                     int idx = 0;
 
@@ -935,6 +942,9 @@ namespace ignite
                     AddNativeMethod(methods + idx++, M_PLATFORM_CALLBACK_UTILS_AFFINITY_FUNCTION_DESTROY, reinterpret_cast<void*>(JniAffinityFunctionDestroy));
                     AddNativeMethod(methods + idx++, M_PLATFORM_CALLBACK_UTILS_CONSOLE_WRITE, reinterpret_cast<void*>(JniConsoleWrite));
 
+                    AddNativeMethod(methods + idx++, M_PLATFORM_CALLBACK_UTILS_LOGGER_LOG, reinterpret_cast<void*>(JniLoggerLog));
+                    AddNativeMethod(methods + idx++, M_PLATFORM_CALLBACK_UTILS_LOGGER_IS_LEVEL_ENABLED, reinterpret_cast<void*>(JniLoggerIsLevelEnabled));
+
                     jint res = env->RegisterNatives(FindClass(env, C_PLATFORM_CALLBACK_UTILS), methods, idx);
 
                     if (res != JNI_OK)
@@ -1526,6 +1536,40 @@ namespace ignite
                 ExceptionCheck(env);
             }
 
+            bool JniContext::ProcessorLoggerIsLevelEnabled(jobject obj, int level)
+            {
+                JNIEnv* env = Attach();
+
+                jboolean res = env->CallBooleanMethod(obj, jvm->GetMembers().m_PlatformProcessor_loggerIsLevelEnabled, level);
+
+                ExceptionCheck(env);
+
+                return res != 0;
+            }
+
+            void JniContext::ProcessorLoggerLog(jobject obj, int level, char* message, char* category, char* errorInfo)
+            {
+                JNIEnv* env = Attach();
+
+                jstring message0 = message != NULL ? env->NewStringUTF(message) : NULL;
+                jstring category0 = category != NULL ? env->NewStringUTF(category) : NULL;
+                jstring errorInfo0 = errorInfo != NULL ? env->NewStringUTF(errorInfo) : NULL;
+
+
+                env->CallVoidMethod(obj, jvm->GetMembers().m_PlatformProcessor_loggerLog, level, message0, category0, errorInfo0);
+
+                if (message0)
+                    env->DeleteLocalRef(message0);
+
+                if (category0)
+                    env->DeleteLocalRef(category0);
+
+                if (errorInfo0)
+                    env->DeleteLocalRef(errorInfo0);
+
+                ExceptionCheck(env);
+            }
+
             long long JniContext::TargetInStreamOutLong(jobject obj, int opType, long long memPtr, JniErrorInfo* err) {
                 JNIEnv* env = Attach();
 
@@ -2952,6 +2996,32 @@ namespace ignite
 
                 CONSOLE_LOCK.Leave();
             }
+
+            JNIEXPORT void JNICALL JniLoggerLog(JNIEnv *env, jclass cls, jlong envPtr, jint level, jstring message, jstring category, jstring errorInfo, jlong memPtr) {
+                int messageLen;
+                char* messageChars = StringToChars(env, message, &messageLen);
+
+                int categoryLen;
+                char* categoryChars = StringToChars(env, category, &categoryLen);
+
+                int errorInfoLen;
+                char* errorInfoChars = StringToChars(env, errorInfo, &errorInfoLen);
+
+                IGNITE_SAFE_PROC(env, envPtr, LoggerLogHandler, loggerLog, level, messageChars, messageLen, categoryChars, categoryLen, errorInfoChars, errorInfoLen, memPtr);
+
+                if (messageChars)
+                    delete[] messageChars;
+
+                if (categoryChars)
+                    delete[] categoryChars;
+
+                if (errorInfoChars)
+                    delete[] errorInfoChars;
+            }
+
+            JNIEXPORT jboolean JNICALL JniLoggerIsLevelEnabled(JNIEnv *env, jclass cls, jlong envPtr, jint level) {
+                IGNITE_SAFE_FUNC(env, envPtr, LoggerIsLevelEnabledHandler, loggerIsLevelEnabled, level);
+            }
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
index b1e0dbe..2c6150c 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
@@ -53,6 +53,7 @@
     <Reference Include="System.XML" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Log\DefaultLoggerTest.cs" />
     <Compile Include="TestAppConfig.cs" />
     <Compile Include="Binary\BinaryBuilderSelfTestFullFooter.cs" />
     <Compile Include="Binary\BinaryCompactFooterInteropTest.cs" />
@@ -135,6 +136,7 @@
     <Compile Include="LifecycleTest.cs" />
     <Compile Include="LoadDllTest.cs" />
     <Compile Include="IgniteManagerTest.cs" />
+    <Compile Include="Log\CustomLoggerTest.cs" />
     <Compile Include="MarshallerTest.cs" />
     <Compile Include="MessagingTest.cs" />
     <Compile Include="BinaryConfigurationTest.cs" />
@@ -241,6 +243,12 @@
     <Content Include="Config\Lifecycle\lifecycle-no-beans.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="Config\Log\dotnet-log4j.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Config\Log\custom-log.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="Config\spring-test.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryStringTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryStringTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryStringTest.cs
index 0c1f0f3..0593af7 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryStringTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryStringTest.cs
@@ -18,7 +18,6 @@
 namespace Apache.Ignite.Core.Tests.Binary
 {
     using System;
-    using System.Diagnostics;
     using Apache.Ignite.Core.Impl.Binary;
     using NUnit.Framework;
 
@@ -83,29 +82,10 @@ namespace Apache.Ignite.Core.Tests.Binary
         [Test]
         public void TestNewMode()
         {
-            // Run "TestNewMode" in a separate process
-            var envVar = BinaryUtils.IgniteBinaryMarshallerUseStringSerializationVer2;
+            // Run "TestOldMode" in a separate process with changed setting.
+            Environment.SetEnvironmentVariable(BinaryUtils.IgniteBinaryMarshallerUseStringSerializationVer2, "true");
 
-            Environment.SetEnvironmentVariable(envVar, "true");
-
-            var procStart = new ProcessStartInfo
-            {
-                FileName = GetType().Assembly.Location,
-                Arguments = GetType().FullName + " TestOldMode",
-                CreateNoWindow = true,
-                UseShellExecute = false,
-                RedirectStandardOutput = true,
-                RedirectStandardError = true
-            };
-
-            var proc = Process.Start(procStart);
-
-            Assert.IsNotNull(proc);
-
-            Console.WriteLine(proc.StandardOutput.ReadToEnd());
-            Console.WriteLine(proc.StandardError.ReadToEnd());
-            Assert.IsTrue(proc.WaitForExit(15000));
-            Assert.AreEqual(0, proc.ExitCode);
+            TestUtils.RunTestInNewProcess(GetType().FullName, "TestOldMode");
         }
 
         /// <summary>

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/Log/custom-log.xml
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/Log/custom-log.xml b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/Log/custom-log.xml
new file mode 100644
index 0000000..5d7dc65
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/Log/custom-log.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  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.
+-->
+
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd">
+    <bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
+        <property name="localHost" value="127.0.0.1"/>
+        <property name="connectorConfiguration"><null/></property>
+
+        <property name="gridLogger">
+            <bean class="org.apache.ignite.logger.log4j.Log4JLogger">
+                <constructor-arg type="java.lang.String" value="config\log\dotnet-log4j.xml"/>
+            </bean>
+        </property>
+
+        <property name="discoverySpi">
+            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
+                <property name="ipFinder">
+                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
+                        <property name="addresses">
+                            <list>
+                                <!-- In distributed environment, replace with actual host IP address. -->
+                                <value>127.0.0.1:47500</value>
+                            </list>
+                        </property>
+                    </bean>
+                </property>
+                <property name="socketTimeout" value="300" />
+            </bean>
+        </property>
+    </bean>
+</beans>

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/Log/dotnet-log4j.xml
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/Log/dotnet-log4j.xml b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/Log/dotnet-log4j.xml
new file mode 100644
index 0000000..c8c62d7
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/Log/dotnet-log4j.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  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.
+-->
+
+<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN"
+    "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
+<!--
+    Default log4j configuration for Ignite.
+-->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
+    <!--
+        Logs System.out messages to console.
+    -->
+    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+        <!-- Log to STDOUT. -->
+        <param name="Target" value="System.out"/>
+
+        <!-- Log from DEBUG and higher. -->
+        <param name="Threshold" value="DEBUG"/>
+
+        <!-- The default pattern: Date Priority [Category] Message\n -->
+        <layout class="org.apache.log4j.PatternLayout">
+            <param name="ConversionPattern" value="[%d{dd-MM-yyyy HH:mm:ss}][%-5p][%t][%c{1}] %m%n"/>
+        </layout>
+
+        <!-- Do not log beyond INFO level. -->
+        <filter class="org.apache.log4j.varia.LevelRangeFilter">
+            <param name="levelMin" value="DEBUG"/>
+            <param name="levelMax" value="INFO"/>
+        </filter>
+    </appender>
+
+    <!--
+        Logs all System.err messages to console.
+    -->
+    <appender name="CONSOLE_ERR" class="org.apache.log4j.ConsoleAppender">
+        <!-- Log to STDERR. -->
+        <param name="Target" value="System.err"/>
+
+        <!-- Log from WARN and higher. -->
+        <param name="Threshold" value="WARN"/>
+
+        <!-- The default pattern: Date Priority [Category] Message\n -->
+        <layout class="org.apache.log4j.PatternLayout">
+            <param name="ConversionPattern" value="[%d{dd-MMM-yyyy HH:mm:ss}][%-5p][%t][%c{1}] %m%n"/>
+        </layout>
+    </appender>
+
+    <!--
+        Logs all output to specified file.
+        By default, the logging goes to IGNITE_HOME/work/log folder
+
+        Note, this appender is disabled by default.
+        To enable, uncomment the section below and also FILE appender in the <root> element.
+    -->
+    <appender name="FILE" class="org.apache.log4j.RollingFileAppender">
+        <param name="Threshold" value="DEBUG"/>
+        <param name="File" value="${IGNITE_HOME}/work/log/dotnet-logger-test.log"/>
+        <param name="Append" value="true"/>
+        <param name="MaxFileSize" value="10MB"/>
+        <param name="MaxBackupIndex" value="10"/>
+        <layout class="org.apache.log4j.PatternLayout">
+            <param name="ConversionPattern" value="[%d{ABSOLUTE}][%-5p][%t][%c{1}] %m%n"/>
+        </layout>
+    </appender>
+
+    <!--
+        Uncomment to enable Ignite debugging.
+    -->
+    <!--
+    <category name="org.apache.ignite">
+        <level value="DEBUG"/>
+    </category>
+    -->
+
+    <!--
+        Uncomment this category to enable cache
+        query execution tracing.
+    -->
+    <!--
+    <category name="org.apache.ignite.cache.queries">
+        <level value="DEBUG"/>
+    </category>
+    -->
+
+    <!--
+        Uncomment to enable DGC tracing.
+    -->
+    <!--
+    <category name="org.apache.ignite.grid.kernal.processors.cache.GridCacheDgcManager.trace">
+        <level value="DEBUG"/>
+    </category>
+    -->
+
+    <!--
+        Uncomment to disable courtesy notice.
+    -->
+    <!--
+    <category name="org.apache.ignite.CourtesyConfigNotice">
+        <level value="OFF"/>
+    </category>
+    -->
+
+    <category name="org.springframework">
+        <level value="WARN"/>
+    </category>
+
+    <category name="org.eclipse.jetty">
+        <level value="FATAL"/>
+    </category>
+
+    <category name="com.amazonaws">
+        <level value="WARN"/>
+    </category>
+
+    <!-- Default settings. -->
+    <root>
+        <!-- Print out all info by default. -->
+        <level value="DEBUG"/>
+
+        <!-- Append to console. -->
+        <appender-ref ref="CONSOLE"/>
+        <appender-ref ref="CONSOLE_ERR"/>
+
+        <!-- Uncomment to enable logging to a file. -->
+        <appender-ref ref="FILE"/>
+    </root>
+</log4j:configuration>

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
index e8e8f5d..beb1e8d 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
@@ -43,6 +43,7 @@ namespace Apache.Ignite.Core.Tests
     using Apache.Ignite.Core.Events;
     using Apache.Ignite.Core.Impl.Common;
     using Apache.Ignite.Core.Lifecycle;
+    using Apache.Ignite.Core.Log;
     using Apache.Ignite.Core.Tests.Binary;
     using Apache.Ignite.Core.Transactions;
     using NUnit.Framework;
@@ -109,6 +110,7 @@ namespace Apache.Ignite.Core.Tests
                             <userAttributes><pair key='myNode' value='true' /></userAttributes>
                             <atomicConfiguration backups='2' cacheMode='Local' atomicSequenceReserveSize='250' />
                             <transactionConfiguration defaultTransactionConcurrency='Optimistic' defaultTransactionIsolation='RepeatableRead' defaultTimeout='0:1:2' pessimisticTransactionLogSize='15' pessimisticTransactionLogLinger='0:0:33' />
+                            <logger type='Apache.Ignite.Core.Tests.IgniteConfigurationSerializerTest+TestLogger, Apache.Ignite.Core.Tests' />
                         </igniteConfig>";
             var reader = XmlReader.Create(new StringReader(xml));
 
@@ -193,6 +195,8 @@ namespace Apache.Ignite.Core.Tests
             Assert.IsNotNull(comm);
             Assert.AreEqual(33, comm.AckSendThreshold);
             Assert.AreEqual(new TimeSpan(0, 1, 2), comm.IdleConnectionTimeout);
+
+            Assert.IsInstanceOf<TestLogger>(cfg.Logger);
         }
 
         /// <summary>
@@ -253,7 +257,7 @@ namespace Apache.Ignite.Core.Tests
         {
             var document = new XmlDocument();
 
-            document.Schemas.Add("http://ignite.apache.org/schema/dotnet/IgniteConfigurationSection", 
+            document.Schemas.Add("http://ignite.apache.org/schema/dotnet/IgniteConfigurationSection",
                 XmlReader.Create("IgniteConfigurationSection.xsd"));
 
             document.Load(new StringReader(xml));
@@ -542,7 +546,10 @@ namespace Apache.Ignite.Core.Tests
                     SlowClientQueueLimit = 98,
                     SocketSendBufferSize = 2045,
                     UnacknowledgedMessagesBufferSize = 3450
-                }
+                },
+                IsLateAffinityAssignment = false,
+                SpringConfigUrl = "test",
+                Logger = new TestLogger()
             };
         }
 
@@ -688,5 +695,24 @@ namespace Apache.Ignite.Core.Tests
                 return null;
             }
         }
+
+        /// <summary>
+        /// Test logger.
+        /// </summary>
+        public class TestLogger : ILogger
+        {
+            /** <inheritdoc /> */
+            public void Log(LogLevel level, string message, object[] args, IFormatProvider formatProvider, string category,
+                string nativeErrorInfo, Exception ex)
+            {
+                throw new NotImplementedException();
+            }
+
+            /** <inheritdoc /> */
+            public bool IsEnabled(LogLevel level)
+            {
+                throw new NotImplementedException();
+            }
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Log/CustomLoggerTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Log/CustomLoggerTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Log/CustomLoggerTest.cs
new file mode 100644
index 0000000..73134fe
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Log/CustomLoggerTest.cs
@@ -0,0 +1,430 @@
+\ufeff/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Tests.Log
+{
+    using System;
+    using System.Collections.Generic;
+    using System.Globalization;
+    using System.Linq;
+    using Apache.Ignite.Core.Cache.Configuration;
+    using Apache.Ignite.Core.Common;
+    using Apache.Ignite.Core.Communication.Tcp;
+    using Apache.Ignite.Core.Compute;
+    using Apache.Ignite.Core.Impl;
+    using Apache.Ignite.Core.Lifecycle;
+    using Apache.Ignite.Core.Log;
+    using Apache.Ignite.Core.Resource;
+    using NUnit.Framework;
+
+    /// <summary>
+    /// Tests that user-defined logger receives Ignite events.
+    /// </summary>
+    public class CustomLoggerTest
+    {
+        /** */
+        private static readonly LogLevel[] AllLevels = Enum.GetValues(typeof (LogLevel)).OfType<LogLevel>().ToArray();
+
+        /// <summary>
+        /// Test setup.
+        /// </summary>
+        [SetUp]
+        public void TestSetUp()
+        {
+            TestLogger.Entries.Clear();
+        }
+
+        /// <summary>
+        /// Tests the startup output.
+        /// </summary>
+        [Test]
+        public void TestStartupOutput()
+        {
+            var cfg = GetConfigWithLogger(true);
+            using (var ignite = Ignition.Start(cfg))
+            {
+                // Check injection
+                Assert.AreEqual(((Ignite) ignite).Proxy, ((TestLogger) cfg.Logger).Ignite);
+
+                // Check initial message
+                Assert.IsTrue(TestLogger.Entries[0].Message.StartsWith("Starting Ignite.NET"));
+
+                // Check topology message
+                Assert.IsTrue(
+                    TestUtils.WaitForCondition(() =>
+                    {
+                        lock (TestLogger.Entries)
+                        {
+                            return TestLogger.Entries.Any(x => x.Message.Contains("Topology snapshot"));
+                        }
+                    }, 9000), "No topology snapshot");
+            }
+
+            // Test that all levels are present
+            foreach (var level in AllLevels.Where(x => x != LogLevel.Error))
+                Assert.IsTrue(TestLogger.Entries.Any(x => x.Level == level), "No messages with level " + level);
+        }
+
+
+        /// <summary>
+        /// Tests startup error in Java.
+        /// </summary>
+        [Test]
+        public void TestStartupJavaError()
+        {
+            // Invalid config
+            Assert.Throws<IgniteException>(() =>
+                Ignition.Start(new IgniteConfiguration(GetConfigWithLogger())
+                {
+                    CommunicationSpi = new TcpCommunicationSpi
+                    {
+                        IdleConnectionTimeout = TimeSpan.MinValue
+                    }
+                }));
+
+            var err = TestLogger.Entries.First(x => x.Level == LogLevel.Error);
+            Assert.IsTrue(err.NativeErrorInfo.Contains("SPI parameter failed condition check: idleConnTimeout > 0"));
+            Assert.AreEqual("org.apache.ignite.internal.IgniteKernal", err.Category);
+            Assert.IsNull(err.Exception);
+        }
+
+        /// <summary>
+        /// Tests startup error in .NET.
+        /// </summary>
+        [Test]
+        public void TestStartupDotNetError()
+        {
+            // Invalid bean
+            Assert.Throws<IgniteException>(() =>
+                Ignition.Start(new IgniteConfiguration(GetConfigWithLogger())
+                {
+                    LifecycleBeans = new[] {new FailBean()}
+                }));
+
+            var err = TestLogger.Entries.First(x => x.Level == LogLevel.Error);
+            Assert.IsInstanceOf<ArithmeticException>(err.Exception);
+        }
+
+        /// <summary>
+        /// Tests that .NET exception propagates through Java to the log.
+        /// </summary>
+        [Test]
+        public void TestDotNetErrorPropagation()
+        {
+            // Start 2 nodes: PlatformNativeException does not occur in local scenario
+            using (var ignite = Ignition.Start(GetConfigWithLogger()))
+            using (Ignition.Start(new IgniteConfiguration(TestUtils.GetTestConfiguration()) {GridName = "1"}))
+            {
+                var compute = ignite.GetCluster().ForRemotes().GetCompute();
+
+                Assert.Throws<ArithmeticException>(() => compute.Call(new FailFunc()));
+
+                // Log updates may not arrive immediately
+                TestUtils.WaitForCondition(() => TestLogger.Entries.Any(x => x.Exception != null), 3000);
+
+                var errFromJava = TestLogger.Entries.Single(x => x.Exception != null);
+                Assert.AreEqual("Error in func.", ((ArithmeticException) errFromJava.Exception.InnerException).Message);
+            }
+        }
+
+        /// <summary>
+        /// Tests the <see cref="QueryEntity"/> validation.
+        /// </summary>
+        [Test]
+        public void TestQueryEntityValidation()
+        {
+            var cacheCfg = new CacheConfiguration("cache1", new QueryEntity(typeof(uint), typeof(ulong))
+            {
+                Fields = new[]
+                {
+                    new QueryField("myField", typeof(ushort))
+                }
+            });
+
+            var cfg = new IgniteConfiguration(GetConfigWithLogger())
+            {
+                CacheConfiguration = new[]
+                {
+                    cacheCfg
+                }
+            };
+
+            using (var ignite = Ignition.Start(cfg))
+            {
+                // Check static and dynamic cache start
+                cacheCfg.Name = "cache2";
+                ignite.CreateCache<int, string>(cacheCfg);
+
+                var warns = TestLogger.Entries.Where(x => x.Level == LogLevel.Warn && x.Args != null)
+                    .Select(x => string.Format(x.Message, x.Args)).ToList();
+
+                Assert.AreEqual(6, warns.Count);
+
+                Assert.AreEqual("Validating cache configuration 'cache1', QueryEntity 'java.lang.Integer:java.lang." +
+                                "Long': Type 'System.UInt32' maps to Java type 'java.lang.Integer' using unchecked " +
+                                "conversion. This may cause issues in SQL queries. You can use 'System.Int32' " +
+                                "instead to achieve direct mapping.", warns[0]);
+
+                Assert.AreEqual("Validating cache configuration 'cache1', QueryEntity 'java.lang.Integer:java.lang." +
+                                "Long': Type 'System.UInt64' maps to Java type 'java.lang.Long' using unchecked " +
+                                "conversion. This may cause issues in SQL queries. You can use 'System.Int64' " +
+                                "instead to achieve direct mapping.", warns[1]);
+
+                Assert.AreEqual("Validating cache configuration 'cache1', QueryEntity 'java.lang.Integer:java.lang." +
+                                "Long', QueryField 'myField': Type 'System.UInt16' maps to Java type 'java.lang." +
+                                "Short' using unchecked conversion. This may cause issues in SQL queries. You " +
+                                "can use 'System.Int16' instead to achieve direct mapping.", warns[2]);
+
+                Assert.AreEqual("Validating cache configuration 'cache2', QueryEntity 'java.lang.Integer:java.lang." +
+                                "Long': Type 'System.UInt32' maps to Java type 'java.lang.Integer' using unchecked " +
+                                "conversion. This may cause issues in SQL queries. You can use 'System.Int32' " +
+                                "instead to achieve direct mapping.", warns[3]);
+
+                Assert.AreEqual("Validating cache configuration 'cache2', QueryEntity 'java.lang.Integer:java.lang." +
+                                "Long': Type 'System.UInt64' maps to Java type 'java.lang.Long' using unchecked " +
+                                "conversion. This may cause issues in SQL queries. You can use 'System.Int64' " +
+                                "instead to achieve direct mapping.", warns[4]);
+
+                Assert.AreEqual("Validating cache configuration 'cache2', QueryEntity 'java.lang.Integer:java.lang." +
+                                "Long', QueryField 'myField': Type 'System.UInt16' maps to Java type 'java.lang." +
+                                "Short' using unchecked conversion. This may cause issues in SQL queries. You " +
+                                "can use 'System.Int16' instead to achieve direct mapping.", warns[5]);
+            }
+        }
+
+        /// <summary>
+        /// Tests the <see cref="LoggerExtensions"/> methods.
+        /// </summary>
+        [Test]
+        public void TestExtensions()
+        {
+            var log = new TestLogger(LogLevel.Trace);
+            var ex = new FieldAccessException("abc");
+
+            // Log
+            log.Log(LogLevel.Trace, "trace");
+            CheckLastMessage(LogLevel.Trace, "trace");
+
+            log.Log(LogLevel.Debug, "msg {0} {1}", 1, "2");
+            CheckLastMessage(LogLevel.Debug, "msg {0} {1}", new object[] { 1, "2" }, CultureInfo.InvariantCulture);
+
+            log.Log(LogLevel.Info, ex, "msg");
+            CheckLastMessage(LogLevel.Info, "msg", e: ex);
+
+            log.Log(LogLevel.Warn, ex, "msg {0}", 1);
+            CheckLastMessage(LogLevel.Warn, "msg {0}", new object[] {1}, CultureInfo.InvariantCulture, e: ex);
+
+            // Trace
+            log.Trace("trace");
+            CheckLastMessage(LogLevel.Trace, "trace");
+
+            log.Trace("msg {0} {1}", 1, "2");
+            CheckLastMessage(LogLevel.Trace, "msg {0} {1}", new object[] { 1, "2" }, CultureInfo.InvariantCulture);
+
+            log.Trace(ex, "msg");
+            CheckLastMessage(LogLevel.Trace, "msg", e: ex);
+
+            log.Trace(ex, "msg {0}", 1);
+            CheckLastMessage(LogLevel.Trace, "msg {0}", new object[] { 1 }, CultureInfo.InvariantCulture, e: ex);
+
+            // Debug
+            log.Debug("test");
+            CheckLastMessage(LogLevel.Debug, "test");
+
+            log.Debug("msg {0} {1}", 1, "2");
+            CheckLastMessage(LogLevel.Debug, "msg {0} {1}", new object[] { 1, "2" }, CultureInfo.InvariantCulture);
+
+            log.Debug(ex, "msg");
+            CheckLastMessage(LogLevel.Debug, "msg", e: ex);
+
+            log.Debug(ex, "msg {0}", 1);
+            CheckLastMessage(LogLevel.Debug, "msg {0}", new object[] { 1 }, CultureInfo.InvariantCulture, e: ex);
+
+            // Info
+            log.Info("test");
+            CheckLastMessage(LogLevel.Info, "test");
+
+            log.Info("msg {0} {1}", 1, "2");
+            CheckLastMessage(LogLevel.Info, "msg {0} {1}", new object[] { 1, "2" }, CultureInfo.InvariantCulture);
+
+            log.Info(ex, "msg");
+            CheckLastMessage(LogLevel.Info, "msg", e: ex);
+
+            log.Info(ex, "msg {0}", 1);
+            CheckLastMessage(LogLevel.Info, "msg {0}", new object[] { 1 }, CultureInfo.InvariantCulture, e: ex);
+
+            // Warn
+            log.Warn("test");
+            CheckLastMessage(LogLevel.Warn, "test");
+
+            log.Warn("msg {0} {1}", 1, "2");
+            CheckLastMessage(LogLevel.Warn, "msg {0} {1}", new object[] { 1, "2" }, CultureInfo.InvariantCulture);
+
+            log.Warn(ex, "msg");
+            CheckLastMessage(LogLevel.Warn, "msg", e: ex);
+
+            log.Warn(ex, "msg {0}", 1);
+            CheckLastMessage(LogLevel.Warn, "msg {0}", new object[] { 1 }, CultureInfo.InvariantCulture, e: ex);
+
+            // Error
+            log.Error("test");
+            CheckLastMessage(LogLevel.Error, "test");
+
+            log.Error("msg {0} {1}", 1, "2");
+            CheckLastMessage(LogLevel.Error, "msg {0} {1}", new object[] { 1, "2" }, CultureInfo.InvariantCulture);
+
+            log.Error(ex, "msg");
+            CheckLastMessage(LogLevel.Error, "msg", e: ex);
+
+            log.Error(ex, "msg {0}", 1);
+            CheckLastMessage(LogLevel.Error, "msg {0}", new object[] { 1 }, CultureInfo.InvariantCulture, e: ex);
+
+            // GetLogger
+            var catLog = log.GetLogger("myCategory");
+            catLog.Info("info");
+            CheckLastMessage(LogLevel.Info, "info", category: "myCategory");
+
+            catLog.Log(LogLevel.Info, "info", null, null, "explicitCat", null, null);
+            CheckLastMessage(LogLevel.Info, "info", category: "explicitCat");
+
+            catLog = catLog.GetLogger("newCat");
+            catLog.Info("info");
+            CheckLastMessage(LogLevel.Info, "info", category: "newCat");
+
+            catLog.Log(LogLevel.Info, "info", null, null, "explicitCat", null, null);
+            CheckLastMessage(LogLevel.Info, "info", category: "explicitCat");
+        }
+
+        /// <summary>
+        /// Checks the last message.
+        /// </summary>
+        private static void CheckLastMessage(LogLevel level, string message, object[] args = null, 
+            IFormatProvider formatProvider = null, string category = null, string nativeErr = null, Exception e = null)
+        {
+            var msg = TestLogger.Entries.Last();
+
+            Assert.AreEqual(msg.Level, level);
+            Assert.AreEqual(msg.Message, message);
+            Assert.AreEqual(msg.Args, args);
+            Assert.AreEqual(msg.FormatProvider, formatProvider);
+            Assert.AreEqual(msg.Category, category);
+            Assert.AreEqual(msg.NativeErrorInfo, nativeErr);
+            Assert.AreEqual(msg.Exception, e);
+        }
+
+        /// <summary>
+        /// Gets the configuration with logger.
+        /// </summary>
+        private static IgniteConfiguration GetConfigWithLogger(bool verbose = false)
+        {
+            return new IgniteConfiguration(TestUtils.GetTestConfiguration())
+            {
+                Logger = new TestLogger(verbose ? LogLevel.Trace : LogLevel.Info)
+            };
+        }
+
+        /// <summary>
+        /// Test log entry.
+        /// </summary>
+        private class LogEntry
+        {
+            public LogLevel Level;
+            public string Message;
+            public object[] Args;
+            public IFormatProvider FormatProvider;
+            public string Category;
+            public string NativeErrorInfo;
+            public Exception Exception;
+
+            public override string ToString()
+            {
+                return string.Format("Level: {0}, Message: {1}, Args: {2}, FormatProvider: {3}, Category: {4}, " +
+                                     "NativeErrorInfo: {5}, Exception: {6}", Level, Message, Args, FormatProvider, 
+                                     Category, NativeErrorInfo, Exception);
+            }
+        }
+
+        /// <summary>
+        /// Test logger.
+        /// </summary>
+        private class TestLogger : ILogger
+        {
+            public static readonly List<LogEntry> Entries = new List<LogEntry>(5000);
+
+            private readonly LogLevel _minLevel;
+
+            public TestLogger(LogLevel minLevel)
+            {
+                _minLevel = minLevel;
+            }
+
+            public void Log(LogLevel level, string message, object[] args, IFormatProvider formatProvider, 
+                string category, string nativeErrorInfo, Exception ex)
+            {
+                if (!IsEnabled(level))
+                    return;
+
+                lock (Entries)
+                {
+                    Entries.Add(new LogEntry
+                    {
+                        Level = level,
+                        Message = message,
+                        Args = args,
+                        FormatProvider = formatProvider,
+                        Category = category,
+                        NativeErrorInfo = nativeErrorInfo,
+                        Exception = ex
+                    });
+                }
+            }
+
+            public bool IsEnabled(LogLevel level)
+            {
+                return level >= _minLevel;
+            }
+
+            [InstanceResource]
+            // ReSharper disable once UnusedAutoPropertyAccessor.Local
+            public IIgnite Ignite { get; set; }
+        }
+
+
+        /// <summary>
+        /// Failing lifecycle bean.
+        /// </summary>
+        private class FailBean : ILifecycleBean
+        {
+            public void OnLifecycleEvent(LifecycleEventType evt)
+            {
+                throw new ArithmeticException("Failure in bean");
+            }
+        }
+
+        /// <summary>
+        /// Failing computation.
+        /// </summary>
+        [Serializable]
+        private class FailFunc : IComputeFunc<string>
+        {
+            public string Invoke()
+            {
+                throw new ArithmeticException("Error in func.");
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Log/DefaultLoggerTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Log/DefaultLoggerTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Log/DefaultLoggerTest.cs
new file mode 100644
index 0000000..6623416
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Log/DefaultLoggerTest.cs
@@ -0,0 +1,114 @@
+\ufeff/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Tests.Log
+{
+    using System;
+    using System.IO;
+    using System.Linq;
+    using Apache.Ignite.Core.Cache.Configuration;
+    using Apache.Ignite.Core.Impl.Common;
+    using NUnit.Framework;
+    using LogLevel = Apache.Ignite.Core.Log.LogLevel;
+
+    /// <summary>
+    /// Tests the default logger.
+    /// </summary>
+    public class DefaultLoggerTest
+    {
+        /// <summary>
+        /// Tests that default Java mechanism is used when there is no custom logger.
+        /// </summary>
+        [Test]
+        public void TestJavaLogger()
+        {
+            // Run the test in a separate process because log4jlogger has some static state,
+            // and after Ignite has been started once, it is not possible to start a new node 
+            // with a different logger config.
+            const string envVar = "DefaultLoggerTest.TestJavaLogger";
+
+            if (Environment.GetEnvironmentVariable(envVar) == "true")
+            {
+                // Delete all log files from the work dir
+                Func<string[]> getLogs = () =>
+                    Directory.GetFiles(IgniteHome.Resolve(null), "dotnet-logger-test.log", SearchOption.AllDirectories);
+
+                getLogs().ToList().ForEach(File.Delete);
+
+                var cfg = new IgniteConfiguration(TestUtils.GetTestConfiguration(false))
+                {
+                    SpringConfigUrl = @"config\log\custom-log.xml",
+                    CacheConfiguration = new[]
+                    {
+                        new CacheConfiguration("cache1", new QueryEntity(typeof(uint), typeof(ulong)))
+                    }
+                };
+
+                // Start Ignite and verify file log
+                using (var ignite = Ignition.Start(cfg))
+                {
+                    // Log with all levels
+                    var log = ignite.Logger;
+                    var levels = new[] {LogLevel.Trace, LogLevel.Info, LogLevel.Debug, LogLevel.Warn, LogLevel.Error};
+
+                    foreach (var level in levels)
+                    {
+                        var ex = new Exception("EXCEPTION_TEST_" + level);
+
+                        log.Log(level, "DOTNET-" + level, null, null, "=DOTNET=", null, ex);
+                    }
+                }
+
+                using (var fs = File.Open(getLogs().Single(), FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
+                {
+                    var log = new StreamReader(fs).ReadToEnd();
+
+                    // Check output from Java:
+                    Assert.IsTrue(log.Contains(">>> Topology snapshot."));
+
+                    // Check output from .NET:
+                    Assert.IsTrue(log.Contains("Starting Ignite.NET " + typeof(Ignition).Assembly.GetName().Version));
+
+                    Assert.IsTrue(log.Contains(
+                        "Validating cache configuration 'cache1', QueryEntity 'java.lang.Integer:java.lang." +
+                        "Long': Type 'System.UInt32' maps to Java type 'java.lang.Integer' using unchecked " +
+                        "conversion. This may cause issues in SQL queries. You can use 'System.Int32' " +
+                        "instead to achieve direct mapping."));
+
+
+                    // Check custom log output (trace is disabled, errors are logged from Warn and up):
+                    Assert.IsTrue(log.Contains("[INFO ][main][=DOTNET=] DOTNET-Info"));
+
+                    Assert.IsTrue(log.Contains("[DEBUG][main][=DOTNET=] DOTNET-Debug"));
+
+                    Assert.IsTrue(log.Contains("[WARN ][main][=DOTNET=] DOTNET-Warn"));
+                    Assert.IsTrue(log.Contains("class org.apache.ignite.IgniteException: " +
+                                               "Platform error:System.Exception: EXCEPTION_TEST_Warn"));
+
+                    Assert.IsTrue(log.Contains("[ERROR][main][=DOTNET=] DOTNET-Error"));
+                    Assert.IsTrue(log.Contains("class org.apache.ignite.IgniteException: " +
+                                               "Platform error:System.Exception: EXCEPTION_TEST_Error"));
+                }
+            }
+            else
+            {
+                Environment.SetEnvironmentVariable(envVar, "true");
+                TestUtils.RunTestInNewProcess(GetType().FullName, "TestJavaLogger");
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core.Tests/TestUtils.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/TestUtils.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/TestUtils.cs
index 6ca2f9d..d3851db 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/TestUtils.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/TestUtils.cs
@@ -21,6 +21,7 @@ namespace Apache.Ignite.Core.Tests
     using System;
     using System.Collections.Concurrent;
     using System.Collections.Generic;
+    using System.Diagnostics;
     using System.Linq;
     using System.Threading;
     using Apache.Ignite.Core.Discovery.Tcp;
@@ -336,5 +337,30 @@ namespace Apache.Ignite.Core.Tests
                 JvmClasspath = CreateTestClasspath()
             };
         }
+
+        /// <summary>
+        /// Runs the test in new process.
+        /// </summary>
+        public static void RunTestInNewProcess(string fixtureName, string testName)
+        {
+            var procStart = new ProcessStartInfo
+            {
+                FileName = typeof(TestUtils).Assembly.Location,
+                Arguments = fixtureName + " " + testName,
+                CreateNoWindow = true,
+                UseShellExecute = false,
+                RedirectStandardOutput = true,
+                RedirectStandardError = true
+            };
+
+            var proc = System.Diagnostics.Process.Start(procStart);
+
+            Assert.IsNotNull(proc);
+
+            Console.WriteLine(proc.StandardOutput.ReadToEnd());
+            Console.WriteLine(proc.StandardError.ReadToEnd());
+            Assert.IsTrue(proc.WaitForExit(15000));
+            Assert.AreEqual(0, proc.ExitCode);
+        }
     }
 }


[14/50] [abbrv] ignite git commit: IGNITE-4004 .NET: Remove non-ASCII characters from code

Posted by sh...@apache.org.
IGNITE-4004 .NET: Remove non-ASCII characters from code


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

Branch: refs/heads/ignite-2788
Commit: 00576d8a937bf6ab12db02b3d7b225b01cd37c0e
Parents: 106d496
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Thu Sep 29 17:50:33 2016 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Thu Sep 29 17:50:33 2016 +0300

----------------------------------------------------------------------
 .../Properties/AssemblyInfo.cs                  |  2 +-
 .../Properties/AssemblyInfo.cs                  | 36 +++++-----
 .../Properties/AssemblyInfo.cs                  | 34 ++++-----
 .../Properties/AssemblyInfo.cs                  | 34 ++++-----
 .../Affinity/AffinityFunctionSpringTest.cs      | 38 +++++-----
 .../ProjectFilesTest.cs                         | 11 +--
 .../Properties/AssemblyInfo.cs                  | 36 +++++-----
 .../Apache.Ignite.Core.Tests/TestRunner.cs      | 37 +++++-----
 .../Apache.Ignite.Core/Cache/ICacheLock.cs      |  2 +-
 .../Apache.Ignite.Core/Cache/ICacheMetrics.cs   |  8 +--
 .../Apache.Ignite.Core/Impl/Common/Fnv1Hash.cs  |  2 +-
 .../Memory/PlatformBigEndianMemoryStream.cs     | 34 ++++-----
 .../Impl/Unmanaged/UnmanagedCallbacks.cs        | 74 ++++++++++----------
 .../Properties/AssemblyInfo.cs                  | 36 +++++-----
 .../Apache.Ignite.Linq/ICacheQueryable.cs       | 32 ++++-----
 .../Properties/AssemblyInfo.cs                  | 36 +++++-----
 .../Apache.Ignite/Properties/AssemblyInfo.cs    | 36 +++++-----
 .../Properties/AssemblyInfo.cs                  | 40 +++++------
 .../Properties/AssemblyInfo.cs                  | 38 +++++-----
 19 files changed, 282 insertions(+), 284 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/00576d8a/modules/platforms/dotnet/Apache.Ignite.AspNet/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.AspNet/Properties/AssemblyInfo.cs b/modules/platforms/dotnet/Apache.Ignite.AspNet/Properties/AssemblyInfo.cs
index 2a7da67..0483c95 100644
--- a/modules/platforms/dotnet/Apache.Ignite.AspNet/Properties/AssemblyInfo.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.AspNet/Properties/AssemblyInfo.cs
@@ -25,7 +25,7 @@ using System.Runtime.InteropServices;
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("Apache Software Foundation")]
 [assembly: AssemblyProduct("Apache Ignite.NET")]
-[assembly: AssemblyCopyright("Copyright �  2016")]
+[assembly: AssemblyCopyright("Copyright 2016")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/00576d8a/modules/platforms/dotnet/Apache.Ignite.Benchmarks/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Benchmarks/Properties/AssemblyInfo.cs b/modules/platforms/dotnet/Apache.Ignite.Benchmarks/Properties/AssemblyInfo.cs
index 85af146..9a3da85 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Benchmarks/Properties/AssemblyInfo.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Benchmarks/Properties/AssemblyInfo.cs
@@ -1,19 +1,19 @@
-\ufeff\ufeff\ufeff/*
- * 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.
- */
+\ufeff/*
+* 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.
+*/
 
 using System.Reflection;
 using System.Runtime.InteropServices;
@@ -23,7 +23,7 @@ using System.Runtime.InteropServices;
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("Apache Software Foundation")]
 [assembly: AssemblyProduct("Apache Ignite.NET")]
-[assembly: AssemblyCopyright("Copyright �  2015")]
+[assembly: AssemblyCopyright("Copyright 2016")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
 
@@ -33,4 +33,4 @@ using System.Runtime.InteropServices;
 
 [assembly: AssemblyVersion("1.8.0.14218")]
 [assembly: AssemblyFileVersion("1.8.0.14218")]
-[assembly: AssemblyInformationalVersion("1.8.0")]
+[assembly: AssemblyInformationalVersion("1.8.0")]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/00576d8a/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/Properties/AssemblyInfo.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/Properties/AssemblyInfo.cs
index 34fca37..e48b8fd 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/Properties/AssemblyInfo.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/Properties/AssemblyInfo.cs
@@ -1,19 +1,19 @@
-\ufeff\ufeff/*
- * 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.
- */
+\ufeff/*
+* 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.
+*/
 
 using System.Reflection;
 using System.Runtime.InteropServices;
@@ -32,4 +32,4 @@ using System.Runtime.InteropServices;
 
 [assembly: AssemblyVersion("1.8.0.14218")]
 [assembly: AssemblyFileVersion("1.8.0.14218")]
-[assembly: AssemblyInformationalVersion("1.8.0")]
+[assembly: AssemblyInformationalVersion("1.8.0")]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/00576d8a/modules/platforms/dotnet/Apache.Ignite.Core.Tests.TestDll/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests.TestDll/Properties/AssemblyInfo.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests.TestDll/Properties/AssemblyInfo.cs
index 4aa03f1..3e7b663 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests.TestDll/Properties/AssemblyInfo.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests.TestDll/Properties/AssemblyInfo.cs
@@ -1,19 +1,19 @@
-\ufeff\ufeff\ufeff/*
- * 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.
- */
+\ufeff/*
+* 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.
+*/
 
 using System.Reflection;
 using System.Runtime.InteropServices;
@@ -23,7 +23,7 @@ using System.Runtime.InteropServices;
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("Apache Software Foundation")]
 [assembly: AssemblyProduct("Apache Ignite.NET")]
-[assembly: AssemblyCopyright("Copyright �  2015")]
+[assembly: AssemblyCopyright("Copyright 2016")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/00576d8a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Affinity/AffinityFunctionSpringTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Affinity/AffinityFunctionSpringTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Affinity/AffinityFunctionSpringTest.cs
index 8d118be..48c5814 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Affinity/AffinityFunctionSpringTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Affinity/AffinityFunctionSpringTest.cs
@@ -1,19 +1,19 @@
-\ufeff\ufeff/*
- * 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.
- */
+\ufeff/*
+* 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.
+*/
 
 // ReSharper disable UnusedAutoPropertyAccessor.Local
 // ReSharper disable UnusedMember.Local
@@ -162,13 +162,13 @@ namespace Apache.Ignite.Core.Tests.Cache.Affinity
                 Assert.Greater(basePart, -1);
                 Assert.Less(basePart, Partitions);
 
-                var longKey = (long) key;
+                var longKey = (long)key;
                 int res;
 
                 if (PredefinedParts.TryGetValue(longKey, out res))
                     return res;
 
-                return (int) (longKey * 2 % 5);
+                return (int)(longKey * 2 % 5);
             }
 
             public override IEnumerable<IEnumerable<IClusterNode>> AssignPartitions(AffinityFunctionContext context)
@@ -181,4 +181,4 @@ namespace Apache.Ignite.Core.Tests.Cache.Affinity
             }
         }
     }
-}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/00576d8a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ProjectFilesTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ProjectFilesTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ProjectFilesTest.cs
index a030bf2..cadc10b 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ProjectFilesTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ProjectFilesTest.cs
@@ -56,14 +56,15 @@ namespace Apache.Ignite.Core.Tests
         }
 
         /// <summary>
-        /// Tests that there are no Cyrillic C instead of English C (which are on the same keyboard key).
+        /// Tests that there are no non-ASCII chars.
         /// </summary>
         [Test]
-        public void TestCyrillicChars()
+        public void TestAsciiChars()
         {
-            var srcFiles = GetDotNetSourceDir().GetFiles("*.cs", SearchOption.AllDirectories);
+            var srcFiles = GetDotNetSourceDir().GetFiles("*.cs", SearchOption.AllDirectories)
+                .Where(x => x.Name != "BinaryStringTest.cs" && x.Name != "BinarySelfTest.cs");
 
-            CheckFiles(srcFiles, x => x.Contains('\u0441') || x.Contains('\u0421'), "Files with Cyrillic 'C': ");
+            CheckFiles(srcFiles, x => x.Any(ch => ch > 255), "Files with non-ASCII chars: ");
         }
 
         /// <summary>
@@ -74,7 +75,7 @@ namespace Apache.Ignite.Core.Tests
             var invalidFiles = files.Where(x => isInvalid(File.ReadAllText(x.FullName))).ToArray();
 
             Assert.AreEqual(0, invalidFiles.Length,
-                errorText + string.Join(", ", invalidFiles.Select(x => x.FullName)));
+                errorText + string.Join("\n ", invalidFiles.Select(x => x.FullName)));
         }
 
         /// <summary>

http://git-wip-us.apache.org/repos/asf/ignite/blob/00576d8a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Properties/AssemblyInfo.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Properties/AssemblyInfo.cs
index 9eb2e24..817634e 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Properties/AssemblyInfo.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Properties/AssemblyInfo.cs
@@ -1,19 +1,19 @@
-\ufeff\ufeff\ufeff\ufeff/*
- * 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.
- */
+\ufeff/*
+* 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.
+*/
 
 using System.Reflection;
 using System.Runtime.InteropServices;
@@ -23,7 +23,7 @@ using System.Runtime.InteropServices;
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("Apache Software Foundation")]
 [assembly: AssemblyProduct("Apache Ignite.NET")]
-[assembly: AssemblyCopyright("Copyright �  2015")]
+[assembly: AssemblyCopyright("Copyright 2016")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
 
@@ -33,4 +33,4 @@ using System.Runtime.InteropServices;
 
 [assembly: AssemblyVersion("1.8.0.14218")]
 [assembly: AssemblyFileVersion("1.8.0.14218")]
-[assembly: AssemblyInformationalVersion("1.8.0")]
+[assembly: AssemblyInformationalVersion("1.8.0")]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/00576d8a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/TestRunner.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/TestRunner.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/TestRunner.cs
index facc598..d67d24b 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/TestRunner.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/TestRunner.cs
@@ -1,19 +1,19 @@
-\ufeff\ufeff/*
- * 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.
- */
+\ufeff/*
+* 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.
+*/
 
 namespace Apache.Ignite.Core.Tests
 {
@@ -21,9 +21,6 @@ namespace Apache.Ignite.Core.Tests
     using System.Diagnostics;
     using System.Linq;
     using System.Reflection;
-    using Apache.Ignite.Core.Tests.Binary;
-    using Apache.Ignite.Core.Tests.Cache.Affinity;
-    using Apache.Ignite.Core.Tests.Cache.Query;
     using Apache.Ignite.Core.Tests.Memory;
     using NUnit.ConsoleRunner;
 
@@ -100,4 +97,4 @@ namespace Apache.Ignite.Core.Tests
         }
 
     }
-}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/00576d8a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/ICacheLock.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/ICacheLock.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/ICacheLock.cs
index a930961..4edfb53 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/ICacheLock.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/ICacheLock.cs
@@ -43,7 +43,7 @@ namespace Apache.Ignite.Core.Cache
         /// </summary>
         /// <param name="timeout">
         /// A <see cref="TimeSpan" /> representing the amount of time to wait for the lock. 
-        /// A value of \u20131 millisecond specifies an infinite wait.
+        /// A value of -1 millisecond specifies an infinite wait.
         /// </param>
         /// <returns>True if the current thread acquires the lock; otherwise, false.</returns>
         bool TryEnter(TimeSpan timeout);

http://git-wip-us.apache.org/repos/asf/ignite/blob/00576d8a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/ICacheMetrics.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/ICacheMetrics.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/ICacheMetrics.cs
index 3405625..3c01587 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/ICacheMetrics.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/ICacheMetrics.cs
@@ -92,7 +92,7 @@ namespace Apache.Ignite.Core.Cache
         /// The mean time to execute gets.
         /// </summary>
         /// <returns>
-        /// The time in \ufffds.
+        /// The time in ms.
         /// </returns>
         float AverageGetTime { get; }
 
@@ -100,7 +100,7 @@ namespace Apache.Ignite.Core.Cache
         /// The mean time to execute puts.
         /// </summary>
         /// <returns>
-        /// The time in \ufffds.
+        /// The time in s.
         /// </returns>
         float AveragePutTime { get; }
 
@@ -108,7 +108,7 @@ namespace Apache.Ignite.Core.Cache
         /// The mean time to execute removes.
         /// </summary>
         /// <returns>
-        /// The time in \ufffds.
+        /// The time in ms.
         /// </returns>
         float AverageRemoveTime { get; }
 
@@ -116,7 +116,7 @@ namespace Apache.Ignite.Core.Cache
         /// The mean time to execute tx commit.
         /// </summary>
         /// <returns>
-        /// The time in \ufffds.
+        /// The time in ms.
         /// </returns>
         float AverageTxCommitTime { get; }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/00576d8a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Common/Fnv1Hash.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Common/Fnv1Hash.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Common/Fnv1Hash.cs
index 231220a..3c2c871 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Common/Fnv1Hash.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Common/Fnv1Hash.cs
@@ -18,7 +18,7 @@
 namespace Apache.Ignite.Core.Impl.Common
 {
     /// <summary>
-    /// Fowler\u2013Noll\u2013Vo hash function.
+    /// Fowler-Noll-Vo hash function.
     /// </summary>
     internal static class Fnv1Hash
     {

http://git-wip-us.apache.org/repos/asf/ignite/blob/00576d8a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Memory/PlatformBigEndianMemoryStream.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Memory/PlatformBigEndianMemoryStream.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Memory/PlatformBigEndianMemoryStream.cs
index d59d572..70f9127 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Memory/PlatformBigEndianMemoryStream.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Memory/PlatformBigEndianMemoryStream.cs
@@ -1,19 +1,19 @@
-\ufeff\ufeff/*
- * 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.
- */
+\ufeff/*
+* 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.
+*/
 
 namespace Apache.Ignite.Core.Impl.Memory
 {
@@ -488,4 +488,4 @@ namespace Apache.Ignite.Core.Impl.Memory
 
         #endregion
     }
-}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/00576d8a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
index 267c717..e623969 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
@@ -1,19 +1,19 @@
-\ufeff\ufeff/*
- * 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.
- */
+\ufeff/*
+* 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.
+*/
 
 namespace Apache.Ignite.Core.Impl.Unmanaged
 {
@@ -53,9 +53,9 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
     /// Unmanaged callbacks.
     /// </summary>
     [SuppressMessage("ReSharper", "UnusedMember.Local")]
-    [SuppressMessage("Microsoft.Design", "CA1001:TypesThatOwnDisposableFieldsShouldBeDisposable", 
+    [SuppressMessage("Microsoft.Design", "CA1001:TypesThatOwnDisposableFieldsShouldBeDisposable",
         Justification = "This class instance usually lives as long as the app runs.")]
-    [SuppressMessage("Microsoft.Design", "CA1049:TypesThatOwnNativeResourcesShouldBeDisposable", 
+    [SuppressMessage("Microsoft.Design", "CA1049:TypesThatOwnNativeResourcesShouldBeDisposable",
         Justification = "This class instance usually lives as long as the app runs.")]
     internal unsafe class UnmanagedCallbacks
     {
@@ -71,7 +71,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
 
         /** Handle registry. */
         private readonly HandleRegistry _handleRegistry = new HandleRegistry();
-        
+
         /** Grid. */
         private volatile Ignite _ignite;
 
@@ -155,7 +155,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
         private delegate long MessagingFilterCreateCallbackDelegate(void* target, long memPtr);
         private delegate int MessagingFilterApplyCallbackDelegate(void* target, long ptr, long memPtr);
         private delegate void MessagingFilterDestroyCallbackDelegate(void* target, long ptr);
-        
+
         private delegate long EventFilterCreateCallbackDelegate(void* target, long memPtr);
         private delegate int EventFilterApplyCallbackDelegate(void* target, long ptr, long memPtr);
         private delegate void EventFilterDestroyCallbackDelegate(void* target, long ptr);
@@ -171,7 +171,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
 
         private delegate void OnStartCallbackDelegate(void* target, void* proc, long memPtr);
         private delegate void OnStopCallbackDelegate(void* target);
-        
+
         private delegate void ErrorCallbackDelegate(void* target, int errType, sbyte* errClsChars, int errClsCharsLen, sbyte* errMsgChars, int errMsgCharsLen, sbyte* stackTraceChars, int stackTraceCharsLen, void* errData, int errDataLen);
 
         private delegate long ExtensionCallbackInLongOutLongDelegate(void* target, int typ, long arg1);
@@ -209,7 +209,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
                 cacheStoreDestroy = CreateFunctionPointer((CacheStoreDestroyCallbackDelegate) CacheStoreDestroy),
 
                 cacheStoreSessionCreate = CreateFunctionPointer((CacheStoreSessionCreateCallbackDelegate) CacheStoreSessionCreate),
-                
+
                 cacheEntryFilterCreate = CreateFunctionPointer((CacheEntryFilterCreateCallbackDelegate)CacheEntryFilterCreate),
                 cacheEntryFilterApply = CreateFunctionPointer((CacheEntryFilterApplyCallbackDelegate)CacheEntryFilterApply),
                 cacheEntryFilterDestroy = CreateFunctionPointer((CacheEntryFilterDestroyCallbackDelegate)CacheEntryFilterDestroy),
@@ -238,7 +238,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
                     CreateFunctionPointer((DataStreamerTopologyUpdateCallbackDelegate) DataStreamerTopologyUpdate),
                 dataStreamerStreamReceiverInvoke =
                     CreateFunctionPointer((DataStreamerStreamReceiverInvokeCallbackDelegate) DataStreamerStreamReceiverInvoke),
-                
+
                 futureByteResult = CreateFunctionPointer((FutureByteResultCallbackDelegate) FutureByteResult),
                 futureBoolResult = CreateFunctionPointer((FutureBoolResultCallbackDelegate) FutureBoolResult),
                 futureShortResult = CreateFunctionPointer((FutureShortResultCallbackDelegate) FutureShortResult),
@@ -253,7 +253,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
                 lifecycleOnEvent = CreateFunctionPointer((LifecycleOnEventCallbackDelegate) LifecycleOnEvent),
                 memoryReallocate = CreateFunctionPointer((MemoryReallocateCallbackDelegate) MemoryReallocate),
                 nodeInfo = CreateFunctionPointer((NodeInfoCallbackDelegate) NodeInfo),
-                
+
                 messagingFilterCreate = CreateFunctionPointer((MessagingFilterCreateCallbackDelegate)MessagingFilterCreate),
                 messagingFilterApply = CreateFunctionPointer((MessagingFilterApplyCallbackDelegate)MessagingFilterApply),
                 messagingFilterDestroy = CreateFunctionPointer((MessagingFilterDestroyCallbackDelegate)MessagingFilterDestroy),
@@ -268,11 +268,11 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
                 serviceInvokeMethod = CreateFunctionPointer((ServiceInvokeMethodCallbackDelegate)ServiceInvokeMethod),
 
                 clusterNodeFilterApply = CreateFunctionPointer((ClusterNodeFilterApplyCallbackDelegate)ClusterNodeFilterApply),
-                
+
                 onStart = CreateFunctionPointer((OnStartCallbackDelegate)OnStart),
                 onStop = CreateFunctionPointer((OnStopCallbackDelegate)OnStop),
                 error = CreateFunctionPointer((ErrorCallbackDelegate)Error),
-                
+
                 extensionCbInLongOutLong = CreateFunctionPointer((ExtensionCallbackInLongOutLongDelegate)ExtensionCallbackInLongOutLong),
                 extensionCbInLongLongOutLong = CreateFunctionPointer((ExtensionCallbackInLongLongOutLongDelegate)ExtensionCallbackInLongLongOutLong),
 
@@ -339,7 +339,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
 
                 IUnmanagedTarget cb0 = null;
 
-                if ((long) cb != 0)
+                if ((long)cb != 0)
                     cb0 = new UnmanagedNonReleaseableTarget(_ctx, cb);
 
                 using (PlatformMemoryStream stream = IgniteManager.Memory.Get(memPtr).GetStream())
@@ -461,7 +461,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
                 {
                     return task.JobResultLocal(Job(jobPtr));
                 }
-                
+
                 using (var stream = IgniteManager.Memory.Get(memPtr).GetStream())
                 {
                     return task.JobResultRemote(Job(jobPtr), stream);
@@ -605,7 +605,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
                     var filterHolder = reader.ReadObject<ContinuousQueryFilterHolder>();
 
                     // 2. Create real filter from it's holder.
-                    var filter = (IContinuousQueryFilter) DelegateTypeDescriptor.GetContinuousQueryFilterCtor(
+                    var filter = (IContinuousQueryFilter)DelegateTypeDescriptor.GetContinuousQueryFilterCtor(
                         filterHolder.Filter.GetType())(filterHolder.Filter, filterHolder.KeepBinary);
 
                     // 3. Inject grid.
@@ -639,7 +639,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
                 holder.Release();
             });
         }
-        
+
         #endregion
 
         #region IMPLEMENTATION: DATA STREAMER
@@ -685,7 +685,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
         }
 
         #endregion
-        
+
         #region IMPLEMENTATION: FUTURES
 
         private void FutureByteResult(void* target, long futPtr, int res)
@@ -861,7 +861,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
             return SafeCall(() =>
             {
                 var holder = _ignite.HandleRegistry.Get<MessageListenerHolder>(ptr, false);
-                
+
                 if (holder == null)
                     return 0;
 
@@ -879,7 +879,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
                 _ignite.HandleRegistry.Release(ptr);
             });
         }
-        
+
         #endregion
 
         #region IMPLEMENTATION: EXTENSIONS
@@ -942,7 +942,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
                 _ignite.HandleRegistry.Release(ptr);
             });
         }
-        
+
         #endregion
 
         #region IMPLEMENTATION: SERVICES
@@ -1098,7 +1098,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
             if (ignite != null)
                 ignite.AfterNodeStop();
         }
-        
+
         private void Error(void* target, int errType, sbyte* errClsChars, int errClsCharsLen, sbyte* errMsgChars,
             int errMsgCharsLen, sbyte* stackTraceChars, int stackTraceCharsLen, void* errData, int errDataLen)
         {
@@ -1402,7 +1402,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
         public void Cleanup()
         {
             _ignite = null;
-            
+
             _handleRegistry.Close();
         }
 
@@ -1414,4 +1414,4 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
             get { return ConsoleWritePtr; }
         }
     }
-}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/00576d8a/modules/platforms/dotnet/Apache.Ignite.Core/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Properties/AssemblyInfo.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Properties/AssemblyInfo.cs
index 9fcbeb0..9b5eea4 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Properties/AssemblyInfo.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Properties/AssemblyInfo.cs
@@ -1,19 +1,19 @@
-\ufeff\ufeff\ufeff\ufeff/*
- * 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.
- */
+\ufeff/*
+* 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.
+*/
 
 using System;
 using System.Reflection;
@@ -25,7 +25,7 @@ using System.Runtime.InteropServices;
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("Apache Software Foundation")]
 [assembly: AssemblyProduct("Apache Ignite.NET")]
-[assembly: AssemblyCopyright("Copyright �  2016")]
+[assembly: AssemblyCopyright("Copyright 2016")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
 
@@ -45,4 +45,4 @@ using System.Runtime.InteropServices;
 [assembly: InternalsVisibleTo("Apache.Ignite.Benchmarks, PublicKey=0024000004800000940000000602000000240000525341310004000001000100a3e0c1df4cbedbd4ed0e88808401c69b69ec12575ed1c056ac9f448e018fb29af19d236b7b03563aad66c48ab2045e72971ed098d4f65d4cdd38d65abcb39b4f84c626b22ccab2754375f0e8c97dc304fa146f0eddad5cc40a71803a8f15b0b0bb0bff0d4bf0ff6a64bb1044e0d71e6e2405b83fd4c1f7b3e2cfc2e9d50823d4")]
 [assembly: InternalsVisibleTo("Apache.Ignite.AspNet.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c9380ce05eb74bd7c531f72e9ea615c59d7eceb09bd9795cb3dff1fcf638fd799c2a58a9be42fff156efe1c8cdebb751e27763f6c9a7c80cdc1dc1bbf44283608ef18ccd5017fd57b2b026503637c89c2537f361807f3bdd49265f4d444716159d989342561d324b1a0961640338bb32eaf67f4ae0c95f1b210f65404b0909c6")]
 
-#endif
+#endif
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/00576d8a/modules/platforms/dotnet/Apache.Ignite.Linq/ICacheQueryable.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Linq/ICacheQueryable.cs b/modules/platforms/dotnet/Apache.Ignite.Linq/ICacheQueryable.cs
index 684f746..ef641e2 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Linq/ICacheQueryable.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Linq/ICacheQueryable.cs
@@ -1,19 +1,19 @@
-\ufeff\ufeff/*
- * 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.
- */
+\ufeff/*
+* 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.
+*/
 
 namespace Apache.Ignite.Linq
 {

http://git-wip-us.apache.org/repos/asf/ignite/blob/00576d8a/modules/platforms/dotnet/Apache.Ignite.Linq/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Linq/Properties/AssemblyInfo.cs b/modules/platforms/dotnet/Apache.Ignite.Linq/Properties/AssemblyInfo.cs
index d47bef9..a115145 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Linq/Properties/AssemblyInfo.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Linq/Properties/AssemblyInfo.cs
@@ -1,19 +1,19 @@
-\ufeff\ufeff/*
- * 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.
- */
+\ufeff/*
+* 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.
+*/
 
 using System;
 using System.Reflection;
@@ -24,7 +24,7 @@ using System.Runtime.InteropServices;
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("Apache Software Foundation")]
 [assembly: AssemblyProduct("Apache Ignite.NET")]
-[assembly: AssemblyCopyright("Copyright �  2015")]
+[assembly: AssemblyCopyright("Copyright 2016")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
 
@@ -37,4 +37,4 @@ using System.Runtime.InteropServices;
 [assembly: AssemblyFileVersion("1.8.0.14218")]
 [assembly: AssemblyInformationalVersion("1.8.0")]
 
-[assembly: CLSCompliant(true)]
+[assembly: CLSCompliant(true)]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/00576d8a/modules/platforms/dotnet/Apache.Ignite/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite/Properties/AssemblyInfo.cs b/modules/platforms/dotnet/Apache.Ignite/Properties/AssemblyInfo.cs
index 82e27b1..7127e3c 100644
--- a/modules/platforms/dotnet/Apache.Ignite/Properties/AssemblyInfo.cs
+++ b/modules/platforms/dotnet/Apache.Ignite/Properties/AssemblyInfo.cs
@@ -1,19 +1,19 @@
-\ufeff\ufeff\ufeff/*
- * 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.
- */
+\ufeff/*
+* 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.
+*/
 
 using System.Reflection;
 using System.Runtime.InteropServices;
@@ -23,7 +23,7 @@ using System.Runtime.InteropServices;
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("Apache Software Foundation")]
 [assembly: AssemblyProduct("Apache Ignite.NET")]
-[assembly: AssemblyCopyright("Copyright �  2015")]
+[assembly: AssemblyCopyright("Copyright 2016")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
 
@@ -33,4 +33,4 @@ using System.Runtime.InteropServices;
 
 [assembly: AssemblyVersion("1.8.0.14218")]
 [assembly: AssemblyFileVersion("1.8.0.14218")]
-[assembly: AssemblyInformationalVersion("1.8.0")]
+[assembly: AssemblyInformationalVersion("1.8.0")]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/00576d8a/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Properties/AssemblyInfo.cs b/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Properties/AssemblyInfo.cs
index 4f55039..42fcb29 100644
--- a/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Properties/AssemblyInfo.cs
+++ b/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Properties/AssemblyInfo.cs
@@ -1,29 +1,29 @@
-\ufeff\ufeff\ufeff/*
- * 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.
- */
+\ufeff/*
+* 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.
+*/
 
-\ufeff\ufeff\ufeff\ufeff\ufeff\ufeff\ufeffusing System.Reflection;
-\ufeff\ufeffusing System.Runtime.InteropServices;
+using System.Reflection;
+using System.Runtime.InteropServices;
 
 [assembly: AssemblyTitle("Apache Ignite.NET Examples")]
 [assembly: AssemblyDescription("")]
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("Apache Software Foundation")]
 [assembly: AssemblyProduct("Apache Ignite.NET")]
-[assembly: AssemblyCopyright("Copyright �  2015")]
+[assembly: AssemblyCopyright("Copyright 2016")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
 
@@ -33,4 +33,4 @@
 
 [assembly: AssemblyVersion("1.8.0.14218")]
 [assembly: AssemblyFileVersion("1.8.0.14218")]
-[assembly: AssemblyInformationalVersion("1.8.0")]
+[assembly: AssemblyInformationalVersion("1.8.0")]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/00576d8a/modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Properties/AssemblyInfo.cs b/modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Properties/AssemblyInfo.cs
index 471e7e9..90c2974 100644
--- a/modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Properties/AssemblyInfo.cs
+++ b/modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Properties/AssemblyInfo.cs
@@ -1,29 +1,29 @@
-\ufeff\ufeff\ufeff/*
- * 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.
- */
+\ufeff/*
+* 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.
+*/
 
 using System.Reflection;
-\ufeff\ufeffusing System.Runtime.InteropServices;
+using System.Runtime.InteropServices;
 
 [assembly: AssemblyTitle("Apache Ignite.NET Examples Library")]
 [assembly: AssemblyDescription("")]
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("Apache Software Foundation")]
 [assembly: AssemblyProduct("Apache Ignite.NET")]
-[assembly: AssemblyCopyright("Copyright �  2015")]
+[assembly: AssemblyCopyright("Copyright 2016")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
 
@@ -33,4 +33,4 @@ using System.Reflection;
 
 [assembly: AssemblyVersion("1.8.0.14218")]
 [assembly: AssemblyFileVersion("1.8.0.14218")]
-[assembly: AssemblyInformationalVersion("1.8.0")]
+[assembly: AssemblyInformationalVersion("1.8.0")]
\ No newline at end of file


[33/50] [abbrv] ignite git commit: Merge remote-tracking branch 'remotes/community/ignite-1.7.3' into UPSTREAM_master

Posted by sh...@apache.org.
Merge remote-tracking branch 'remotes/community/ignite-1.7.3' into UPSTREAM_master


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

Branch: refs/heads/ignite-2788
Commit: 04f72c15485f23481fe92f3fbdf2264b28bba368
Parents: 909f046
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Mon Oct 3 14:40:47 2016 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Mon Oct 3 14:40:47 2016 +0300

----------------------------------------------------------------------
 .../Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj     | 4 ----
 modules/platforms/dotnet/Apache.Ignite.sln                       | 2 --
 2 files changed, 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/04f72c15/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
index d956972..c1c4953 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
@@ -196,10 +196,6 @@
       <Project>{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}</Project>
       <Name>Apache.Ignite.NLog</Name>
     </ProjectReference>
-    <ProjectReference Include="..\Apache.Ignite.NLog\Apache.Ignite.NLog.csproj">
-      <Project>{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}</Project>
-      <Name>Apache.Ignite.NLog</Name>
-    </ProjectReference>
     <ProjectReference Include="..\Apache.Ignite\Apache.Ignite.csproj">
       <Project>{27F7F3C6-BDDE-43A9-B565-856F8395A04B}</Project>
       <Name>Apache.Ignite</Name>

http://git-wip-us.apache.org/repos/asf/ignite/blob/04f72c15/modules/platforms/dotnet/Apache.Ignite.sln
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.sln b/modules/platforms/dotnet/Apache.Ignite.sln
index df25510..1f5163d 100644
--- a/modules/platforms/dotnet/Apache.Ignite.sln
+++ b/modules/platforms/dotnet/Apache.Ignite.sln
@@ -40,8 +40,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.NLog", "Apach
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.AspNet.Tests", "Apache.Ignite.AspNet.Tests\Apache.Ignite.AspNet.Tests.csproj", "{18EA4C71-A11D-4AB1-8042-418F7559D84F}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.NLog", "Apache.Ignite.NLog\Apache.Ignite.NLog.csproj", "{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}"
-EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU


[46/50] [abbrv] ignite git commit: IGNITE-4075 Cassandra store should load all available data when no parameters are provided in loadCache(). - Fixes #1189.

Posted by sh...@apache.org.
IGNITE-4075 Cassandra store should load all available data when no parameters are provided in loadCache(). - Fixes #1189.

Signed-off-by: Alexey Kuznetsov <ak...@apache.org>


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

Branch: refs/heads/ignite-2788
Commit: e1defc039899259c6ec2df6a77f575250fe4c81c
Parents: f445e7b
Author: Igor <ir...@gmail.com>
Authored: Mon Oct 31 10:17:08 2016 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Mon Oct 31 10:17:08 2016 +0700

----------------------------------------------------------------------
 .../cache/store/cassandra/CassandraCacheStore.java       |  5 ++++-
 .../apache/ignite/tests/IgnitePersistentStoreTest.java   | 11 +++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/e1defc03/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/CassandraCacheStore.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/CassandraCacheStore.java b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/CassandraCacheStore.java
index aead39a..9058837 100644
--- a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/CassandraCacheStore.java
+++ b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/CassandraCacheStore.java
@@ -96,9 +96,12 @@ public class CassandraCacheStore<K, V> implements CacheStore<K, V> {
 
     /** {@inheritDoc} */
     @Override public void loadCache(IgniteBiInClosure<K, V> clo, Object... args) throws CacheLoaderException {
-        if (clo == null || args == null || args.length == 0)
+        if (clo == null)
             return;
 
+        if (args == null || args.length == 0)
+            args = new String[] {"select * from " + controller.getPersistenceSettings().getKeyspace() + "." + cassandraTable() + ";"};
+
         ExecutorService pool = null;
 
         Collection<Future<?>> futs = new ArrayList<>(args.length);

http://git-wip-us.apache.org/repos/asf/ignite/blob/e1defc03/modules/cassandra/store/src/test/java/org/apache/ignite/tests/IgnitePersistentStoreTest.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/IgnitePersistentStoreTest.java b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/IgnitePersistentStoreTest.java
index d0a787a..97e7230 100644
--- a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/IgnitePersistentStoreTest.java
+++ b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/IgnitePersistentStoreTest.java
@@ -444,6 +444,17 @@ public class IgnitePersistentStoreTest {
                     "Expected number of records is 3, but loaded number of records is " + size);
             }
 
+            personCache3.clear();
+
+            personCache3.loadCache(null);
+
+            size = personCache3.size(CachePeekMode.ALL);
+            if (size != TestsHelper.getBulkOperationSize()) {
+                throw new RuntimeException("Cache data was incorrectly loaded from Cassandra. " +
+                    "Expected number of records is " + TestsHelper.getBulkOperationSize() +
+                    ", but loaded number of records is " + size);
+            }
+
             LOGGER.info("Cache data loaded from Cassandra table");
         }
 


[19/50] [abbrv] ignite git commit: Revert "Fixed missing Apache header."

Posted by sh...@apache.org.
Revert "Fixed missing Apache header."

This reverts commit b280c3efa1eb84c6bc8abbe31ba669b0c24323d8.


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

Branch: refs/heads/ignite-2788
Commit: f745371af76baa676385c22257b4577d2e697d16
Parents: c32082f
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Mon Oct 3 10:07:26 2016 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Mon Oct 3 10:07:26 2016 +0300

----------------------------------------------------------------------
 .../internal/binary/BinaryFieldOrderSelfTest.java  | 17 -----------------
 1 file changed, 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/f745371a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFieldOrderSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFieldOrderSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFieldOrderSelfTest.java
index e470948..6bb1e13 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFieldOrderSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFieldOrderSelfTest.java
@@ -1,20 +1,3 @@
-/*
- * 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.binary;
 
 import org.apache.ignite.binary.BinaryObject;


[09/50] [abbrv] ignite git commit: ignite-3621 Fixed 'testEvictExpired'.

Posted by sh...@apache.org.
ignite-3621 Fixed 'testEvictExpired'.


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

Branch: refs/heads/ignite-2788
Commit: a4d7aa343df23a5e00df11c5080cc1762b187161
Parents: 53229e2
Author: sboikov <sb...@gridgain.com>
Authored: Thu Sep 29 12:04:44 2016 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Sep 29 12:04:44 2016 +0300

----------------------------------------------------------------------
 .../cache/IgniteCacheConfigVariationsFullApiTest.java         | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/a4d7aa34/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheConfigVariationsFullApiTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheConfigVariationsFullApiTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheConfigVariationsFullApiTest.java
index 2ca09c8..6b0e193 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheConfigVariationsFullApiTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheConfigVariationsFullApiTest.java
@@ -3336,7 +3336,12 @@ public class IgniteCacheConfigVariationsFullApiTest extends IgniteCacheConfigVar
 
         boolean wait = waitForCondition(new GridAbsPredicate() {
             @Override public boolean apply() {
-                return cache.localPeek(key) == null;
+                for (int i = 0; i < gridCount(); i++) {
+                    if (peek(jcache(i), key) != null)
+                        return false;
+                }
+
+                return true;
             }
         }, ttl + 1000);
 


[48/50] [abbrv] ignite git commit: ignite-2971 Enabled tests

Posted by sh...@apache.org.
ignite-2971 Enabled tests


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

Branch: refs/heads/ignite-2788
Commit: 45bb1ac95a9385f9a03388427cd1df25e9993c42
Parents: 138a3aa
Author: sboikov <sb...@gridgain.com>
Authored: Fri Nov 4 16:36:05 2016 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Fri Nov 4 16:36:05 2016 +0300

----------------------------------------------------------------------
 .../processors/cache/WithKeepBinaryCacheFullApiTest.java  | 10 +---------
 1 file changed, 1 insertion(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/45bb1ac9/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/WithKeepBinaryCacheFullApiTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/WithKeepBinaryCacheFullApiTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/WithKeepBinaryCacheFullApiTest.java
index 1954a8d..3e6b0b0 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/WithKeepBinaryCacheFullApiTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/WithKeepBinaryCacheFullApiTest.java
@@ -459,11 +459,7 @@ public class WithKeepBinaryCacheFullApiTest extends IgniteCacheConfigVariationsA
 
         for (TransactionConcurrency conc : TransactionConcurrency.values()) {
             for (TransactionIsolation isolation : TransactionIsolation.values()) {
-                // TODO IGNITE-2971: delete this if when the issue will be fixed.
-                if (conc == TransactionConcurrency.OPTIMISTIC && isolation == TransactionIsolation.SERIALIZABLE)
-                    continue;
-
-                info(">>>>> Executing test using explicite txs [concurrency=" + conc + ", isolation=" + isolation + "]");
+                info(">>>>> Executing test using explicit txs [concurrency=" + conc + ", isolation=" + isolation + "]");
 
                 checkInvokeTx(conc, isolation);
 
@@ -671,10 +667,6 @@ public class WithKeepBinaryCacheFullApiTest extends IgniteCacheConfigVariationsA
 
         for (TransactionConcurrency conc : TransactionConcurrency.values()) {
             for (TransactionIsolation isolation : TransactionIsolation.values()) {
-                // TODO IGNITE-2971: delete this if when the issue will be fixed.
-                if (conc == TransactionConcurrency.OPTIMISTIC && isolation == TransactionIsolation.SERIALIZABLE)
-                    continue;
-
                 checkInvokeAsyncTx(conc, isolation);
 
                 jcache().removeAll();


[43/50] [abbrv] ignite git commit: IGNITE-3963 FlinkIgniteSinkSelfTest fails with exception IllegalArgumentException - Fixes #1112.

Posted by sh...@apache.org.
IGNITE-3963 FlinkIgniteSinkSelfTest fails with exception IllegalArgumentException - Fixes #1112.

Signed-off-by: samaitra <sa...@gmail.com>


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

Branch: refs/heads/ignite-2788
Commit: f600750cda85ab859ba370bed0d22d875c6e29cf
Parents: 3e4042b
Author: samaitra <sa...@gmail.com>
Authored: Sat Oct 8 00:16:20 2016 +0530
Committer: samaitra <sa...@gmail.com>
Committed: Sat Oct 8 00:16:20 2016 +0530

----------------------------------------------------------------------
 .../src/main/java/org/apache/ignite/sink/flink/IgniteSink.java     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/f600750c/modules/flink/src/main/java/org/apache/ignite/sink/flink/IgniteSink.java
----------------------------------------------------------------------
diff --git a/modules/flink/src/main/java/org/apache/ignite/sink/flink/IgniteSink.java b/modules/flink/src/main/java/org/apache/ignite/sink/flink/IgniteSink.java
index e0ae783..2f18f80 100644
--- a/modules/flink/src/main/java/org/apache/ignite/sink/flink/IgniteSink.java
+++ b/modules/flink/src/main/java/org/apache/ignite/sink/flink/IgniteSink.java
@@ -34,7 +34,7 @@ public class IgniteSink<IN> extends RichSinkFunction<IN> {
     private static final long DFLT_FLUSH_FREQ = 10000L;
 
     /** Logger. */
-    private final IgniteLogger log;
+    private final transient IgniteLogger log;
 
     /** Automatic flush frequency. */
     private long autoFlushFrequency = DFLT_FLUSH_FREQ;


[50/50] [abbrv] ignite git commit: Merge branch 'master' into ignite-2788

Posted by sh...@apache.org.
Merge branch 'master' into ignite-2788


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

Branch: refs/heads/ignite-2788
Commit: 0cd6723d2e413be61d31827a9f0444d4253a30ed
Parents: a8dae9d 45bb1ac
Author: shtykh_roman <rs...@yahoo.com>
Authored: Mon Nov 7 13:28:04 2016 +0900
Committer: shtykh_roman <rs...@yahoo.com>
Committed: Mon Nov 7 13:28:04 2016 +0900

----------------------------------------------------------------------
 .gitignore                                      |    42 +-
 RELEASE_NOTES.txt                               |   108 +
 assembly/LICENSE_FABRIC                         |     3 +-
 assembly/LICENSE_HADOOP                         |     1 -
 assembly/dependencies-fabric-lgpl.xml           |     4 +-
 assembly/dependencies-fabric.xml                |     4 +-
 assembly/dependencies-schema-import.xml         |     1 +
 assembly/libs/README.txt                        |    39 +-
 assembly/release-fabric-base.xml                |    30 +
 assembly/release-schema-import.xml              |     2 +-
 bin/include/hadoop-classpath.bat                |    73 -
 bin/include/hadoop-classpath.sh                 |    65 -
 bin/include/setenv.bat                          |    10 -
 bin/include/setenv.sh                           |    12 -
 config/hadoop/default-config.xml                |   111 +-
 examples/config/filesystem/example-igfs.xml     |     3 -
 examples/pom.xml                                |     2 +-
 examples/schema-import/pom.xml                  |     2 +-
 .../java/org/apache/ignite/schema/Demo.java     |    23 +-
 .../ignite/schema/H2DataSourceFactory.java      |    35 +
 .../hibernate/HibernateL2CacheExample.java      |     2 +-
 .../CacheContinuousAsyncQueryExample.java       |   138 +
 .../datagrid/CacheContinuousQueryExample.java   |    13 +-
 .../examples/datagrid/CacheQueryExample.java    |    78 +-
 .../datastructures/IgniteLockExample.java       |   293 +
 .../ignite/examples/CacheExamplesSelfTest.java  |     8 +
 .../examples/IndexingBridgeMethodTest.java      |    93 +
 .../IgniteExamplesJ8SelfTestSuite.java          |     2 +
 modules/aop/pom.xml                             |     2 +-
 modules/apache-license-gen/pom.xml              |     2 +-
 modules/aws/pom.xml                             |     2 +-
 .../s3/S3CheckpointManagerSelfTest.java         |     3 +
 .../checkpoint/s3/S3CheckpointSpiSelfTest.java  |     4 +
 .../s3/S3CheckpointSpiStartStopSelfTest.java    |     7 +
 .../s3/S3SessionCheckpointSelfTest.java         |     2 +
 .../s3/TcpDiscoveryS3IpFinderSelfTest.java      |     7 +
 .../ignite/testsuites/IgniteS3TestSuite.java    |    15 +-
 modules/benchmarks/pom.xml                      |     6 +-
 .../jmh/notify/JmhParkVsNotifyBenchmark.java    |   105 +
 .../jmh/notify/JmhWaitStategyBenchmark.java     |   259 +
 .../internal/benchmarks/model/IntValue.java     |    19 +-
 modules/camel/pom.xml                           |     2 +-
 modules/cassandra/README.txt                    |    28 +
 modules/cassandra/pom.xml                       |    52 +
 modules/cassandra/serializers/README.txt        |    33 +
 .../serializers/licenses/apache-2.0.txt         |   202 +
 modules/cassandra/serializers/pom.xml           |   129 +
 .../cassandra/serializer/KryoSerializer.java    |    95 +
 .../apache/ignite/tests/KryoSerializerTest.java |    70 +
 .../java/org/apache/ignite/tests/MyPojo.java    |   102 +
 modules/cassandra/store/README.txt              |    32 +
 modules/cassandra/store/licenses/apache-2.0.txt |   202 +
 modules/cassandra/store/pom.xml                 |   305 +
 .../store/cassandra/CassandraCacheStore.java    |   519 +
 .../cassandra/CassandraCacheStoreFactory.java   |   200 +
 .../store/cassandra/common/CassandraHelper.java |   176 +
 .../cassandra/common/PropertyMappingHelper.java |   219 +
 .../store/cassandra/common/RandomSleeper.java   |   104 +
 .../store/cassandra/common/SystemHelper.java    |    46 +
 .../store/cassandra/common/package-info.java    |    21 +
 .../store/cassandra/datasource/Credentials.java |    39 +
 .../store/cassandra/datasource/DataSource.java  |   647 +
 .../cassandra/datasource/PlainCredentials.java  |    53 +
 .../cassandra/datasource/package-info.java      |    21 +
 .../cache/store/cassandra/package-info.java     |    21 +
 .../persistence/KeyPersistenceSettings.java     |   305 +
 .../KeyValuePersistenceSettings.java            |   526 +
 .../persistence/PersistenceController.java      |   462 +
 .../persistence/PersistenceSettings.java        |   446 +
 .../persistence/PersistenceStrategy.java        |    62 +
 .../store/cassandra/persistence/PojoField.java  |   245 +
 .../cassandra/persistence/PojoKeyField.java     |    87 +
 .../cassandra/persistence/PojoValueField.java   |   143 +
 .../persistence/ValuePersistenceSettings.java   |   120 +
 .../cassandra/persistence/package-info.java     |    21 +
 .../cassandra/serializer/JavaSerializer.java    |    80 +
 .../store/cassandra/serializer/Serializer.java  |    43 +
 .../cassandra/serializer/package-info.java      |    21 +
 .../session/BatchExecutionAssistant.java        |   102 +
 .../cassandra/session/BatchLoaderAssistant.java |    47 +
 .../cassandra/session/CassandraSession.java     |    70 +
 .../cassandra/session/CassandraSessionImpl.java |   943 ++
 .../cassandra/session/ExecutionAssistant.java   |    84 +
 .../session/GenericBatchExecutionAssistant.java |    71 +
 .../session/LoadCacheCustomQueryWorker.java     |   105 +
 .../store/cassandra/session/package-info.java   |    21 +
 .../cassandra/session/pool/SessionPool.java     |   173 +
 .../cassandra/session/pool/SessionWrapper.java  |    71 +
 .../cassandra/session/pool/package-info.java    |    21 +
 .../session/transaction/BaseMutation.java       |    68 +
 .../session/transaction/DeleteMutation.java     |    57 +
 .../cassandra/session/transaction/Mutation.java |    63 +
 .../session/transaction/WriteMutation.java      |    60 +
 .../session/transaction/package-info.java       |    21 +
 .../store/cassandra/utils/DDLGenerator.java     |    76 +
 .../store/cassandra/utils/package-info.java     |    21 +
 .../store/src/test/bootstrap/aws/README.txt     |    13 +
 .../aws/cassandra/cassandra-bootstrap.sh        |   336 +
 .../bootstrap/aws/cassandra/cassandra-env.sh    |   287 +
 .../bootstrap/aws/cassandra/cassandra-start.sh  |   217 +
 .../aws/cassandra/cassandra-template.yaml       |   888 ++
 .../store/src/test/bootstrap/aws/common.sh      |  1481 ++
 .../store/src/test/bootstrap/aws/env.sh         |   113 +
 .../test/bootstrap/aws/ganglia/agent-start.sh   |    75 +
 .../bootstrap/aws/ganglia/ganglia-bootstrap.sh  |   417 +
 .../bootstrap/aws/ignite/ignite-bootstrap.sh    |   336 +
 .../ignite/ignite-cassandra-server-template.xml |   190 +
 .../src/test/bootstrap/aws/ignite/ignite-env.sh |    29 +
 .../test/bootstrap/aws/ignite/ignite-start.sh   |   266 +
 .../src/test/bootstrap/aws/logs-collector.sh    |   173 +
 .../tests/ignite-cassandra-client-template.xml  |   192 +
 .../test/bootstrap/aws/tests/tests-bootstrap.sh |   317 +
 .../test/bootstrap/aws/tests/tests-manager.sh   |   458 +
 .../test/bootstrap/aws/tests/tests-report.sh    |   499 +
 .../CassandraDirectPersistenceLoadTest.java     |   107 +
 .../tests/CassandraDirectPersistenceTest.java   |   696 +
 .../ignite/tests/CassandraLocalServer.java      |    59 +
 .../apache/ignite/tests/DDLGeneratorTest.java   |    57 +
 .../tests/DatasourceSerializationTest.java      |   158 +
 .../tests/IgnitePersistentStoreLoadTest.java    |   111 +
 .../ignite/tests/IgnitePersistentStoreTest.java |   666 +
 .../LoadTestsCassandraArtifactsCreator.java     |   104 +
 .../org/apache/ignite/tests/load/Generator.java |    27 +
 .../apache/ignite/tests/load/IntGenerator.java  |    33 +
 .../ignite/tests/load/LoadTestDriver.java       |   238 +
 .../apache/ignite/tests/load/LongGenerator.java |    28 +
 .../ignite/tests/load/PersonGenerator.java      |    43 +
 .../ignite/tests/load/PersonIdGenerator.java    |    31 +
 .../ignite/tests/load/StringGenerator.java      |    28 +
 .../org/apache/ignite/tests/load/Worker.java    |   429 +
 .../tests/load/cassandra/BulkReadWorker.java    |    63 +
 .../tests/load/cassandra/BulkWriteWorker.java   |    52 +
 .../ignite/tests/load/cassandra/ReadWorker.java |    51 +
 .../tests/load/cassandra/WriteWorker.java       |    51 +
 .../tests/load/cassandra/package-info.java      |    21 +
 .../tests/load/ignite/BulkReadWorker.java       |    52 +
 .../tests/load/ignite/BulkWriteWorker.java      |    52 +
 .../ignite/tests/load/ignite/ReadWorker.java    |    51 +
 .../ignite/tests/load/ignite/WriteWorker.java   |    51 +
 .../ignite/tests/load/ignite/package-info.java  |    21 +
 .../apache/ignite/tests/load/package-info.java  |    21 +
 .../org/apache/ignite/tests/package-info.java   |    21 +
 .../org/apache/ignite/tests/pojos/Person.java   |   279 +
 .../org/apache/ignite/tests/pojos/PersonId.java |   110 +
 .../org/apache/ignite/tests/pojos/Product.java  |   123 +
 .../apache/ignite/tests/pojos/ProductOrder.java |   148 +
 .../apache/ignite/tests/pojos/package-info.java |    21 +
 .../ignite/tests/utils/CacheStoreHelper.java    |    77 +
 .../tests/utils/CassandraAdminCredentials.java  |    38 +
 .../ignite/tests/utils/CassandraHelper.java     |   358 +
 .../tests/utils/CassandraLifeCycleBean.java     |   149 +
 .../utils/CassandraRegularCredentials.java      |    38 +
 .../ignite/tests/utils/TestCacheSession.java    |    95 +
 .../ignite/tests/utils/TestTransaction.java     |   132 +
 .../apache/ignite/tests/utils/TestsHelper.java  |   660 +
 .../apache/ignite/tests/utils/package-info.java |    21 +
 .../store/src/test/resources/log4j.properties   |   119 +
 .../tests/cassandra/connection-settings.xml     |    52 +
 .../tests/cassandra/connection.properties       |    17 +
 .../tests/cassandra/credentials.properties      |    22 +
 .../tests/cassandra/embedded-cassandra.yaml     |   119 +
 .../ignite/tests/cassandra/keyspaces.properties |    17 +
 .../tests/persistence/blob/ignite-config.xml    |    94 +
 .../persistence/blob/persistence-settings-1.xml |    21 +
 .../persistence/blob/persistence-settings-2.xml |    21 +
 .../persistence/blob/persistence-settings-3.xml |    29 +
 .../tests/persistence/pojo/ignite-config.xml    |   169 +
 .../ignite/tests/persistence/pojo/order.xml     |    21 +
 .../persistence/pojo/persistence-settings-1.xml |    21 +
 .../persistence/pojo/persistence-settings-2.xml |    21 +
 .../persistence/pojo/persistence-settings-3.xml |   175 +
 .../persistence/pojo/persistence-settings-4.xml |   175 +
 .../ignite/tests/persistence/pojo/product.xml   |    21 +
 .../persistence/primitive/ignite-config.xml     |    94 +
 .../primitive/ignite-remote-client-config.xml   |    99 +
 .../primitive/ignite-remote-server-config.xml   |   110 +
 .../primitive/persistence-settings-1.xml        |    21 +
 .../primitive/persistence-settings-2.xml        |    21 +
 .../store/src/test/resources/tests.properties   |    65 +
 .../src/test/scripts/cassandra-load-tests.bat   |    41 +
 .../src/test/scripts/cassandra-load-tests.sh    |    39 +
 .../src/test/scripts/ignite-load-tests.bat      |    41 +
 .../store/src/test/scripts/ignite-load-tests.sh |    39 +
 .../cassandra/store/src/test/scripts/jvm-opt.sh |    21 +
 .../store/src/test/scripts/jvm-opts.bat         |    24 +
 .../scripts/recreate-cassandra-artifacts.bat    |    41 +
 .../scripts/recreate-cassandra-artifacts.sh     |    39 +
 modules/clients/pom.xml                         |    10 +-
 modules/clients/src/test/config/jdbc-config.xml |     3 +-
 .../client/ClientDefaultCacheSelfTest.java      |   119 +-
 .../ignite/internal/client/ClientHttpTask.java  |    33 +-
 .../client/ClientReconnectionSelfTest.java      |     4 +-
 .../ignite/internal/client/ClientTcpTask.java   |    10 +-
 .../ClientAbstractMultiNodeSelfTest.java        |     8 +-
 .../integration/ClientAbstractSelfTest.java     |    92 +-
 .../client/router/TcpSslRouterSelfTest.java     |     7 +-
 .../client/suite/IgniteClientTestSuite.java     |    71 +-
 .../internal/jdbc2/JdbcConnectionSelfTest.java  |     2 +
 .../jdbc2/JdbcDistributedJoinsQueryTest.java    |   319 +
 .../internal/jdbc2/JdbcMetadataSelfTest.java    |    63 +-
 .../internal/jdbc2/JdbcNoDefaultCacheTest.java  |   161 +
 .../internal/jdbc2/JdbcResultSetSelfTest.java   |     4 +-
 .../JettyRestProcessorAbstractSelfTest.java     |  1586 +-
 .../rest/JettyRestProcessorSignedSelfTest.java  |     5 +-
 .../JettyRestProcessorUnsignedSelfTest.java     |     5 +-
 .../internal/processors/rest/SimplePerson.java  |    74 +
 .../ignite/jdbc/JdbcMetadataSelfTest.java       |    18 +
 .../ignite/jdbc/JdbcNoDefaultCacheTest.java     |   161 +
 .../ignite/jdbc/JdbcResultSetSelfTest.java      |     4 +-
 .../jdbc/suite/IgniteJdbcDriverTestSuite.java   |     5 +
 modules/cloud/pom.xml                           |     2 +-
 .../TcpDiscoveryCloudIpFinderSelfTest.java      |     6 +-
 .../ignite/testsuites/IgniteCloudTestSuite.java |     5 +-
 modules/codegen/pom.xml                         |     2 +-
 .../ignite/codegen/MessageCodeGenerator.java    |   139 +-
 modules/core/pom.xml                            |    23 +-
 .../src/main/java/org/apache/ignite/Ignite.java |    98 +-
 .../java/org/apache/ignite/IgniteCache.java     |   237 +-
 .../java/org/apache/ignite/IgniteCompute.java   |    69 +-
 .../java/org/apache/ignite/IgniteCondition.java |   338 +
 .../org/apache/ignite/IgniteDataStreamer.java   |    57 +-
 .../IgniteDataStreamerTimeoutException.java     |    45 +
 .../org/apache/ignite/IgniteFileSystem.java     |    39 +-
 .../org/apache/ignite/IgniteJdbcDriver.java     |    16 +-
 .../main/java/org/apache/ignite/IgniteLock.java |   489 +
 .../java/org/apache/ignite/IgniteServices.java  |    48 +-
 .../apache/ignite/IgniteSystemProperties.java   |   100 +-
 .../main/java/org/apache/ignite/Ignition.java   |    19 +-
 .../ignite/binary/BinaryObjectBuilder.java      |    11 +
 .../ignite/cache/CacheInterceptorEntry.java     |    39 +
 .../cache/CacheWriteSynchronizationMode.java    |     5 +-
 .../org/apache/ignite/cache/QueryEntity.java    |    18 +
 .../ignite/cache/affinity/AffinityFunction.java |     2 +
 .../affinity/fair/FairAffinityFunction.java     |    91 +-
 .../rendezvous/RendezvousAffinityFunction.java  |    47 +-
 .../cache/query/CacheQueryEntryEvent.java       |    12 +-
 .../ignite/cache/query/ContinuousQuery.java     |    74 +-
 .../ignite/cache/query/SqlFieldsQuery.java      |    53 +
 .../org/apache/ignite/cache/query/SqlQuery.java |    28 +
 .../store/jdbc/CacheAbstractJdbcStore.java      |   335 +-
 .../cache/store/jdbc/CacheJdbcBlobStore.java    |    20 +-
 .../cache/store/jdbc/CacheJdbcPojoStore.java    |    31 +-
 .../store/jdbc/CacheJdbcPojoStoreFactory.java   |   130 +-
 .../ignite/cache/store/jdbc/JdbcType.java       |     2 +-
 .../store/jdbc/JdbcTypesDefaultTransformer.java |   117 +
 .../cache/store/jdbc/JdbcTypesTransformer.java  |    39 +
 .../store/jdbc/dialect/BasicJdbcDialect.java    |    15 +-
 .../cache/store/jdbc/dialect/DB2Dialect.java    |     6 +-
 .../cache/store/jdbc/dialect/H2Dialect.java     |     5 +-
 .../cache/store/jdbc/dialect/JdbcDialect.java   |    29 +-
 .../cache/store/jdbc/dialect/MySQLDialect.java  |    27 +-
 .../cache/store/jdbc/dialect/OracleDialect.java |     5 +-
 .../store/jdbc/dialect/SQLServerDialect.java    |    16 +-
 .../org/apache/ignite/compute/ComputeJob.java   |     2 +-
 .../ignite/compute/ComputeJobAfterSend.java     |     2 +-
 .../compute/ComputeJobBeforeFailover.java       |     2 +-
 .../ignite/compute/ComputeJobContext.java       |     2 +-
 .../compute/ComputeJobContinuationAdapter.java  |    12 +-
 .../ignite/compute/ComputeLoadBalancer.java     |    12 +-
 .../org/apache/ignite/compute/ComputeTask.java  |    26 +-
 .../ignite/compute/ComputeTaskAdapter.java      |     8 +-
 .../compute/ComputeTaskNoResultCache.java       |     6 +-
 .../ignite/compute/ComputeTaskSession.java      |     4 +-
 .../apache/ignite/compute/ComputeTaskSpis.java  |     8 +-
 .../ignite/compute/ComputeTaskSplitAdapter.java |     8 +-
 .../apache/ignite/compute/gridify/Gridify.java  |     2 +-
 .../configuration/BasicAddressResolver.java     |   146 +
 .../configuration/CacheConfiguration.java       |    45 +-
 .../configuration/ConnectorConfiguration.java   |     4 +
 .../configuration/FileSystemConfiguration.java  |    60 +-
 .../configuration/HadoopConfiguration.java      |    41 +-
 .../configuration/IgniteConfiguration.java      |   154 +-
 .../ignite/configuration/OdbcConfiguration.java |   212 +
 .../configuration/TransactionConfiguration.java |     8 +
 .../igfs/IgfsGroupDataBlocksKeyMapper.java      |    43 +-
 .../java/org/apache/ignite/igfs/IgfsPath.java   |    40 +-
 .../org/apache/ignite/igfs/IgfsPathSummary.java |    35 +-
 .../apache/ignite/igfs/mapreduce/IgfsTask.java  |     6 +-
 .../igfs/secondary/IgfsSecondaryFileSystem.java |     6 +-
 .../local/LocalIgfsSecondaryFileSystem.java     |   415 +
 .../igfs/secondary/local/package-info.java      |    22 +
 .../ignite/igfs/secondary/package-info.java     |     2 +-
 .../ignite/internal/GridCodegenConverter.java   |    56 +
 .../internal/GridEventConsumeHandler.java       |    10 +-
 .../ignite/internal/GridJobExecuteRequest.java  |   148 +-
 .../ignite/internal/GridJobExecuteResponse.java |    42 +-
 .../ignite/internal/GridKernalContext.java      |    24 +
 .../ignite/internal/GridKernalContextImpl.java  |    40 +-
 .../apache/ignite/internal/GridLoggerProxy.java |     6 +-
 .../internal/GridMessageListenHandler.java      |    10 +-
 .../ignite/internal/GridTaskSessionImpl.java    |    17 +-
 .../org/apache/ignite/internal/GridTopic.java   |     5 +-
 .../ignite/internal/IgniteComponentType.java    |    15 +-
 .../ignite/internal/IgniteComputeImpl.java      |   120 +-
 .../ignite/internal/IgniteEventsImpl.java       |    11 +-
 .../apache/ignite/internal/IgniteKernal.java    |   244 +-
 .../ignite/internal/IgniteMessagingImpl.java    |     7 +-
 .../ignite/internal/IgniteNodeAttributes.java   |    10 +
 .../ignite/internal/IgniteServicesImpl.java     |     6 +-
 .../org/apache/ignite/internal/IgnitionEx.java  |   117 +-
 .../apache/ignite/internal/LessNamingBean.java  |    28 +
 .../ignite/internal/MarshallerContextImpl.java  |   107 +-
 .../internal/binary/BinaryClassDescriptor.java  |   102 +-
 .../ignite/internal/binary/BinaryContext.java   |   251 +-
 .../internal/binary/BinaryEnumObjectImpl.java   |    14 +-
 .../internal/binary/BinaryMarshaller.java       |    28 +-
 .../binary/BinaryMethodWriteReplacer.java       |    59 +
 .../ignite/internal/binary/BinaryObjectEx.java  |    19 +
 .../internal/binary/BinaryObjectExImpl.java     |   166 +-
 .../internal/binary/BinaryObjectImpl.java       |   100 +-
 .../binary/BinaryObjectOffheapImpl.java         |    55 +-
 .../internal/binary/BinaryReaderExImpl.java     |    99 +-
 .../internal/binary/BinaryReaderHandles.java    |     2 +-
 .../ignite/internal/binary/BinaryTreeMap.java   |    96 +
 .../binary/BinaryTreeMapWriteReplacer.java      |    34 +
 .../ignite/internal/binary/BinaryTreeSet.java   |    93 +
 .../binary/BinaryTreeSetWriteReplacer.java      |    34 +
 .../ignite/internal/binary/BinaryTypeImpl.java  |     8 +
 .../ignite/internal/binary/BinaryTypeProxy.java |   111 +
 .../ignite/internal/binary/BinaryUtils.java     |   269 +-
 .../internal/binary/BinaryWriteReplacer.java    |    33 +
 .../internal/binary/BinaryWriterExImpl.java     |    51 +-
 .../internal/binary/GridBinaryMarshaller.java   |     7 +-
 .../binary/builder/BinaryBuilderReader.java     |    11 +-
 .../binary/builder/BinaryObjectBuilderImpl.java |    13 +-
 .../client/GridClientConfiguration.java         |     1 -
 .../GridClientConnectionManagerAdapter.java     |    25 +-
 .../connection/GridClientNioTcpConnection.java  |     3 +
 .../GridClientOptimizedMarshaller.java          |     4 +-
 .../GridClientZipOptimizedMarshaller.java       |   167 +
 .../impl/GridTcpRouterNioListenerAdapter.java   |    11 +-
 .../internal/cluster/ClusterGroupAdapter.java   |    26 +-
 .../ignite/internal/cluster/ClusterGroupEx.java |    14 +-
 .../cluster/ClusterNodeLocalMapImpl.java        |     3 +-
 .../internal/cluster/IgniteClusterImpl.java     |     9 +-
 .../internal/direct/DirectMessageReader.java    |     5 +
 .../igfs/common/IgfsControlResponse.java        |    19 +-
 .../internal/igfs/common/IgfsMarshaller.java    |    14 +-
 .../ignite/internal/jdbc2/JdbcConnection.java   |    33 +-
 .../ignite/internal/jdbc2/JdbcQueryTask.java    |    24 +-
 .../ignite/internal/jdbc2/JdbcResultSet.java    |     6 +-
 .../ignite/internal/jdbc2/JdbcStatement.java    |     2 +-
 .../logger/platform/PlatformLogger.java         |   223 +
 .../internal/managers/GridManagerAdapter.java   |    36 +-
 .../managers/communication/GridIoManager.java   |    34 +-
 .../communication/GridIoMessageFactory.java     |    36 +-
 .../managers/communication/GridIoPolicy.java    |     5 +-
 .../deployment/GridDeploymentCommunication.java |     3 +-
 .../GridDeploymentPerVersionStore.java          |     2 +-
 .../discovery/GridDiscoveryManager.java         |   221 +-
 .../eventstorage/GridEventStorageManager.java   |     2 +-
 .../failover/GridFailoverContextImpl.java       |    27 +-
 .../managers/failover/GridFailoverManager.java  |    17 +-
 .../loadbalancer/GridLoadBalancerManager.java   |    10 +-
 .../affinity/GridAffinityAssignment.java        |    64 +-
 .../affinity/GridAffinityAssignmentCache.java   |   312 +-
 .../GridAffinityFunctionContextImpl.java        |     9 +
 .../affinity/GridAffinityProcessor.java         |   143 +-
 .../processors/affinity/GridAffinityUtils.java  |     3 +-
 .../cache/CacheAffinityChangeMessage.java       |   160 +
 .../cache/CacheAffinitySharedManager.java       |  1795 +++
 .../cache/CacheEvictableEntryImpl.java          |    13 +-
 .../processors/cache/CacheInvokeEntry.java      |    41 +-
 .../processors/cache/CacheLazyEntry.java        |    58 +-
 .../processors/cache/CacheObjectContext.java    |    15 +
 .../processors/cache/CacheOperationFilter.java  |    61 +
 .../cache/CacheWeakQueryIteratorsHolder.java    |   169 +-
 .../cache/DynamicCacheChangeRequest.java        |    17 +
 .../cache/DynamicCacheDescriptor.java           |    49 +
 .../EntryProcessorResourceInjectorProxy.java    |   105 +
 .../processors/cache/GridCacheAdapter.java      |  1518 +-
 .../cache/GridCacheAffinityManager.java         |   154 +-
 .../processors/cache/GridCacheAtomicFuture.java |     5 -
 .../cache/GridCacheClearAllRunnable.java        |     3 +-
 .../cache/GridCacheConcurrentMap.java           |  1996 +--
 .../cache/GridCacheConcurrentMapImpl.java       |   344 +
 .../processors/cache/GridCacheContext.java      |    94 +-
 .../GridCacheDefaultAffinityKeyMapper.java      |    19 +
 .../cache/GridCacheDeploymentManager.java       |     6 +-
 .../processors/cache/GridCacheEntryEx.java      |    40 +-
 .../processors/cache/GridCacheEntryInfo.java    |     2 +-
 .../processors/cache/GridCacheEntrySet.java     |   113 -
 .../processors/cache/GridCacheEventManager.java |    10 +-
 .../cache/GridCacheEvictionManager.java         |    34 +-
 .../processors/cache/GridCacheIoManager.java    |   220 +-
 .../processors/cache/GridCacheKeySet.java       |   104 -
 .../processors/cache/GridCacheLogger.java       |     3 +-
 .../processors/cache/GridCacheMapEntry.java     |  1022 +-
 .../processors/cache/GridCacheMessage.java      |    11 +-
 .../processors/cache/GridCacheMvcc.java         |     7 +
 .../cache/GridCacheMvccCandidate.java           |    16 +-
 .../processors/cache/GridCacheMvccManager.java  |    20 +-
 .../GridCachePartitionExchangeManager.java      |   338 +-
 .../processors/cache/GridCachePreloader.java    |    23 +-
 .../cache/GridCachePreloaderAdapter.java        |    17 +-
 .../processors/cache/GridCacheProcessor.java    |   635 +-
 .../processors/cache/GridCacheProxyImpl.java    |   103 +-
 .../processors/cache/GridCacheReturn.java       |    10 +-
 .../GridCacheReturnCompletableWrapper.java      |   101 +
 .../cache/GridCacheSharedContext.java           |   144 +-
 .../cache/GridCacheSharedTtlCleanupManager.java |   132 +
 .../processors/cache/GridCacheSwapManager.java  |   175 +-
 .../processors/cache/GridCacheTtlManager.java   |   112 +-
 .../processors/cache/GridCacheUtils.java        |   162 +-
 .../cache/GridDeferredAckMessageSender.java     |   219 +
 .../processors/cache/GridNoStorageCacheMap.java |   107 +
 .../processors/cache/IgniteCacheProxy.java      |   240 +-
 .../processors/cache/IgniteInternalCache.java   |   113 +-
 .../processors/cache/KeyCacheObject.java        |    18 +
 .../processors/cache/KeyCacheObjectImpl.java    |    40 +-
 .../cache/affinity/GridCacheAffinityImpl.java   |     2 +-
 .../cache/binary/CacheObjectBinaryContext.java  |    10 +-
 .../binary/CacheObjectBinaryProcessorImpl.java  |   149 +-
 .../CacheDataStructuresManager.java             |     4 +-
 .../distributed/GridCacheCommittedTxInfo.java   |     1 +
 .../distributed/GridCacheTxRecoveryFuture.java  |   141 +-
 .../distributed/GridCacheTxRecoveryRequest.java |     7 +
 .../GridCacheTxRecoveryResponse.java            |    29 +-
 .../GridDistributedCacheAdapter.java            |     6 +-
 .../distributed/GridDistributedLockRequest.java |    25 +-
 .../GridDistributedLockResponse.java            |    14 +-
 .../GridDistributedTxFinishRequest.java         |    28 +-
 .../GridDistributedTxFinishResponse.java        |     7 +
 .../GridDistributedTxPrepareRequest.java        |    36 +-
 .../GridDistributedTxPrepareResponse.java       |    25 +-
 .../GridDistributedTxRemoteAdapter.java         |    85 +-
 .../GridDistributedUnlockRequest.java           |    22 +-
 .../dht/CacheDistributedGetFutureAdapter.java   |     3 -
 .../dht/GridCachePartitionedConcurrentMap.java  |   271 +
 .../dht/GridClientPartitionTopology.java        |    23 +-
 .../dht/GridDhtAffinityAssignmentResponse.java  |   198 +-
 .../dht/GridDhtAssignmentFetchFuture.java       |    80 +-
 .../distributed/dht/GridDhtCacheAdapter.java    |   182 +-
 .../distributed/dht/GridDhtCacheEntry.java      |    33 +-
 .../cache/distributed/dht/GridDhtGetFuture.java |    78 +-
 .../distributed/dht/GridDhtGetSingleFuture.java |     6 +
 .../distributed/dht/GridDhtLocalPartition.java  |   188 +-
 .../distributed/dht/GridDhtLockFuture.java      |   149 +-
 .../distributed/dht/GridDhtLockRequest.java     |    16 +-
 .../dht/GridDhtOffHeapCacheEntry.java           |     8 +
 .../dht/GridDhtPartitionTopology.java           |    21 +-
 .../dht/GridDhtPartitionTopologyImpl.java       |   656 +-
 .../dht/GridDhtPartitionsReservation.java       |     3 +-
 .../dht/GridDhtTransactionalCacheAdapter.java   |   149 +-
 .../distributed/dht/GridDhtTxFinishFuture.java  |   137 +-
 .../distributed/dht/GridDhtTxFinishRequest.java |    33 +-
 .../dht/GridDhtTxFinishResponse.java            |    52 +-
 .../cache/distributed/dht/GridDhtTxLocal.java   |   263 +-
 .../distributed/dht/GridDhtTxLocalAdapter.java  |    15 +-
 .../dht/GridDhtTxOnePhaseCommitAckRequest.java  |   134 +
 .../distributed/dht/GridDhtTxPrepareFuture.java |   295 +-
 .../dht/GridDhtTxPrepareRequest.java            |    97 +-
 .../cache/distributed/dht/GridDhtTxRemote.java  |    15 +-
 .../distributed/dht/GridDhtUnlockRequest.java   |    15 +-
 .../distributed/dht/GridNoStorageCacheMap.java  |   122 -
 .../dht/GridPartitionedGetFuture.java           |    17 +-
 .../dht/GridPartitionedSingleGetFuture.java     |    17 +-
 .../dht/atomic/GridDhtAtomicCache.java          |  1170 +-
 .../GridDhtAtomicDeferredUpdateResponse.java    |     7 +
 .../atomic/GridDhtAtomicOffHeapCacheEntry.java  |     8 +
 .../dht/atomic/GridDhtAtomicUpdateFuture.java   |   179 +-
 .../dht/atomic/GridDhtAtomicUpdateRequest.java  |   155 +-
 .../dht/atomic/GridDhtAtomicUpdateResponse.java |     6 +
 .../GridNearAtomicAbstractUpdateFuture.java     |   318 +
 .../GridNearAtomicSingleUpdateFuture.java       |   600 +
 .../dht/atomic/GridNearAtomicUpdateFuture.java  |  1445 +-
 .../dht/atomic/GridNearAtomicUpdateRequest.java |    37 +-
 .../atomic/GridNearAtomicUpdateResponse.java    |     6 +
 .../dht/colocated/GridDhtColocatedCache.java    |    40 +-
 .../colocated/GridDhtColocatedLockFuture.java   |   188 +-
 .../GridDhtColocatedOffHeapCacheEntry.java      |     8 +
 .../colocated/GridDhtDetachedCacheEntry.java    |     2 +-
 .../dht/preloader/GridDhtForceKeysFuture.java   |     9 +-
 .../dht/preloader/GridDhtPartitionDemander.java |    24 +-
 .../dht/preloader/GridDhtPartitionMap2.java     |     9 +-
 .../dht/preloader/GridDhtPartitionSupplier.java |    37 +-
 .../GridDhtPartitionsExchangeFuture.java        |  1586 +-
 .../dht/preloader/GridDhtPreloader.java         |   158 +-
 .../distributed/near/GridNearAtomicCache.java   |    44 +-
 .../distributed/near/GridNearCacheAdapter.java  |   121 +-
 .../distributed/near/GridNearCacheEntry.java    |   118 +-
 .../distributed/near/GridNearGetFuture.java     |    50 +-
 .../distributed/near/GridNearGetRequest.java    |    45 +-
 .../distributed/near/GridNearLockFuture.java    |   109 +-
 .../distributed/near/GridNearLockRequest.java   |    16 +-
 ...arOptimisticSerializableTxPrepareFuture.java |    28 +-
 .../near/GridNearOptimisticTxPrepareFuture.java |   323 +-
 ...ridNearOptimisticTxPrepareFutureAdapter.java |    21 +-
 .../GridNearPessimisticTxPrepareFuture.java     |    54 +-
 .../near/GridNearSingleGetRequest.java          |    24 +-
 .../near/GridNearTransactionalCache.java        |     9 +-
 .../near/GridNearTxFinishFuture.java            |   359 +-
 .../near/GridNearTxFinishRequest.java           |    46 +-
 .../cache/distributed/near/GridNearTxLocal.java |   126 +-
 .../near/GridNearTxPrepareFutureAdapter.java    |    19 +-
 .../near/GridNearTxPrepareRequest.java          |     4 +-
 .../distributed/near/GridNearTxRemote.java      |    24 +-
 .../distributed/near/GridNearUnlockRequest.java |    21 +-
 .../processors/cache/dr/GridCacheDrManager.java |     4 +-
 .../cache/dr/GridOsCacheDrManager.java          |     2 +-
 .../processors/cache/local/GridLocalCache.java  |     7 +-
 .../cache/local/GridLocalCacheEntry.java        |    27 -
 .../cache/local/GridLocalLockFuture.java        |    77 +-
 .../local/atomic/GridLocalAtomicCache.java      |   190 +-
 .../processors/cache/query/CacheQuery.java      |    19 +-
 .../cache/query/CacheQueryFuture.java           |    13 +-
 .../query/GridCacheDistributedQueryManager.java |   102 +-
 .../cache/query/GridCacheLocalQueryManager.java |    33 +-
 .../cache/query/GridCacheQueryAdapter.java      |   236 +-
 .../cache/query/GridCacheQueryBean.java         |     8 +-
 .../cache/query/GridCacheQueryErrorFuture.java  |    12 +-
 .../query/GridCacheQueryFutureAdapter.java      |    10 +-
 .../cache/query/GridCacheQueryInfo.java         |     8 +-
 .../cache/query/GridCacheQueryManager.java      |   729 +-
 .../cache/query/GridCacheQueryMarshallable.java |    37 +
 .../query/GridCacheQueryMetricsAdapter.java     |    12 +-
 .../cache/query/GridCacheQueryRequest.java      |     6 +-
 .../cache/query/GridCacheSqlIndexMetadata.java  |     3 +-
 .../cache/query/GridCacheSqlMetadata.java       |     3 +-
 .../cache/query/GridCacheSqlQuery.java          |    42 +-
 .../cache/query/GridCacheTwoStepQuery.java      |   123 +-
 .../continuous/CacheContinuousQueryEntry.java   |    54 +-
 .../continuous/CacheContinuousQueryEvent.java   |     7 +
 .../continuous/CacheContinuousQueryHandler.java |   607 +-
 .../CacheContinuousQueryListener.java           |     6 +-
 .../continuous/CacheContinuousQueryManager.java |   216 +-
 .../query/jdbc/GridCacheQueryJdbcTask.java      |    59 +-
 .../jdbc/GridCacheQueryJdbcValidationTask.java  |    10 +-
 .../store/GridCacheStoreManagerAdapter.java     |    34 +-
 .../cache/store/GridCacheWriteBehindStore.java  |     2 +-
 .../cache/transactions/IgniteInternalTx.java    |    43 +-
 .../cache/transactions/IgniteTxAdapter.java     |   463 +-
 .../cache/transactions/IgniteTxEntry.java       |   112 +-
 .../cache/transactions/IgniteTxHandler.java     |   552 +-
 .../IgniteTxImplicitSingleStateImpl.java        |    29 +-
 .../transactions/IgniteTxLocalAdapter.java      |   578 +-
 .../cache/transactions/IgniteTxLocalEx.java     |    26 +-
 .../cache/transactions/IgniteTxManager.java     |   791 +-
 .../IgniteTxRemoteSingleStateImpl.java          |    30 +
 .../IgniteTxRemoteStateAdapter.java             |    16 +-
 .../transactions/IgniteTxRemoteStateImpl.java   |    72 +-
 .../cache/transactions/IgniteTxState.java       |    11 +-
 .../cache/transactions/IgniteTxStateAware.java  |    34 +
 .../cache/transactions/IgniteTxStateImpl.java   |    53 +-
 .../cache/transactions/TxDeadlock.java          |   159 +
 .../cache/transactions/TxDeadlockDetection.java |   626 +
 .../processors/cache/transactions/TxLock.java   |   225 +
 .../cache/transactions/TxLockList.java          |   134 +
 .../cache/transactions/TxLocksRequest.java      |   205 +
 .../cache/transactions/TxLocksResponse.java     |   318 +
 .../GridCacheLazyPlainVersionedEntry.java       |   113 +
 .../version/GridCachePlainVersionedEntry.java   |    12 +-
 .../cache/version/GridCacheVersion.java         |    14 +-
 .../cache/version/GridCacheVersionEx.java       |     9 +
 .../cache/version/GridCacheVersionManager.java  |    21 +-
 .../cacheobject/IgniteCacheObjectProcessor.java |    18 +-
 .../IgniteCacheObjectProcessorImpl.java         |    91 +-
 .../processors/clock/GridClockServer.java       |     3 +-
 .../clock/GridClockSyncProcessor.java           |     2 +-
 .../processors/closure/AffinityTask.java        |    17 +-
 .../processors/closure/GridClosurePolicy.java   |    51 -
 .../closure/GridClosureProcessor.java           |   226 +-
 .../processors/cluster/GridUpdateNotifier.java  |     3 +-
 .../continuous/GridContinuousHandler.java       |    13 +-
 .../continuous/GridContinuousProcessor.java     |   293 +-
 .../continuous/GridContinuousQueryBatch.java    |    47 +
 .../datastreamer/DataStreamerImpl.java          |   150 +-
 .../datastructures/DataStructuresProcessor.java |   162 +-
 .../datastructures/GridCacheAtomicLongImpl.java |     3 +-
 .../GridCacheAtomicReferenceImpl.java           |     4 +-
 .../GridCacheAtomicSequenceImpl.java            |     3 +-
 .../GridCacheAtomicStampedImpl.java             |     3 +-
 .../GridCacheCountDownLatchImpl.java            |    57 +-
 .../datastructures/GridCacheLockEx.java         |    52 +
 .../datastructures/GridCacheLockImpl.java       |  1538 ++
 .../datastructures/GridCacheLockState.java      |   353 +
 .../datastructures/GridCacheQueueProxy.java     |     3 +-
 .../datastructures/GridCacheSemaphoreImpl.java  |   144 +-
 .../datastructures/GridCacheSetImpl.java        |     9 +-
 .../datastructures/GridCacheSetProxy.java       |     3 +-
 .../processors/hadoop/HadoopClassLoader.java    |   487 +
 .../processors/hadoop/HadoopClasspathUtils.java |   424 +
 .../processors/hadoop/HadoopDefaultJobInfo.java |   156 +
 .../processors/hadoop/HadoopHelper.java         |    55 +
 .../processors/hadoop/HadoopJobInfo.java        |     5 +-
 .../processors/hadoop/HadoopLocations.java      |   123 +
 .../processors/hadoop/HadoopNoopHelper.java     |    66 +
 .../processors/hadoop/HadoopNoopProcessor.java  |    29 +-
 .../hadoop/HadoopProcessorAdapter.java          |     7 +
 .../igfs/IgfsAbstractOutputStream.java          |   266 +
 .../internal/processors/igfs/IgfsAsyncImpl.java |    29 +-
 .../processors/igfs/IgfsBlockLocationImpl.java  |    87 +-
 .../internal/processors/igfs/IgfsContext.java   |    70 +-
 .../processors/igfs/IgfsCreateResult.java       |    66 +
 .../processors/igfs/IgfsDataManager.java        |   395 +-
 .../processors/igfs/IgfsDeleteResult.java       |    62 +
 .../processors/igfs/IgfsDeleteWorker.java       |    60 +-
 .../ignite/internal/processors/igfs/IgfsEx.java |    34 +-
 .../processors/igfs/IgfsFileAffinityRange.java  |    40 +-
 .../internal/processors/igfs/IgfsFileImpl.java  |    59 +-
 .../igfs/IgfsFragmentizerManager.java           |    29 +-
 .../internal/processors/igfs/IgfsImpl.java      |  1171 +-
 .../processors/igfs/IgfsInputStreamAdapter.java |    51 -
 .../processors/igfs/IgfsInputStreamImpl.java    |   219 +-
 .../processors/igfs/IgfsIpcHandler.java         |    19 +-
 .../processors/igfs/IgfsKernalContextAware.java |    32 +
 ...zySecondaryFileSystemPositionedReadable.java |    77 +
 .../processors/igfs/IgfsMetaManager.java        |  1266 +-
 .../processors/igfs/IgfsModeResolver.java       |   104 +-
 .../processors/igfs/IgfsNodePredicate.java      |    80 +
 .../igfs/IgfsOutputStreamAdapter.java           |   265 -
 .../processors/igfs/IgfsOutputStreamImpl.java   |   406 +-
 .../igfs/IgfsOutputStreamProxyImpl.java         |   163 +
 .../internal/processors/igfs/IgfsPathIds.java   |    12 +-
 .../internal/processors/igfs/IgfsPaths.java     |    11 +-
 .../internal/processors/igfs/IgfsProcessor.java |    88 +-
 .../IgfsSecondaryFileSystemCreateContext.java   |   114 +
 .../igfs/IgfsSecondaryFileSystemImpl.java       |    17 +-
 .../igfs/IgfsSecondaryFileSystemV2.java         |    40 +
 .../IgfsSecondaryOutputStreamDescriptor.java    |    59 -
 .../internal/processors/igfs/IgfsUtils.java     |   306 +-
 .../igfs/client/IgfsClientAbstractCallable.java |   125 +
 .../igfs/client/IgfsClientAffinityCallable.java |    95 +
 .../igfs/client/IgfsClientDeleteCallable.java   |    77 +
 .../igfs/client/IgfsClientExistsCallable.java   |    58 +
 .../igfs/client/IgfsClientInfoCallable.java     |    59 +
 .../client/IgfsClientListFilesCallable.java     |    61 +
 .../client/IgfsClientListPathsCallable.java     |    60 +
 .../igfs/client/IgfsClientMkdirsCallable.java   |    82 +
 .../igfs/client/IgfsClientRenameCallable.java   |    80 +
 .../igfs/client/IgfsClientSetTimesCallable.java |    87 +
 .../igfs/client/IgfsClientSizeCallable.java     |    59 +
 .../igfs/client/IgfsClientSummaryCallable.java  |    59 +
 .../igfs/client/IgfsClientUpdateCallable.java   |    81 +
 .../meta/IgfsClientMetaIdsForPathCallable.java  |    65 +
 .../meta/IgfsClientMetaInfoForPathCallable.java |    63 +
 .../meta/IgfsClientMetaUnlockCallable.java      |   123 +
 .../igfs/data/IgfsDataPutProcessor.java         |    99 +
 .../meta/IgfsMetaDirectoryCreateProcessor.java  |    40 +-
 ...IgfsMetaDirectoryListingRemoveProcessor.java |     2 -
 ...IgfsMetaDirectoryListingRenameProcessor.java |   133 +
 .../igfs/meta/IgfsMetaFileCreateProcessor.java  |    46 +-
 .../igfs/meta/IgfsMetaFileUnlockProcessor.java  |    69 +-
 .../local/LocalFileSystemIgfsFile.java          |   134 +
 .../local/LocalFileSystemSizeVisitor.java       |    60 +
 ...fsSecondaryFileSystemPositionedReadable.java |    65 +
 .../processors/job/GridJobProcessor.java        |   160 +-
 .../internal/processors/job/GridJobWorker.java  |   207 +-
 .../OsDiscoveryNodeValidationProcessor.java     |     2 +-
 .../processors/odbc/OdbcBufferedParser.java     |    81 +
 .../processors/odbc/OdbcColumnMeta.java         |   110 +
 .../processors/odbc/OdbcHandshakeRequest.java   |    83 +
 .../processors/odbc/OdbcHandshakeResult.java    |    73 +
 .../processors/odbc/OdbcMessageParser.java      |   295 +
 .../processors/odbc/OdbcNioListener.java        |   179 +
 .../processors/odbc/OdbcNioServerBuffer.java    |   114 +
 .../internal/processors/odbc/OdbcProcessor.java |   199 +
 .../processors/odbc/OdbcProtocolVersion.java    |   125 +
 .../processors/odbc/OdbcQueryCloseRequest.java  |    49 +
 .../processors/odbc/OdbcQueryCloseResult.java   |    40 +
 .../odbc/OdbcQueryExecuteRequest.java           |    78 +
 .../processors/odbc/OdbcQueryExecuteResult.java |    54 +
 .../processors/odbc/OdbcQueryFetchRequest.java  |    61 +
 .../processors/odbc/OdbcQueryFetchResult.java   |    66 +
 .../odbc/OdbcQueryGetColumnsMetaRequest.java    |    74 +
 .../odbc/OdbcQueryGetColumnsMetaResult.java     |    42 +
 .../odbc/OdbcQueryGetTablesMetaRequest.java     |    85 +
 .../odbc/OdbcQueryGetTablesMetaResult.java      |    42 +
 .../internal/processors/odbc/OdbcRequest.java   |    58 +
 .../processors/odbc/OdbcRequestHandler.java     |   409 +
 .../internal/processors/odbc/OdbcResponse.java  |    96 +
 .../internal/processors/odbc/OdbcTableMeta.java |    85 +
 .../internal/processors/odbc/OdbcUtils.java     |    56 +
 .../odbc/escape/OdbcEscapeParseResult.java      |    73 +
 .../processors/odbc/escape/OdbcEscapeToken.java |    61 +
 .../processors/odbc/escape/OdbcEscapeType.java  |   112 +
 .../processors/odbc/escape/OdbcEscapeUtils.java |   392 +
 .../offheap/GridOffHeapProcessor.java           |    26 +
 .../platform/PlatformAbstractBootstrap.java     |    40 +-
 .../platform/PlatformAbstractTarget.java        |    17 +-
 .../processors/platform/PlatformBootstrap.java  |    12 +-
 .../platform/PlatformConfigurationEx.java       |    14 +
 .../platform/PlatformContextImpl.java           |     5 +-
 .../PlatformDefaultJavaObjectFactory.java       |    62 +
 .../processors/platform/PlatformIgnition.java   |    25 +-
 .../platform/PlatformJavaObjectFactoryEx.java   |    36 +
 .../PlatformJavaObjectFactoryProxy.java         |   192 +
 .../PlatformJavaObjectSingletonFactory.java     |    48 +
 .../platform/PlatformNoopProcessor.java         |    29 +-
 .../processors/platform/PlatformProcessor.java  |    52 +-
 .../platform/PlatformProcessorImpl.java         |   224 +-
 .../platform/cache/PlatformCache.java           |   453 +-
 .../platform/cache/PlatformCacheExtension.java  |    47 +
 .../affinity/PlatformAffinityFunction.java      |   304 +
 .../PlatformAffinityFunctionTarget.java         |   113 +
 .../cache/affinity/PlatformAffinityUtils.java   |   118 +
 .../query/PlatformAbstractQueryCursor.java      |    11 +-
 .../query/PlatformContinuousQueryImpl.java      |    50 +-
 .../cache/query/PlatformFieldsQueryCursor.java  |     6 +
 .../callback/PlatformCallbackGateway.java       |   147 +-
 .../callback/PlatformCallbackUtils.java         |    77 +
 .../platform/cluster/PlatformClusterGroup.java  |     7 +
 .../platform/compute/PlatformAbstractTask.java  |     1 +
 .../cpp/PlatformCppConfigurationEx.java         |    13 +
 .../dotnet/PlatformDotNetBootstrap.java         |    21 +
 .../dotnet/PlatformDotNetCacheStore.java        |    37 +-
 .../PlatformDotNetConfigurationClosure.java     |    54 +-
 .../dotnet/PlatformDotNetConfigurationEx.java   |    21 +-
 .../dotnet/PlatformDotNetConsoleStream.java     |    54 +
 .../services/PlatformAbstractService.java       |     3 +-
 .../platform/services/PlatformServices.java     |   249 +-
 .../utils/PlatformConfigurationUtils.java       |   476 +-
 .../platform/utils/PlatformFutureUtils.java     |     4 +-
 .../platform/utils/PlatformUtils.java           |   234 +
 .../PlatformDotNetSessionCacheExtension.java    |   144 +
 .../websession/PlatformDotNetSessionData.java   |   260 +
 .../PlatformDotNetSessionLockProcessor.java     |    84 +
 .../PlatformDotNetSessionLockResult.java        |   106 +
 ...tformDotNetSessionSetAndUnlockProcessor.java |   179 +
 .../processors/plugin/CachePluginManager.java   |    25 +
 .../processors/query/GridQueryIndexing.java     |    51 +-
 .../processors/query/GridQueryProcessor.java    |   215 +-
 .../query/GridQueryTypeDescriptor.java          |     7 +
 .../messages/GridQueryCancelRequest.java        |     2 +-
 .../twostep/messages/GridQueryFailResponse.java |     2 +-
 .../messages/GridQueryNextPageRequest.java      |     2 +-
 .../messages/GridQueryNextPageResponse.java     |    12 +-
 .../h2/twostep/messages/GridQueryRequest.java   |    28 +-
 .../processors/resource/GridResourceIoc.java    |   438 +-
 .../GridResourceJobContextInjector.java         |     4 +-
 .../resource/GridResourceProcessor.java         |   396 +-
 .../message/GridClientHandshakeRequest.java     |     4 +-
 .../handlers/cache/GridCacheCommandHandler.java |   100 +-
 .../handlers/query/QueryCommandHandler.java     |    28 +-
 .../handlers/task/GridTaskCommandHandler.java   |     2 +-
 .../protocols/tcp/GridTcpRestNioListener.java   |    19 +-
 .../rest/protocols/tcp/GridTcpRestProtocol.java |    19 +-
 .../rest/request/RestQueryRequest.java          |    19 +-
 .../service/GridServiceAssignments.java         |    10 +-
 .../service/GridServiceNotFoundException.java   |     4 +-
 .../service/GridServiceProcessor.java           |   885 +-
 .../processors/service/GridServiceProxy.java    |   332 +-
 .../service/LazyServiceConfiguration.java       |   129 +
 .../processors/service/ServiceContextImpl.java  |    29 +-
 .../service/ServiceDescriptorImpl.java          |    17 +-
 .../session/GridTaskSessionProcessor.java       |     9 +-
 .../processors/task/GridTaskProcessor.java      |     9 +-
 .../processors/task/GridTaskWorker.java         |   277 +-
 .../apache/ignite/internal/util/ClassCache.java |    32 +
 .../org/apache/ignite/internal/util/F0.java     |     4 +-
 .../util/GridBoundedConcurrentOrderedMap.java   |     5 +
 .../internal/util/GridExecutionStatistics.java  |   106 -
 .../ignite/internal/util/GridJavaProcess.java   |     5 +-
 .../ignite/internal/util/GridLeanSet.java       |     1 +
 .../ignite/internal/util/GridLogThrottle.java   |    35 +-
 .../ignite/internal/util/HostAndPortRange.java  |   205 +
 .../internal/util/IgniteExceptionRegistry.java  |     5 +-
 .../ignite/internal/util/IgniteUtils.java       |   303 +-
 .../util/StripedCompositeReadWriteLock.java     |    10 +
 .../util/future/GridCompoundFuture.java         |   100 +-
 .../internal/util/future/GridFutureAdapter.java |     3 +-
 .../ipc/shmem/IpcSharedMemoryNativeLoader.java  |     2 +-
 .../shmem/IpcSharedMemoryServerEndpoint.java    |    10 +-
 .../ignite/internal/util/lang/GridFunc.java     |   119 +-
 .../ignite/internal/util/lang/GridTuple.java    |     2 -
 .../ignite/internal/util/lang/GridTuple3.java   |     2 -
 .../ignite/internal/util/lang/GridTuple4.java   |     2 -
 .../ignite/internal/util/lang/GridTuple5.java   |     2 -
 .../ignite/internal/util/lang/GridTuple6.java   |     2 -
 .../ignite/internal/util/lang/GridTupleV.java   |     1 +
 .../nio/GridConnectionBytesVerifyFilter.java    |     2 +-
 .../internal/util/nio/GridNioCodecFilter.java   |     2 +-
 .../internal/util/nio/GridNioFilterChain.java   |     2 +-
 .../util/nio/GridNioRecoveryDescriptor.java     |    19 +-
 .../ignite/internal/util/nio/GridNioServer.java |    62 +-
 .../util/nio/GridSelectorNioSessionImpl.java    |     9 +-
 .../util/nio/GridTcpNioCommunicationClient.java |     5 +-
 .../offheap/unsafe/GridOffHeapSnapTreeMap.java  |    91 +-
 .../util/offheap/unsafe/GridUnsafeLru.java      |    30 +-
 .../apache/ignite/internal/util/typedef/PN.java |     2 +-
 .../ignite/internal/visor/cache/VisorCache.java |    75 +-
 .../cache/VisorCacheAffinityConfiguration.java  |     5 +-
 .../visor/cache/VisorCacheAffinityNodeTask.java |    70 +
 .../cache/VisorCacheAggregatedMetrics.java      |     3 +-
 .../visor/cache/VisorCacheConfiguration.java    |     8 +-
 .../cache/VisorCacheDefaultConfiguration.java   |     5 +-
 .../cache/VisorCacheEvictionConfiguration.java  |     5 +-
 .../internal/visor/cache/VisorCacheMetrics.java |    12 +-
 .../cache/VisorCacheNearConfiguration.java      |     5 +-
 .../visor/cache/VisorCachePartition.java        |    90 +
 .../visor/cache/VisorCachePartitions.java       |    89 +
 .../visor/cache/VisorCachePartitionsTask.java   |   152 +
 .../cache/VisorCacheQueryConfiguration.java     |     3 +-
 .../visor/cache/VisorCacheQueryMetrics.java     |     5 +-
 .../cache/VisorCacheRebalanceConfiguration.java |     5 +-
 .../cache/VisorCacheResetQueryMetricsTask.java  |    69 +
 .../cache/VisorCacheStoreConfiguration.java     |     3 +-
 .../cache/VisorCacheTypeFieldMetadata.java      |     3 +-
 .../visor/cache/VisorCacheTypeMetadata.java     |    23 +-
 .../internal/visor/cache/VisorCacheV3.java      |    52 +
 .../internal/visor/cache/VisorCacheV4.java      |   124 +
 .../visor/compute/VisorGatewayTask.java         |   362 +
 .../internal/visor/debug/VisorThreadInfo.java   |     5 +-
 .../visor/debug/VisorThreadLockInfo.java        |     5 +-
 .../visor/event/VisorGridDiscoveryEventV2.java  |    80 +
 .../internal/visor/event/VisorGridEvent.java    |     5 +-
 .../internal/visor/file/VisorFileBlock.java     |     5 +-
 .../ignite/internal/visor/igfs/VisorIgfs.java   |     7 +-
 .../internal/visor/igfs/VisorIgfsEndpoint.java  |     5 +-
 .../internal/visor/igfs/VisorIgfsMetrics.java   |    16 +-
 .../visor/igfs/VisorIgfsProfilerEntry.java      |     5 +-
 .../visor/igfs/VisorIgfsProfilerTask.java       |    20 +-
 .../VisorIgfsProfilerUniformityCounters.java    |     5 +-
 .../visor/log/VisorLogSearchResult.java         |     5 +-
 .../visor/node/VisorAtomicConfiguration.java    |     5 +-
 .../visor/node/VisorBasicConfiguration.java     |     5 +-
 .../node/VisorExecutorServiceConfiguration.java |     5 +-
 .../visor/node/VisorGridConfiguration.java      |     5 +-
 .../visor/node/VisorIgfsConfiguration.java      |     3 +-
 .../visor/node/VisorLifecycleConfiguration.java |     5 +-
 .../visor/node/VisorMetricsConfiguration.java   |     5 +-
 .../visor/node/VisorNodeDataCollectorJob.java   |    82 +-
 .../visor/node/VisorNodeDataCollectorTask.java  |    26 -
 .../node/VisorNodeDataCollectorTaskResult.java  |     5 +-
 .../node/VisorPeerToPeerConfiguration.java      |     5 +-
 .../visor/node/VisorRestConfiguration.java      |     5 +-
 .../node/VisorSegmentationConfiguration.java    |     5 +-
 .../visor/node/VisorSpisConfiguration.java      |     5 +-
 .../node/VisorTransactionConfiguration.java     |     5 +-
 .../internal/visor/query/VisorQueryArgV2.java   |    49 +
 .../internal/visor/query/VisorQueryField.java   |     5 +-
 .../internal/visor/query/VisorQueryJob.java     |    39 +-
 .../internal/visor/query/VisorQueryResult.java  |     5 +-
 .../query/VisorQueryScanSubstringFilter.java    |    63 +
 .../internal/visor/query/VisorQueryUtils.java   |     6 +
 .../internal/visor/util/VisorEventMapper.java   |    96 +-
 .../internal/visor/util/VisorTaskUtils.java     |    38 +-
 .../WebSessionAttributeProcessor.java           |   134 +
 .../internal/websession/WebSessionEntity.java   |   193 +
 .../apache/ignite/lang/IgniteAsyncCallback.java |   111 +
 .../java/org/apache/ignite/lang/IgniteUuid.java |     2 +-
 .../ignite/marshaller/AbstractMarshaller.java   |    41 +-
 .../AbstractNodeNameAwareMarshaller.java        |   142 +
 .../apache/ignite/marshaller/Marshaller.java    |     6 +-
 .../ignite/marshaller/MarshallerUtils.java      |    58 +
 .../ignite/marshaller/jdk/JdkMarshaller.java    |    40 +-
 .../optimized/OptimizedMarshaller.java          |    12 +-
 .../platform/PlatformJavaObjectFactory.java     |    36 +
 .../dotnet/PlatformDotNetAffinityFunction.java  |   186 +
 .../ignite/plugin/CachePluginProvider.java      |    11 +
 .../extensions/communication/MessageReader.java |     9 +
 .../plugin/security/SecurityPermissionSet.java  |     5 +-
 .../ignite/plugin/security/SecuritySubject.java |     5 +-
 .../SpringApplicationContextResource.java       |     4 +-
 .../apache/ignite/resources/SpringResource.java |    15 +-
 .../ignite/scheduler/SchedulerFuture.java       |     5 +-
 .../org/apache/ignite/services/Service.java     |    12 +-
 .../ignite/services/ServiceConfiguration.java   |    14 +-
 .../ignite/spi/IgniteNodeValidationResult.java  |     8 +-
 .../org/apache/ignite/spi/IgniteSpiAdapter.java |    40 +-
 .../org/apache/ignite/spi/IgniteSpiContext.java |    26 +-
 .../sharedfs/SharedFsCheckpointSpi.java         |     7 +-
 .../jobstealing/JobStealingCollisionSpi.java    |    14 +-
 .../jobstealing/JobStealingDisabled.java        |     2 +-
 .../communication/tcp/TcpCommunicationSpi.java  |   238 +-
 .../ignite/spi/discovery/tcp/ClientImpl.java    |    53 +-
 .../ignite/spi/discovery/tcp/ServerImpl.java    |   905 +-
 .../spi/discovery/tcp/TcpDiscoveryImpl.java     |    15 +-
 .../spi/discovery/tcp/TcpDiscoverySpi.java      |    64 +-
 .../tcp/internal/TcpDiscoveryNode.java          |     2 +-
 .../tcp/internal/TcpDiscoveryStatistics.java    |    45 +-
 .../ipfinder/jdbc/BasicJdbcIpFinderDialect.java |    28 +
 .../tcp/ipfinder/jdbc/JdbcIpFinderDialect.java  |    28 +
 .../jdbc/OracleJdbcIpFinderDialect.java         |    28 +
 .../ipfinder/jdbc/TcpDiscoveryJdbcIpFinder.java |    69 +-
 .../TcpDiscoveryMulticastIpFinder.java          |     7 +-
 .../sharedfs/TcpDiscoverySharedFsIpFinder.java  |    60 +-
 .../messages/TcpDiscoveryAbstractMessage.java   |     4 +-
 .../TcpDiscoveryClientHeartbeatMessage.java     |     1 +
 .../TcpDiscoveryClientReconnectMessage.java     |    16 +
 .../TcpDiscoveryCustomEventMessage.java         |    13 +-
 .../TcpDiscoveryJoinRequestMessage.java         |    16 +-
 .../TcpDiscoveryStatusCheckMessage.java         |    18 +-
 .../ignite/spi/failover/FailoverContext.java    |    15 +-
 .../spi/failover/always/AlwaysFailoverSpi.java  |    15 +-
 .../spi/indexing/IndexingQueryFilter.java       |     9 +
 .../spi/loadbalancing/LoadBalancingSpi.java     |     8 +-
 .../adaptive/AdaptiveLoadBalancingSpi.java      |    20 +-
 .../adaptive/AdaptiveLoadProbe.java             |     2 +-
 .../roundrobin/RoundRobinLoadBalancingSpi.java  |     6 +-
 .../WeightedRandomLoadBalancingSpi.java         |    14 +-
 .../spi/swapspace/file/FileSwapSpaceSpi.java    |    91 +-
 .../ignite/stream/socket/SocketStreamer.java    |    18 +-
 .../thread/IgniteStripedThreadPoolExecutor.java |   164 +-
 .../apache/ignite/transactions/Transaction.java |    19 +-
 .../TransactionDeadlockException.java           |    42 +
 .../TransactionTimeoutException.java            |     5 +-
 .../java/org/jetbrains/annotations/NotNull.java |    38 -
 .../org/jetbrains/annotations/Nullable.java     |    33 -
 .../org/jetbrains/annotations/package-info.java |    27 -
 .../resources/META-INF/classnames.properties    |   249 +-
 .../core/src/main/resources/ignite.properties   |     2 +-
 modules/core/src/test/config/igfs-loopback.xml  |     7 -
 modules/core/src/test/config/igfs-shmem.xml     |     7 -
 modules/core/src/test/config/log4j-test.xml     |     6 +
 .../GridCacheAffinityBackupsSelfTest.java       |     2 +-
 .../AbstractAffinityFunctionSelfTest.java       |    18 +-
 .../affinity/AffinityClientNodeSelfTest.java    |    77 +-
 ...ityFunctionBackupFilterAbstractSelfTest.java |   131 +-
 .../affinity/AffinityHistoryCleanupTest.java    |   414 +
 ...airAffinityFunctionBackupFilterSelfTest.java |     9 +
 .../fair/FairAffinityFunctionNodesSelfTest.java |     2 +
 .../local/LocalAffinityFunctionTest.java        |    80 +
 ...ousAffinityFunctionBackupFilterSelfTest.java |     9 +
 .../CacheJdbcPojoStoreAbstractSelfTest.java     |   212 +-
 ...heJdbcPojoStoreBinaryMarshallerSelfTest.java |    26 +-
 ...reBinaryMarshallerWithSqlEscapeSelfTest.java |    28 +
 ...dbcPojoStoreOptimizedMarshallerSelfTest.java |     2 +-
 ...ptimizedMarshallerWithSqlEscapeSelfTest.java |    28 +
 ...eJdbcStoreAbstractMultithreadedSelfTest.java |    25 +-
 .../cache/store/jdbc/H2DataSourceFactory.java   |    35 +
 .../ignite/cache/store/jdbc/model/Person.java   |    25 +
 .../ignite/igfs/IgfsEventsAbstractSelfTest.java |    26 +-
 .../ignite/igfs/IgfsFragmentizerSelfTest.java   |     2 -
 .../apache/ignite/igfs/IgfsPathSelfTest.java    |     6 -
 .../ignite/internal/ClusterGroupSelfTest.java   |    32 +-
 .../internal/ClusterNodeMetricsSelfTest.java    |   101 +-
 .../ignite/internal/GridAffinitySelfTest.java   |     5 +-
 .../GridEventStorageCheckAllEventsSelfTest.java |    30 +-
 .../internal/GridEventStorageSelfTest.java      |    97 +-
 .../ignite/internal/GridGetOrStartSelfTest.java |    70 +
 .../GridJobMasterLeaveAwareSelfTest.java        |     4 +-
 ...ectionLocalJobMultipleArgumentsSelfTest.java |     4 +-
 .../internal/GridTaskExecutionSelfTest.java     |    90 +-
 .../GridTaskFailoverAffinityRunTest.java        |     8 +-
 .../IgniteClientReconnectAbstractTest.java      |    15 +-
 .../IgniteClientReconnectAtomicsTest.java       |    66 +-
 .../IgniteClientReconnectCacheTest.java         |    35 +
 .../IgniteClientReconnectCollectionsTest.java   |     4 +-
 .../IgniteClientReconnectComputeTest.java       |     6 +-
 ...eClientReconnectContinuousProcessorTest.java |    60 +-
 .../IgniteClientReconnectFailoverTest.java      |     2 +
 .../IgniteClientReconnectServicesTest.java      |     4 +-
 .../IgniteClientReconnectStreamerTest.java      |     2 +-
 .../IgniteComputeEmptyClusterGroupTest.java     |     8 +-
 ...eConcurrentEntryProcessorAccessStopTest.java |    82 +
 .../IgniteLocalNodeMapBeforeStartTest.java      |    82 +
 .../MarshallerContextLockingSelfTest.java       |   139 +
 .../internal/TestRecordingCommunicationSpi.java |    65 +-
 .../ignite/internal/binary/AffinityKey.java     |    69 +
 .../binary/BinaryMarshallerSelfTest.java        |   304 +-
 .../BinaryObjectBuilderAdditionalSelfTest.java  |    92 +-
 .../binary/BinaryObjectToStringSelfTest.java    |    92 +
 .../internal/binary/BinaryTreeSelfTest.java     |   341 +
 .../binary/GridBinaryAffinityKeySelfTest.java   |    19 +-
 .../binary/GridBinaryWildcardsSelfTest.java     |    53 +-
 ...aultBinaryMappersBinaryMetaDataSelfTest.java |    17 +
 ...GridManagerLocalMessageListenerSelfTest.java |   222 +
 .../GridDiscoveryManagerAliveCacheSelfTest.java |     4 +-
 .../GridDiscoveryManagerAttributesSelfTest.java |   126 +
 .../discovery/GridDiscoveryManagerSelfTest.java |     6 +-
 .../BinaryObjectOffHeapUnswapTemporaryTest.java |   368 +
 .../cache/CacheAffinityCallSelfTest.java        |    85 +-
 .../cache/CacheClientStoreSelfTest.java         |   209 +-
 .../cache/CacheGetEntryAbstractTest.java        |    39 +-
 ...GetEntryOptimisticReadCommittedSeltTest.java |     2 +-
 ...erceptorPartitionCounterLocalSanityTest.java |   687 +
 ...torPartitionCounterRandomOperationsTest.java |  1054 ++
 .../processors/cache/CacheNamesSelfTest.java    |    16 +-
 .../CacheNamesWithSpecialCharactersTest.java    |    71 +
 ...cheNearUpdateTopologyChangeAbstractTest.java |     2 +
 .../cache/CacheReadThroughRestartSelfTest.java  |     2 +
 .../CacheSerializableTransactionsTest.java      |     5 +
 .../CacheStartupInDeploymentModesTest.java      |   230 +
 .../CacheStoreUsageMultinodeAbstractTest.java   |     5 +-
 .../CacheSwapUnswapGetTestSmallQueueSize.java   |    35 +
 .../processors/cache/CacheTxFastFinishTest.java |   253 +
 .../CacheTxNotAllowReadFromBackupTest.java      |   297 +
 .../cache/CrossCacheTxRandomOperationsTest.java |    13 +-
 .../EntryVersionConsistencyReadThroughTest.java |   265 +
 ...idAbstractCacheInterceptorRebalanceTest.java |   356 +
 .../cache/GridCacheAbstractFullApiSelfTest.java |   849 +-
 .../GridCacheAbstractLocalStoreSelfTest.java    |   480 +-
 .../cache/GridCacheAbstractMetricsSelfTest.java |     2 +-
 .../GridCacheAbstractRemoveFailureTest.java     |    10 +-
 .../cache/GridCacheAbstractSelfTest.java        |   243 +-
 ...acheAbstractUsersAffinityMapperSelfTest.java |     2 +-
 .../cache/GridCacheDeploymentSelfTest.java      |     2 +
 .../cache/GridCacheEntryVersionSelfTest.java    |     2 +-
 .../GridCacheInterceptorAbstractSelfTest.java   |     2 +-
 ...heInterceptorAtomicOffheapRebalanceTest.java |    30 +
 ...GridCacheInterceptorAtomicRebalanceTest.java |    36 +
 ...ceptorTransactionalOffheapRebalanceTest.java |    35 +
 ...heInterceptorTransactionalRebalanceTest.java |    36 +
 .../cache/GridCacheOffHeapCleanupTest.java      |   169 +
 .../GridCachePartitionedLocalStoreSelfTest.java |     6 -
 ...chePartitionedOffHeapLocalStoreSelfTest.java |     6 -
 .../GridCachePreloadingEvictionsSelfTest.java   |     4 +-
 .../GridCacheReplicatedLocalStoreSelfTest.java  |     6 -
 ...ridCacheStoreManagerDeserializationTest.java |    41 +-
 .../cache/GridCacheStoreValueBytesSelfTest.java |     2 +-
 .../cache/GridCacheSwapCleanupTest.java         |    99 +
 ...acheTcpClientDiscoveryMultiThreadedTest.java |     2 +-
 .../processors/cache/GridCacheTestEntryEx.java  |    20 +-
 .../GridCacheTtlManagerNotificationTest.java    |   297 +
 .../cache/GridCacheTtlManagerSelfTest.java      |     2 +-
 ...ridCacheTxPartitionedLocalStoreSelfTest.java |     6 -
 .../cache/GridCacheUtilsSelfTest.java           |    64 +-
 ...idCacheValueConsistencyAbstractSelfTest.java |     9 +-
 .../GridCacheVersionTopologyChangeTest.java     |   246 +
 ...calCacheStoreManagerDeserializationTest.java |     2 +-
 .../cache/GridLocalIgniteSerializationTest.java |   378 +
 .../processors/cache/H2CacheStoreStrategy.java  |   468 +
 .../cache/IgniteCacheAbstractTest.java          |     2 +-
 .../cache/IgniteCacheAtomicPeekModesTest.java   |     2 +-
 .../IgniteCacheBinaryObjectsScanSelfTest.java   |     2 +
 .../IgniteCacheConfigVariationsFullApiTest.java |   336 +-
 .../cache/IgniteCacheCreateRestartSelfTest.java |     2 -
 .../IgniteCacheEntryProcessorNodeJoinTest.java  |   147 +-
 ...niteCacheExpireAndUpdateConsistencyTest.java |   444 +
 .../cache/IgniteCacheIncrementTxTest.java       |   299 +
 .../IgniteCacheInterceptorSelfTestSuite.java    |     7 +
 ...gniteCacheInvokeReadThroughAbstractTest.java |   382 +
 ...iteCacheInvokeReadThroughSingleNodeTest.java |   106 +
 .../cache/IgniteCacheInvokeReadThroughTest.java |   182 +-
 .../cache/IgniteCacheNearLockValueSelfTest.java |     2 +-
 .../IgniteCacheP2pUnmarshallingErrorTest.java   |     1 -
 ...CacheP2pUnmarshallingRebalanceErrorTest.java |    36 +-
 .../IgniteCacheP2pUnmarshallingTxErrorTest.java |     2 +
 .../cache/IgniteCachePeekModesAbstractTest.java |   471 +-
 .../IgniteCacheReadThroughEvictionSelfTest.java |   297 +
 ...acheReadThroughEvictionsVariationsSuite.java |    58 +
 .../IgniteCacheReadThroughStoreCallTest.java    |   288 +
 .../IgniteClientAffinityAssignmentSelfTest.java |     2 +-
 ...eDynamicCacheStartNoExchangeTimeoutTest.java |     2 +
 .../cache/IgniteDynamicCacheStartSelfTest.java  |   217 +-
 ...niteDynamicCacheStartStopConcurrentTest.java |     8 +-
 .../IgniteDynamicClientCacheStartSelfTest.java  |    10 -
 .../cache/IgniteTxConfigCacheSelfTest.java      |    91 +-
 .../IgniteTxExceptionAbstractSelfTest.java      |    38 +-
 .../cache/IgniteTxReentryAbstractSelfTest.java  |     2 +-
 .../IgniteTxStoreExceptionAbstractSelfTest.java |     8 +-
 ...rceptorCacheConfigVariationsFullApiTest.java |   118 +
 ...terceptorWithKeepBinaryCacheFullApiTest.java |   124 +
 .../processors/cache/MapCacheStoreStrategy.java |   145 +
 .../MarshallerCacheJobRunNodeRestartTest.java   |   307 +
 .../cache/TestCacheStoreStrategy.java           |    96 +
 .../cache/WithKeepBinaryCacheFullApiTest.java   |  1226 ++
 .../CacheKeepBinaryWithInterceptorTest.java     |   419 +
 ...acheBinaryObjectUserClassloaderSelfTest.java |   274 +
 .../GridCacheBinaryObjectsAbstractSelfTest.java |   298 +-
 ...eAbstractDataStructuresFailoverSelfTest.java |   220 +-
 ...actQueueFailoverDataConsistencySelfTest.java |     2 +-
 .../GridCacheQueueCleanupSelfTest.java          |     4 +-
 .../GridCacheSequenceApiSelfAbstractTest.java   |    37 -
 .../GridCacheSetAbstractSelfTest.java           |     5 +-
 .../GridCacheSetFailoverAbstractSelfTest.java   |     8 +-
 .../IgniteClientDataStructuresAbstractTest.java |    70 +
 .../IgniteCountDownLatchAbstractSelfTest.java   |   158 +-
 .../IgniteDataStructureUniqueNameTest.java      |    16 +-
 .../IgniteLockAbstractSelfTest.java             |  1629 ++
 .../IgniteSemaphoreAbstractSelfTest.java        |    56 +-
 ...SemaphoreFailoverSafeReleasePermitsTest.java |   129 +
 .../local/IgniteLocalLockSelfTest.java          |   110 +
 .../IgnitePartitionedLockSelfTest.java          |    33 +
 .../IgnitePartitionedQueueNoBackupsTest.java    |     6 +-
 .../IgnitePartitionedSetNoBackupsSelfTest.java  |     6 +-
 .../IgniteReplicatedLockSelfTest.java           |    33 +
 .../CacheGetInsideLockChangingTopologyTest.java |     6 +
 ...eLateAffinityAssignmentFairAffinityTest.java |    32 +
 ...ffinityAssignmentNodeJoinValidationTest.java |   134 +
 .../CacheLateAffinityAssignmentTest.java        |  2684 ++++
 .../GridCacheAbstractJobExecutionTest.java      |     6 +-
 .../distributed/GridCacheLockAbstractTest.java  |     2 +-
 .../GridCacheTransformEventSelfTest.java        |    68 +-
 ...niteCacheClientNodeChangingTopologyTest.java |    37 +-
 ...teCacheClientNodePartitionsExchangeTest.java |    85 +-
 .../IgniteCacheClientReconnectTest.java         |     2 +
 .../IgniteCacheConnectionRecoveryTest.java      |   205 +
 .../distributed/IgniteCacheCreatePutTest.java   |     6 +-
 .../distributed/IgniteCacheGetRestartTest.java  |     4 +
 .../IgniteCacheMessageRecoveryAbstractTest.java |    14 +-
 ...eCacheMessageRecoveryIdleConnectionTest.java |   157 +
 .../IgniteCacheMessageWriteTimeoutTest.java     |   129 +
 .../IgniteCacheNearRestartRollbackSelfTest.java |    28 +-
 .../distributed/IgniteCachePrimarySyncTest.java |    45 +-
 .../IgniteCacheReadFromBackupTest.java          |    12 +-
 .../IgniteCacheServerNodeConcurrentStart.java   |     3 +
 .../IgniteCacheSingleGetMessageTest.java        |     8 +-
 .../IgniteCacheTxIteratorSelfTest.java          |   241 +
 .../IgniteTxCachePrimarySyncTest.java           |  1114 ++
 ...teSynchronizationModesMultithreadedTest.java |   422 +
 .../IgniteTxTimeoutAbstractTest.java            |     8 +-
 .../dht/GridCacheDhtEvictionSelfTest.java       |    15 +-
 .../GridCacheDhtPreloadMessageCountTest.java    |     6 +-
 .../distributed/dht/GridCacheDhtTestUtils.java  |     9 +-
 ...idCachePartitionedPreloadEventsSelfTest.java |    11 +
 ...ridCachePartitionedUnloadEventsSelfTest.java |     2 +
 .../dht/GridCacheTxNodeFailureSelfTest.java     |    12 +-
 .../dht/IgniteCacheConcurrentPutGetRemove.java  |   201 +
 .../IgniteCachePutRetryAbstractSelfTest.java    |    43 +-
 ...gniteCachePutRetryTransactionalSelfTest.java |    75 +-
 ...tionedMultiNodeLongTxTimeoutFullApiTest.java |    34 +
 ...nabledMultiNodeLongTxTimeoutFullApiTest.java |    41 +
 ...tomicClientOnlyMultiNodeFullApiSelfTest.java |    17 +-
 ...imaryWriteOrderMultiNodeFullApiSelfTest.java |    35 +
 ...eAtomicNearOnlyMultiNodeFullApiSelfTest.java |    17 +-
 .../near/GridCacheNearJobExecutionSelfTest.java |     2 -
 .../near/GridCacheNearMultiNodeSelfTest.java    |     4 +-
 .../near/GridCacheNearOneNodeSelfTest.java      |     4 +-
 ...idCacheNearOnlyMultiNodeFullApiSelfTest.java |   170 +-
 .../near/GridCacheNearReadersSelfTest.java      |     2 +
 .../near/GridCacheNearTxForceKeyTest.java       |     6 +-
 ...ePartitionedBasicStoreMultiNodeSelfTest.java |     2 +
 ...LateAffDisabledMultiNodeFullApiSelfTest.java |    34 +
 ...achePartitionedMultiNodeCounterSelfTest.java |    43 +-
 ...achePartitionedMultiNodeFullApiSelfTest.java |     2 +
 ...edOffHeapTieredMultiNodeFullApiSelfTest.java |     2 +-
 ...achePartitionedPreloadLifecycleSelfTest.java |   102 +-
 ...idCacheRendezvousAffinityClientSelfTest.java |     2 +
 .../rebalancing/CacheNodeSafeAssertion.java     |   118 +
 ...cingDelayedPartitionMapExchangeSelfTest.java |    14 +-
 .../GridCacheRebalancingOrderingTest.java       |   916 ++
 ...cheRebalancingPartitionDistributionTest.java |   149 +
 .../GridCacheRebalancingSyncSelfTest.java       |   245 +-
 .../GridCacheReplicatedJobExecutionTest.java    |     2 -
 .../IgniteCacheSyncRebalanceModeSelfTest.java   |   116 +
 ...CacheReplicatedPreloadLifecycleSelfTest.java |   132 +-
 .../IgniteCacheExpiryPolicyAbstractTest.java    |    17 +-
 .../IgniteCacheExpiryPolicyTestSuite.java       |    11 +
 ...eCacheOnlyOneTtlCleanupThreadExistsTest.java |   102 +
 .../expiry/IgniteCacheTtlCleanupSelfTest.java   |     2 +-
 .../IgniteCacheLoaderWriterAbstractTest.java    |    10 +
 ...CacheLocalOffHeapAndSwapMetricsSelfTest.java |   415 -
 .../CacheOffHeapAndSwapMetricsSelfTest.java     |   621 +
 .../local/GridCacheLocalTxTimeoutSelfTest.java  |     5 +-
 .../GridCacheQueryTransformerSelfTest.java      |   575 +
 ...FailoverAtomicPrimaryWriteOrderSelfTest.java |    50 +
 ...sQueryAsyncFailoverTxReplicatedSelfTest.java |    37 +
 ...eContinuousQueryAsyncFailoverTxSelfTest.java |    44 +
 ...eContinuousQueryAsyncFilterListenerTest.java |   986 ++
 ...acheContinuousQueryExecuteInPrimaryTest.java |   306 +
 ...ryFactoryAsyncFilterRandomOperationTest.java |   131 +
 ...usQueryFactoryFilterRandomOperationTest.java |   725 +
 .../CacheContinuousQueryFactoryFilterTest.java  |   714 -
 ...ContinuousQueryFailoverAbstractSelfTest.java |   198 +-
 .../CacheContinuousQueryLostPartitionTest.java  |    14 +
 ...ontinuousQueryOperationFromCallbackTest.java |   627 +
 .../CacheContinuousQueryOrderingEventTest.java  |   722 +
 ...acheContinuousQueryRandomOperationsTest.java |    23 +
 .../CacheContinuousQueryVariationsTest.java     |   949 ++
 .../CacheEntryProcessorNonSerializableTest.java |   410 +
 ...CacheKeepBinaryIterationNearEnabledTest.java |    44 +
 ...acheKeepBinaryIterationStoreEnabledTest.java |    90 +
 ...CacheKeepBinaryIterationSwapEnabledTest.java |    56 +
 .../CacheKeepBinaryIterationTest.java           |   471 +
 ...yRemoteFilterMissingInClassPathSelfTest.java |   237 +
 ...ridCacheContinuousQueryAbstractSelfTest.java |    49 +-
 ...eContinuousQueryMultiNodesFilteringTest.java |   439 +
 ...dCacheContinuousQueryNodesFilteringTest.java |   168 +
 ...niteCacheContinuousQueryBackupQueueTest.java |   299 +
 ...eCacheContinuousQueryImmutableEntryTest.java |   205 +
 ...teCacheContinuousQueryNoUnsubscribeTest.java |   153 +
 ...BehindStorePartitionedMultiNodeSelfTest.java |    11 +-
 .../transactions/DepthFirstSearchTest.java      |   350 +
 .../TxDeadlockDetectionNoHangsTest.java         |   246 +
 .../transactions/TxDeadlockDetectionTest.java   |   494 +
 ...timisticDeadlockDetectionCrossCacheTest.java |   257 +
 .../TxOptimisticDeadlockDetectionTest.java      |   574 +
 ...simisticDeadlockDetectionCrossCacheTest.java |   212 +
 .../TxPessimisticDeadlockDetectionTest.java     |   517 +
 .../cluster/GridAddressResolverSelfTest.java    |    97 +
 ...gniteComputeConfigVariationsFullApiTest.java |  2011 +++
 .../continuous/GridMessageListenSelfTest.java   |    30 +-
 .../IgniteNoCustomEventsOnNodeStart.java        |    85 +
 .../datastreamer/DataStreamerTimeoutTest.java   |   163 +
 ...faultIgfsSecondaryFileSystemTestAdapter.java |   117 +
 .../igfs/IgfsAbstractBaseSelfTest.java          |  1074 ++
 .../processors/igfs/IgfsAbstractSelfTest.java   |  1924 +--
 .../IgfsAtomicPrimaryMultiNodeSelfTest.java     |    39 +
 .../IgfsAtomicPrimaryOffheapTieredSelfTest.java |    39 +
 .../IgfsAtomicPrimaryOffheapValuesSelfTest.java |    39 +
 .../igfs/IgfsAtomicPrimarySelfTest.java         |    39 +
 .../igfs/IgfsBackupFailoverSelfTest.java        |     2 +-
 ...sCachePerBlockLruEvictionPolicySelfTest.java |     7 +-
 .../igfs/IgfsClientCacheSelfTest.java           |   139 -
 .../igfs/IgfsDataManagerSelfTest.java           |    18 +-
 .../igfs/IgfsDualAbstractSelfTest.java          |   319 +-
 .../igfs/IgfsDualAsyncClientSelfTest.java       |    28 +
 .../igfs/IgfsDualSyncClientSelfTest.java        |    28 +
 .../igfs/IgfsExUniversalFileSystemAdapter.java  |   101 -
 .../processors/igfs/IgfsIgniteMock.java         |   520 +
 ...SecondaryFileSystemDualAbstractSelfTest.java |   279 +
 ...ondaryFileSystemDualAsyncClientSelfTest.java |    28 +
 ...calSecondaryFileSystemDualAsyncSelfTest.java |    32 +
 ...condaryFileSystemDualSyncClientSelfTest.java |    28 +
 ...ocalSecondaryFileSystemDualSyncSelfTest.java |    32 +
 ...lSecondaryFileSystemProxyClientSelfTest.java |    28 +
 ...fsLocalSecondaryFileSystemProxySelfTest.java |   272 +
 ...IgfsLocalSecondaryFileSystemTestAdapter.java |   141 +
 .../processors/igfs/IgfsMaxSizeSelfTest.java    |   122 +
 .../igfs/IgfsMetaManagerSelfTest.java           |    28 +-
 .../processors/igfs/IgfsMetricsSelfTest.java    |    75 +-
 .../internal/processors/igfs/IgfsMock.java      |   405 +
 .../igfs/IgfsModeResolverSelfTest.java          |   161 +-
 .../processors/igfs/IgfsModesSelfTest.java      |    64 +-
 .../processors/igfs/IgfsOneClientNodeTest.java  |     7 +-
 .../igfs/IgfsPrimaryClientSelfTest.java         |    30 +
 ...PrimaryRelaxedConsistencyClientSelfTest.java |    28 +
 .../processors/igfs/IgfsProcessorSelfTest.java  |    11 +-
 .../igfs/IgfsProcessorValidationSelfTest.java   |    64 +-
 .../processors/igfs/IgfsProxySelfTest.java      |    32 +
 .../IgfsSecondaryFileSystemTestAdapter.java     |   118 +
 .../processors/igfs/IgfsSizeSelfTest.java       |   133 -
 .../processors/igfs/IgfsStreamsSelfTest.java    |     9 +-
 .../processors/igfs/IgfsTaskSelfTest.java       |     2 +-
 .../igfs/UniversalFileSystemAdapter.java        |    98 -
 ...niteMessagingConfigVariationFullApiTest.java |   484 +
 .../odbc/OdbcEscapeSequenceSelfTest.java        |   778 +
 .../odbc/OdbcProcessorValidationSelfTest.java   |   175 +
 .../GridCacheAtomicCommandHandlerSelfTest.java  |    39 +
 .../cache/GridCacheCommandHandlerSelfTest.java  |    20 +-
 .../query/GridQueryCommandHandlerTest.java      |   191 +
 .../service/GridServiceClientNodeTest.java      |   102 +-
 ...rviceDeploymentExceptionPropagationTest.java |    80 +
 ...GridServiceProxyClientReconnectSelfTest.java |   124 +
 .../GridServiceProxyNodeStopSelfTest.java       |     2 +-
 ...gniteServiceConfigVariationsFullApiTest.java |   350 +
 ...yment2ClassLoadersDefaultMarshallerTest.java |   259 +
 ...eployment2ClassLoadersJdkMarshallerTest.java |    31 +
 ...ent2ClassLoadersOptimizedMarshallerTest.java |    31 +
 ...oymentClassLoadingDefaultMarshallerTest.java |   212 +
 ...DeploymentClassLoadingJdkMarshallerTest.java |    31 +
 ...mentClassLoadingOptimizedMarshallerTest.java |    31 +
 .../service/IgniteServiceReassignmentTest.java  |   250 +
 .../ServicePredicateAccessCacheTest.java        |     4 +-
 .../internal/util/IgniteUtilsSelfTest.java      |    15 +
 ...GridUnsafeDataOutputArraySizingSelfTest.java |   144 +-
 .../unsafe/GridOffheapSnapTreeSelfTest.java     |     2 +-
 .../ignite/jvmtest/ConcurrentMapTest.java       |     3 +-
 .../cache/GridCacheDataStructuresLoadTest.java  |    53 +
 .../GridTcpCommunicationBenchmark.java          |    26 +-
 .../loadtests/hashmap/GridCacheTestContext.java |     4 +
 .../marshaller/MarshallerContextSelfTest.java   |    90 +
 .../marshaller/MarshallerContextTestImpl.java   |    35 +-
 .../GridP2PMissedResourceCacheSizeSelfTest.java |     6 +-
 .../platform/PlatformCacheEntryEventFilter.java |   193 +
 .../PlatformCacheEntryEventFilterFactory.java   |    59 +
 ...latformDefaultJavaObjectFactorySelfTest.java |   185 +
 .../platform/PlatformDeployServiceTask.java     |   360 +
 .../PlatformJavaObjectFactoryProxySelfTest.java |   220 +
 .../platform/PlatformStartIgniteTask.java       |     1 +
 .../ignite/platform/PlatformStopIgniteTask.java |     1 +
 .../ignite/platform/PlatformStringTestTask.java |    67 +
 .../platform/javaobject/TestJavaObject.java     |   271 +
 .../javaobject/TestJavaObjectNoDefaultCtor.java |    49 +
 .../TestJavaObjectNoDefaultCtorFactory.java     |    68 +
 .../spi/GridTcpSpiForwardingSelfTest.java       |   237 +-
 .../GridTcpCommunicationSpiConfigSelfTest.java  |    22 +
 .../tcp/TcpClientDiscoverySpiMulticastTest.java |     2 +-
 .../tcp/TcpClientDiscoverySpiSelfTest.java      |    48 +-
 .../tcp/TcpDiscoveryMultiThreadedTest.java      |   222 +
 .../spi/discovery/tcp/TcpDiscoverySelfTest.java |   278 +-
 .../tcp/TcpDiscoverySpiConfigSelfTest.java      |    22 +
 .../TcpDiscoverySpiFailureTimeoutSelfTest.java  |    23 +-
 .../spi/discovery/tcp/TestTcpDiscoverySpi.java  |     5 +-
 .../jdbc/TcpDiscoveryJdbcIpFinderSelfTest.java  |     2 +-
 .../TcpDiscoveryMulticastIpFinderSelfTest.java  |     6 +-
 .../TcpDiscoverySharedFsIpFinderSelfTest.java   |    25 +
 .../vm/TcpDiscoveryVmIpFinderSelfTest.java      |    75 +
 .../spi/failover/GridFailoverTestContext.java   |     6 +
 .../GridInternalTasksLoadBalancingSelfTest.java |   201 +
 .../file/GridFileSwapSpaceSpiSelfTest.java      |    89 +
 .../properties/NotStringSystemPropertyTest.java |   124 +
 .../testframework/GridSpiTestContext.java       |   115 +-
 .../ignite/testframework/GridTestUtils.java     |     7 +-
 .../ignite/testframework/IgniteTestSuite.java   |   419 +
 .../assertions/AlwaysAssertion.java             |    29 +
 .../testframework/assertions/Assertion.java     |    31 +
 .../testframework/assertions/package-info.java  |    22 +
 .../configvariations/ConfigVariations.java      |     8 +-
 .../ConfigVariationsTestSuiteBuilder.java       |    31 +-
 .../configvariations/VariationsTestsConfig.java |    21 +-
 .../testframework/junits/GridAbstractTest.java  |    69 +-
 .../junits/GridTestKernalContext.java           |     1 +
 ...IgniteCacheConfigVariationsAbstractTest.java |    88 +-
 .../IgniteConfigVariationsAbstractTest.java     |   282 +-
 .../ignite/testframework/junits/IgniteMock.java |    25 +
 .../junits/common/GridCommonAbstractTest.java   |   226 +-
 .../common/GridRollingRestartAbstractTest.java  |   324 +
 .../multijvm/IgniteCacheProcessProxy.java       |   160 +-
 .../multijvm/IgniteClusterProcessProxy.java     |     5 +
 .../junits/multijvm/IgniteProcessProxy.java     |    46 +-
 ...naryObjectsTxDeadlockDetectionTestSuite.java |    37 +
 .../ignite/testsuites/IgniteBasicTestSuite.java |    19 +-
 .../testsuites/IgniteBinaryCacheTestSuite.java  |     2 +
 .../IgniteBinaryObjectsTestSuite.java           |    15 +-
 .../IgniteCacheDataStructuresSelfTestSuite.java |    11 +
 .../IgniteCacheFailoverTestSuite.java           |     2 +
 .../IgniteCacheFullApiSelfTestSuite.java        |    10 +
 .../IgniteCacheMetricsSelfTestSuite.java        |     4 +-
 .../ignite/testsuites/IgniteCacheTestSuite.java |    25 +
 .../testsuites/IgniteCacheTestSuite2.java       |     7 +
 .../testsuites/IgniteCacheTestSuite3.java       |     4 +
 .../testsuites/IgniteCacheTestSuite4.java       |    17 +
 .../testsuites/IgniteCacheTestSuite5.java       |    21 +-
 ...teBasicConfigVariationsFullApiTestSuite.java |    72 +
 ...iteContinuousQueryConfigVariationsSuite.java |    60 +
 .../ignite/testsuites/IgniteIgfsTestSuite.java  |    39 +-
 .../apache/ignite/testsuites/IgniteIgnore.java  |    40 +
 .../testsuites/IgniteKernalSelfTestSuite.java   |    23 +
 .../IgniteMarshallerSelfTestSuite.java          |     2 +-
 ...essagingConfigVariationFullApiTestSuite.java |    72 +
 .../testsuites/IgnitePlatformsTestSuite.java    |    41 +
 .../testsuites/IgniteRestHandlerTestSuite.java  |     4 +
 ...ServiceConfigVariationsFullApiTestSuite.java |    92 +
 .../IgniteSpiLoadBalancingSelfTestSuite.java    |    34 +-
 .../ignite/testsuites/IgniteSpiTestSuite.java   |     6 +-
 ...orCacheConfigVariationsFullApiTestSuite.java |    41 +
 .../TxDeadlockDetectionTestSuite.java           |    50 +
 ...ryCacheConfigVariationsFullApiTestSuite.java |    71 +
 .../apache/ignite/util/GridLogThrottleTest.java |    27 +-
 modules/docker/1.6.0/Dockerfile                 |    44 +
 modules/docker/1.6.0/run.sh                     |    51 +
 modules/docker/1.7.0/Dockerfile                 |    44 +
 modules/docker/1.7.0/run.sh                     |    51 +
 modules/docker/Dockerfile                       |    24 +-
 modules/extdata/p2p/pom.xml                     |     2 +-
 ...CacheDeploymentCachePluginConfiguration.java |     7 +
 .../apache/ignite/tests/p2p/NoopService.java    |    41 +
 .../apache/ignite/tests/p2p/NoopService2.java   |    41 +
 .../extdata/uri/modules/uri-dependency/pom.xml  |     2 +-
 modules/extdata/uri/pom.xml                     |     2 +-
 modules/flink/README.txt                        |    33 +
 modules/flink/licenses/apache-2.0.txt           |   202 +
 modules/flink/pom.xml                           |   167 +
 .../apache/ignite/sink/flink/IgniteSink.java    |   204 +
 .../apache/ignite/sink/flink/package-info.java  |    22 +
 .../sink/flink/FlinkIgniteSinkSelfTest.java     |   188 +
 .../flink/FlinkIgniteSinkSelfTestSuite.java     |    38 +
 .../flink/src/test/resources/example-ignite.xml |    70 +
 modules/flume/pom.xml                           |     2 +-
 modules/gce/pom.xml                             |     2 +-
 modules/geospatial/pom.xml                      |     2 +-
 .../query/h2/opt/GridH2SpatialIndex.java        |    74 +-
 modules/hadoop/pom.xml                          |     2 +-
 .../hadoop/fs/BasicHadoopFileSystemFactory.java |   152 +-
 .../fs/CachingHadoopFileSystemFactory.java      |    55 +-
 .../hadoop/fs/HadoopFileSystemFactory.java      |    11 +-
 .../fs/IgniteHadoopFileSystemCounterWriter.java |    79 +-
 .../fs/IgniteHadoopIgfsSecondaryFileSystem.java |   392 +-
 .../fs/KerberosHadoopFileSystemFactory.java     |    77 +-
 .../hadoop/fs/v1/IgniteHadoopFileSystem.java    |    54 +-
 .../hadoop/fs/v2/IgniteHadoopFileSystem.java    |    76 +-
 .../IgniteHadoopClientProtocolProvider.java     |    12 +-
 .../mapreduce/IgniteHadoopMapReducePlanner.java |   138 +-
 .../IgniteHadoopWeightedMapReducePlanner.java   |   846 ++
 .../ignite/hadoop/util/BasicUserNameMapper.java |   112 +
 .../hadoop/util/ChainedUserNameMapper.java      |    94 +
 .../hadoop/util/KerberosUserNameMapper.java     |   137 +
 .../ignite/hadoop/util/UserNameMapper.java      |    35 +
 .../apache/ignite/hadoop/util/package-info.java |    22 +
 .../processors/hadoop/HadoopAttributes.java     |   168 +
 .../processors/hadoop/HadoopClassLoader.java    |   992 --
 .../processors/hadoop/HadoopCommonUtils.java    |   154 +
 .../processors/hadoop/HadoopContext.java        |     4 +-
 .../processors/hadoop/HadoopDefaultJobInfo.java |   157 -
 .../processors/hadoop/HadoopExternalSplit.java  |    88 +
 .../processors/hadoop/HadoopHelperImpl.java     |   120 +
 .../hadoop/HadoopMapReduceCounterGroup.java     |   123 -
 .../hadoop/HadoopMapReduceCounters.java         |   228 -
 .../processors/hadoop/HadoopProcessor.java      |   150 +-
 .../processors/hadoop/HadoopSplitWrapper.java   |   119 +
 .../internal/processors/hadoop/HadoopUtils.java |   355 -
 .../hadoop/counter/HadoopCounterAdapter.java    |     1 +
 .../counter/HadoopPerformanceCounter.java       |    12 +-
 .../hadoop/delegate/HadoopDelegateUtils.java    |   138 +
 .../HadoopFileSystemCounterWriterDelegate.java  |    36 +
 .../HadoopFileSystemFactoryDelegate.java        |    36 +
 .../HadoopIgfsSecondaryFileSystemDelegate.java  |    28 +
 .../hadoop/fs/HadoopFileSystemCacheUtils.java   |   242 -
 .../hadoop/fs/HadoopFileSystemsUtils.java       |    51 -
 .../hadoop/fs/HadoopLazyConcurrentMap.java      |   212 -
 .../hadoop/fs/HadoopLocalFileSystemV1.java      |    39 -
 .../hadoop/fs/HadoopLocalFileSystemV2.java      |    88 -
 .../processors/hadoop/fs/HadoopParameters.java  |    94 -
 .../hadoop/fs/HadoopRawLocalFileSystem.java     |   314 -
 .../processors/hadoop/igfs/HadoopIgfs.java      |   202 -
 .../igfs/HadoopIgfsCommunicationException.java  |    57 -
 .../processors/hadoop/igfs/HadoopIgfsEx.java    |    93 -
 .../hadoop/igfs/HadoopIgfsFuture.java           |    97 -
 .../hadoop/igfs/HadoopIgfsInProc.java           |   510 -
 .../hadoop/igfs/HadoopIgfsInputStream.java      |   629 -
 .../processors/hadoop/igfs/HadoopIgfsIo.java    |    76 -
 .../processors/hadoop/igfs/HadoopIgfsIpcIo.java |   624 -
 .../hadoop/igfs/HadoopIgfsIpcIoListener.java    |    36 -
 .../hadoop/igfs/HadoopIgfsJclLogger.java        |   116 -
 .../hadoop/igfs/HadoopIgfsOutProc.java          |   524 -
 .../hadoop/igfs/HadoopIgfsOutputStream.java     |   201 -
 .../hadoop/igfs/HadoopIgfsProperties.java       |    86 -
 .../hadoop/igfs/HadoopIgfsProxyInputStream.java |   337 -
 .../igfs/HadoopIgfsProxyOutputStream.java       |   165 -
 ...fsSecondaryFileSystemPositionedReadable.java |   105 -
 .../hadoop/igfs/HadoopIgfsStreamDelegate.java   |    96 -
 .../igfs/HadoopIgfsStreamEventListener.java     |    39 -
 .../processors/hadoop/igfs/HadoopIgfsUtils.java |   174 -
 .../hadoop/igfs/HadoopIgfsWrapper.java          |   547 -
 .../impl/HadoopMapReduceCounterGroup.java       |   124 +
 .../hadoop/impl/HadoopMapReduceCounters.java    |   229 +
 .../processors/hadoop/impl/HadoopUtils.java     |   328 +
 .../HadoopBasicFileSystemFactoryDelegate.java   |   164 +
 .../HadoopCachingFileSystemFactoryDelegate.java |    75 +
 .../HadoopDefaultFileSystemFactoryDelegate.java |    62 +
 ...doopFileSystemCounterWriterDelegateImpl.java |   108 +
 ...doopIgfsSecondaryFileSystemDelegateImpl.java |   472 +
 ...HadoopKerberosFileSystemFactoryDelegate.java |   112 +
 .../impl/fs/HadoopFileSystemCacheUtils.java     |   243 +
 .../hadoop/impl/fs/HadoopFileSystemsUtils.java  |    51 +
 .../hadoop/impl/fs/HadoopLazyConcurrentMap.java |   210 +
 .../hadoop/impl/fs/HadoopLocalFileSystemV1.java |    40 +
 .../hadoop/impl/fs/HadoopLocalFileSystemV2.java |    89 +
 .../hadoop/impl/fs/HadoopParameters.java        |    94 +
 .../impl/fs/HadoopRawLocalFileSystem.java       |   315 +
 .../processors/hadoop/impl/igfs/HadoopIgfs.java |   203 +
 .../igfs/HadoopIgfsCommunicationException.java  |    57 +
 .../hadoop/impl/igfs/HadoopIgfsEx.java          |    94 +
 .../hadoop/impl/igfs/HadoopIgfsFuture.java      |    97 +
 .../hadoop/impl/igfs/HadoopIgfsInProc.java      |   511 +
 .../hadoop/impl/igfs/HadoopIgfsInputStream.java |   630 +
 .../hadoop/impl/igfs/HadoopIgfsIo.java          |    76 +
 .../hadoop/impl/igfs/HadoopIgfsIpcIo.java       |   625 +
 .../impl/igfs/HadoopIgfsIpcIoListener.java      |    36 +
 .../hadoop/impl/igfs/HadoopIgfsJclLogger.java   |   116 +
 .../hadoop/impl/igfs/HadoopIgfsOutProc.java     |   525 +
 .../impl/igfs/HadoopIgfsOutputStream.java       |   202 +
 .../hadoop/impl/igfs/HadoopIgfsProperties.java  |    87 +
 .../impl/igfs/HadoopIgfsProxyInputStream.java   |   338 +
 .../impl/igfs/HadoopIgfsProxyOutputStream.java  |   166 +
 ...fsSecondaryFileSystemPositionedReadable.java |   106 +
 .../impl/igfs/HadoopIgfsStreamDelegate.java     |    96 +
 .../igfs/HadoopIgfsStreamEventListener.java     |    39 +
 .../hadoop/impl/igfs/HadoopIgfsUtils.java       |   175 +
 .../hadoop/impl/igfs/HadoopIgfsWrapper.java     |   554 +
 .../hadoop/impl/proto/HadoopClientProtocol.java |   354 +
 .../hadoop/impl/v1/HadoopV1CleanupTask.java     |    65 +
 .../hadoop/impl/v1/HadoopV1Counter.java         |   107 +
 .../hadoop/impl/v1/HadoopV1MapTask.java         |   122 +
 .../hadoop/impl/v1/HadoopV1OutputCollector.java |   138 +
 .../hadoop/impl/v1/HadoopV1Partitioner.java     |    44 +
 .../hadoop/impl/v1/HadoopV1ReduceTask.java      |   101 +
 .../hadoop/impl/v1/HadoopV1Reporter.java        |    81 +
 .../hadoop/impl/v1/HadoopV1SetupTask.java       |    57 +
 .../hadoop/impl/v1/HadoopV1Splitter.java        |   103 +
 .../processors/hadoop/impl/v1/HadoopV1Task.java |    98 +
 .../processors/hadoop/impl/v2/HadoopDaemon.java |   126 +
 .../impl/v2/HadoopSerializationWrapper.java     |   139 +
 .../impl/v2/HadoopShutdownHookManager.java      |    98 +
 .../hadoop/impl/v2/HadoopV2CleanupTask.java     |    73 +
 .../hadoop/impl/v2/HadoopV2Context.java         |   244 +
 .../hadoop/impl/v2/HadoopV2Counter.java         |    89 +
 .../processors/hadoop/impl/v2/HadoopV2Job.java  |   452 +
 .../impl/v2/HadoopV2JobResourceManager.java     |   324 +
 .../hadoop/impl/v2/HadoopV2MapTask.java         |    99 +
 .../hadoop/impl/v2/HadoopV2Partitioner.java     |    44 +
 .../hadoop/impl/v2/HadoopV2ReduceTask.java      |    91 +
 .../hadoop/impl/v2/HadoopV2SetupTask.java       |    66 +
 .../hadoop/impl/v2/HadoopV2Splitter.java        |   112 +
 .../processors/hadoop/impl/v2/HadoopV2Task.java |   186 +
 .../hadoop/impl/v2/HadoopV2TaskContext.java     |   563 +
 .../impl/v2/HadoopWritableSerialization.java    |    76 +
 .../hadoop/jobtracker/HadoopJobTracker.java     |    31 +-
 .../planner/HadoopAbstractMapReducePlanner.java |   116 +
 .../planner/HadoopDefaultMapReducePlan.java     |     7 +-
 .../planner/HadoopMapReducePlanGroup.java       |   150 +
 .../planner/HadoopMapReducePlanTopology.java    |    89 +
 .../hadoop/proto/HadoopClientProtocol.java      |   349 -
 .../shuffle/collections/HadoopMultimapBase.java |    90 +-
 .../child/HadoopChildProcessRunner.java         |    18 +-
 .../HadoopExternalCommunication.java            |     6 +-
 .../hadoop/v1/HadoopV1CleanupTask.java          |    64 -
 .../processors/hadoop/v1/HadoopV1Counter.java   |   106 -
 .../processors/hadoop/v1/HadoopV1MapTask.java   |   122 -
 .../hadoop/v1/HadoopV1OutputCollector.java      |   137 -
 .../hadoop/v1/HadoopV1Partitioner.java          |    44 -
 .../hadoop/v1/HadoopV1ReduceTask.java           |   101 -
 .../processors/hadoop/v1/HadoopV1Reporter.java  |    81 -
 .../processors/hadoop/v1/HadoopV1SetupTask.java |    56 -
 .../processors/hadoop/v1/HadoopV1Splitter.java  |   102 -
 .../processors/hadoop/v1/HadoopV1Task.java      |    97 -
 .../processors/hadoop/v2/HadoopDaemon.java      |   126 -
 .../hadoop/v2/HadoopExternalSplit.java          |    89 -
 .../hadoop/v2/HadoopSerializationWrapper.java   |   138 -
 .../hadoop/v2/HadoopShutdownHookManager.java    |    98 -
 .../hadoop/v2/HadoopSplitWrapper.java           |   119 -
 .../hadoop/v2/HadoopV2CleanupTask.java          |    72 -
 .../processors/hadoop/v2/HadoopV2Context.java   |   243 -
 .../processors/hadoop/v2/HadoopV2Counter.java   |    88 -
 .../processors/hadoop/v2/HadoopV2Job.java       |   435 -
 .../hadoop/v2/HadoopV2JobResourceManager.java   |   326 -
 .../processors/hadoop/v2/HadoopV2MapTask.java   |    99 -
 .../hadoop/v2/HadoopV2Partitioner.java          |    44 -
 .../hadoop/v2/HadoopV2ReduceTask.java           |    91 -
 .../processors/hadoop/v2/HadoopV2SetupTask.java |    65 -
 .../processors/hadoop/v2/HadoopV2Splitter.java  |   111 -
 .../processors/hadoop/v2/HadoopV2Task.java      |   185 -
 .../hadoop/v2/HadoopV2TaskContext.java          |   559 -
 .../hadoop/v2/HadoopWritableSerialization.java  |    75 -
 .../HadoopClientProtocolEmbeddedSelfTest.java   |    35 -
 .../hadoop/HadoopClientProtocolSelfTest.java    |   654 -
 .../hadoop/cache/HadoopTxConfigCacheTest.java   |    42 -
 ...KerberosHadoopFileSystemFactorySelfTest.java |   121 -
 .../ignite/igfs/Hadoop1DualAbstractTest.java    |   113 -
 .../igfs/Hadoop1OverIgfsDualAsyncTest.java      |    30 -
 .../igfs/Hadoop1OverIgfsDualSyncTest.java       |    30 -
 .../igfs/HadoopFIleSystemFactorySelfTest.java   |   326 -
 ...oopFileSystemUniversalFileSystemAdapter.java |   131 -
 .../HadoopIgfs20FileSystemAbstractSelfTest.java |  2038 ---
 ...Igfs20FileSystemLoopbackPrimarySelfTest.java |    74 -
 ...oopIgfs20FileSystemShmemPrimarySelfTest.java |    74 -
 .../igfs/HadoopIgfsDualAbstractSelfTest.java    |   321 -
 .../igfs/HadoopIgfsDualAsyncSelfTest.java       |    32 -
 .../ignite/igfs/HadoopIgfsDualSyncSelfTest.java |    32 -
 ...oopSecondaryFileSystemConfigurationTest.java |   575 -
 .../apache/ignite/igfs/IgfsEventsTestSuite.java |   279 -
 .../igfs/IgfsNearOnlyMultiNodeSelfTest.java     |   223 -
 .../IgniteHadoopFileSystemAbstractSelfTest.java |  2431 ---
 .../IgniteHadoopFileSystemClientSelfTest.java   |   212 -
 ...IgniteHadoopFileSystemHandshakeSelfTest.java |   314 -
 .../IgniteHadoopFileSystemIpcCacheSelfTest.java |   214 -
 .../IgniteHadoopFileSystemLoggerSelfTest.java   |   298 -
 ...niteHadoopFileSystemLoggerStateSelfTest.java |   329 -
 ...adoopFileSystemLoopbackAbstractSelfTest.java |    46 -
 ...SystemLoopbackEmbeddedDualAsyncSelfTest.java |    33 -
 ...eSystemLoopbackEmbeddedDualSyncSelfTest.java |    33 -
 ...leSystemLoopbackEmbeddedPrimarySelfTest.java |    33 -
 ...SystemLoopbackEmbeddedSecondarySelfTest.java |    34 -
 ...SystemLoopbackExternalDualAsyncSelfTest.java |    33 -
 ...eSystemLoopbackExternalDualSyncSelfTest.java |    33 -
 ...leSystemLoopbackExternalPrimarySelfTest.java |    33 -
 ...SystemLoopbackExternalSecondarySelfTest.java |    34 -
 ...condaryFileSystemInitializationSelfTest.java |   214 -
 ...teHadoopFileSystemSecondaryModeSelfTest.java |   327 -
 ...teHadoopFileSystemShmemAbstractSelfTest.java |    91 -
 ...ileSystemShmemEmbeddedDualAsyncSelfTest.java |    33 -
 ...FileSystemShmemEmbeddedDualSyncSelfTest.java |    33 -
 ...pFileSystemShmemEmbeddedPrimarySelfTest.java |    33 -
 ...ileSystemShmemEmbeddedSecondarySelfTest.java |    33 -
 ...ileSystemShmemExternalDualAsyncSelfTest.java |    33 -
 ...FileSystemShmemExternalDualSyncSelfTest.java |    33 -
 ...pFileSystemShmemExternalPrimarySelfTest.java |    33 -
 ...ileSystemShmemExternalSecondarySelfTest.java |    33 -
 .../hadoop/HadoopAbstractSelfTest.java          |   239 -
 .../hadoop/HadoopAbstractWordCountTest.java     |   175 -
 .../hadoop/HadoopClassLoaderTest.java           |   110 -
 .../hadoop/HadoopCommandLineTest.java           |   474 -
 .../HadoopDefaultMapReducePlannerSelfTest.java  |  1028 --
 .../hadoop/HadoopFileSystemsTest.java           |   155 -
 .../processors/hadoop/HadoopGroupingTest.java   |   307 -
 .../hadoop/HadoopJobTrackerSelfTest.java        |   345 -
 .../hadoop/HadoopMapReduceEmbeddedSelfTest.java |   253 -
 .../processors/hadoop/HadoopMapReduceTest.java  |   410 -
 .../hadoop/HadoopPopularWordsTest.java          |   298 -
 .../HadoopSerializationWrapperSelfTest.java     |    79 -
 .../processors/hadoop/HadoopSharedMap.java      |     1 +
 .../hadoop/HadoopSnappyFullMapReduceTest.java   |    28 -
 .../processors/hadoop/HadoopSnappyTest.java     |   102 -
 .../hadoop/HadoopSortingExternalTest.java       |    46 -
 .../processors/hadoop/HadoopSortingTest.java    |   303 -
 .../hadoop/HadoopSplitWrapperSelfTest.java      |    72 -
 .../processors/hadoop/HadoopStartup.java        |    54 -
 .../hadoop/HadoopTaskExecutionSelfTest.java     |   567 -
 .../hadoop/HadoopTasksAllVersionsTest.java      |   260 -
 .../processors/hadoop/HadoopTasksV1Test.java    |    58 -
 .../processors/hadoop/HadoopTasksV2Test.java    |    77 -
 .../hadoop/HadoopTestClassLoader.java           |   106 +
 .../hadoop/HadoopTestRoundRobinMrPlanner.java   |    71 -
 .../hadoop/HadoopTestTaskContext.java           |   228 -
 .../processors/hadoop/HadoopTestUtils.java      |   107 -
 .../processors/hadoop/HadoopV2JobSelfTest.java  |   100 -
 .../hadoop/HadoopValidationSelfTest.java        |    53 -
 .../hadoop/books/alice-in-wonderland.txt        |  3735 -----
 .../processors/hadoop/books/art-of-war.txt      |  6982 ---------
 .../hadoop/books/huckleberry-finn.txt           | 11733 ---------------
 .../processors/hadoop/books/sherlock-holmes.txt | 13052 -----------------
 .../processors/hadoop/books/tom-sawyer.txt      |  8858 -----------
 .../hadoop/deps/CircularWIthHadoop.java         |    32 -
 .../hadoop/deps/CircularWithoutHadoop.java      |    27 -
 .../processors/hadoop/deps/WithCast.java        |    41 -
 .../hadoop/deps/WithClassAnnotation.java        |    28 -
 .../hadoop/deps/WithConstructorInvocation.java  |    31 -
 .../processors/hadoop/deps/WithExtends.java     |    27 -
 .../processors/hadoop/deps/WithField.java       |    29 -
 .../processors/hadoop/deps/WithImplements.java  |    36 -
 .../hadoop/deps/WithIndirectField.java          |    27 -
 .../processors/hadoop/deps/WithInitializer.java |    33 -
 .../processors/hadoop/deps/WithInnerClass.java  |    31 -
 .../hadoop/deps/WithLocalVariable.java          |    38 -
 .../hadoop/deps/WithMethodAnnotation.java       |    32 -
 .../hadoop/deps/WithMethodArgument.java         |    31 -
 .../hadoop/deps/WithMethodCheckedException.java |    31 -
 .../hadoop/deps/WithMethodInvocation.java       |    31 -
 .../hadoop/deps/WithMethodReturnType.java       |    31 -
 .../hadoop/deps/WithMethodRuntimeException.java |    31 -
 .../processors/hadoop/deps/WithOuterClass.java  |    38 -
 .../hadoop/deps/WithParameterAnnotation.java    |    31 -
 .../processors/hadoop/deps/WithStaticField.java |    29 -
 .../hadoop/deps/WithStaticInitializer.java      |    34 -
 .../processors/hadoop/deps/Without.java         |    25 -
 .../hadoop/examples/HadoopWordCount1.java       |    94 -
 .../hadoop/examples/HadoopWordCount1Map.java    |    67 -
 .../hadoop/examples/HadoopWordCount1Reduce.java |    56 -
 .../hadoop/examples/HadoopWordCount2.java       |   111 -
 .../hadoop/examples/HadoopWordCount2Mapper.java |    73 -
 .../examples/HadoopWordCount2Reducer.java       |    72 -
 .../impl/HadoopAbstractMapReduceTest.java       |   430 +
 .../hadoop/impl/HadoopAbstractSelfTest.java     |   239 +
 .../impl/HadoopAbstractWordCountTest.java       |   175 +
 .../hadoop/impl/HadoopCommandLineTest.java      |   476 +
 .../HadoopDefaultMapReducePlannerSelfTest.java  |   619 +
 .../hadoop/impl/HadoopErrorSimulator.java       |   326 +
 .../hadoop/impl/HadoopFileSystemsTest.java      |   155 +
 .../hadoop/impl/HadoopGroupingTest.java         |   302 +
 .../hadoop/impl/HadoopJobTrackerSelfTest.java   |   334 +
 .../impl/HadoopMapReduceEmbeddedSelfTest.java   |   249 +
 .../HadoopMapReduceErrorResilienceTest.java     |   154 +
 .../hadoop/impl/HadoopMapReduceTest.java        |    66 +
 .../impl/HadoopNoHadoopMapReduceTest.java       |    47 +
 .../hadoop/impl/HadoopPlannerMockJob.java       |   175 +
 .../hadoop/impl/HadoopPopularWordsTest.java     |   298 +
 .../HadoopSerializationWrapperSelfTest.java     |    80 +
 .../impl/HadoopSnappyFullMapReduceTest.java     |    36 +
 .../hadoop/impl/HadoopSnappyTest.java           |   104 +
 .../hadoop/impl/HadoopSortingExternalTest.java  |    46 +
 .../hadoop/impl/HadoopSortingTest.java          |   304 +
 .../hadoop/impl/HadoopSplitWrapperSelfTest.java |    72 +
 .../processors/hadoop/impl/HadoopStartup.java   |    54 +
 .../impl/HadoopTaskExecutionSelfTest.java       |   550 +
 .../hadoop/impl/HadoopTasksAllVersionsTest.java |   264 +
 .../hadoop/impl/HadoopTasksV1Test.java          |    62 +
 .../hadoop/impl/HadoopTasksV2Test.java          |    81 +
 .../impl/HadoopTestRoundRobinMrPlanner.java     |    75 +
 .../hadoop/impl/HadoopTestTaskContext.java      |   233 +
 .../processors/hadoop/impl/HadoopTestUtils.java |   178 +
 .../hadoop/impl/HadoopTxConfigCacheTest.java    |    42 +
 .../hadoop/impl/HadoopUserLibsSelfTest.java     |   261 +
 .../hadoop/impl/HadoopV2JobSelfTest.java        |   108 +
 .../hadoop/impl/HadoopValidationSelfTest.java   |    53 +
 .../HadoopWeightedMapReducePlannerTest.java     |   602 +
 .../HadoopWeightedPlannerMapReduceTest.java     |    38 +
 .../hadoop/impl/books/alice-in-wonderland.txt   |  3735 +++++
 .../processors/hadoop/impl/books/art-of-war.txt |  6982 +++++++++
 .../hadoop/impl/books/huckleberry-finn.txt      | 11733 +++++++++++++++
 .../hadoop/impl/books/sherlock-holmes.txt       | 13052 +++++++++++++++++
 .../processors/hadoop/impl/books/tom-sawyer.txt |  8858 +++++++++++
 .../HadoopClientProtocolEmbeddedSelfTest.java   |    35 +
 .../client/HadoopClientProtocolSelfTest.java    |   654 +
 .../hadoop/impl/examples/HadoopWordCount1.java  |    94 +
 .../impl/examples/HadoopWordCount1Map.java      |    79 +
 .../impl/examples/HadoopWordCount1Reduce.java   |    61 +
 .../hadoop/impl/examples/HadoopWordCount2.java  |   111 +
 .../impl/examples/HadoopWordCount2Combiner.java |    45 +
 .../impl/examples/HadoopWordCount2Mapper.java   |    88 +
 .../impl/examples/HadoopWordCount2Reducer.java  |   113 +
 ...KerberosHadoopFileSystemFactorySelfTest.java |   126 +
 .../impl/igfs/Hadoop1DualAbstractTest.java      |   157 +
 .../impl/igfs/Hadoop1OverIgfsDualAsyncTest.java |    32 +
 .../impl/igfs/Hadoop1OverIgfsDualSyncTest.java  |    32 +
 .../igfs/HadoopFIleSystemFactorySelfTest.java   |   345 +
 .../HadoopIgfs20FileSystemAbstractSelfTest.java |  2047 +++
 ...Igfs20FileSystemLoopbackPrimarySelfTest.java |    77 +
 ...oopIgfs20FileSystemShmemPrimarySelfTest.java |    77 +
 .../igfs/HadoopIgfsDualAbstractSelfTest.java    |   328 +
 .../impl/igfs/HadoopIgfsDualAsyncSelfTest.java  |    32 +
 .../impl/igfs/HadoopIgfsDualSyncSelfTest.java   |    32 +
 ...adoopIgfsSecondaryFileSystemTestAdapter.java |   153 +
 ...oopSecondaryFileSystemConfigurationTest.java |   583 +
 .../hadoop/impl/igfs/IgfsEventsTestSuite.java   |   289 +
 .../igfs/IgfsNearOnlyMultiNodeSelfTest.java     |   226 +
 .../IgniteHadoopFileSystemAbstractSelfTest.java |  2435 +++
 .../IgniteHadoopFileSystemClientSelfTest.java   |   216 +
 ...IgniteHadoopFileSystemHandshakeSelfTest.java |   393 +
 .../IgniteHadoopFileSystemIpcCacheSelfTest.java |   215 +
 .../IgniteHadoopFileSystemLoggerSelfTest.java   |   299 +
 ...niteHadoopFileSystemLoggerStateSelfTest.java |   332 +
 ...adoopFileSystemLoopbackAbstractSelfTest.java |    50 +
 ...SystemLoopbackEmbeddedDualAsyncSelfTest.java |    33 +
 ...eSystemLoopbackEmbeddedDualSyncSelfTest.java |    33 +
 ...leSystemLoopbackEmbeddedPrimarySelfTest.java |    33 +
 ...SystemLoopbackEmbeddedSecondarySelfTest.java |    34 +
 ...SystemLoopbackExternalDualAsyncSelfTest.java |    33 +
 ...eSystemLoopbackExternalDualSyncSelfTest.java |    33 +
 ...leSystemLoopbackExternalPrimarySelfTest.java |    33 +
 ...SystemLoopbackExternalSecondarySelfTest.java |    34 +
 ...condaryFileSystemInitializationSelfTest.java |   217 +
 ...teHadoopFileSystemShmemAbstractSelfTest.java |    94 +
 ...ileSystemShmemEmbeddedDualAsyncSelfTest.java |    33 +
 ...FileSystemShmemEmbeddedDualSyncSelfTest.java |    33 +
 ...pFileSystemShmemEmbeddedPrimarySelfTest.java |    33 +
 ...ileSystemShmemEmbeddedSecondarySelfTest.java |    33 +
 ...ileSystemShmemExternalDualAsyncSelfTest.java |    33 +
 ...FileSystemShmemExternalDualSyncSelfTest.java |    33 +
 ...pFileSystemShmemExternalPrimarySelfTest.java |    33 +
 ...ileSystemShmemExternalSecondarySelfTest.java |    33 +
 .../collections/HadoopAbstractMapTest.java      |   175 +
 .../HadoopConcurrentHashMultimapSelftest.java   |   280 +
 .../collections/HadoopHashMapSelfTest.java      |   133 +
 .../collections/HadoopSkipListSelfTest.java     |   320 +
 .../streams/HadoopDataStreamSelfTest.java       |   153 +
 .../taskexecutor/HadoopExecutorServiceTest.java |   119 +
 .../HadoopExternalTaskExecutionSelfTest.java    |   232 +
 .../HadoopExternalCommunicationSelfTest.java    |   222 +
 .../impl/util/BasicUserNameMapperSelfTest.java  |   134 +
 .../util/ChainedUserNameMapperSelfTest.java     |   111 +
 .../util/KerberosUserNameMapperSelfTest.java    |   100 +
 .../collections/HadoopAbstractMapTest.java      |   172 -
 .../HadoopConcurrentHashMultimapSelftest.java   |   278 -
 .../collections/HadoopHashMapSelfTest.java      |   177 -
 .../collections/HadoopSkipListSelfTest.java     |   318 -
 .../streams/HadoopDataStreamSelfTest.java       |   150 -
 .../hadoop/state/HadoopGroupingTestState.java   |    40 +
 .../state/HadoopJobTrackerSelfTestState.java    |    45 +
 .../HadoopMapReduceEmbeddedSelfTestState.java   |    32 +
 .../HadoopTaskExecutionSelfTestValues.java      |    51 +
 .../taskexecutor/HadoopExecutorServiceTest.java |   118 -
 .../HadoopExternalTaskExecutionSelfTest.java    |   232 -
 .../HadoopExternalCommunicationSelfTest.java    |   220 -
 .../testsuites/IgniteHadoopTestSuite.java       |   131 +-
 .../IgniteIgfsLinuxAndMacOSTestSuite.java       |    25 +-
 modules/hibernate/pom.xml                       |     2 +-
 modules/ignored-tests/README.txt                |     4 +
 modules/ignored-tests/pom.xml                   |   233 +
 .../testsuites/IgniteIgnoredTestSuite.java      |    57 +
 .../apache/ignite/testsuites/package-info.java  |    22 +
 modules/indexing/pom.xml                        |     9 +-
 .../query/h2/GridH2ResultSetIterator.java       |    62 +-
 .../processors/query/h2/IgniteH2Indexing.java   |   795 +-
 .../query/h2/opt/GridH2AbstractKeyValueRow.java |    95 +-
 .../query/h2/opt/GridH2CollocationModel.java    |   783 +
 .../processors/query/h2/opt/GridH2Cursor.java   |    36 +-
 .../query/h2/opt/GridH2DefaultTableEngine.java  |    38 +
 .../query/h2/opt/GridH2IndexBase.java           |  1426 +-
 .../query/h2/opt/GridH2KeyValueRowOffheap.java  |    17 +-
 .../query/h2/opt/GridH2MetaTable.java           |   383 +
 .../query/h2/opt/GridH2QueryContext.java        |   612 +
 .../query/h2/opt/GridH2QueryType.java           |    49 +
 .../query/h2/opt/GridH2RetryException.java      |    32 +
 .../processors/query/h2/opt/GridH2Row.java      |    86 +-
 .../query/h2/opt/GridH2RowDescriptor.java       |    28 +-
 .../query/h2/opt/GridH2RowFactory.java          |   179 +
 .../processors/query/h2/opt/GridH2Table.java    |   371 +-
 .../query/h2/opt/GridH2TreeIndex.java           |   142 +-
 .../processors/query/h2/opt/GridH2Utils.java    |   133 -
 .../query/h2/opt/GridH2ValueCacheObject.java    |    22 +-
 .../query/h2/opt/GridLuceneIndex.java           |     7 +-
 .../processors/query/h2/sql/GridSqlAlias.java   |    12 +
 .../processors/query/h2/sql/GridSqlColumn.java  |    22 +-
 .../processors/query/h2/sql/GridSqlConst.java   |     5 +
 .../processors/query/h2/sql/GridSqlElement.java |    11 +
 .../processors/query/h2/sql/GridSqlJoin.java    |    17 +-
 .../query/h2/sql/GridSqlOperation.java          |     2 +-
 .../query/h2/sql/GridSqlOperationType.java      |     8 +-
 .../query/h2/sql/GridSqlQueryParser.java        |    97 +-
 .../query/h2/sql/GridSqlQuerySplitter.java      |   299 +-
 .../processors/query/h2/sql/GridSqlSelect.java  |    11 +-
 .../processors/query/h2/sql/GridSqlTable.java   |    70 +
 .../processors/query/h2/sql/GridSqlType.java    |     5 +
 .../query/h2/twostep/GridMapQueryExecutor.java  |   451 +-
 .../query/h2/twostep/GridMergeIndex.java        |    75 +-
 .../h2/twostep/GridMergeIndexUnsorted.java      |     6 +-
 .../query/h2/twostep/GridMergeTable.java        |     4 +-
 .../h2/twostep/GridReduceQueryExecutor.java     |   343 +-
 .../query/h2/twostep/GridThreadLocalTable.java  |    68 +-
 .../query/h2/twostep/msg/GridH2Array.java       |     9 +-
 .../query/h2/twostep/msg/GridH2Boolean.java     |    10 +-
 .../query/h2/twostep/msg/GridH2Byte.java        |     9 +-
 .../query/h2/twostep/msg/GridH2Bytes.java       |    11 +-
 .../query/h2/twostep/msg/GridH2CacheObject.java |     9 +-
 .../query/h2/twostep/msg/GridH2Date.java        |     9 +-
 .../query/h2/twostep/msg/GridH2Decimal.java     |    11 +-
 .../query/h2/twostep/msg/GridH2Double.java      |     9 +-
 .../query/h2/twostep/msg/GridH2Float.java       |     9 +-
 .../query/h2/twostep/msg/GridH2Geometry.java    |    11 +-
 .../h2/twostep/msg/GridH2IndexRangeRequest.java |   208 +
 .../twostep/msg/GridH2IndexRangeResponse.java   |   279 +
 .../query/h2/twostep/msg/GridH2Integer.java     |    20 +-
 .../query/h2/twostep/msg/GridH2JavaObject.java  |    11 +-
 .../query/h2/twostep/msg/GridH2Long.java        |     9 +-
 .../query/h2/twostep/msg/GridH2Null.java        |    15 +-
 .../h2/twostep/msg/GridH2QueryRequest.java      |   401 +
 .../query/h2/twostep/msg/GridH2RowMessage.java  |   116 +
 .../query/h2/twostep/msg/GridH2RowRange.java    |   181 +
 .../h2/twostep/msg/GridH2RowRangeBounds.java    |   188 +
 .../query/h2/twostep/msg/GridH2Short.java       |     9 +-
 .../query/h2/twostep/msg/GridH2String.java      |     9 +-
 .../query/h2/twostep/msg/GridH2Time.java        |     9 +-
 .../query/h2/twostep/msg/GridH2Timestamp.java   |    11 +-
 .../query/h2/twostep/msg/GridH2Uuid.java        |     9 +-
 .../h2/twostep/msg/GridH2ValueMessage.java      |     2 +-
 .../twostep/msg/GridH2ValueMessageFactory.java  |    22 +-
 .../CacheAbstractQueryMetricsSelfTest.java      |    10 +-
 .../CacheBinaryKeyConcurrentQueryTest.java      |   298 +
 .../cache/CacheIndexingOffheapCleanupTest.java  |   178 +
 .../CacheOffheapBatchIndexingBaseTest.java      |   313 +
 .../CacheOffheapBatchIndexingMultiTypeTest.java |   108 +
 ...CacheOffheapBatchIndexingSingleTypeTest.java |   161 +
 .../CacheOperationsWithExpirationTest.java      |   355 +
 .../cache/CacheSqlQueryValueCopySelfTest.java   |   226 +
 .../ClientReconnectAfterClusterRestartTest.java |   225 +
 .../cache/GridCacheOffheapIndexGetSelfTest.java |    48 +
 ...idCacheReduceQueryMultithreadedSelfTest.java |   168 -
 ...niteBinaryObjectLocalQueryArgumentsTest.java |    28 +
 ...aryObjectQueryArgumentsOffheapLocalTest.java |    28 +
 ...teBinaryObjectQueryArgumentsOffheapTest.java |    30 +
 .../IgniteBinaryObjectQueryArgumentsTest.java   |   472 +-
 .../IgniteCacheAbstractFieldsQuerySelfTest.java |     2 +-
 .../cache/IgniteCacheAbstractQuerySelfTest.java |    64 +-
 .../IgniteCacheConfigVariationsQueryTest.java   |   505 +
 .../IgniteCacheCrossCacheJoinRandomTest.java    |   442 +
 ...acheDistributedJoinCollocatedAndNotTest.java |   365 +
 ...acheDistributedJoinCustomAffinityMapper.java |   262 +
 .../IgniteCacheDistributedJoinNoIndexTest.java  |   299 +
 ...ributedJoinPartitionedAndReplicatedTest.java |   487 +
 ...CacheDistributedJoinQueryConditionsTest.java |   624 +
 .../cache/IgniteCacheDistributedJoinTest.java   |   316 +
 ...PartitionedAndReplicatedCollocationTest.java |   399 +
 ...teCacheJoinPartitionedAndReplicatedTest.java |   316 +
 ...IgniteCacheJoinQueryWithAffinityKeyTest.java |   646 +
 ...eLockPartitionOnAffinityRunAbstractTest.java |   430 +
 ...PartitionOnAffinityRunAtomicCacheOpTest.java |   329 +
 ...niteCacheLockPartitionOnAffinityRunTest.java |   852 ++
 ...LockPartitionOnAffinityRunTxCacheOpTest.java |    33 +
 ...titionOnAffinityRunWithCollisionSpiTest.java |   204 +
 .../cache/IgniteCacheOffheapEvictQueryTest.java |     2 +-
 .../cache/IgniteCacheOffheapIndexScanTest.java  |   195 +
 ...IgniteCachePrimitiveFieldsQuerySelfTest.java |   134 +
 .../cache/IgniteCacheQueriesLoadTest1.java      |   604 +
 .../IgniteCacheQueryH2IndexingLeakTest.java     |   214 +
 .../cache/IgniteCacheQueryIndexSelfTest.java    |     2 +-
 .../cache/IgniteCacheQueryLoadSelfTest.java     |    12 +-
 .../IgniteCacheStarvationOnRebalanceTest.java   |   166 +
 .../cache/IgniteCacheUnionDuplicatesTest.java   |   151 +
 .../cache/IgniteClientReconnectQueriesTest.java |     4 +-
 .../cache/IgniteCrossCachesJoinsQueryTest.java  |  1641 +++
 .../IgniteCacheQueryNoRebalanceSelfTest.java    |    82 +
 ...QueryNodeRestartDistributedJoinSelfTest.java |   476 +
 .../IgniteCacheQueryNodeRestartSelfTest2.java   |     3 +
 ...gniteCacheReplicatedFieldsQuerySelfTest.java |     6 +-
 .../IgniteCacheReplicatedQuerySelfTest.java     |    54 +-
 .../IgniteCacheLocalFieldsQuerySelfTest.java    |    16 +
 ...dCacheAbstractReduceFieldsQuerySelfTest.java |   420 -
 ...ridCacheReduceFieldsQueryAtomicSelfTest.java |    38 -
 ...GridCacheReduceFieldsQueryLocalSelfTest.java |    37 -
 ...cheReduceFieldsQueryPartitionedSelfTest.java |    59 -
 ...acheReduceFieldsQueryReplicatedSelfTest.java |    37 -
 .../query/IgniteSqlSchemaIndexingTest.java      |     5 +-
 .../query/IgniteSqlSplitterSelfTest.java        |   908 +-
 .../h2/GridIndexingSpiAbstractSelfTest.java     |   147 +-
 .../query/h2/opt/GridH2TableSelfTest.java       |    10 +-
 .../h2/sql/AbstractH2CompareQueryTest.java      |   165 +-
 .../query/h2/sql/GridQueryParsingTest.java      |    30 +-
 .../H2CompareBigQueryDistributedJoinsTest.java  |    28 +
 .../query/h2/sql/H2CompareBigQueryTest.java     |   119 +-
 .../IgniteBinaryCacheQueryTestSuite.java        |     3 -
 .../IgniteBinaryCacheQueryTestSuite2.java       |     3 +
 .../IgniteCacheAffinityRunTestSuite.java        |    45 +
 ...gniteCacheConfigVariationQueryTestSuite.java |    41 +
 .../IgniteCacheQuerySelfTestSuite.java          |    44 +-
 .../IgniteCacheQuerySelfTestSuite2.java         |    14 +-
 .../IgniteCacheQuerySelfTestSuite3.java         |    36 +-
 .../IgniteCacheQuerySelfTestSuite4.java         |     7 +
 .../IgniteCacheWithIndexingTestSuite.java       |    13 +-
 modules/jcl/pom.xml                             |     2 +-
 modules/jms11/pom.xml                           |     2 +-
 .../stream/jms11/IgniteJmsStreamerTest.java     |   206 +-
 .../jms11/IgniteJmsStreamerTestSuite.java       |     2 +-
 modules/jta/pom.xml                             |     2 +-
 .../websphere/WebSphereLibertyTmFactory.java    |    77 +
 .../cache/jta/websphere/WebSphereTmFactory.java |   244 +
 .../cache/jta/websphere/package-info.java       |    22 +
 ...titionedCacheJtaLookupClassNameSelfTest.java |     4 +-
 .../ignite/testsuites/IgniteJtaTestSuite.java   |     3 +-
 modules/kafka/README.txt                        |    85 +-
 modules/kafka/pom.xml                           |     5 +-
 .../ignite/stream/kafka/KafkaStreamer.java      |     4 +-
 .../kafka/connect/IgniteSinkConnector.java      |     9 +
 .../kafka/connect/IgniteSourceConnector.java    |    90 +
 .../kafka/connect/IgniteSourceConstants.java    |    44 +
 .../stream/kafka/connect/IgniteSourceTask.java  |   363 +
 .../stream/kafka/connect/package-info.java      |    21 +
 .../serialization/CacheEventConverter.java      |    66 +
 .../serialization/CacheEventDeserializer.java   |    54 +
 .../serialization/CacheEventSerializer.java     |    54 +
 .../connect/serialization/package-info.java     |    21 +
 .../kafka/IgniteKafkaStreamerSelfTestSuite.java |     4 +-
 .../kafka/KafkaIgniteStreamerSelfTest.java      |    11 +-
 .../ignite/stream/kafka/TestKafkaBroker.java    |    27 +-
 .../kafka/connect/IgniteSinkConnectorTest.java  |    32 +-
 .../connect/IgniteSourceConnectorMock.java      |    30 +
 .../connect/IgniteSourceConnectorTest.java      |   355 +
 .../kafka/connect/IgniteSourceTaskMock.java     |    31 +
 .../kafka/connect/TestCacheEventFilter.java     |    31 +
 .../kafka/src/test/resources/example-ignite.xml |     4 +-
 modules/log4j/pom.xml                           |     2 +-
 modules/log4j2/pom.xml                          |     2 +-
 modules/mesos/pom.xml                           |    42 +-
 .../apache/ignite/mesos/ClusterProperties.java  |   133 +-
 .../apache/ignite/mesos/IgniteFramework.java    |    23 +-
 .../ignite/mesos/resource/IgniteProvider.java   |   198 +-
 .../ignite/mesos/resource/JettyServer.java      |    16 +-
 .../ignite/mesos/resource/ResourceProvider.java |    78 +-
 modules/mqtt/pom.xml                            |     2 +-
 modules/osgi-karaf/pom.xml                      |     2 +-
 .../osgi-karaf/src/main/resources/features.xml  |    12 +-
 modules/osgi-paxlogging/pom.xml                 |     2 +-
 modules/osgi/pom.xml                            |     2 +-
 modules/platforms/cpp/DEVNOTES.txt              |    66 +-
 modules/platforms/cpp/Makefile.am               |    61 +
 modules/platforms/cpp/Makefile.amrel            |    49 +
 modules/platforms/cpp/README.txt                |    29 +-
 modules/platforms/cpp/binary/Makefile.am        |    69 +
 .../platforms/cpp/binary/include/Makefile.am    |    46 +
 .../cpp/binary/include/ignite/binary/binary.h   |    34 +
 .../include/ignite/binary/binary_consts.h       |    86 +
 .../include/ignite/binary/binary_containers.h   |   650 +
 .../include/ignite/binary/binary_raw_reader.h   |   408 +
 .../include/ignite/binary/binary_raw_writer.h   |   376 +
 .../include/ignite/binary/binary_reader.h       |   446 +
 .../binary/include/ignite/binary/binary_type.h  |   310 +
 .../include/ignite/binary/binary_writer.h       |   414 +
 .../include/ignite/impl/binary/binary_common.h  |   194 +
 .../ignite/impl/binary/binary_id_resolver.h     |   104 +
 .../ignite/impl/binary/binary_reader_impl.h     |  1426 ++
 .../include/ignite/impl/binary/binary_schema.h  |   136 +
 .../ignite/impl/binary/binary_type_handler.h    |   102 +
 .../ignite/impl/binary/binary_type_manager.h    |   120 +
 .../ignite/impl/binary/binary_type_snapshot.h   |   122 +
 .../ignite/impl/binary/binary_type_updater.h    |    53 +
 .../include/ignite/impl/binary/binary_utils.h   |   633 +
 .../ignite/impl/binary/binary_writer_impl.h     |   985 ++
 .../include/ignite/impl/interop/interop.h       |    25 +
 .../ignite/impl/interop/interop_input_stream.h  |   250 +
 .../ignite/impl/interop/interop_memory.h        |   269 +
 .../ignite/impl/interop/interop_output_stream.h |   250 +
 .../interop/interop_stream_position_guard.h     |    79 +
 .../cpp/binary/project/vs/binary.vcxproj        |   233 +
 .../binary/project/vs/binary.vcxproj.filters    |   145 +
 .../cpp/binary/src/binary/binary_containers.cpp |    76 +
 .../cpp/binary/src/binary/binary_raw_reader.cpp |   166 +
 .../cpp/binary/src/binary/binary_raw_writer.cpp |   167 +
 .../cpp/binary/src/binary/binary_reader.cpp     |   173 +
 .../cpp/binary/src/binary/binary_type.cpp       |    51 +
 .../cpp/binary/src/binary/binary_writer.cpp     |   174 +
 .../src/impl/binary/binary_reader_impl.cpp      |   921 ++
 .../binary/src/impl/binary/binary_schema.cpp    |   135 +
 .../src/impl/binary/binary_type_handler.cpp     |    78 +
 .../src/impl/binary/binary_type_manager.cpp     |   201 +
 .../src/impl/binary/binary_type_snapshot.cpp    |    70 +
 .../src/impl/binary/binary_type_updater.cpp     |    32 +
 .../cpp/binary/src/impl/binary/binary_utils.cpp |   303 +
 .../src/impl/binary/binary_writer_impl.cpp      |   770 +
 .../src/impl/interop/interop_input_stream.cpp   |   238 +
 .../binary/src/impl/interop/interop_memory.cpp  |   171 +
 .../src/impl/interop/interop_output_stream.cpp  |   234 +
 modules/platforms/cpp/common/Makefile.am        |    53 +-
 modules/platforms/cpp/common/configure.ac       |    62 -
 .../platforms/cpp/common/ignite-common.pc.in    |     9 -
 .../platforms/cpp/common/include/Makefile.am    |    22 +-
 .../common/include/ignite/common/big_integer.h  |   523 +
 .../cpp/common/include/ignite/common/bits.h     |   218 +
 .../common/include/ignite/common/concurrent.h   |   196 +-
 .../cpp/common/include/ignite/common/decimal.h  |   527 +
 .../include/ignite/common/default_allocator.h   |    95 +
 .../include/ignite/common/dynamic_size_array.h  |   415 +
 .../cpp/common/include/ignite/common/exports.h  |   182 -
 .../include/ignite/common/fixed_size_array.h    |   288 +
 .../cpp/common/include/ignite/common/java.h     |   743 -
 .../cpp/common/include/ignite/common/utils.h    |   226 +-
 .../platforms/cpp/common/include/ignite/date.h  |   138 +
 .../platforms/cpp/common/include/ignite/guid.h  |   172 +
 .../cpp/common/include/ignite/ignite_error.h    |   294 +
 .../cpp/common/include/ignite/timestamp.h       |   166 +
 .../cpp/common/os/linux/include/Makefile.am     |     9 +-
 .../os/linux/include/ignite/common/common.h     |    57 +-
 .../linux/include/ignite/common/concurrent_os.h |     2 +-
 .../cpp/common/os/linux/src/common.cpp          |    59 -
 .../os/linux/src/common/concurrent_os.cpp       |   175 +
 .../cpp/common/os/linux/src/common/utils.cpp    |   136 +
 .../cpp/common/os/linux/src/concurrent_os.cpp   |   175 -
 .../os/win/include/ignite/common/common.h       |    26 +-
 .../win/include/ignite/common/concurrent_os.h   |     4 +-
 .../platforms/cpp/common/os/win/src/common.cpp  |    65 -
 .../common/os/win/src/common/concurrent_os.cpp  |   175 +
 .../cpp/common/os/win/src/common/utils.cpp      |   142 +
 .../cpp/common/os/win/src/concurrent_os.cpp     |   175 -
 .../cpp/common/project/vs/common.vcxproj        |    78 +-
 .../common/project/vs/common.vcxproj.filters    |    75 +-
 .../platforms/cpp/common/project/vs/module.def  |   132 -
 .../cpp/common/src/common/big_integer.cpp       |   829 ++
 .../platforms/cpp/common/src/common/bits.cpp    |   233 +
 .../cpp/common/src/common/concurrent.cpp        |   105 +
 .../platforms/cpp/common/src/common/decimal.cpp |   275 +
 modules/platforms/cpp/common/src/concurrent.cpp |    94 -
 modules/platforms/cpp/common/src/date.cpp       |    83 +
 modules/platforms/cpp/common/src/exports.cpp    |   545 -
 modules/platforms/cpp/common/src/guid.cpp       |    65 +
 .../platforms/cpp/common/src/ignite_error.cpp   |   226 +
 modules/platforms/cpp/common/src/java.cpp       |  2779 ----
 modules/platforms/cpp/common/src/timestamp.cpp  |   117 +
 modules/platforms/cpp/configure.ac              |   108 +
 modules/platforms/cpp/configure.acrel           |    93 +
 modules/platforms/cpp/core-test/Makefile.am     |    67 +-
 .../cpp/core-test/config/cache-query.xml        |    44 +-
 .../cpp/core-test/config/cache-test.xml         |     6 +
 modules/platforms/cpp/core-test/configure.ac    |    62 -
 .../platforms/cpp/core-test/include/Makefile.am |    10 +-
 .../include/ignite/binary_test_utils.h          |    96 +
 .../cpp/core-test/project/vs/core-test.vcxproj  |    25 +-
 .../project/vs/core-test.vcxproj.filters        |    23 +-
 .../src/binary_reader_writer_raw_test.cpp       |   124 +
 .../core-test/src/binary_reader_writer_test.cpp |   192 +
 .../cpp/core-test/src/binary_session_test.cpp   |    36 +
 .../platforms/cpp/core-test/src/bits_test.cpp   |   124 +
 .../cpp/core-test/src/cache_query_test.cpp      |  1093 +-
 .../platforms/cpp/core-test/src/cache_test.cpp  |    24 +
 .../cpp/core-test/src/concurrent_test.cpp       |    93 +
 .../cpp/core-test/src/decimal_test.cpp          |  1101 ++
 .../core-test/src/dynamic_size_array_test.cpp   |   360 +
 .../cpp/core-test/src/fixed_size_array_test.cpp |   208 +
 .../cpp/core-test/src/ignite_error_test.cpp     |    45 +
 .../cpp/core-test/src/interop_test.cpp          |   148 +
 .../cpp/core-test/src/transactions_test.cpp     |   639 +
 modules/platforms/cpp/core/Makefile.am          |    87 +-
 modules/platforms/cpp/core/configure.ac         |    62 -
 modules/platforms/cpp/core/include/Makefile.am  |    84 +-
 .../cpp/core/include/ignite/binary/binary.h     |    34 -
 .../core/include/ignite/binary/binary_consts.h  |    86 -
 .../include/ignite/binary/binary_containers.h   |   530 -
 .../include/ignite/binary/binary_raw_reader.h   |   355 -
 .../include/ignite/binary/binary_raw_writer.h   |   331 -
 .../core/include/ignite/binary/binary_reader.h  |   389 -
 .../core/include/ignite/binary/binary_type.h    |   310 -
 .../core/include/ignite/binary/binary_writer.h  |   367 -
 .../cpp/core/include/ignite/cache/cache.h       |   202 +-
 .../cpp/core/include/ignite/cache/cache_entry.h |    45 +-
 .../core/include/ignite/cache/cache_peek_mode.h |     6 +-
 .../cpp/core/include/ignite/cache/query/query.h |     6 +-
 .../include/ignite/cache/query/query_argument.h |    39 +-
 .../include/ignite/cache/query/query_cursor.h   |    76 +-
 .../ignite/cache/query/query_fields_cursor.h    |    56 +-
 .../ignite/cache/query/query_fields_row.h       |    59 +-
 .../include/ignite/cache/query/query_scan.h     |    18 +-
 .../core/include/ignite/cache/query/query_sql.h |    76 +-
 .../ignite/cache/query/query_sql_fields.h       |   126 +-
 .../include/ignite/cache/query/query_text.h     |     6 +-
 .../platforms/cpp/core/include/ignite/guid.h    |   117 -
 .../platforms/cpp/core/include/ignite/ignite.h  |    49 +-
 .../core/include/ignite/ignite_configuration.h  |    12 +-
 .../cpp/core/include/ignite/ignite_error.h      |   265 -
 .../cpp/core/include/ignite/ignition.h          |     9 +-
 .../include/ignite/impl/binary/binary_common.h  |   188 -
 .../ignite/impl/binary/binary_id_resolver.h     |   106 -
 .../ignite/impl/binary/binary_reader_impl.h     |  1309 --
 .../include/ignite/impl/binary/binary_schema.h  |   136 -
 .../ignite/impl/binary/binary_type_handler.h    |   102 -
 .../ignite/impl/binary/binary_type_manager.h    |   120 -
 .../ignite/impl/binary/binary_type_snapshot.h   |   122 -
 .../ignite/impl/binary/binary_type_updater.h    |    53 -
 .../impl/binary/binary_type_updater_impl.h      |     8 +-
 .../include/ignite/impl/binary/binary_utils.h   |   344 -
 .../ignite/impl/binary/binary_writer_impl.h     |   913 --
 .../core/include/ignite/impl/cache/cache_impl.h |    75 +-
 .../ignite/impl/cache/query/query_batch.h       |   148 +
 .../impl/cache/query/query_fields_row_impl.h    |    50 +-
 .../ignite/impl/cache/query/query_impl.h        |    39 +-
 .../core/include/ignite/impl/handle_registry.h  |     6 +-
 .../include/ignite/impl/ignite_environment.h    |    18 +-
 .../cpp/core/include/ignite/impl/ignite_impl.h  |    71 +-
 .../core/include/ignite/impl/interop/interop.h  |    25 -
 .../impl/interop/interop_external_memory.h      |    54 +
 .../ignite/impl/interop/interop_input_stream.h  |   250 -
 .../ignite/impl/interop/interop_memory.h        |   280 -
 .../ignite/impl/interop/interop_output_stream.h |   250 -
 .../interop/interop_stream_position_guard.h     |    79 -
 .../ignite/impl/interop/interop_target.h        |   153 +
 .../cpp/core/include/ignite/impl/operations.h   |   134 +-
 .../ignite/impl/transactions/transaction_impl.h |   220 +
 .../impl/transactions/transactions_impl.h       |   138 +
 .../include/ignite/transactions/transaction.h   |   278 +
 .../ignite/transactions/transaction_consts.h    |   144 +
 .../ignite/transactions/transaction_metrics.h   |   181 +
 .../include/ignite/transactions/transactions.h  |   180 +
 modules/platforms/cpp/core/namespaces.dox       |    10 +-
 .../cpp/core/os/linux/include/Makefile.am       |    23 -
 .../core/os/linux/include/ignite/impl/utils.h   |   155 -
 .../cpp/core/os/linux/src/impl/utils.cpp        |   439 -
 .../cpp/core/os/win/include/ignite/impl/utils.h |   155 -
 .../cpp/core/os/win/src/impl/utils.cpp          |   453 -
 .../platforms/cpp/core/project/vs/core.vcxproj  |    92 +-
 .../cpp/core/project/vs/core.vcxproj.filters    |   181 +-
 .../cpp/core/src/binary/binary_containers.cpp   |    76 -
 .../cpp/core/src/binary/binary_raw_reader.cpp   |   145 -
 .../cpp/core/src/binary/binary_raw_writer.cpp   |   147 -
 .../cpp/core/src/binary/binary_reader.cpp       |   152 -
 .../cpp/core/src/binary/binary_type.cpp         |    51 -
 .../cpp/core/src/binary/binary_writer.cpp       |   154 -
 modules/platforms/cpp/core/src/guid.cpp         |    65 -
 modules/platforms/cpp/core/src/ignite.cpp       |    12 +-
 modules/platforms/cpp/core/src/ignite_error.cpp |   222 -
 modules/platforms/cpp/core/src/ignition.cpp     |    24 +-
 .../core/src/impl/binary/binary_reader_impl.cpp |   760 -
 .../cpp/core/src/impl/binary/binary_schema.cpp  |   135 -
 .../src/impl/binary/binary_type_handler.cpp     |    78 -
 .../src/impl/binary/binary_type_manager.cpp     |   201 -
 .../src/impl/binary/binary_type_snapshot.cpp    |    70 -
 .../src/impl/binary/binary_type_updater.cpp     |    32 -
 .../impl/binary/binary_type_updater_impl.cpp    |     3 +-
 .../cpp/core/src/impl/binary/binary_utils.cpp   |   211 -
 .../core/src/impl/binary/binary_writer_impl.cpp |   623 -
 .../cpp/core/src/impl/cache/cache_impl.cpp      |   141 +-
 .../core/src/impl/cache/query/query_batch.cpp   |    52 +
 .../core/src/impl/cache/query/query_impl.cpp    |   183 +-
 .../cpp/core/src/impl/ignite_environment.cpp    |     3 +-
 .../platforms/cpp/core/src/impl/ignite_impl.cpp |    30 +-
 .../impl/interop/interop_external_memory.cpp    |    45 +
 .../src/impl/interop/interop_input_stream.cpp   |   235 -
 .../core/src/impl/interop/interop_memory.cpp    |   182 -
 .../src/impl/interop/interop_output_stream.cpp  |   233 -
 .../core/src/impl/interop/interop_target.cpp    |   179 +
 .../src/impl/transactions/transaction_impl.cpp  |   196 +
 .../src/impl/transactions/transactions_impl.cpp |   205 +
 .../cpp/core/src/transactions/transaction.cpp   |   204 +
 .../cpp/core/src/transactions/transactions.cpp  |   142 +
 modules/platforms/cpp/cpp.dxg                   |     6 +-
 modules/platforms/cpp/examples/Makefile.am      |    26 +-
 modules/platforms/cpp/examples/README.txt       |    16 +-
 .../cpp/examples/config/example-cache.xml       |    77 -
 modules/platforms/cpp/examples/configure.ac     |    45 +-
 .../platforms/cpp/examples/include/Makefile.am  |     9 +-
 .../examples/include/ignite/examples/address.h  |    26 +-
 .../include/ignite/examples/organization.h      |    33 +-
 .../examples/include/ignite/examples/person.h   |   110 +
 .../cpp/examples/odbc-example/Makefile.am       |    57 +
 .../odbc-example/config/example-odbc.xml        |   113 +
 .../project/vs/odbc-example.vcxproj             |   108 +
 .../project/vs/odbc-example.vcxproj.filters     |    28 +
 .../examples/odbc-example/src/odbc_example.cpp  |   286 +
 .../cpp/examples/project/vs/ignite-examples.sln |    17 +-
 .../examples/project/vs/ignite-examples.vcxproj |   107 -
 .../project/vs/ignite-examples.vcxproj.filters  |    30 -
 .../cpp/examples/putget-example/Makefile.am     |    56 +
 .../putget-example/config/example-cache.xml     |    75 +
 .../project/vs/putget-example.vcxproj           |   107 +
 .../project/vs/putget-example.vcxproj.filters   |    30 +
 .../putget-example/src/putget_example.cpp       |   126 +
 .../cpp/examples/query-example/Makefile.am      |    56 +
 .../query-example/config/query-example.xml      |   121 +
 .../project/vs/query-example.vcxproj            |   108 +
 .../project/vs/query-example.vcxproj.filters    |    27 +
 .../query-example/src/query_example.cpp         |   459 +
 .../cpp/examples/src/putgetexample.cpp          |   126 -
 modules/platforms/cpp/ignite/Makefile.am        |    40 +-
 modules/platforms/cpp/ignite/configure.ac       |    62 -
 .../cpp/ignite/project/vs/ignite.vcxproj        |    47 +-
 .../ignite/project/vs/ignite.vcxproj.filters    |     8 -
 modules/platforms/cpp/ignite/src/ignite.cpp     |    10 +-
 modules/platforms/cpp/jni/Makefile.am           |    62 +
 modules/platforms/cpp/jni/include/Makefile.am   |    25 +
 .../cpp/jni/include/ignite/jni/exports.h        |   191 +
 .../platforms/cpp/jni/include/ignite/jni/java.h |   787 +
 .../cpp/jni/include/ignite/jni/utils.h          |   101 +
 .../platforms/cpp/jni/os/linux/src/utils.cpp    |   417 +
 modules/platforms/cpp/jni/os/win/src/utils.cpp  |   428 +
 modules/platforms/cpp/jni/project/README.TXT    |     1 +
 modules/platforms/cpp/jni/project/vs/README.TXT |     1 +
 .../platforms/cpp/jni/project/vs/jni.vcxproj    |   205 +
 .../cpp/jni/project/vs/jni.vcxproj.filters      |    42 +
 modules/platforms/cpp/jni/project/vs/module.def |   140 +
 .../platforms/cpp/jni/project/vs/targetver.h    |    25 +
 modules/platforms/cpp/jni/src/exports.cpp       |   577 +
 modules/platforms/cpp/jni/src/java.cpp          |  3027 ++++
 modules/platforms/cpp/odbc-test/Makefile.am     |    93 +
 modules/platforms/cpp/odbc-test/README.TXT      |     1 +
 .../odbc-test/config/queries-test-noodbc.xml    |   103 +
 .../cpp/odbc-test/config/queries-test.xml       |   109 +
 .../platforms/cpp/odbc-test/include/Makefile.am |    25 +
 .../odbc-test/include/sql_test_suite_fixture.h  |   197 +
 .../include/teamcity/teamcity_messages.h        |    55 +
 .../platforms/cpp/odbc-test/include/test_type.h |   130 +
 .../cpp/odbc-test/include/test_utils.h          |    53 +
 .../cpp/odbc-test/project/vs/odbc-test.vcxproj  |   215 +
 .../project/vs/odbc-test.vcxproj.filters        |   141 +
 .../cpp/odbc-test/src/api_robustness_test.cpp   |  1006 ++
 .../src/application_data_buffer_test.cpp        |   997 ++
 .../platforms/cpp/odbc-test/src/column_test.cpp |   290 +
 .../cpp/odbc-test/src/configuration_test.cpp    |   394 +
 .../cpp/odbc-test/src/connection_info_test.cpp  |   219 +
 .../platforms/cpp/odbc-test/src/cursor_test.cpp |   205 +
 .../platforms/cpp/odbc-test/src/parser_test.cpp |    87 +
 .../cpp/odbc-test/src/queries_test.cpp          |   823 ++
 .../platforms/cpp/odbc-test/src/row_test.cpp    |   209 +
 .../src/sql_aggregate_functions_test.cpp        |   249 +
 .../src/sql_date_time_functions_test.cpp        |   213 +
 .../src/sql_numeric_functions_test.cpp          |   309 +
 .../cpp/odbc-test/src/sql_operators_test.cpp    |   214 +
 .../cpp/odbc-test/src/sql_outer_join_test.cpp   |   498 +
 .../odbc-test/src/sql_string_functions_test.cpp |   354 +
 .../odbc-test/src/sql_system_functions_test.cpp |    47 +
 .../odbc-test/src/sql_test_suite_fixture.cpp    |   288 +
 .../cpp/odbc-test/src/sql_types_test.cpp        |    60 +
 .../src/sql_value_expressions_test.cpp          |    94 +
 .../odbc-test/src/teamcity/teamcity_boost.cpp   |   159 +
 .../src/teamcity/teamcity_messages.cpp          |   150 +
 .../platforms/cpp/odbc-test/src/test_utils.cpp  |    36 +
 .../cpp/odbc-test/src/utility_test.cpp          |    81 +
 modules/platforms/cpp/odbc/Makefile.am          |    86 +
 modules/platforms/cpp/odbc/README.txt           |    89 +
 modules/platforms/cpp/odbc/include/Makefile.am  |    59 +
 .../platforms/cpp/odbc/include/ignite/odbc.h    |   260 +
 .../ignite/odbc/app/application_data_buffer.h   |   422 +
 .../odbc/include/ignite/odbc/app/parameter.h    |   138 +
 .../cpp/odbc/include/ignite/odbc/column.h       |   155 +
 .../cpp/odbc/include/ignite/odbc/common_types.h |   238 +
 .../include/ignite/odbc/config/configuration.h  |   418 +
 .../ignite/odbc/config/connection_info.h        |    98 +
 .../cpp/odbc/include/ignite/odbc/connection.h   |   276 +
 .../cpp/odbc/include/ignite/odbc/cursor.h       |   114 +
 .../ignite/odbc/diagnostic/diagnosable.h        |    82 +
 .../odbc/diagnostic/diagnosable_adapter.h       |   107 +
 .../ignite/odbc/diagnostic/diagnostic_record.h  |   165 +
 .../odbc/diagnostic/diagnostic_record_storage.h |   198 +
 .../cpp/odbc/include/ignite/odbc/dsn_config.h   |    61 +
 .../cpp/odbc/include/ignite/odbc/environment.h  |   137 +
 .../cpp/odbc/include/ignite/odbc/message.h      |   766 +
 .../odbc/include/ignite/odbc/meta/column_meta.h |   195 +
 .../include/ignite/odbc/meta/primary_key_meta.h |   188 +
 .../odbc/include/ignite/odbc/meta/table_meta.h  |   166 +
 .../cpp/odbc/include/ignite/odbc/parser.h       |   134 +
 .../odbc/include/ignite/odbc/protocol_version.h |   188 +
 .../ignite/odbc/query/column_metadata_query.h   |   146 +
 .../odbc/include/ignite/odbc/query/data_query.h |   152 +
 .../ignite/odbc/query/foreign_keys_query.h      |   143 +
 .../ignite/odbc/query/primary_keys_query.h      |   137 +
 .../cpp/odbc/include/ignite/odbc/query/query.h  |   119 +
 .../ignite/odbc/query/special_columns_query.h   |   142 +
 .../ignite/odbc/query/table_metadata_query.h    |   150 +
 .../include/ignite/odbc/query/type_info_query.h |   118 +
 .../cpp/odbc/include/ignite/odbc/result_page.h  |    98 +
 .../cpp/odbc/include/ignite/odbc/row.h          |   132 +
 .../cpp/odbc/include/ignite/odbc/statement.h    |   567 +
 .../include/ignite/odbc/system/odbc_constants.h |    41 +
 .../include/ignite/odbc/system/socket_client.h  |    92 +
 .../odbc/system/ui/dsn_configuration_window.h   |   160 +
 .../cpp/odbc/include/ignite/odbc/type_traits.h  |   316 +
 .../cpp/odbc/include/ignite/odbc/utility.h      |   180 +
 .../cpp/odbc/install/ignite-odbc-install.ini    |     6 +
 .../cpp/odbc/install/install_amd64.cmd          |    42 +
 .../platforms/cpp/odbc/install/install_x86.cmd  |    22 +
 .../odbc/os/linux/src/system/socket_client.cpp  |   120 +
 .../ignite/odbc/system/ui/custom_window.h       |   189 +
 .../win/include/ignite/odbc/system/ui/window.h  |   201 +
 .../odbc/os/win/src/system/socket_client.cpp    |   133 +
 .../odbc/os/win/src/system/ui/custom_window.cpp |   184 +
 .../src/system/ui/dsn_configuration_window.cpp  |   326 +
 .../cpp/odbc/os/win/src/system/ui/window.cpp    |   192 +
 .../cpp/odbc/os/win/src/system_dsn.cpp          |   218 +
 modules/platforms/cpp/odbc/project/README.TXT   |     1 +
 .../platforms/cpp/odbc/project/vs/README.TXT    |     1 +
 .../platforms/cpp/odbc/project/vs/module.def    |    68 +
 .../platforms/cpp/odbc/project/vs/odbc.vcxproj  |   247 +
 .../cpp/odbc/project/vs/odbc.vcxproj.filters    |   264 +
 .../odbc/src/app/application_data_buffer.cpp    |  1484 ++
 .../platforms/cpp/odbc/src/app/parameter.cpp    |   269 +
 modules/platforms/cpp/odbc/src/column.cpp       |   484 +
 modules/platforms/cpp/odbc/src/common_types.cpp |   123 +
 .../cpp/odbc/src/config/configuration.cpp       |   328 +
 .../cpp/odbc/src/config/connection_info.cpp     |   454 +
 modules/platforms/cpp/odbc/src/connection.cpp   |   374 +
 modules/platforms/cpp/odbc/src/cursor.cpp       |    82 +
 .../odbc/src/diagnostic/diagnosable_adapter.cpp |    51 +
 .../odbc/src/diagnostic/diagnostic_record.cpp   |   265 +
 .../diagnostic/diagnostic_record_storage.cpp    |   242 +
 modules/platforms/cpp/odbc/src/dsn_config.cpp   |   123 +
 modules/platforms/cpp/odbc/src/entry_points.cpp |   697 +
 modules/platforms/cpp/odbc/src/environment.cpp  |   172 +
 .../platforms/cpp/odbc/src/meta/column_meta.cpp |   274 +
 .../platforms/cpp/odbc/src/meta/table_meta.cpp  |    50 +
 modules/platforms/cpp/odbc/src/odbc.cpp         |  1368 ++
 .../platforms/cpp/odbc/src/protocol_version.cpp |   145 +
 .../odbc/src/query/column_metadata_query.cpp    |   318 +
 .../platforms/cpp/odbc/src/query/data_query.cpp |   274 +
 .../cpp/odbc/src/query/foreign_keys_query.cpp   |   131 +
 .../cpp/odbc/src/query/primary_keys_query.cpp   |   210 +
 .../odbc/src/query/special_columns_query.cpp    |   121 +
 .../cpp/odbc/src/query/table_metadata_query.cpp |   244 +
 .../cpp/odbc/src/query/type_info_query.cpp      |   394 +
 modules/platforms/cpp/odbc/src/result_page.cpp  |    58 +
 modules/platforms/cpp/odbc/src/row.cpp          |   120 +
 modules/platforms/cpp/odbc/src/statement.cpp    |   660 +
 modules/platforms/cpp/odbc/src/type_traits.cpp  |   669 +
 modules/platforms/cpp/odbc/src/utility.cpp      |   141 +
 modules/platforms/cpp/project/vs/ignite.sln     |    69 +-
 modules/platforms/cpp/project/vs/ignite.slnrel  |    49 +-
 .../platforms/cpp/project/vs/ignite_x86.slnrel  |    49 +-
 .../Apache.Ignite.AspNet.Tests.csproj           |    77 +
 .../Apache.Ignite.AspNet.Tests.snk              |   Bin 0 -> 596 bytes
 .../Apache.Ignite.AspNet.Tests/App.config       |    72 +
 .../ExpiryCacheHolderTest.cs                    |   492 +
 .../IgniteOutputCacheProviderTest.cs            |   172 +
 .../IgniteSessionStateItemCollectionTest.cs     |   267 +
 .../IgniteSessionStateStoreDataTest.cs          |   117 +
 .../IgniteSessionStateStoreProviderTest.cs      |   438 +
 .../Properties/AssemblyInfo.cs                  |    42 +
 .../Apache.Ignite.AspNet.Tests/packages.config  |    22 +
 .../Apache.Ignite.AspNet.csproj                 |    79 +
 .../Apache.Ignite.AspNet.nuspec                 |    54 +
 .../Apache.Ignite.AspNet.ruleset                |    12 +
 .../Apache.Ignite.AspNet.snk                    |   Bin 0 -> 596 bytes
 .../IgniteOutputCacheProvider.cs                |   124 +
 .../IgniteSessionStateStoreProvider.cs          |   500 +
 .../Apache.Ignite.AspNet/IgniteWebUtils.cs      |    44 +
 .../Apache.Ignite.AspNet/Impl/ConfigUtil.cs     |   110 +
 .../Impl/ExpiryCacheHolder.cs                   |   113 +
 .../Impl/IgniteSessionStateItemCollection.cs    |   534 +
 .../Impl/IgniteSessionStateStoreData.cs         |   116 +
 .../Impl/SessionStateLockResult.cs              |    91 +
 .../dotnet/Apache.Ignite.AspNet/Package-Info.cs |    26 +
 .../Properties/AssemblyInfo.cs                  |    42 +
 .../Apache.Ignite.Benchmarks.csproj             |    36 +-
 .../Apache.Ignite.Benchmarks/BenchmarkRunner.cs |     5 +-
 .../Interop/PlatformBenchmarkBase.cs            |     2 +-
 .../Properties/AssemblyInfo.cs                  |    40 +-
 .../Apache.Ignite.Core.Tests.NuGet.csproj       |    86 +-
 .../Apache.Ignite.Core.Tests.NuGet.sln          |     6 +
 .../AspNetTest.cs                               |    73 +
 .../Apache.Ignite.Core.Tests.NuGet/CacheTest.cs |    37 +-
 .../Log4NetTest.cs                              |    87 +
 .../Apache.Ignite.Core.Tests.NuGet/NLogTest.cs  |    82 +
 .../Apache.Ignite.Core.Tests.NuGet/NuGet.config |     5 +-
 .../Properties/AssemblyInfo.cs                  |    36 +-
 .../SchemaTest.cs                               |    62 +
 .../install-package.cmd                         |    10 -
 .../install-package.ps1                         |    34 +
 .../packages.config                             |    29 +
 .../Apache.Ignite.Core.Tests.TestDll.csproj     |    37 +-
 .../Properties/AssemblyInfo.cs                  |    40 +-
 .../Apache.Ignite.Core.Tests.csproj             |   189 +-
 .../Binary/BinaryBuilderSelfTest.cs             |   410 +-
 .../Binary/BinaryCompactFooterInteropTest.cs    |     1 -
 .../Binary/BinaryReaderWriterTest.cs            |   171 +
 .../Binary/BinarySelfTest.cs                    |   167 +-
 .../Binary/BinaryStringTest.cs                  |   100 +
 .../Binary/IO/BinaryStreamsTest.cs              |   151 +
 .../Binary/JavaTypeMappingTest.cs               |   158 +
 .../Binary/TypeResolverTest.cs                  |   107 +
 .../Cache/Affinity/AffinityFieldTest.cs         |   199 +
 .../Affinity/AffinityFunctionSpringTest.cs      |   184 +
 .../Cache/Affinity/AffinityFunctionTest.cs      |   485 +
 .../Cache/Affinity/AffinityKeyTest.cs           |    66 +
 .../Cache/Affinity/AffinityTest.cs              |   138 +
 .../Affinity/AffinityTopologyVersionTest.cs     |    59 +
 .../Cache/CacheAbstractTest.cs                  |    82 +-
 .../Cache/CacheAffinityFieldTest.cs             |   199 -
 .../Cache/CacheAffinityTest.cs                  |   139 -
 .../Cache/CacheConfigurationTest.cs             |   190 +-
 .../Cache/CacheNearTest.cs                      |   188 +
 .../Cache/CacheResultTest.cs                    |    75 +
 .../Cache/Query/CacheLinqTest.cs                |  1543 ++
 .../Query/CacheQueriesCodeConfigurationTest.cs  |    12 +
 .../Cache/Query/CacheQueriesTest.cs             |   303 +-
 .../Continuous/ContinuousQueryAbstractTest.cs   |    85 +-
 .../Continuous/ContinuousQueryJavaFilterTest.cs |   322 +
 .../Cache/Store/CacheParallelLoadStoreTest.cs   |     2 +-
 .../Cache/Store/CacheStoreAdapterTest.cs        |    90 +
 .../Cache/Store/CacheStoreTest.cs               |    51 +-
 .../Cache/Store/CacheTestParallelLoadStore.cs   |     9 +
 .../Cache/Store/CacheTestStore.cs               |    50 +-
 .../Collections/MultiValueDictionaryTest.cs     |    58 +
 .../Collections/ReadOnlyCollectionTest.cs       |    59 +
 .../Collections/ReadOnlyDictionaryTest.cs       |    70 +
 .../Common/IgniteGuidTest.cs                    |    62 +
 .../Compute/AbstractTaskTest.cs                 |    49 +-
 .../Compute/BinarizableClosureTaskTest.cs       |    18 +-
 .../Compute/BinarizableTaskTest.cs              |    31 +-
 .../Compute/CancellationTest.cs                 |    10 +
 .../Compute/ClosureTaskTest.cs                  |   192 +-
 .../Compute/ComputeApiTest.cs                   |   221 +-
 .../Compute/FailoverTaskSelfTest.cs             |     7 +-
 .../Compute/IgniteExceptionTaskSelfTest.cs      |    55 +-
 .../Compute/MixedClusterTest.cs                 |   123 +-
 .../Compute/ResourceTaskTest.cs                 |    59 +-
 .../Compute/SerializableClosureTaskTest.cs      |     5 +
 .../Compute/TaskAdapterTest.cs                  |    21 +-
 .../Compute/TaskResultTest.cs                   |    24 +-
 .../Config/Apache.Ignite.exe.config.test2       |     2 +-
 .../Config/Cache/Affinity/affinity-function.xml |   127 +
 .../Cache/Affinity/affinity-function2.xml       |    49 +
 .../Config/Cache/Store/cache-store-session.xml  |     3 +-
 .../Config/Compute/compute-grid1.xml            |     3 +-
 .../Config/Compute/compute-grid2.xml            |     3 +-
 .../Config/Compute/compute-grid3.xml            |     5 +-
 .../Config/Compute/compute-standalone.xml       |     5 +-
 .../Config/Dynamic/dynamic-client.xml           |     3 +-
 .../Config/Dynamic/dynamic-data-no-cfg.xml      |     3 +-
 .../Config/Dynamic/dynamic-data.xml             |     3 +-
 .../Config/Lifecycle/lifecycle-beans.xml        |     3 +-
 .../Config/Lifecycle/lifecycle-no-beans.xml     |     3 +-
 .../Config/Log/custom-log.xml                   |    50 +
 .../Config/Log/dotnet-log4j.xml                 |   143 +
 .../Config/cache-binarizables.xml               |     3 +-
 .../Config/cache-local-node.xml                 |     3 +-
 .../Config/cache-query-continuous.xml           |     4 +-
 .../Config/cache-query.xml                      |    43 +-
 .../Config/ignite-dotnet-cfg.xml                |     2 +-
 .../Config/marshaller-default.xml               |     3 +-
 .../Config/marshaller-explicit.xml              |     3 +-
 .../Config/marshaller-invalid.xml               |     3 +-
 .../native-client-test-cache-affinity.xml       |     5 +-
 .../native-client-test-cache-parallel-store.xml |     3 +-
 .../Config/native-client-test-cache-store.xml   |     3 +-
 .../Config/native-client-test-cache.xml         |     3 +-
 .../Config/reconnect-test.xml                   |    43 +
 .../Config/spring-test.xml                      |    46 +
 .../Config/start-test-grid1.xml                 |     3 +-
 .../Config/start-test-grid2.xml                 |     3 +-
 .../Config/start-test-grid3.xml                 |     3 +-
 .../ConsoleRedirectTest.cs                      |   177 +
 .../Apache.Ignite.Core.Tests/DeploymentTest.cs  |     3 +-
 .../Apache.Ignite.Core.Tests/EventsTest.cs      |   200 +-
 .../Examples/Example.cs                         |     8 +-
 .../Examples/ExamplesTest.cs                    |    48 +-
 .../Examples/PathUtil.cs                        |    10 +-
 .../Examples/ProjectFilesTest.cs                |     4 +-
 .../Apache.Ignite.Core.Tests/ExceptionsTest.cs  |   132 +-
 .../Apache.Ignite.Core.Tests/ExecutableTest.cs  |     1 -
 .../IgniteConfigurationSectionTest.cs           |    32 +
 .../IgniteConfigurationSerializerTest.cs        |   398 +-
 .../IgniteConfigurationTest.cs                  |   142 +-
 .../IgniteStartStopTest.cs                      |     4 +-
 .../Apache.Ignite.Core.Tests/LifecycleTest.cs   |     9 +
 .../Log/CustomLoggerTest.cs                     |   449 +
 .../Log/DefaultLoggerTest.cs                    |   114 +
 .../Log/Log4NetLoggerTest.cs                    |   188 +
 .../Log/NLogLoggerTest.cs                       |   166 +
 .../Apache.Ignite.Core.Tests/MessagingTest.cs   |    16 +-
 .../ProjectFilesTest.cs                         |    44 +-
 .../Properties/AssemblyInfo.cs                  |    40 +-
 .../Apache.Ignite.Core.Tests/ReconnectTest.cs   |    19 +-
 .../Services/ServiceProxyTest.cs                |    12 +-
 .../Services/ServicesTest.cs                    |   272 +-
 .../Apache.Ignite.Core.Tests/TestAppConfig.cs   |   100 +
 .../Apache.Ignite.Core.Tests/TestRunner.cs      |    76 +-
 .../Apache.Ignite.Core.Tests/TestUtils.cs       |    56 +-
 .../TypeResolverTest.cs                         |   107 -
 .../WindowsServiceTest.cs                       |   124 +
 .../dotnet/Apache.Ignite.Core.Tests/app.config  |    10 +-
 .../Apache.Ignite.Core.Tests/custom_app.config  |    34 +
 .../Apache.Ignite.Core.Tests/packages.config    |    24 +
 .../Apache.Ignite.Core.Schema.nuspec            |    52 +
 .../Apache.Ignite.Core.csproj                   |   128 +-
 .../Apache.Ignite.Core.nuspec                   |    16 +-
 .../Binary/BinaryReflectiveSerializer.cs        |   193 +-
 .../Binary/IBinaryObjectBuilder.cs              |     2 +-
 .../Cache/Affinity/AffinityFunctionContext.cs   |   120 +
 .../Cache/Affinity/AffinityKey.cs               |    11 +
 .../Cache/Affinity/AffinityTopologyVersion.cs   |   138 +
 .../Cache/Affinity/Fair/FairAffinityFunction.cs |    33 +
 .../Cache/Affinity/Fair/Package-Info.cs         |    26 +
 .../Cache/Affinity/IAffinityFunction.cs         |    82 +
 .../Cache/Affinity/Package-Info.cs              |    26 +
 .../Cache/Affinity/Rendezvous/Package-Info.cs   |    26 +
 .../Rendezvous/RendezvousAffinityFunction.cs    |    32 +
 .../Cache/CachePartialUpdateException.cs        |     6 +-
 .../Cache/Configuration/CacheConfiguration.cs   |    61 +-
 .../Configuration/NearCacheConfiguration.cs     |    75 +
 .../Cache/Configuration/Package-Info.cs         |    26 +
 .../Cache/Configuration/QueryEntity.cs          |    21 +
 .../Cache/Configuration/QueryField.cs           |    17 +-
 .../Cache/Eviction/EvictionPolicyBase.cs        |   126 +
 .../Cache/Eviction/FifoEvictionPolicy.cs        |    39 +
 .../Cache/Eviction/IEvictionPolicy.cs           |    32 +
 .../Cache/Eviction/LruEvictionPolicy.cs         |    39 +
 .../Cache/Eviction/Package-Info.cs              |    26 +
 .../Apache.Ignite.Core/Cache/ICacheLock.cs      |     2 +-
 .../Apache.Ignite.Core/Cache/ICacheMetrics.cs   |     8 +-
 .../Continuous/ContinuousQueryExtensions.cs     |    42 +
 .../Cache/Query/SqlFieldsQuery.cs               |    43 +-
 .../Apache.Ignite.Core/Cache/Query/SqlQuery.cs  |    13 +
 .../Store/CacheParallelLoadStoreAdapter.cs      |     7 +
 .../Apache.Ignite.Core/Cluster/IClusterGroup.cs |    20 +
 .../Apache.Ignite.Core/Common/JavaException.cs  |    66 +
 .../Communication/ICommunicationSpi.cs          |    37 +
 .../Communication/Package-Info.cs               |    26 +
 .../Communication/Tcp/Package-Info.cs           |    26 +
 .../Communication/Tcp/TcpCommunicationSpi.cs    |   283 +
 .../Apache.Ignite.Core/Compute/ICompute.cs      |     6 +-
 .../Configuration/AtomicConfiguration.cs        |    67 +
 .../Configuration/Package-Info.cs               |    26 +
 .../Discovery/Package-Info.cs                   |    26 +
 .../Discovery/Tcp/Multicast/Package-Info.cs     |    26 +
 .../Multicast/TcpDiscoveryMulticastIpFinder.cs  |     7 +
 .../Discovery/Tcp/Package-Info.cs               |    26 +
 .../Discovery/Tcp/Static/Package-Info.cs        |    26 +
 .../Discovery/Tcp/TcpDiscoverySpi.cs            |   161 +
 .../Apache.Ignite.Core/Events/CacheEvent.cs     |     9 +-
 .../Apache.Ignite.Core/Events/DiscoveryEvent.cs |     4 +-
 .../Apache.Ignite.Core/Events/EventBase.cs      |     2 +-
 .../Apache.Ignite.Core/Events/EventReader.cs    |    12 +-
 .../dotnet/Apache.Ignite.Core/IIgnite.cs        |    83 +
 .../Apache.Ignite.Core/IgniteConfiguration.cs   |   429 +-
 .../IgniteConfigurationSection.xsd              |  1140 +-
 .../dotnet/Apache.Ignite.Core/Ignition.cs       |   157 +-
 .../Impl/Binary/BinarizableSerializer.cs        |    22 +-
 .../Impl/Binary/BinaryFullTypeDescriptor.cs     |     8 +-
 .../Impl/Binary/BinaryObject.cs                 |     2 +
 .../Impl/Binary/BinaryObjectBuilder.cs          |    18 +-
 .../Impl/Binary/BinaryObjectHandle.cs           |    59 -
 .../Impl/Binary/BinaryObjectHeader.cs           |     5 +-
 .../Impl/Binary/BinaryReader.cs                 |    56 +-
 .../Impl/Binary/BinaryReaderExtensions.cs       |    38 +
 .../Impl/Binary/BinaryReflectiveActions.cs      |    43 +
 .../BinaryReflectiveSerializerInternal.cs       |   169 +
 .../Binary/BinarySurrogateTypeDescriptor.cs     |     6 +-
 .../Impl/Binary/BinarySystemHandlers.cs         |    21 +-
 .../Impl/Binary/BinarySystemTypeSerializer.cs   |    20 +-
 .../Impl/Binary/BinaryUtils.cs                  |   183 +-
 .../Impl/Binary/BinaryWriter.cs                 |   155 +-
 .../Impl/Binary/BinaryWriterExtensions.cs       |    78 +
 .../Impl/Binary/DateTimeHolder.cs               |     4 +-
 .../Impl/Binary/DateTimeSerializer.cs           |    48 +
 .../Impl/Binary/IBinarySerializerInternal.cs    |    42 +
 .../Impl/Binary/IBinarySystemTypeSerializer.cs  |    34 -
 .../Impl/Binary/IBinaryTypeDescriptor.cs        |     2 +-
 .../Impl/Binary/Io/BinaryHeapStream.cs          |     2 +-
 .../Impl/Binary/Io/BinaryStreamAdapter.cs       |     5 +
 .../Impl/Binary/Io/BinaryStreamBase.cs          |    25 +-
 .../Impl/Binary/Io/IBinaryStream.cs             |     2 +-
 .../Apache.Ignite.Core/Impl/Binary/JavaTypes.cs |    74 +-
 .../Impl/Binary/Marshaller.cs                   |   152 +-
 .../Impl/Binary/SerializableObjectHolder.cs     |     6 +-
 .../Impl/Binary/SerializableSerializer.cs       |    48 +
 .../Binary/Structure/BinaryStructureTracker.cs  |     7 +-
 .../Impl/Binary/UserSerializerProxy.cs          |    68 +
 .../Impl/Cache/Affinity/AffinityFunctionBase.cs |   140 +
 .../Affinity/AffinityFunctionSerializer.cs      |   277 +
 .../Cache/Affinity/PlatformAffinityFunction.cs  |    74 +
 .../Apache.Ignite.Core/Impl/Cache/CacheEntry.cs |     2 +-
 .../Impl/Cache/CacheEntryFilterHolder.cs        |    10 +-
 .../Impl/Cache/CacheEntryProcessorHolder.cs     |     8 +-
 .../Apache.Ignite.Core/Impl/Cache/CacheImpl.cs  |   295 +-
 .../Apache.Ignite.Core/Impl/Cache/CacheOp.cs    |     3 +-
 .../Cache/Event/JavaCacheEntryEventFilter.cs    |    51 +
 .../Impl/Cache/ICacheInternal.cs                |    54 +
 .../Continuous/ContinuousQueryFilterHolder.cs   |     8 +-
 .../Continuous/ContinuousQueryHandleImpl.cs     |    17 +-
 .../Impl/Cache/Query/FieldsQueryCursor.cs       |    29 +-
 .../Impl/Cache/Store/CacheStore.cs              |     4 +-
 .../Impl/Cluster/ClusterGroupImpl.cs            |    12 +
 .../Impl/Cluster/ClusterNodeImpl.cs             |     2 +-
 .../Impl/Collections/MultiValueDictionary.cs    |    26 -
 .../Impl/Collections/ReadOnlyDictionary.cs      |     2 +-
 .../Apache.Ignite.Core/Impl/Common/Classpath.cs |    12 +-
 .../Impl/Common/DelegateConverter.cs            |   171 +-
 .../Apache.Ignite.Core/Impl/Common/Fnv1Hash.cs  |     2 +-
 .../Common/IgniteConfigurationXmlSerializer.cs  |    88 +-
 .../Impl/Common/IgniteHome.cs                   |    30 +-
 .../Impl/Common/ObjectInfoHolder.cs             |    86 +
 .../Impl/Common/ObjectStringConverter.cs        |   104 +
 .../Apache.Ignite.Core/Impl/Common/Platform.cs  |    35 +
 .../Common/PlatformJavaObjectFactoryProxy.cs    |   106 +
 .../Impl/Common/ResizeableArray.cs              |    64 -
 .../Impl/Common/TypeCaster.cs                   |    12 +
 .../Impl/Compute/Closure/ComputeActionJob.cs    |     6 +-
 .../Impl/Compute/Closure/ComputeFuncJob.cs      |     8 +-
 .../Impl/Compute/Closure/ComputeOutFuncJob.cs   |     9 +-
 .../Impl/Compute/ComputeFunc.cs                 |    12 +-
 .../Impl/Compute/ComputeJob.cs                  |    16 +-
 .../Impl/Compute/ComputeJobHolder.cs            |     8 +-
 .../Impl/Compute/ComputeOutFunc.cs              |    11 +-
 .../Impl/Compute/ComputeTaskHolder.cs           |     3 +-
 .../Impl/Datastream/StreamReceiverHolder.cs     |     2 +-
 .../Impl/Events/EventTypeConverter.cs           |     3 +
 .../Apache.Ignite.Core/Impl/Events/Events.cs    |     3 +
 .../Apache.Ignite.Core/Impl/ExceptionUtils.cs   |    38 +-
 .../Apache.Ignite.Core/Impl/Handle/Handle.cs    |    12 +-
 .../Impl/Handle/HandleRegistry.cs               |    19 +-
 .../Apache.Ignite.Core/Impl/Handle/IHandle.cs   |     5 -
 .../dotnet/Apache.Ignite.Core/Impl/Ignite.cs    |   154 +-
 .../Apache.Ignite.Core/Impl/IgniteManager.cs    |    12 +-
 .../Apache.Ignite.Core/Impl/IgniteProxy.cs      |    89 +-
 .../Apache.Ignite.Core/Impl/IgniteUtils.cs      |    77 +-
 .../Impl/InteropExceptionHolder.cs              |    88 -
 .../Impl/LifecycleBeanHolder.cs                 |     2 +-
 .../Apache.Ignite.Core/Impl/Log/JavaLogger.cs   |   110 +
 .../Memory/PlatformBigEndianMemoryStream.cs     |    34 +-
 .../Impl/Memory/PlatformMemoryStream.cs         |     3 +-
 .../Impl/Memory/PlatformMemoryUtils.cs          |    30 -
 .../Impl/Memory/PlatformRawMemory.cs            |     5 +
 .../Impl/Messaging/MessageListenerHolder.cs     |    14 +-
 .../Apache.Ignite.Core/Impl/NativeMethods.cs    |     6 +
 .../Apache.Ignite.Core/Impl/PlatformTarget.cs   |    88 +-
 .../Impl/Services/ServiceDescriptor.cs          |     7 +-
 .../Impl/Services/ServiceProxyInvoker.cs        |    33 +-
 .../Impl/Services/ServiceProxySerializer.cs     |    63 +-
 .../Impl/Services/Services.cs                   |    28 +-
 .../Impl/Unmanaged/IgniteJniNativeMethods.cs    |    25 +
 .../Impl/Unmanaged/UnmanagedCallbackHandlers.cs |     9 +
 .../Impl/Unmanaged/UnmanagedCallbacks.cs        |   338 +-
 .../Impl/Unmanaged/UnmanagedUtils.cs            |    93 +-
 .../Apache.Ignite.Core/Interop/JavaObject.cs    |    80 +
 .../Apache.Ignite.Core/Interop/Package-Info.cs  |    26 +
 .../Lifecycle/ClientReconnectEventArgs.cs       |    47 +
 .../Apache.Ignite.Core/Log/CategoryLogger.cs    |    82 +
 .../dotnet/Apache.Ignite.Core/Log/ILogger.cs    |    51 +
 .../dotnet/Apache.Ignite.Core/Log/LogLevel.cs   |    53 +
 .../Apache.Ignite.Core/Log/LoggerExtensions.cs  |   320 +
 .../NuGet/LINQPad/BinaryModeExample.linq        |    94 +
 .../NuGet/LINQPad/ComputeExample.linq           |     6 +-
 .../NuGet/LINQPad/PutGetExample.linq            |     8 +-
 .../NuGet/LINQPad/QueryExample.linq             |    12 +-
 .../Properties/AssemblyInfo.cs                  |    43 +-
 .../Transactions/ITransaction.cs                |     3 +-
 .../Transactions/TransactionConfiguration.cs    |    88 +
 .../dotnet/Apache.Ignite.Core/build-common.ps1  |    77 +
 .../powershell.exe.activation_config            |    29 +
 modules/platforms/dotnet/Apache.Ignite.FxCop    |     6 +-
 .../Apache.Ignite.Linq.csproj                   |    90 +
 .../Apache.Ignite.Linq.nuspec                   |    61 +
 .../Apache.Ignite.Linq/Apache.Ignite.Linq.snk   |   Bin 0 -> 596 bytes
 .../Apache.Ignite.Linq/CacheExtensions.cs       |   120 +
 .../dotnet/Apache.Ignite.Linq/CompiledQuery.cs  |   209 +
 .../dotnet/Apache.Ignite.Linq/CompiledQuery2.cs |   257 +
 .../Apache.Ignite.Linq/ICacheQueryable.cs       |    53 +
 .../Apache.Ignite.Linq/Impl/AliasDictionary.cs  |   148 +
 .../Impl/CacheFieldsQueryExecutor.cs            |   344 +
 .../Impl/CacheFieldsQueryProvider.cs            |   239 +
 .../Impl/CacheFieldsQueryable.cs                |    40 +
 .../Impl/CacheQueryExpressionVisitor.cs         |   521 +
 .../Impl/CacheQueryModelVisitor.cs              |   502 +
 .../Apache.Ignite.Linq/Impl/CacheQueryParser.cs |    56 +
 .../Apache.Ignite.Linq/Impl/CacheQueryable.cs   |    43 +
 .../Impl/CacheQueryableBase.cs                  |   145 +
 .../Apache.Ignite.Linq/Impl/ExpressionWalker.cs |   174 +
 .../Impl/ICacheQueryableInternal.cs             |    66 +
 .../Apache.Ignite.Linq/Impl/MethodVisitor.cs    |   250 +
 .../dotnet/Apache.Ignite.Linq/Impl/QueryData.cs |    92 +
 .../dotnet/Apache.Ignite.Linq/Impl/SqlTypes.cs  |    63 +
 .../NuGet/LINQPad/QueryExample.linq             |   111 +
 .../dotnet/Apache.Ignite.Linq/Package-Info.cs   |    26 +
 .../Properties/AssemblyInfo.cs                  |    40 +
 .../dotnet/Apache.Ignite.Linq/QueryOptions.cs   |    91 +
 .../dotnet/Apache.Ignite.Linq/packages.config   |    22 +
 .../Apache.Ignite.Log4Net.csproj                |    76 +
 .../Apache.Ignite.Log4Net.nuspec                |    50 +
 .../Apache.Ignite.Log4Net.snk                   |   Bin 0 -> 596 bytes
 .../IgniteLog4NetLogger.cs                      |   123 +
 .../Properties/AssemblyInfo.cs                  |    40 +
 .../Apache.Ignite.Log4Net/packages.config       |    20 +
 .../Apache.Ignite.NLog.csproj                   |    69 +
 .../Apache.Ignite.NLog.nuspec                   |    50 +
 .../Apache.Ignite.NLog/Apache.Ignite.NLog.snk   |   Bin 0 -> 596 bytes
 .../Apache.Ignite.NLog/IgniteNLogLogger.cs      |   125 +
 .../Properties/AssemblyInfo.cs                  |    40 +
 .../dotnet/Apache.Ignite.NLog/packages.config   |    22 +
 modules/platforms/dotnet/Apache.Ignite.dxg      |     4 +-
 modules/platforms/dotnet/Apache.Ignite.sln      |   214 +-
 .../dotnet/Apache.Ignite.sln.DotSettings        |    11 +-
 .../dotnet/Apache.Ignite/Apache.Ignite.csproj   |    43 +-
 .../dotnet/Apache.Ignite/Config/Configurator.cs |    16 +-
 .../dotnet/Apache.Ignite/IgniteRunner.cs        |    20 +-
 .../Apache.Ignite/Properties/AssemblyInfo.cs    |    40 +-
 .../Apache.Ignite/Service/IgniteService.cs      |   102 +-
 .../Service/IgniteServiceInstaller.cs           |    64 +
 .../Apache.Ignite/Service/NativeMethods.cs      |    57 -
 modules/platforms/dotnet/DEVNOTES.txt           |     7 +-
 modules/platforms/dotnet/build.bat              |    94 -
 .../dotnet/examples/Apache.Ignite.Examples.sln  |    32 +-
 .../Apache.Ignite.Examples.csproj               |    50 +-
 .../examples/Apache.Ignite.Examples/App.config  |    33 +-
 .../Compute/ClosureExample.cs                   |    22 +-
 .../Compute/TaskExample.cs                      |    21 +-
 .../Datagrid/BinaryModeExample.cs               |   272 +
 .../Datagrid/ContinuousQueryExample.cs          |    26 +-
 .../Datagrid/DataStreamerExample.cs             |    20 +-
 .../Datagrid/LinqExample.cs                     |   339 +
 .../Datagrid/PutGetExample.cs                   |    19 +-
 .../Datagrid/QueryExample.cs                    |   212 +-
 .../Datagrid/StoreExample.cs                    |    25 +-
 .../Datagrid/TransactionExample.cs              |    20 +-
 .../Events/EventsExample.cs                     |    26 +-
 .../Messaging/MessagingExample.cs               |    21 +-
 .../Misc/LifecycleExample.cs                    |    27 +-
 .../Properties/AssemblyInfo.cs                  |    44 +-
 .../Services/IMapService.cs                     |     4 +-
 .../Services/ServicesExample.cs                 |    21 +-
 .../Apache.Ignite.ExamplesDll.csproj            |    43 +-
 .../Apache.Ignite.ExamplesDll/Binary/Account.cs |     6 +-
 .../Apache.Ignite.ExamplesDll/Binary/Address.cs |     2 +-
 .../Binary/Employee.cs                          |    18 +-
 .../Binary/EmployeeKey.cs                       |    88 -
 .../Binary/Organization.cs                      |     2 +-
 .../Compute/AverageSalaryJob.cs                 |    11 +-
 .../Compute/AverageSalaryTask.cs                |     9 +-
 .../Compute/CharacterCountClosure.cs            |     6 +-
 .../Compute/CharacterCountReducer.cs            |     4 +-
 .../Datagrid/ContinuousQueryFilter.cs           |     6 +-
 .../Datagrid/EmployeeStore.cs                   |    13 +-
 .../Datagrid/EmployeeStorePredicate.cs          |     5 +-
 .../Events/LocalListener.cs                     |    10 +-
 .../Messaging/LocalListener.cs                  |     8 +-
 .../Messaging/RemoteOrderedListener.cs          |    10 +-
 .../Messaging/RemoteUnorderedListener.cs        |    10 +-
 .../Properties/AssemblyInfo.cs                  |    42 +-
 .../Services/MapService.cs                      |    12 +-
 .../dotnet/examples/Config/examples-config.xml  |    98 -
 modules/rest-http/pom.xml                       |    27 +-
 .../http/jetty/GridJettyJsonConfig.java         |   195 -
 .../http/jetty/GridJettyObjectMapper.java       |   274 +
 .../http/jetty/GridJettyRestHandler.java        |   132 +-
 .../http/jetty/GridJettyRestProtocol.java       |     6 +-
 modules/scalar-2.10/pom.xml                     |     2 +-
 modules/scalar/pom.xml                          |     2 +-
 .../scalar/pimps/ScalarProjectionPimp.scala     |     4 +-
 .../scalar/pimps/ScalarTaskThreadContext.scala  |     4 +-
 modules/schedule/pom.xml                        |     2 +-
 .../processors/schedule/ScheduleFutureImpl.java |     7 +-
 .../schedule/GridScheduleSelfTest.java          |    33 +-
 modules/schema-import-db/README.txt             |     4 +
 modules/schema-import-db/pom.xml                |    55 +
 .../apache/ignite/schema/parser/DbColumn.java   |    88 +
 .../ignite/schema/parser/DbMetadataReader.java  |   147 +
 .../apache/ignite/schema/parser/DbTable.java    |    82 +
 .../parser/dialect/DB2MetadataDialect.java      |    33 +
 .../parser/dialect/DatabaseMetadataDialect.java |   102 +
 .../parser/dialect/JdbcMetadataDialect.java     |   199 +
 .../parser/dialect/MySQLMetadataDialect.java    |    82 +
 .../parser/dialect/OracleMetadataDialect.java   |   360 +
 modules/schema-import/README.txt                |    12 +-
 modules/schema-import/pom.xml                   |    16 +-
 .../ignite/schema/generator/CodeGenerator.java  |   157 +-
 .../ignite/schema/generator/GeneratorUtils.java |    70 +
 .../ignite/schema/generator/XmlGenerator.java   |   107 +-
 .../ignite/schema/model/PojoDescriptor.java     |    24 +-
 .../schema/parser/DatabaseMetadataParser.java   |    54 +-
 .../apache/ignite/schema/parser/DbColumn.java   |    76 -
 .../apache/ignite/schema/parser/DbTable.java    |    82 -
 .../parser/dialect/DB2MetadataDialect.java      |    33 -
 .../parser/dialect/DatabaseMetadataDialect.java |    75 -
 .../parser/dialect/JdbcMetadataDialect.java     |   197 -
 .../parser/dialect/MySQLMetadataDialect.java    |    61 -
 .../parser/dialect/OracleMetadataDialect.java   |   364 -
 .../ignite/schema/ui/SchemaImportApp.java       |   551 +-
 .../schema/test/AbstractSchemaImportTest.java   |    37 +-
 .../test/generator/CodeGeneratorTest.java       |    28 +-
 .../schema/test/generator/XmlGeneratorTest.java |    24 +-
 .../ignite/schema/test/model/CacheConfig.txt    |   409 +
 .../apache/ignite/schema/test/model/Objects.txt |    31 +-
 .../ignite/schema/test/model/Primitives.txt     |    31 +-
 .../org/apache/ignite/schema/test/model/Tst.txt |    31 +-
 .../schema/test/model/ignite-type-metadata.xml  |   136 +-
 .../test/parser/DbMetadataParserTest.java       |     8 +-
 modules/slf4j/pom.xml                           |     2 +-
 .../apache/ignite/logger/slf4j/Slf4jLogger.java |     2 +-
 modules/spark-2.10/pom.xml                      |     2 +-
 modules/spark/pom.xml                           |     2 +-
 .../org/apache/ignite/spark/IgniteContext.scala |    85 +-
 .../org/apache/ignite/spark/IgniteRDD.scala     |   127 +-
 .../apache/ignite/spark/JavaIgniteContext.scala |    18 +-
 .../org/apache/ignite/spark/JavaIgniteRDD.scala |    17 +-
 .../ignite/spark/impl/IgniteAbstractRDD.scala   |    17 +-
 .../apache/ignite/spark/impl/IgniteSqlRDD.scala |     7 +-
 .../spark/impl/JavaIgniteAbstractRDD.scala      |    34 -
 .../spark/JavaEmbeddedIgniteRDDSelfTest.java    |   344 +
 .../ignite/spark/JavaIgniteRDDSelfTest.java     |   302 -
 .../spark/JavaStandaloneIgniteRDDSelfTest.java  |   365 +
 .../ignite/testsuites/IgniteRDDTestSuite.java   |    40 +
 .../ignite/spark/EntityTestAllTypeFields.scala  |    60 +
 .../org/apache/ignite/spark/IgniteRDDSpec.scala |   179 +-
 modules/spring/pom.xml                          |     9 +-
 .../org/apache/ignite/IgniteSpringBean.java     |   173 +-
 .../apache/ignite/cache/spring/SpringCache.java |    44 +-
 .../ignite/cache/spring/SpringCacheManager.java |    22 +-
 .../GridResourceSpringBeanInjector.java         |    39 +-
 .../spring/SpringTransactionManager.java        |    59 +-
 .../src/test/config/jdbc-pojo-store-builtin.xml |   194 +
 .../src/test/config/jdbc-pojo-store-obj.xml     |   194 +
 .../test/java/config/spring-transactions.xml    |     4 +-
 .../ignite/TestInjectionLifecycleBean.java      |    42 +
 .../spring/GridSpringCacheManagerSelfTest.java  |   438 +
 .../cache/spring/GridSpringCacheTestKey.java    |    61 +
 .../spring/GridSpringCacheTestKeyGenerator.java |    40 +
 .../spring/GridSpringCacheTestService.java      |   181 +
 .../GridSpringDynamicCacheTestService.java      |    85 +
 .../SpringCacheManagerContextInjectionTest.java |   125 +
 .../ignite/cache/spring/spring-caching.xml      |    57 +
 .../jdbc/CacheJdbcBlobStoreFactorySelfTest.java |    12 +-
 .../jdbc/CacheJdbcPojoStoreFactorySelfTest.java |    25 +-
 .../store/jdbc/CachePojoStoreXmlSelfTest.java   |    58 +
 .../CachePojoStoreXmlWithSqlEscapeSelfTest.java |    28 +
 .../ignite/internal/GridFactorySelfTest.java    |   112 +-
 .../ignite/internal/IgniteSpringBeanTest.java   |    55 +
 .../GridSpringResourceInjectionSelfTest.java    |   311 +-
 .../GridTransformSpringInjectionSelfTest.java   |   186 +
 .../spring-resource-with-duplicate-beans.xml    |    30 +
 .../processors/resource/spring-resource.xml     |     2 +-
 .../p2p/GridP2PUserVersionChangeSelfTest.java   |     7 +-
 .../org/apache/ignite/spring-injection-test.xml |    43 +
 .../spring/GridSpringCacheManagerSelfTest.java  |   342 -
 .../ignite/spring/GridSpringCacheTestKey.java   |    61 -
 .../spring/GridSpringCacheTestKeyGenerator.java |    40 -
 .../spring/GridSpringCacheTestService.java      |   125 -
 .../GridSpringDynamicCacheTestService.java      |    85 -
 .../GridServiceInjectionSpringResourceTest.java |   245 +
 .../spring/injection/spring-resource.tmpl.xml   |    66 +
 .../org/apache/ignite/spring/spring-caching.xml |    57 -
 .../testsuites/IgniteResourceSelfTestSuite.java |    11 +-
 .../testsuites/IgniteSpringTestSuite.java       |    35 +-
 ...gTransactionManagerContextInjectionTest.java |   125 +
 modules/ssh/pom.xml                             |     2 +-
 modules/storm/README.txt                        |     2 +-
 modules/storm/pom.xml                           |     4 +-
 .../ignite/stream/storm/StormStreamer.java      |    10 +-
 .../storm/StormIgniteStreamerSelfTest.java      |    20 +-
 .../ignite/stream/storm/TestStormSpout.java     |    10 +-
 modules/tools/pom.xml                           |     2 +-
 modules/twitter/pom.xml                         |     2 +-
 modules/urideploy/pom.xml                       |     2 +-
 .../uri/GridUriDeploymentFileProcessor.java     |     2 +-
 .../scanners/http/UriDeploymentHttpScanner.java |     8 +-
 modules/visor-console-2.10/pom.xml              |     2 +-
 modules/visor-console/pom.xml                   |     2 +-
 .../ignite/visor/commands/VisorConsole.scala    |     6 +-
 .../commands/alert/VisorAlertCommand.scala      |   378 +-
 .../commands/cache/VisorCacheCommand.scala      |    99 +-
 .../commands/cache/VisorCacheResetCommand.scala |   129 +
 .../commands/cache/VisorCacheStopCommand.scala  |     7 +-
 .../config/VisorConfigurationCommand.scala      |    23 +-
 .../commands/disco/VisorDiscoveryCommand.scala  |     7 +-
 .../commands/events/VisorEventsCommand.scala    |    36 +-
 .../visor/commands/gc/VisorGcCommand.scala      |    11 +-
 .../visor/commands/kill/VisorKillCommand.scala  |   184 +-
 .../visor/commands/node/VisorNodeCommand.scala  |    13 +-
 .../commands/tasks/VisorTasksCommand.scala      |     7 +-
 .../commands/top/VisorTopologyCommand.scala     |     2 +-
 .../visor/commands/vvm/VisorVvmCommand.scala    |    11 +-
 .../scala/org/apache/ignite/visor/visor.scala   |   110 +-
 .../commands/alert/VisorAlertCommandSpec.scala  |     2 +-
 .../cache/VisorCacheResetCommandSpec.scala      |   114 +
 modules/visor-plugins/pom.xml                   |     2 +-
 modules/web-console/.gitignore                  |     6 +
 modules/web-console/DEVNOTES.txt                |    29 +
 modules/web-console/README.txt                  |    36 +
 modules/web-console/backend/.eslintrc           |   186 +
 modules/web-console/backend/.gitignore          |     6 +
 .../web-console/backend/agent_dists/README.txt  |     7 +
 modules/web-console/backend/app/agent.js        |   791 +
 modules/web-console/backend/app/app.js          |    63 +
 modules/web-console/backend/app/browser.js      |   443 +
 modules/web-console/backend/app/configure.js    |    86 +
 modules/web-console/backend/app/mongo.js        |   678 +
 modules/web-console/backend/app/mongoose.js     |    29 +
 modules/web-console/backend/app/nconf.js        |    48 +
 modules/web-console/backend/app/routes.js       |    64 +
 modules/web-console/backend/app/settings.js     |    78 +
 .../backend/config/settings.json.sample         |    30 +
 .../backend/errors/AppErrorException.js         |    36 +
 .../backend/errors/AuthFailedException.js       |    30 +
 .../backend/errors/DuplicateKeyException.js     |    28 +
 .../backend/errors/IllegalAccessError.js        |    29 +
 .../backend/errors/IllegalArgumentException.js  |    29 +
 .../backend/errors/MissingResourceException.js  |    30 +
 .../backend/errors/ServerErrorException.js      |    36 +
 modules/web-console/backend/errors/index.js     |    41 +
 modules/web-console/backend/index.js            |   104 +
 modules/web-console/backend/injector.js         |    30 +
 modules/web-console/backend/middlewares/api.js  |    44 +
 modules/web-console/backend/middlewares/host.js |    39 +
 modules/web-console/backend/middlewares/user.js |    36 +
 modules/web-console/backend/package.json        |    62 +
 modules/web-console/backend/routes/admin.js     |    84 +
 modules/web-console/backend/routes/agent.js     |    53 +
 modules/web-console/backend/routes/caches.js    |    65 +
 modules/web-console/backend/routes/clusters.js  |    64 +
 .../web-console/backend/routes/configuration.js |    41 +
 modules/web-console/backend/routes/demo.js      |   133 +
 .../web-console/backend/routes/demo/caches.json |    87 +
 .../backend/routes/demo/clusters.json           |    50 +
 .../backend/routes/demo/domains.json            |   307 +
 .../web-console/backend/routes/demo/igfss.json  |    10 +
 modules/web-console/backend/routes/domains.js   |    76 +
 modules/web-console/backend/routes/igfss.js     |    65 +
 modules/web-console/backend/routes/notebooks.js |    80 +
 modules/web-console/backend/routes/profile.js   |    73 +
 modules/web-console/backend/routes/public.js    |   129 +
 modules/web-console/backend/services/agents.js  |    82 +
 modules/web-console/backend/services/auth.js    |   114 +
 modules/web-console/backend/services/caches.js  |   144 +
 .../web-console/backend/services/clusters.js    |   141 +
 .../backend/services/configurations.js          |    59 +
 modules/web-console/backend/services/domains.js |   189 +
 modules/web-console/backend/services/igfss.js   |   136 +
 modules/web-console/backend/services/mails.js   |   131 +
 .../web-console/backend/services/notebooks.js   |   104 +
 .../web-console/backend/services/sessions.js    |    65 +
 modules/web-console/backend/services/spaces.js  |    75 +
 modules/web-console/backend/services/users.js   |   229 +
 modules/web-console/backend/test/app/db.js      |    66 +
 .../web-console/backend/test/app/httpAgent.js   |    50 +
 .../web-console/backend/test/app/mockgoose.js   |    30 +
 .../backend/test/config/settings.json           |    20 +
 .../web-console/backend/test/data/accounts.json |    19 +
 .../web-console/backend/test/data/caches.json   |    97 +
 .../web-console/backend/test/data/clusters.json |    54 +
 .../web-console/backend/test/data/domains.json  |   317 +
 .../web-console/backend/test/data/igfss.json    |    12 +
 .../web-console/backend/test/data/spaces.json   |    14 +
 modules/web-console/backend/test/index.js       |    35 +
 modules/web-console/backend/test/injector.js    |    48 +
 .../web-console/backend/test/routes/clusters.js |    83 +
 .../web-console/backend/test/routes/public.js   |    68 +
 .../backend/test/unit/AuthService.test.js       |   107 +
 .../backend/test/unit/CacheService.test.js      |   192 +
 .../backend/test/unit/ClusterService.test.js    |   191 +
 .../backend/test/unit/DomainService.test.js     |   199 +
 .../backend/test/unit/IgfsService.test.js       |   191 +
 .../docker/compose/backend/.dockerignore        |     1 +
 .../docker/compose/backend/Dockerfile           |    30 +
 .../web-console/docker/compose/backend/build.sh |    57 +
 .../docker/compose/docker-compose.yml           |    59 +
 .../docker/compose/frontend/.dockerignore       |     3 +
 .../docker/compose/frontend/Dockerfile          |    32 +
 .../docker/compose/frontend/DockerfileBuild     |    30 +
 .../docker/compose/frontend/build.sh            |    59 +
 .../docker/compose/frontend/nginx/nginx.conf    |    57 +
 .../compose/frontend/nginx/web-console.conf     |    59 +
 .../web-console/docker/standalone/.dockerignore |     2 +
 .../web-console/docker/standalone/Dockerfile    |    87 +
 modules/web-console/docker/standalone/build.sh  |    59 +
 .../docker/standalone/docker-compose.yml        |    41 +
 .../web-console/docker/standalone/entrypoint.sh |    23 +
 .../docker/standalone/nginx/nginx.conf          |    55 +
 .../docker/standalone/nginx/web-console.conf    |    54 +
 modules/web-console/frontend/.babelrc           |     9 +
 modules/web-console/frontend/.eslintrc          |   202 +
 modules/web-console/frontend/.gitignore         |     7 +
 modules/web-console/frontend/app/app.config.js  |    86 +
 modules/web-console/frontend/app/app.js         |   271 +
 .../frontend/app/controllers/auth.controller.js |    30 +
 .../controllers/reset-password.controller.js    |    50 +
 .../web-console/frontend/app/data/colors.json   |    22 +
 .../frontend/app/data/countries.json            |    94 +
 .../frontend/app/data/demo-info.json            |    14 +
 .../frontend/app/data/event-types.json          |   169 +
 .../frontend/app/data/getting-started.json      |   109 +
 .../frontend/app/data/java-classes.json         |    19 +
 .../frontend/app/data/java-keywords.json        |    55 +
 .../frontend/app/data/java-primitives.json      |     9 +
 .../frontend/app/data/jdbc-types.json           |    44 +
 .../frontend/app/data/pom-dependencies.json     |    20 +
 .../frontend/app/data/sql-keywords.json         |    41 +
 .../frontend/app/decorator/select.js            |    77 +
 .../frontend/app/decorator/tooltip.js           |    70 +
 .../app/directives/auto-focus.directive.js      |    26 +
 .../app/directives/bs-affix-update.directive.js |    34 +
 .../app/directives/centered/centered.css        |    37 +
 .../directives/centered/centered.directive.js   |    26 +
 .../directives/copy-to-clipboard.directive.js   |    29 +
 .../hide-on-state-change.directive.js           |    31 +
 .../information/information.directive.js        |    30 +
 .../app/directives/information/information.jade |    20 +
 .../app/directives/information/information.scss |    56 +
 .../frontend/app/directives/match.directive.js  |    27 +
 .../app/directives/on-click-focus.directive.js  |    26 +
 .../directives/on-enter-focus-move.directive.js |    29 +
 .../app/directives/on-enter.directive.js        |    32 +
 .../app/directives/on-escape.directive.js       |    32 +
 .../directives/retain-selection.directive.js    |    67 +
 .../ui-ace-docker/ui-ace-docker.controller.js   |    33 +
 .../ui-ace-docker/ui-ace-docker.directive.js    |    46 +
 .../directives/ui-ace-docker/ui-ace-docker.jade |    31 +
 .../ui-ace-java/ui-ace-java.controller.js       |    32 +
 .../ui-ace-java/ui-ace-java.directive.js        |   147 +
 .../app/directives/ui-ace-java/ui-ace-java.jade |    22 +
 .../ui-ace-pojos/ui-ace-pojos.controller.js     |    95 +
 .../ui-ace-pojos/ui-ace-pojos.directive.js      |    46 +
 .../directives/ui-ace-pojos/ui-ace-pojos.jade   |    40 +
 .../ui-ace-pom/ui-ace-pom.controller.js         |    33 +
 .../ui-ace-pom/ui-ace-pom.directive.js          |    41 +
 .../app/directives/ui-ace-pom/ui-ace-pom.jade   |    17 +
 .../app/directives/ui-ace-tabs.directive.js     |    24 +
 .../ui-ace-xml/ui-ace-xml.controller.js         |    27 +
 .../ui-ace-xml/ui-ace-xml.directive.js          |   147 +
 .../app/directives/ui-ace-xml/ui-ace-xml.jade   |    17 +
 .../frontend/app/filters/byName.filter.js       |    23 +
 .../app/filters/domainsValidation.filter.js     |    33 +
 .../frontend/app/filters/duration.filter.js     |    38 +
 .../frontend/app/filters/hasPojo.filter.js      |    18 +
 .../frontend/app/helpers/jade/form.jade         |    28 +
 .../helpers/jade/form/form-field-checkbox.jade  |    38 +
 .../helpers/jade/form/form-field-datalist.jade  |    51 +
 .../app/helpers/jade/form/form-field-down.jade  |    18 +
 .../helpers/jade/form/form-field-dropdown.jade  |    50 +
 .../helpers/jade/form/form-field-feedback.jade  |    29 +
 .../app/helpers/jade/form/form-field-label.jade |    23 +
 .../helpers/jade/form/form-field-number.jade    |    52 +
 .../helpers/jade/form/form-field-password.jade  |    47 +
 .../app/helpers/jade/form/form-field-text.jade  |    47 +
 .../app/helpers/jade/form/form-field-up.jade    |    18 +
 .../app/helpers/jade/form/form-group.jade       |    23 +
 .../frontend/app/helpers/jade/mixins.jade       |   524 +
 .../frontend/app/modules/Demo/Demo.module.js    |   166 +
 .../frontend/app/modules/ace.module.js          |   269 +
 .../frontend/app/modules/agent/agent.module.js  |   341 +
 .../app/modules/branding/branding.module.js     |    45 +
 .../app/modules/branding/branding.provider.js   |   111 +
 .../app/modules/branding/features.directive.js  |    35 +
 .../app/modules/branding/footer.directive.js    |    34 +
 .../modules/branding/header-logo.directive.js   |    34 +
 .../app/modules/branding/header-logo.jade       |    18 +
 .../modules/branding/header-title.directive.js  |    35 +
 .../branding/powered-by-apache.directive.js     |    35 +
 .../app/modules/branding/powered-by-apache.jade |    18 +
 .../app/modules/branding/terms.directive.js     |    30 +
 .../configuration/EventGroups.provider.js       |    30 +
 .../modules/configuration/Sidebar.provider.js   |    39 +
 .../modules/configuration/Version.service.js    |    25 +
 .../configuration/configuration.module.js       |    43 +
 .../configuration/generator/Docker.service.js   |    78 +
 .../configuration/generator/Java.service.js     |    21 +
 .../configuration/generator/Pom.service.js      |   226 +
 .../configuration/generator/Xml.service.js      |    21 +
 .../modules/configuration/sidebar.directive.js  |    30 +
 .../modules/dialog/dialog-content.directive.js  |    31 +
 .../modules/dialog/dialog-title.directive.js    |    31 +
 .../app/modules/dialog/dialog.controller.js     |    40 +
 .../app/modules/dialog/dialog.directive.js      |    32 +
 .../app/modules/dialog/dialog.factory.js        |    32 +
 .../frontend/app/modules/dialog/dialog.jade     |    26 +
 .../app/modules/dialog/dialog.module.js         |    32 +
 .../field/bs-select-placeholder.directive.js    |    47 +
 .../app/modules/form/field/down.directive.js    |    39 +
 .../app/modules/form/field/feedback.scss        |    37 +
 .../frontend/app/modules/form/field/field.scss  |    43 +
 .../field/form-control-feedback.directive.js    |    40 +
 .../form/field/input/autofocus.directive.js     |    30 +
 .../app/modules/form/field/input/select.scss    |    21 +
 .../app/modules/form/field/input/text.scss      |    41 +
 .../app/modules/form/field/label.directive.js   |    47 +
 .../app/modules/form/field/tooltip.directive.js |    49 +
 .../app/modules/form/field/up.directive.js      |    39 +
 .../frontend/app/modules/form/form.module.js    |    96 +
 .../app/modules/form/group/add.directive.js     |    40 +
 .../app/modules/form/group/tooltip.directive.js |    40 +
 .../app/modules/form/panel/chevron.directive.js |    53 +
 .../app/modules/form/panel/field.directive.js   |    69 +
 .../app/modules/form/panel/panel.directive.js   |    37 +
 .../app/modules/form/panel/revert.directive.js  |    54 +
 .../form/validator/ipaddress.directive.js       |    86 +
 .../validator/java-built-in-class.directive.js  |    31 +
 .../form/validator/java-identifier.directive.js |    31 +
 .../form/validator/java-keywords.directive.js   |    42 +
 .../validator/java-package-name.directive.js    |    31 +
 .../java-package-specified.directive.js         |    35 +
 .../form/validator/property-unique.directive.js |    47 +
 .../property-value-specified.directive.js       |    31 +
 .../modules/form/validator/unique.directive.js  |    49 +
 .../modules/form/validator/uuid.directive.js    |    31 +
 .../getting-started/GettingStarted.provider.js  |   112 +
 .../frontend/app/modules/loading/loading.css    |    73 +
 .../app/modules/loading/loading.directive.js    |    51 +
 .../frontend/app/modules/loading/loading.jade   |    23 +
 .../app/modules/loading/loading.module.js       |    26 +
 .../app/modules/loading/loading.service.js      |    48 +
 .../app/modules/navbar/Navbar.provider.js       |    28 +
 .../app/modules/navbar/Userbar.provider.js      |    28 +
 .../app/modules/navbar/navbar.directive.js      |    30 +
 .../app/modules/navbar/navbar.module.js         |    33 +
 .../app/modules/navbar/userbar.directive.js     |    48 +
 .../frontend/app/modules/socket.module.js       |    41 +
 .../frontend/app/modules/sql/Notebook.data.js   |   165 +
 .../app/modules/sql/Notebook.service.js         |    74 +
 .../app/modules/sql/notebook.controller.js      |    60 +
 .../app/modules/sql/scan-filter-input.jade      |    39 +
 .../modules/sql/scan-filter-input.service.js    |    51 +
 .../frontend/app/modules/sql/sql.controller.js  |  1632 +++
 .../frontend/app/modules/sql/sql.module.js      |    60 +
 .../frontend/app/modules/states/admin.state.js  |    35 +
 .../app/modules/states/configuration.state.js   |    97 +
 .../configuration/Configuration.resource.js     |    42 +
 .../configuration/caches/concurrency.jade       |    65 +
 .../states/configuration/caches/general.jade    |    66 +
 .../states/configuration/caches/memory.jade     |   101 +
 .../configuration/caches/node-filter.jade       |   108 +
 .../states/configuration/caches/query.jade      |   103 +
 .../states/configuration/caches/rebalance.jade  |    65 +
 .../configuration/caches/server-near-cache.jade |    51 +
 .../states/configuration/caches/statistics.jade |    39 +
 .../states/configuration/caches/store.jade      |   244 +
 .../states/configuration/clusters/atomic.jade   |    53 +
 .../configuration/clusters/attributes.jade      |    57 +
 .../states/configuration/clusters/binary.jade   |    77 +
 .../configuration/clusters/cache-key-cfg.jade   |    53 +
 .../configuration/clusters/collision.jade       |    62 +
 .../clusters/collision/custom.jade              |    24 +
 .../clusters/collision/fifo-queue.jade          |    27 +
 .../clusters/collision/job-stealing.jade        |    63 +
 .../clusters/collision/priority-queue.jade      |    42 +
 .../configuration/clusters/communication.jade   |    99 +
 .../configuration/clusters/connector.jade       |   103 +
 .../configuration/clusters/deployment.jade      |   113 +
 .../configuration/clusters/discovery.jade       |    87 +
 .../states/configuration/clusters/events.jade   |    37 +
 .../states/configuration/clusters/failover.jade |    72 +
 .../states/configuration/clusters/general.jade  |    73 +
 .../clusters/general/discovery/cloud.jade       |   134 +
 .../clusters/general/discovery/google.jade      |    38 +
 .../clusters/general/discovery/jdbc.jade        |    32 +
 .../clusters/general/discovery/multicast.jade   |    99 +
 .../clusters/general/discovery/s3.jade          |    27 +
 .../clusters/general/discovery/shared.jade      |    23 +
 .../clusters/general/discovery/vm.jade          |    79 +
 .../clusters/general/discovery/zookeeper.jade   |    83 +
 .../bounded-exponential-backoff.jade            |    27 +
 .../discovery/zookeeper/retrypolicy/custom.jade |    24 +
 .../retrypolicy/exponential-backoff.jade        |    27 +
 .../zookeeper/retrypolicy/forever.jade          |    22 +
 .../zookeeper/retrypolicy/n-times.jade          |    25 +
 .../zookeeper/retrypolicy/one-time.jade         |    23 +
 .../zookeeper/retrypolicy/until-elapsed.jade    |    25 +
 .../states/configuration/clusters/igfs.jade     |    37 +
 .../states/configuration/clusters/logger.jade   |    66 +
 .../configuration/clusters/logger/custom.jade   |    25 +
 .../configuration/clusters/logger/log4j.jade    |    50 +
 .../configuration/clusters/logger/log4j2.jade   |    39 +
 .../configuration/clusters/marshaller.jade      |    75 +
 .../states/configuration/clusters/metrics.jade  |    51 +
 .../states/configuration/clusters/odbc.jade     |    47 +
 .../states/configuration/clusters/ssl.jade      |   109 +
 .../states/configuration/clusters/swap.jade     |    71 +
 .../states/configuration/clusters/thread.jade   |    48 +
 .../states/configuration/clusters/time.jade     |    47 +
 .../configuration/clusters/transactions.jade    |    69 +
 .../states/configuration/domains/general.jade   |    46 +
 .../states/configuration/domains/query.jade     |   170 +
 .../states/configuration/domains/store.jade     |   126 +
 .../modules/states/configuration/igfs/dual.jade |    42 +
 .../states/configuration/igfs/fragmentizer.jade |    43 +
 .../states/configuration/igfs/general.jade      |    54 +
 .../modules/states/configuration/igfs/ipc.jade  |    60 +
 .../modules/states/configuration/igfs/misc.jade |   108 +
 .../states/configuration/igfs/secondary.jade    |    44 +
 .../configuration/preview-panel.directive.js    |   239 +
 .../summary/summary-tabs.directive.js           |    50 +
 .../configuration/summary/summary.controller.js |   383 +
 .../frontend/app/modules/states/errors.state.js |    43 +
 .../frontend/app/modules/states/logout.state.js |    35 +
 .../app/modules/states/password.state.js        |    46 +
 .../app/modules/states/profile.state.js         |    35 +
 .../frontend/app/modules/states/signin.state.js |    43 +
 .../app/modules/user/AclRoute.provider.js       |    47 +
 .../frontend/app/modules/user/Auth.service.js   |    56 +
 .../frontend/app/modules/user/User.service.js   |    51 +
 .../frontend/app/modules/user/permissions.js    |    28 +
 .../frontend/app/modules/user/user.module.js    |    73 +
 .../app/services/ChartColors.service.js         |    22 +
 .../frontend/app/services/Clone.service.js      |    64 +
 .../frontend/app/services/Confirm.service.js    |    68 +
 .../app/services/ConfirmBatch.service.js        |    92 +
 .../app/services/CopyToClipboard.service.js     |    50 +
 .../frontend/app/services/Countries.service.js  |    31 +
 .../app/services/ErrorPopover.service.js        |   129 +
 .../frontend/app/services/Focus.service.js      |    33 +
 .../frontend/app/services/FormUtils.service.js  |   435 +
 .../app/services/InetAddress.service.js         |    53 +
 .../frontend/app/services/JavaTypes.service.js  |   118 +
 .../app/services/LegacyTable.service.js         |   209 +
 .../app/services/LegacyUtils.service.js         |   528 +
 .../frontend/app/services/Messages.service.js   |    63 +
 .../app/services/ModelNormalizer.service.js     |    59 +
 .../frontend/app/services/SqlTypes.service.js   |    67 +
 .../app/services/UnsavedChangesGuard.service.js |    38 +
 modules/web-console/frontend/app/vendor.js      |    55 +
 .../frontend/controllers/admin-controller.js    |    93 +
 .../frontend/controllers/caches-controller.js   |   538 +
 .../frontend/controllers/clusters-controller.js |   689 +
 .../frontend/controllers/domains-controller.js  |  1804 +++
 .../frontend/controllers/igfs-controller.js     |   416 +
 .../frontend/controllers/profile-controller.js  |    95 +
 .../frontend/generator/generator-common.js      |   625 +
 .../frontend/generator/generator-java.js        |  3611 +++++
 .../frontend/generator/generator-optional.js    |    25 +
 .../frontend/generator/generator-properties.js  |   175 +
 .../frontend/generator/generator-readme.js      |    85 +
 .../frontend/generator/generator-xml.js         |  2108 +++
 .../frontend/gulpfile.babel.js/index.js         |    26 +
 .../frontend/gulpfile.babel.js/paths.js         |    74 +
 .../frontend/gulpfile.babel.js/tasks/build.js   |    21 +
 .../frontend/gulpfile.babel.js/tasks/bundle.js  |    32 +
 .../frontend/gulpfile.babel.js/tasks/clean.js   |    32 +
 .../frontend/gulpfile.babel.js/tasks/copy.js    |    33 +
 .../gulpfile.babel.js/tasks/ignite-modules.js   |    55 +
 .../frontend/gulpfile.babel.js/tasks/jade.js    |    40 +
 .../frontend/gulpfile.babel.js/tasks/test.js    |    92 +
 .../frontend/gulpfile.babel.js/tasks/watch.js   |    31 +
 .../gulpfile.babel.js/webpack/common.js         |   189 +
 .../webpack/environments/development.js         |    69 +
 .../webpack/environments/production.js          |    45 +
 .../frontend/gulpfile.babel.js/webpack/index.js |    32 +
 .../webpack/plugins/progress.js                 |    82 +
 .../frontend/ignite_modules/README.txt          |     6 +
 .../frontend/ignite_modules/index.js            |    27 +
 modules/web-console/frontend/package.json       |   125 +
 modules/web-console/frontend/public/favicon.ico |   Bin 0 -> 1150 bytes
 .../frontend/public/images/cache.png            |   Bin 0 -> 23700 bytes
 .../frontend/public/images/cluster.png          |   Bin 0 -> 29376 bytes
 .../frontend/public/images/docker.png           |   Bin 0 -> 521 bytes
 .../frontend/public/images/domains.png          |   Bin 0 -> 23828 bytes
 .../web-console/frontend/public/images/igfs.png |   Bin 0 -> 14307 bytes
 .../frontend/public/images/ignite-logo.png      |   Bin 0 -> 1982 bytes
 .../frontend/public/images/ignite-logo@2x.png   |   Bin 0 -> 3325 bytes
 .../frontend/public/images/ignite-puzzle.png    |   Bin 0 -> 71974 bytes
 .../web-console/frontend/public/images/java.png |   Bin 0 -> 170 bytes
 .../frontend/public/images/pb-ignite.png        |   Bin 0 -> 3493 bytes
 .../frontend/public/images/pb-ignite@2x.png     |   Bin 0 -> 8558 bytes
 .../frontend/public/images/query-chart.png      |   Bin 0 -> 16637 bytes
 .../frontend/public/images/query-metadata.png   |   Bin 0 -> 32298 bytes
 .../frontend/public/images/query-table.png      |   Bin 0 -> 29189 bytes
 .../frontend/public/images/summary.png          |   Bin 0 -> 31997 bytes
 .../web-console/frontend/public/images/xml.png  |   Bin 0 -> 232 bytes
 .../public/stylesheets/_bootstrap-custom.scss   |    65 +
 .../stylesheets/_bootstrap-variables.scss       |   891 ++
 .../stylesheets/_font-awesome-custom.scss       |    32 +
 .../public/stylesheets/blocks/error.scss        |    31 +
 .../frontend/public/stylesheets/form-field.scss |   108 +
 .../frontend/public/stylesheets/style.scss      |  2172 +++
 .../frontend/public/stylesheets/variables.scss  |    28 +
 .../frontend/test/e2e/exampe.test.js            |    40 +
 modules/web-console/frontend/test/karma.conf.js |   113 +
 .../frontend/test/protractor.conf.js            |    50 +
 .../frontend/test/unit/JavaTypes.test.js        |   107 +
 .../frontend/test/unit/SqlTypes.test.js         |    68 +
 .../frontend/test/unit/UserAuth.test.js         |    35 +
 modules/web-console/frontend/views/403.jade     |    22 +
 modules/web-console/frontend/views/404.jade     |    22 +
 modules/web-console/frontend/views/base.jade    |    22 +
 .../frontend/views/configuration/caches.jade    |    53 +
 .../frontend/views/configuration/clusters.jade  |    67 +
 .../views/configuration/domains-import.jade     |   163 +
 .../frontend/views/configuration/domains.jade   |    66 +
 .../frontend/views/configuration/igfs.jade      |    51 +
 .../frontend/views/configuration/sidebar.jade   |    29 +
 .../summary-project-structure.jade              |    27 +
 .../views/configuration/summary-tabs.jade       |    25 +
 .../frontend/views/configuration/summary.jade   |   122 +
 .../frontend/views/includes/footer.jade         |    23 +
 .../frontend/views/includes/header.jade         |    51 +
 modules/web-console/frontend/views/index.jade   |    47 +
 modules/web-console/frontend/views/reset.jade   |    48 +
 .../frontend/views/settings/admin.jade          |    76 +
 .../frontend/views/settings/profile.jade        |    76 +
 modules/web-console/frontend/views/signin.jade  |   163 +
 .../frontend/views/sql/cache-metadata.jade      |    40 +
 .../frontend/views/sql/chart-settings.jade      |    40 +
 .../frontend/views/sql/notebook-new.jade        |    31 +
 .../frontend/views/sql/paragraph-rate.jade      |    31 +
 modules/web-console/frontend/views/sql/sql.jade |   193 +
 .../views/templates/agent-download.jade         |    48 +
 .../frontend/views/templates/alert.jade         |    21 +
 .../frontend/views/templates/batch-confirm.jade |    32 +
 .../frontend/views/templates/clone.jade         |    37 +
 .../frontend/views/templates/confirm.jade       |    31 +
 .../frontend/views/templates/demo-info.jade     |    45 +
 .../frontend/views/templates/dropdown.jade      |    24 +
 .../views/templates/getting-started.jade        |    32 +
 .../frontend/views/templates/message.jade       |    26 +
 .../frontend/views/templates/pagination.jade    |    32 +
 .../frontend/views/templates/select.jade        |    26 +
 .../views/templates/validation-error.jade       |    25 +
 modules/web-console/licenses/apache-2.0.txt     |   202 +
 modules/web-console/pom.xml                     |    94 +
 modules/web-console/web-agent/.gitignore        |     2 +
 modules/web-console/web-agent/README.txt        |    88 +
 .../web-agent/assembly/release-web-agent.xml    |    66 +
 .../web-agent/bin/ignite-web-agent.bat          |    70 +
 .../web-agent/bin/ignite-web-agent.sh           |    87 +
 modules/web-console/web-agent/demo/README.txt   |     4 +
 modules/web-console/web-agent/demo/db-init.sql  |   102 +
 .../web-agent/jdbc-drivers/README.txt           |    10 +
 modules/web-console/web-agent/logs/README.txt   |     5 +
 modules/web-console/web-agent/pom.xml           |   199 +
 .../console/agent/AgentConfiguration.java       |   268 +
 .../ignite/console/agent/AgentLauncher.java     |   344 +
 .../apache/ignite/console/agent/AgentUtils.java |   111 +
 .../console/agent/handlers/AbstractHandler.java |   110 +
 .../console/agent/handlers/DatabaseHandler.java |   298 +
 .../console/agent/handlers/RestHandler.java     |   276 +
 .../ignite/console/demo/AgentClusterDemo.java   |   641 +
 .../ignite/console/demo/AgentMetadataDemo.java  |    92 +
 .../apache/ignite/console/demo/model/Car.java   |   152 +
 .../ignite/console/demo/model/Country.java      |   152 +
 .../ignite/console/demo/model/Department.java   |   152 +
 .../ignite/console/demo/model/Employee.java     |   356 +
 .../ignite/console/demo/model/Parking.java      |   152 +
 .../src/main/resources/log4j.properties         |    53 +
 modules/web/ignite-appserver-test/pom.xml       |    75 +
 .../webapp/META-INF/config/default-config.xml   |    37 +
 .../src/main/webapp/WEB-INF/web.xml             |    52 +
 .../src/main/webapp/index.jsp                   |    36 +
 modules/web/ignite-weblogic-test/pom.xml        |    76 -
 .../webapp/META-INF/config/default-config.xml   |    37 -
 .../src/main/webapp/WEB-INF/web.xml             |    52 -
 .../src/main/webapp/index.jsp                   |    36 -
 modules/web/ignite-websphere-test/pom.xml       |    69 +
 .../apache/ignite/webtest/TestJtaTxServlet.java |   106 +
 .../webapp/META-INF/config/default-config.xml   |    70 +
 .../src/main/webapp/WEB-INF/web.xml             |    62 +
 .../src/main/webapp/index.jsp                   |    36 +
 modules/web/pom.xml                             |     2 +-
 .../ignite/cache/websession/WebSession.java     |    21 +-
 .../cache/websession/WebSessionFilter.java      |   548 +-
 .../cache/websession/WebSessionListener.java    |   117 +-
 .../ignite/cache/websession/WebSessionV2.java   |   409 +
 .../IgniteWebSessionSelfTestSuite.java          |    43 +-
 .../WebSessionReplicatedSelfTest.java           |    28 +
 .../WebSessionReplicatedV1SelfTest.java         |    28 +
 .../internal/websession/WebSessionSelfTest.java |   660 +-
 .../WebSessionTransactionalSelfTest.java        |    48 +
 .../WebSessionTransactionalV1SelfTest.java      |    28 +
 .../websession/WebSessionV1SelfTest.java        |    28 +
 .../webapp2/META-INF/ignite-webapp-config.xml   |   279 +
 modules/web/src/test/webapp2/WEB-INF/web.xml    |    45 +
 .../config/benchmark-cache-load-win.properties  |    60 +
 .../config/benchmark-cache-load.properties      |    92 +
 .../config/benchmark-client-mode.properties     |     2 +
 .../yardstick/config/benchmark-full.properties  |   116 +
 .../config/benchmark-tx-win.properties          |     2 +
 .../yardstick/config/benchmark-tx.properties    |     2 +
 .../yardstick/config/benchmark-win.properties   |     2 +
 modules/yardstick/config/benchmark.properties   |     2 +
 .../config/ignite-base-load-config.xml          |   255 +
 .../config/ignite-cache-load-config.xml         |    71 +
 modules/yardstick/config/queries.sql            |     3 +
 modules/yardstick/pom.xml                       |    48 +-
 .../yardstick/IgniteBenchmarkArguments.java     |    39 +-
 .../ignite/yardstick/IgniteBenchmarkUtils.java  |    71 +-
 .../org/apache/ignite/yardstick/IgniteNode.java |    74 +-
 .../cache/CacheEntryEventAsyncProbe.java        |    61 +
 .../yardstick/cache/CacheEntryEventProbe.java   |    33 +-
 .../cache/IgniteAtomicSequenceBenchmark.java    |    47 +
 .../cache/IgniteCacheAbstractBenchmark.java     |     5 +
 .../cache/IgniteGetAndPutBenchmark.java         |    41 +
 .../cache/IgniteGetAndPutTxBenchmark.java       |    70 +
 .../cache/IgniteInvokeTxBenchmark.java          |    40 +
 .../IgniteInvokeWithInjectionBenchmark.java     |    74 +
 .../IgniteInvokeWithInjectionTxBenchmark.java   |    30 +
 .../IgniteSqlQueryDistributedJoinBenchmark.java |   166 +
 ...lQueryDistributedJoinBroadcastBenchmark.java |    28 +
 .../IgniteCacheRandomOperationBenchmark.java    |  1246 ++
 .../yardstick/cache/load/model/ModelUtil.java   |   185 +
 .../cache/load/model/key/Identifier.java        |   113 +
 .../yardstick/cache/load/model/key/Mark.java    |   115 +
 .../yardstick/cache/load/model/value/Car.java   |   126 +
 .../yardstick/cache/load/model/value/Color.java |    50 +
 .../yardstick/cache/load/model/value/Truck.java |    69 +
 .../ignite/yardstick/cache/model/Account.java   |     6 +
 .../ignite/yardstick/cache/model/Person1.java   |     2 +-
 .../ignite/yardstick/cache/model/Person2.java   |     2 +-
 .../ignite/yardstick/cache/model/SampleKey.java |     2 +-
 .../yardstick/cache/model/SampleValue.java      |     2 +-
 modules/yarn/pom.xml                            |     2 +-
 modules/zookeeper/pom.xml                       |     5 +-
 .../zk/TcpDiscoveryZookeeperIpFinder.java       |    84 +-
 .../tcp/ipfinder/zk/ZookeeperIpFinderTest.java  |    16 +-
 parent/pom.xml                                  |    56 +-
 pom.xml                                         |    58 +-
 3374 files changed, 383167 insertions(+), 128892 deletions(-)
----------------------------------------------------------------------



[16/50] [abbrv] ignite git commit: IGNITE-3609 Utilize Cassandra logged batches for transactions. - Fixes #1111.

Posted by sh...@apache.org.
IGNITE-3609 Utilize Cassandra logged batches for transactions. - Fixes #1111.

Signed-off-by: Alexey Kuznetsov <ak...@apache.org>


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

Branch: refs/heads/ignite-2788
Commit: 3b8aca64b8ebe6ba21f5d02f50cf69ad46dbbc95
Parents: 00576d8
Author: Igor <ir...@gmail.com>
Authored: Fri Sep 30 14:39:30 2016 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Fri Sep 30 14:39:30 2016 +0700

----------------------------------------------------------------------
 .../store/cassandra/CassandraCacheStore.java    | 112 ++++--
 .../store/cassandra/common/CassandraHelper.java |  29 +-
 .../store/cassandra/persistence/PojoField.java  |   9 +-
 .../cassandra/persistence/PojoValueField.java   |   2 -
 .../cassandra/session/CassandraSession.java     |  10 +
 .../cassandra/session/CassandraSessionImpl.java | 113 +++++-
 .../session/transaction/BaseMutation.java       |  68 ++++
 .../session/transaction/DeleteMutation.java     |  57 +++
 .../cassandra/session/transaction/Mutation.java |  64 +++
 .../session/transaction/WriteMutation.java      |  60 +++
 .../session/transaction/package-info.java       |  21 +
 .../tests/CassandraDirectPersistenceTest.java   | 396 ++++++++++++++++---
 .../ignite/tests/CassandraLocalServer.java      |  58 +++
 .../apache/ignite/tests/DDLGeneratorTest.java   |  35 +-
 .../ignite/tests/IgnitePersistentStoreTest.java | 265 +++++++++++++
 .../org/apache/ignite/tests/pojos/Product.java  | 123 ++++++
 .../apache/ignite/tests/pojos/ProductOrder.java | 148 +++++++
 .../ignite/tests/utils/CacheStoreHelper.java    |  19 +-
 .../ignite/tests/utils/TestCacheSession.java    |  12 +-
 .../ignite/tests/utils/TestTransaction.java     | 133 +++++++
 .../apache/ignite/tests/utils/TestsHelper.java  | 299 +++++++++++++-
 .../tests/persistence/pojo/ignite-config.xml    |  41 +-
 .../ignite/tests/persistence/pojo/order.xml     |  21 +
 .../ignite/tests/persistence/pojo/product.xml   |  21 +
 .../store/src/test/resources/tests.properties   |  15 +
 25 files changed, 2005 insertions(+), 126 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/CassandraCacheStore.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/CassandraCacheStore.java b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/CassandraCacheStore.java
index 6aef0c4..aead39a 100644
--- a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/CassandraCacheStore.java
+++ b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/CassandraCacheStore.java
@@ -22,8 +22,10 @@ import com.datastax.driver.core.PreparedStatement;
 import com.datastax.driver.core.Row;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
 import java.util.Map;
+import java.util.HashMap;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
@@ -41,6 +43,9 @@ import org.apache.ignite.cache.store.cassandra.session.CassandraSession;
 import org.apache.ignite.cache.store.cassandra.session.ExecutionAssistant;
 import org.apache.ignite.cache.store.cassandra.session.GenericBatchExecutionAssistant;
 import org.apache.ignite.cache.store.cassandra.session.LoadCacheCustomQueryWorker;
+import org.apache.ignite.cache.store.cassandra.session.transaction.DeleteMutation;
+import org.apache.ignite.cache.store.cassandra.session.transaction.Mutation;
+import org.apache.ignite.cache.store.cassandra.session.transaction.WriteMutation;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteBiInClosure;
 import org.apache.ignite.logger.NullLogger;
@@ -54,14 +59,16 @@ import org.apache.ignite.resources.LoggerResource;
  * @param <V> Ignite cache value type.
  */
 public class CassandraCacheStore<K, V> implements CacheStore<K, V> {
-    /** Connection attribute property name. */
-    private static final String ATTR_CONN_PROP = "CASSANDRA_STORE_CONNECTION";
+    /** Buffer to store mutations performed withing transaction. */
+    private static final String TRANSACTION_BUFFER = "CASSANDRA_TRANSACTION_BUFFER";
 
     /** Auto-injected store session. */
+    @SuppressWarnings("unused")
     @CacheStoreSessionResource
     private CacheStoreSession storeSes;
 
     /** Auto-injected logger instance. */
+    @SuppressWarnings("unused")
     @LoggerResource
     private IgniteLogger log;
 
@@ -127,12 +134,22 @@ public class CassandraCacheStore<K, V> implements CacheStore<K, V> {
 
     /** {@inheritDoc} */
     @Override public void sessionEnd(boolean commit) throws CacheWriterException {
-        if (storeSes == null || storeSes.transaction() == null)
+        if (!storeSes.isWithinTransaction())
             return;
 
-        CassandraSession cassandraSes = (CassandraSession) storeSes.properties().remove(ATTR_CONN_PROP);
+        List<Mutation> mutations = mutations();
+        if (mutations == null || mutations.isEmpty())
+            return;
 
-        U.closeQuiet(cassandraSes);
+        CassandraSession ses = getCassandraSession();
+
+        try {
+            ses.execute(mutations);
+        }
+        finally {
+            mutations.clear();
+            U.closeQuiet(ses);
+        }
     }
 
     /** {@inheritDoc} */
@@ -182,7 +199,7 @@ public class CassandraCacheStore<K, V> implements CacheStore<K, V> {
             });
         }
         finally {
-            closeCassandraSession(ses);
+            U.closeQuiet(ses);
         }
     }
 
@@ -235,7 +252,7 @@ public class CassandraCacheStore<K, V> implements CacheStore<K, V> {
             }, keys);
         }
         finally {
-            closeCassandraSession(ses);
+            U.closeQuiet(ses);
         }
     }
 
@@ -244,6 +261,11 @@ public class CassandraCacheStore<K, V> implements CacheStore<K, V> {
         if (entry == null || entry.getKey() == null)
             return;
 
+        if (storeSes.isWithinTransaction()) {
+            accumulate(new WriteMutation(entry, cassandraTable(), controller));
+            return;
+        }
+
         CassandraSession ses = getCassandraSession();
 
         try {
@@ -285,7 +307,7 @@ public class CassandraCacheStore<K, V> implements CacheStore<K, V> {
             });
         }
         finally {
-            closeCassandraSession(ses);
+            U.closeQuiet(ses);
         }
     }
 
@@ -294,6 +316,13 @@ public class CassandraCacheStore<K, V> implements CacheStore<K, V> {
         if (entries == null || entries.isEmpty())
             return;
 
+        if (storeSes.isWithinTransaction()) {
+            for (Cache.Entry<?, ?> entry : entries)
+                accumulate(new WriteMutation(entry, cassandraTable(), controller));
+
+            return;
+        }
+
         CassandraSession ses = getCassandraSession();
 
         try {
@@ -331,7 +360,7 @@ public class CassandraCacheStore<K, V> implements CacheStore<K, V> {
             }, entries);
         }
         finally {
-            closeCassandraSession(ses);
+            U.closeQuiet(ses);
         }
     }
 
@@ -340,6 +369,11 @@ public class CassandraCacheStore<K, V> implements CacheStore<K, V> {
         if (key == null)
             return;
 
+        if (storeSes.isWithinTransaction()) {
+            accumulate(new DeleteMutation(key, cassandraTable(), controller));
+            return;
+        }
+
         CassandraSession ses = getCassandraSession();
 
         try {
@@ -382,7 +416,7 @@ public class CassandraCacheStore<K, V> implements CacheStore<K, V> {
             });
         }
         finally {
-            closeCassandraSession(ses);
+            U.closeQuiet(ses);
         }
     }
 
@@ -391,6 +425,13 @@ public class CassandraCacheStore<K, V> implements CacheStore<K, V> {
         if (keys == null || keys.isEmpty())
             return;
 
+        if (storeSes.isWithinTransaction()) {
+            for (Object key : keys)
+                accumulate(new DeleteMutation(key, cassandraTable(), controller));
+
+            return;
+        }
+
         CassandraSession ses = getCassandraSession();
 
         try {
@@ -422,7 +463,7 @@ public class CassandraCacheStore<K, V> implements CacheStore<K, V> {
             }, keys);
         }
         finally {
-            closeCassandraSession(ses);
+            U.closeQuiet(ses);
         }
     }
 
@@ -433,36 +474,43 @@ public class CassandraCacheStore<K, V> implements CacheStore<K, V> {
      * @return Cassandra session wrapper.
      */
     private CassandraSession getCassandraSession() {
-        if (storeSes == null || storeSes.transaction() == null)
-            return dataSrc.session(log != null ? log : new NullLogger());
-
-        CassandraSession ses = (CassandraSession) storeSes.properties().get(ATTR_CONN_PROP);
-
-        if (ses == null) {
-            ses = dataSrc.session(log != null ? log : new NullLogger());
-            storeSes.properties().put(ATTR_CONN_PROP, ses);
-        }
+        return dataSrc.session(log != null ? log : new NullLogger());
+    }
 
-        return ses;
+    /**
+     * Returns table name to use for all Cassandra based operations (READ/WRITE/DELETE).
+     *
+     * @return Table name.
+     */
+    private String cassandraTable() {
+        return controller.getPersistenceSettings().getTable() != null ?
+            controller.getPersistenceSettings().getTable() : storeSes.cacheName().trim().toLowerCase();
     }
 
     /**
-     * Releases Cassandra related resources.
+     * Accumulates mutation in the transaction buffer.
      *
-     * @param ses Cassandra session wrapper.
+     * @param mutation Mutation operation.
      */
-    private void closeCassandraSession(CassandraSession ses) {
-        if (ses != null && (storeSes == null || storeSes.transaction() == null))
-            U.closeQuiet(ses);
+    private void accumulate(Mutation mutation) {
+        //noinspection unchecked
+        List<Mutation> mutations = (List<Mutation>)storeSes.properties().get(TRANSACTION_BUFFER);
+
+        if (mutations == null) {
+            mutations = new LinkedList<>();
+            storeSes.properties().put(TRANSACTION_BUFFER, mutations);
+        }
+
+        mutations.add(mutation);
     }
 
     /**
-     * Returns table name to use for all Cassandra based operations (READ/WRITE/DELETE).
+     * Returns all the mutations performed withing transaction.
      *
-     * @return Table name.
+     * @return Mutations
      */
-    private String cassandraTable() {
-        return controller.getPersistenceSettings().getTable() != null ?
-            controller.getPersistenceSettings().getTable() : storeSes.cacheName().toLowerCase();
+    private List<Mutation> mutations() {
+        //noinspection unchecked
+        return (List<Mutation>)storeSes.properties().get(TRANSACTION_BUFFER);
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/common/CassandraHelper.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/common/CassandraHelper.java b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/common/CassandraHelper.java
index 9066112..badd5df 100644
--- a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/common/CassandraHelper.java
+++ b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/common/CassandraHelper.java
@@ -20,9 +20,13 @@ package org.apache.ignite.cache.store.cassandra.common;
 import com.datastax.driver.core.Cluster;
 import com.datastax.driver.core.DataType;
 import com.datastax.driver.core.Session;
+import com.datastax.driver.core.exceptions.DriverException;
 import com.datastax.driver.core.exceptions.InvalidQueryException;
 import com.datastax.driver.core.exceptions.NoHostAvailableException;
 import com.datastax.driver.core.exceptions.ReadTimeoutException;
+
+import java.net.InetSocketAddress;
+import java.util.Map;
 import java.util.regex.Pattern;
 import org.apache.ignite.internal.util.typedef.internal.U;
 
@@ -36,8 +40,15 @@ public class CassandraHelper {
     /** Cassandra error message if trying to create table inside nonexistent keyspace. */
     private static final Pattern KEYSPACE_EXIST_ERROR2 = Pattern.compile("Cannot add table '[0-9a-zA-Z_]+' to non existing keyspace.*");
 
+    /** Cassandra error message if trying to create table inside nonexistent keyspace. */
+    private static final Pattern KEYSPACE_EXIST_ERROR3 = Pattern.compile("Error preparing query, got ERROR INVALID: " +
+            "Keyspace [0-9a-zA-Z_]+ does not exist");
+
+    /** Cassandra error message if specified table doesn't exist. */
+    private static final Pattern TABLE_EXIST_ERROR1 = Pattern.compile("unconfigured table [0-9a-zA-Z_]+");
+
     /** Cassandra error message if specified table doesn't exist. */
-    private static final Pattern TABLE_EXIST_ERROR = Pattern.compile("unconfigured table [0-9a-zA-Z_]+");
+    private static final String TABLE_EXIST_ERROR2 = "Error preparing query, got ERROR INVALID: unconfigured table";
 
     /** Cassandra error message if trying to use prepared statement created from another session. */
     private static final String PREP_STATEMENT_CLUSTER_INSTANCE_ERROR = "You may have used a PreparedStatement that " +
@@ -85,11 +96,25 @@ public class CassandraHelper {
     public static boolean isTableAbsenceError(Throwable e) {
         while (e != null) {
             if (e instanceof InvalidQueryException &&
-                (TABLE_EXIST_ERROR.matcher(e.getMessage()).matches() ||
+                (TABLE_EXIST_ERROR1.matcher(e.getMessage()).matches() ||
                     KEYSPACE_EXIST_ERROR1.matcher(e.getMessage()).matches() ||
                     KEYSPACE_EXIST_ERROR2.matcher(e.getMessage()).matches()))
                 return true;
 
+            if (e instanceof NoHostAvailableException && ((NoHostAvailableException) e).getErrors() != null) {
+                NoHostAvailableException ex = (NoHostAvailableException)e;
+
+                for (Map.Entry<InetSocketAddress, Throwable> entry : ex.getErrors().entrySet()) {
+                    //noinspection ThrowableResultOfMethodCallIgnored
+                    Throwable error = entry.getValue();
+
+                    if (error instanceof DriverException &&
+                        (error.getMessage().contains(TABLE_EXIST_ERROR2) ||
+                             KEYSPACE_EXIST_ERROR3.matcher(error.getMessage()).matches()))
+                        return true;
+                }
+            }
+
             e = e.getCause();
         }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoField.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoField.java b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoField.java
index d708a34..78e75a9 100644
--- a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoField.java
+++ b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoField.java
@@ -85,11 +85,10 @@ public abstract class PojoField implements Serializable {
     public PojoField(PropertyDescriptor desc) {
         this.name = desc.getName();
 
-        QuerySqlField sqlField = desc.getReadMethod() != null ?
-            desc.getReadMethod().getAnnotation(QuerySqlField.class) :
-            desc.getWriteMethod() == null ?
-                null :
-                desc.getWriteMethod().getAnnotation(QuerySqlField.class);
+        QuerySqlField sqlField = desc.getReadMethod() != null &&
+                desc.getReadMethod().getAnnotation(QuerySqlField.class) != null ?
+                desc.getReadMethod().getAnnotation(QuerySqlField.class) :
+                    desc.getWriteMethod() == null ? null : desc.getWriteMethod().getAnnotation(QuerySqlField.class);
 
         col = sqlField != null && sqlField.name() != null &&
             !sqlField.name().trim().isEmpty() ? sqlField.name() : name.toLowerCase();

http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoValueField.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoValueField.java b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoValueField.java
index c3512c3..3e636c0 100644
--- a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoValueField.java
+++ b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoValueField.java
@@ -146,7 +146,5 @@ public class PojoValueField extends PojoField {
      * @param sqlField {@link QuerySqlField} annotation.
      */
     protected void init(QuerySqlField sqlField) {
-        if (sqlField.index())
-            isIndexed = true;
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSession.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSession.java b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSession.java
index 506982f..b0e50ec 100644
--- a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSession.java
+++ b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSession.java
@@ -17,7 +17,10 @@
 
 package org.apache.ignite.cache.store.cassandra.session;
 
+import org.apache.ignite.cache.store.cassandra.session.transaction.Mutation;
+
 import java.io.Closeable;
+import java.util.List;
 
 /**
  * Wrapper around Cassandra driver session, to automatically handle:
@@ -57,4 +60,11 @@ public interface CassandraSession extends Closeable {
      * @param assistant execution assistance to perform the main operation logic.
      */
     public void execute(BatchLoaderAssistant assistant);
+
+    /**
+     * Executes all the mutations performed withing Ignite transaction against Cassandra database.
+     *
+     * @param mutations Mutations.
+     */
+    public void execute(List<Mutation> mutations);
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java
index d2c9e97..4857fa4 100644
--- a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java
+++ b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java
@@ -43,6 +43,7 @@ import org.apache.ignite.cache.store.cassandra.common.CassandraHelper;
 import org.apache.ignite.cache.store.cassandra.common.RandomSleeper;
 import org.apache.ignite.cache.store.cassandra.persistence.KeyValuePersistenceSettings;
 import org.apache.ignite.cache.store.cassandra.session.pool.SessionPool;
+import org.apache.ignite.cache.store.cassandra.session.transaction.Mutation;
 import org.apache.ignite.internal.processors.cache.CacheEntryImpl;
 
 /**
@@ -162,7 +163,8 @@ public class CassandraSessionImpl implements CassandraSession {
                         throw new IgniteException(errorMsg, e);
                 }
 
-                sleeper.sleep();
+                if (!CassandraHelper.isTableAbsenceError(error))
+                    sleeper.sleep();
 
                 attempt++;
             }
@@ -320,7 +322,8 @@ public class CassandraSessionImpl implements CassandraSession {
                     handlePreparedStatementClusterError(prepStatEx);
                 }
 
-                sleeper.sleep();
+                if (!CassandraHelper.isTableAbsenceError(error))
+                    sleeper.sleep();
 
                 attempt++;
             }
@@ -402,6 +405,103 @@ public class CassandraSessionImpl implements CassandraSession {
     }
 
     /** {@inheritDoc} */
+    @Override public void execute(List<Mutation> mutations) {
+        if (mutations == null || mutations.isEmpty())
+            return;
+
+        Throwable error = null;
+        String errorMsg = "Failed to apply " + mutations.size() + " mutations performed withing Ignite " +
+                "transaction into Cassandra";
+
+        int attempt = 0;
+        boolean tableExistenceRequired = false;
+        Map<String, PreparedStatement> statements = new HashMap<>();
+        Map<String, KeyValuePersistenceSettings> tableSettings = new HashMap<>();
+        RandomSleeper sleeper = newSleeper();
+
+        incrementSessionRefs();
+
+        try {
+            while (attempt < CQL_EXECUTION_ATTEMPTS_COUNT) {
+                error = null;
+
+                if (attempt != 0) {
+                    log.warning("Trying " + (attempt + 1) + " attempt to apply " + mutations.size() + " mutations " +
+                            "performed withing Ignite transaction into Cassandra");
+                }
+
+                try {
+                    BatchStatement batch = new BatchStatement();
+
+                    // accumulating all the mutations into one Cassandra logged batch
+                    for (Mutation mutation : mutations) {
+                        String key = mutation.getTable() + mutation.getClass().getName();
+                        PreparedStatement st = statements.get(key);
+
+                        if (st == null) {
+                            st = prepareStatement(mutation.getTable(), mutation.getStatement(),
+                                    mutation.getPersistenceSettings(), mutation.tableExistenceRequired());
+
+                            if (st != null)
+                                statements.put(key, st);
+                        }
+
+                        if (st != null)
+                            batch.add(mutation.bindStatement(st));
+
+                        if (attempt == 0) {
+                            if (mutation.tableExistenceRequired()) {
+                                tableExistenceRequired = true;
+
+                                if (!tableSettings.containsKey(mutation.getTable()))
+                                    tableSettings.put(mutation.getTable(), mutation.getPersistenceSettings());
+                            }
+                        }
+                    }
+
+                    // committing logged batch into Cassandra
+                    if (batch.size() > 0)
+                        session().execute(tuneStatementExecutionOptions(batch));
+
+                    return;
+                } catch (Throwable e) {
+                    error = e;
+
+                    if (CassandraHelper.isTableAbsenceError(e)) {
+                        if (tableExistenceRequired) {
+                            for (Map.Entry<String, KeyValuePersistenceSettings> entry : tableSettings.entrySet())
+                                handleTableAbsenceError(entry.getKey(), entry.getValue());
+                        }
+                        else
+                            return;
+                    } else if (CassandraHelper.isHostsAvailabilityError(e)) {
+                        if (handleHostsAvailabilityError(e, attempt, errorMsg))
+                            statements.clear();
+                    } else if (CassandraHelper.isPreparedStatementClusterError(e)) {
+                        handlePreparedStatementClusterError(e);
+                        statements.clear();
+                    } else {
+                        // For an error which we don't know how to handle, we will not try next attempts and terminate.
+                        throw new IgniteException(errorMsg, e);
+                    }
+                }
+
+                if (!CassandraHelper.isTableAbsenceError(error))
+                    sleeper.sleep();
+
+                attempt++;
+            }
+        } catch (Throwable e) {
+            error = e;
+        } finally {
+            decrementSessionRefs();
+        }
+
+        log.error(errorMsg, error);
+        throw new IgniteException(errorMsg, error);
+    }
+
+    /** {@inheritDoc} */
     @Override public synchronized void close() throws IOException {
         if (decrementSessionRefs() == 0 && ses != null) {
             SessionPool.put(this, ses);
@@ -517,7 +617,8 @@ public class CassandraSessionImpl implements CassandraSession {
                     error = e;
                 }
 
-                sleeper.sleep();
+                if (!CassandraHelper.isTableAbsenceError(error))
+                    sleeper.sleep();
 
                 attempt++;
             }
@@ -585,7 +686,7 @@ public class CassandraSessionImpl implements CassandraSession {
                 log.info("-----------------------------------------------------------------------");
                 log.info("Creating Cassandra table '" + tableFullName + "'");
                 log.info("-----------------------------------------------------------------------\n\n" +
-                        tableFullName + "\n");
+                        settings.getTableDDLStatement(table) + "\n");
                 log.info("-----------------------------------------------------------------------");
                 session().execute(settings.getTableDDLStatement(table));
                 log.info("Cassandra table '" + tableFullName + "' was successfully created");
@@ -634,10 +735,14 @@ public class CassandraSessionImpl implements CassandraSession {
 
         while (attempt < CQL_EXECUTION_ATTEMPTS_COUNT) {
             try {
+                log.info("-----------------------------------------------------------------------");
                 log.info("Creating indexes for Cassandra table '" + tableFullName + "'");
+                log.info("-----------------------------------------------------------------------");
 
                 for (String statement : indexDDLStatements) {
                     try {
+                        log.info(statement);
+                        log.info("-----------------------------------------------------------------------");
                         session().execute(statement);
                     }
                     catch (AlreadyExistsException ignored) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/BaseMutation.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/BaseMutation.java b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/BaseMutation.java
new file mode 100644
index 0000000..2625e87
--- /dev/null
+++ b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/BaseMutation.java
@@ -0,0 +1,68 @@
+/*
+ * 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.cache.store.cassandra.session.transaction;
+
+import org.apache.ignite.cache.store.cassandra.persistence.KeyValuePersistenceSettings;
+import org.apache.ignite.cache.store.cassandra.persistence.PersistenceController;
+
+/**
+ * Base class to inherit from to implement specific mutations operation.
+ */
+public abstract class BaseMutation implements Mutation {
+    /** Cassandra table to use. */
+    private final String table;
+
+    /** Persistence controller to be utilized for mutation. */
+    private final PersistenceController ctrl;
+
+    /**
+     * Creates instance of mutation operation.
+     *
+     * @param table Cassandra table which should be used for the mutation.
+     * @param ctrl Persistence controller to use.
+     */
+    public BaseMutation(String table, PersistenceController ctrl) {
+        if (table == null || table.trim().isEmpty())
+            throw new IllegalArgumentException("Table name should be specified");
+
+        if (ctrl == null)
+            throw new IllegalArgumentException("Persistence controller should be specified");
+
+        this.table = table;
+        this.ctrl = ctrl;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String getTable() {
+        return table;
+    }
+
+    /** {@inheritDoc} */
+    @Override public KeyValuePersistenceSettings getPersistenceSettings() {
+        return ctrl.getPersistenceSettings();
+    }
+
+    /**
+     * Service method to get persistence controller instance
+     *
+     * @return Persistence controller to use for the mutation
+     */
+    protected PersistenceController controller() {
+        return ctrl;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/DeleteMutation.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/DeleteMutation.java b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/DeleteMutation.java
new file mode 100644
index 0000000..79c0bfe
--- /dev/null
+++ b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/DeleteMutation.java
@@ -0,0 +1,57 @@
+/*
+ * 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.cache.store.cassandra.session.transaction;
+
+import com.datastax.driver.core.BoundStatement;
+import com.datastax.driver.core.PreparedStatement;
+import org.apache.ignite.cache.store.cassandra.persistence.PersistenceController;
+
+/**
+ * Mutation which deletes object from Cassandra.
+ */
+public class DeleteMutation extends BaseMutation {
+    /** Ignite cache key of the object which should be deleted. */
+    private final Object key;
+
+    /**
+     * Creates instance of delete mutation operation.
+     *
+     * @param key Ignite cache key of the object which should be deleted.
+     * @param table Cassandra table which should be used for the mutation.
+     * @param ctrl Persistence controller to use.
+     */
+    public DeleteMutation(Object key, String table, PersistenceController ctrl) {
+        super(table, ctrl);
+        this.key = key;
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean tableExistenceRequired() {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String getStatement() {
+        return controller().getDeleteStatement(getTable());
+    }
+
+    /** {@inheritDoc} */
+    @Override public BoundStatement bindStatement(PreparedStatement statement) {
+        return controller().bindKey(statement, key);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/Mutation.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/Mutation.java b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/Mutation.java
new file mode 100644
index 0000000..cb014f8
--- /dev/null
+++ b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/Mutation.java
@@ -0,0 +1,64 @@
+/*
+ * 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.cache.store.cassandra.session.transaction;
+
+import com.datastax.driver.core.BoundStatement;
+import com.datastax.driver.core.PreparedStatement;
+import org.apache.ignite.cache.store.cassandra.persistence.KeyValuePersistenceSettings;
+
+/**
+ * Provides information about particular mutation operation performed withing transaction.
+ */
+public interface Mutation {
+    /**
+     * Cassandra table to use for an operation.
+     *
+     * @return Table name.
+     */
+    public String getTable();
+
+    /**
+     * Indicates if Cassandra tables existence is required for this operation.
+     *
+     * @return {@code true} true if table existence required.
+     */
+    public boolean tableExistenceRequired();
+
+    /**
+     *  Returns Ignite cache key/value persistence settings.
+     *
+     * @return persistence settings.
+     */
+    public KeyValuePersistenceSettings getPersistenceSettings();
+
+    /**
+     * Returns unbind CLQ statement for to be executed.
+     *
+     * @return Unbind CQL statement.
+     */
+    public String getStatement();
+
+    /**
+     * Binds prepared statement to current Cassandra session.
+     *
+     * @param statement Statement.
+     * @param obj Parameters for statement binding.
+     * @return Bounded statement.
+     */
+    public BoundStatement bindStatement(PreparedStatement statement);
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/WriteMutation.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/WriteMutation.java b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/WriteMutation.java
new file mode 100644
index 0000000..3c74378
--- /dev/null
+++ b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/WriteMutation.java
@@ -0,0 +1,60 @@
+/*
+ * 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.cache.store.cassandra.session.transaction;
+
+import javax.cache.Cache;
+
+import com.datastax.driver.core.BoundStatement;
+import com.datastax.driver.core.PreparedStatement;
+
+import org.apache.ignite.cache.store.cassandra.persistence.PersistenceController;
+
+/**
+ * Mutation which writes(inserts) object into Cassandra.
+ */
+public class WriteMutation extends BaseMutation {
+    /** Ignite cache entry to be inserted into Cassandra. */
+    private final Cache.Entry entry;
+
+    /**
+     * Creates instance of delete mutation operation.
+     *
+     * @param entry Ignite cache entry to be inserted into Cassandra.
+     * @param table Cassandra table which should be used for the mutation.
+     * @param ctrl Persistence controller to use.
+     */
+    public WriteMutation(Cache.Entry entry, String table, PersistenceController ctrl) {
+        super(table, ctrl);
+        this.entry = entry;
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean tableExistenceRequired() {
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String getStatement() {
+        return controller().getWriteStatement(getTable());
+    }
+
+    /** {@inheritDoc} */
+    @Override public BoundStatement bindStatement(PreparedStatement statement) {
+        return controller().bindKeyValue(statement, entry.getKey(), entry.getValue());
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/package-info.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/package-info.java b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/package-info.java
new file mode 100644
index 0000000..7141845
--- /dev/null
+++ b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/package-info.java
@@ -0,0 +1,21 @@
+/*
+ * 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.
+ */
+
+/**
+ * Contains mutations implementation, to store changes made inside Ignite transaction
+ */
+package org.apache.ignite.cache.store.cassandra.session.transaction;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/test/java/org/apache/ignite/tests/CassandraDirectPersistenceTest.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/CassandraDirectPersistenceTest.java b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/CassandraDirectPersistenceTest.java
index 9974898..f9e9649 100644
--- a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/CassandraDirectPersistenceTest.java
+++ b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/CassandraDirectPersistenceTest.java
@@ -18,14 +18,21 @@
 package org.apache.ignite.tests;
 
 import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 import org.apache.ignite.cache.store.CacheStore;
 import org.apache.ignite.internal.processors.cache.CacheEntryImpl;
+import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.tests.pojos.Person;
 import org.apache.ignite.tests.pojos.PersonId;
+import org.apache.ignite.tests.pojos.Product;
+import org.apache.ignite.tests.pojos.ProductOrder;
 import org.apache.ignite.tests.utils.CacheStoreHelper;
 import org.apache.ignite.tests.utils.CassandraHelper;
+import org.apache.ignite.tests.utils.TestCacheSession;
+import org.apache.ignite.tests.utils.TestTransaction;
 import org.apache.ignite.tests.utils.TestsHelper;
+import org.apache.ignite.transactions.Transaction;
 import org.apache.log4j.Logger;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -113,31 +120,31 @@ public class CassandraDirectPersistenceTest {
 
         LOGGER.info("Running PRIMITIVE strategy write tests");
 
-        LOGGER.info("Running single operation write tests");
+        LOGGER.info("Running single write operation tests");
         store1.write(longEntries.iterator().next());
         store2.write(strEntries.iterator().next());
-        LOGGER.info("Single operation write tests passed");
+        LOGGER.info("Single write operation tests passed");
 
-        LOGGER.info("Running bulk operation write tests");
+        LOGGER.info("Running bulk write operation tests");
         store1.writeAll(longEntries);
         store2.writeAll(strEntries);
-        LOGGER.info("Bulk operation write tests passed");
+        LOGGER.info("Bulk write operation tests passed");
 
         LOGGER.info("PRIMITIVE strategy write tests passed");
 
         LOGGER.info("Running PRIMITIVE strategy read tests");
 
-        LOGGER.info("Running single operation read tests");
+        LOGGER.info("Running single read operation tests");
 
         LOGGER.info("Running real keys read tests");
 
         Long longVal = (Long)store1.load(longEntries.iterator().next().getKey());
         if (!longEntries.iterator().next().getValue().equals(longVal))
-            throw new RuntimeException("Long values was incorrectly deserialized from Cassandra");
+            throw new RuntimeException("Long values were incorrectly deserialized from Cassandra");
 
         String strVal = (String)store2.load(strEntries.iterator().next().getKey());
         if (!strEntries.iterator().next().getValue().equals(strVal))
-            throw new RuntimeException("String values was incorrectly deserialized from Cassandra");
+            throw new RuntimeException("String values were incorrectly deserialized from Cassandra");
 
         LOGGER.info("Running fake keys read tests");
 
@@ -149,31 +156,31 @@ public class CassandraDirectPersistenceTest {
         if (strVal != null)
             throw new RuntimeException("String value with fake key '-1' was found in Cassandra");
 
-        LOGGER.info("Single operation read tests passed");
+        LOGGER.info("Single read operation tests passed");
 
-        LOGGER.info("Running bulk operation read tests");
+        LOGGER.info("Running bulk read operation tests");
 
         LOGGER.info("Running real keys read tests");
 
         Map longValues = store1.loadAll(TestsHelper.getKeys(longEntries));
         if (!TestsHelper.checkCollectionsEqual(longValues, longEntries))
-            throw new RuntimeException("Long values was incorrectly deserialized from Cassandra");
+            throw new RuntimeException("Long values were incorrectly deserialized from Cassandra");
 
         Map strValues = store2.loadAll(TestsHelper.getKeys(strEntries));
         if (!TestsHelper.checkCollectionsEqual(strValues, strEntries))
-            throw new RuntimeException("String values was incorrectly deserialized from Cassandra");
+            throw new RuntimeException("String values were incorrectly deserialized from Cassandra");
 
         LOGGER.info("Running fake keys read tests");
 
         longValues = store1.loadAll(fakeLongKeys);
         if (!TestsHelper.checkCollectionsEqual(longValues, longEntries))
-            throw new RuntimeException("Long values was incorrectly deserialized from Cassandra");
+            throw new RuntimeException("Long values were incorrectly deserialized from Cassandra");
 
         strValues = store2.loadAll(fakeStrKeys);
         if (!TestsHelper.checkCollectionsEqual(strValues, strEntries))
-            throw new RuntimeException("String values was incorrectly deserialized from Cassandra");
+            throw new RuntimeException("String values were incorrectly deserialized from Cassandra");
 
-        LOGGER.info("Bulk operation read tests passed");
+        LOGGER.info("Bulk read operation tests passed");
 
         LOGGER.info("PRIMITIVE strategy read tests passed");
 
@@ -219,53 +226,53 @@ public class CassandraDirectPersistenceTest {
 
         LOGGER.info("Running BLOB strategy write tests");
 
-        LOGGER.info("Running single operation write tests");
+        LOGGER.info("Running single write operation tests");
         store1.write(longEntries.iterator().next());
         store2.write(personEntries.iterator().next());
         store3.write(personEntries.iterator().next());
-        LOGGER.info("Single operation write tests passed");
+        LOGGER.info("Single write operation tests passed");
 
-        LOGGER.info("Running bulk operation write tests");
+        LOGGER.info("Running bulk write operation tests");
         store1.writeAll(longEntries);
         store2.writeAll(personEntries);
         store3.writeAll(personEntries);
-        LOGGER.info("Bulk operation write tests passed");
+        LOGGER.info("Bulk write operation tests passed");
 
         LOGGER.info("BLOB strategy write tests passed");
 
         LOGGER.info("Running BLOB strategy read tests");
 
-        LOGGER.info("Running single operation read tests");
+        LOGGER.info("Running single read operation tests");
 
         Long longVal = (Long)store1.load(longEntries.iterator().next().getKey());
         if (!longEntries.iterator().next().getValue().equals(longVal))
-            throw new RuntimeException("Long values was incorrectly deserialized from Cassandra");
+            throw new RuntimeException("Long values were incorrectly deserialized from Cassandra");
 
         Person personVal = (Person)store2.load(personEntries.iterator().next().getKey());
         if (!personEntries.iterator().next().getValue().equals(personVal))
-            throw new RuntimeException("Person values was incorrectly deserialized from Cassandra");
+            throw new RuntimeException("Person values were incorrectly deserialized from Cassandra");
 
         personVal = (Person)store3.load(personEntries.iterator().next().getKey());
         if (!personEntries.iterator().next().getValue().equals(personVal))
-            throw new RuntimeException("Person values was incorrectly deserialized from Cassandra");
+            throw new RuntimeException("Person values were incorrectly deserialized from Cassandra");
 
-        LOGGER.info("Single operation read tests passed");
+        LOGGER.info("Single read operation tests passed");
 
-        LOGGER.info("Running bulk operation read tests");
+        LOGGER.info("Running bulk read operation tests");
 
         Map longValues = store1.loadAll(TestsHelper.getKeys(longEntries));
         if (!TestsHelper.checkCollectionsEqual(longValues, longEntries))
-            throw new RuntimeException("Long values was incorrectly deserialized from Cassandra");
+            throw new RuntimeException("Long values were incorrectly deserialized from Cassandra");
 
         Map personValues = store2.loadAll(TestsHelper.getKeys(personEntries));
         if (!TestsHelper.checkPersonCollectionsEqual(personValues, personEntries, false))
-            throw new RuntimeException("Person values was incorrectly deserialized from Cassandra");
+            throw new RuntimeException("Person values were incorrectly deserialized from Cassandra");
 
         personValues = store3.loadAll(TestsHelper.getKeys(personEntries));
         if (!TestsHelper.checkPersonCollectionsEqual(personValues, personEntries, false))
-            throw new RuntimeException("Person values was incorrectly deserialized from Cassandra");
+            throw new RuntimeException("Person values were incorrectly deserialized from Cassandra");
 
-        LOGGER.info("Bulk operation read tests passed");
+        LOGGER.info("Bulk read operation tests passed");
 
         LOGGER.info("BLOB strategy read tests passed");
 
@@ -303,69 +310,99 @@ public class CassandraDirectPersistenceTest {
             new ClassPathResource("org/apache/ignite/tests/persistence/pojo/persistence-settings-4.xml"),
             CassandraHelper.getAdminDataSrc());
 
+        CacheStore productStore = CacheStoreHelper.createCacheStore("product",
+            new ClassPathResource("org/apache/ignite/tests/persistence/pojo/product.xml"),
+            CassandraHelper.getAdminDataSrc());
+
+        CacheStore orderStore = CacheStoreHelper.createCacheStore("order",
+            new ClassPathResource("org/apache/ignite/tests/persistence/pojo/order.xml"),
+            CassandraHelper.getAdminDataSrc());
+
         Collection<CacheEntryImpl<Long, Person>> entries1 = TestsHelper.generateLongsPersonsEntries();
         Collection<CacheEntryImpl<PersonId, Person>> entries2 = TestsHelper.generatePersonIdsPersonsEntries();
         Collection<CacheEntryImpl<PersonId, Person>> entries3 = TestsHelper.generatePersonIdsPersonsEntries();
+        Collection<CacheEntryImpl<Long, Product>> productEntries = TestsHelper.generateProductEntries();
+        Collection<CacheEntryImpl<Long, ProductOrder>> orderEntries = TestsHelper.generateOrderEntries();
 
         LOGGER.info("Running POJO strategy write tests");
 
-        LOGGER.info("Running single operation write tests");
+        LOGGER.info("Running single write operation tests");
         store1.write(entries1.iterator().next());
         store2.write(entries2.iterator().next());
         store3.write(entries3.iterator().next());
         store4.write(entries3.iterator().next());
-        LOGGER.info("Single operation write tests passed");
+        productStore.write(productEntries.iterator().next());
+        orderStore.write(orderEntries.iterator().next());
+        LOGGER.info("Single write operation tests passed");
 
-        LOGGER.info("Running bulk operation write tests");
+        LOGGER.info("Running bulk write operation tests");
         store1.writeAll(entries1);
         store2.writeAll(entries2);
         store3.writeAll(entries3);
         store4.writeAll(entries3);
-        LOGGER.info("Bulk operation write tests passed");
+        productStore.writeAll(productEntries);
+        orderStore.writeAll(orderEntries);
+        LOGGER.info("Bulk write operation tests passed");
 
         LOGGER.info("POJO strategy write tests passed");
 
         LOGGER.info("Running POJO strategy read tests");
 
-        LOGGER.info("Running single operation read tests");
+        LOGGER.info("Running single read operation tests");
 
         Person person = (Person)store1.load(entries1.iterator().next().getKey());
         if (!entries1.iterator().next().getValue().equalsPrimitiveFields(person))
-            throw new RuntimeException("Person values was incorrectly deserialized from Cassandra");
+            throw new RuntimeException("Person values were incorrectly deserialized from Cassandra");
 
         person = (Person)store2.load(entries2.iterator().next().getKey());
         if (!entries2.iterator().next().getValue().equalsPrimitiveFields(person))
-            throw new RuntimeException("Person values was incorrectly deserialized from Cassandra");
+            throw new RuntimeException("Person values were incorrectly deserialized from Cassandra");
 
         person = (Person)store3.load(entries3.iterator().next().getKey());
         if (!entries3.iterator().next().getValue().equals(person))
-            throw new RuntimeException("Person values was incorrectly deserialized from Cassandra");
+            throw new RuntimeException("Person values were incorrectly deserialized from Cassandra");
 
         person = (Person)store4.load(entries3.iterator().next().getKey());
         if (!entries3.iterator().next().getValue().equals(person))
-            throw new RuntimeException("Person values was incorrectly deserialized from Cassandra");
+            throw new RuntimeException("Person values were incorrectly deserialized from Cassandra");
 
-        LOGGER.info("Single operation read tests passed");
+        Product product = (Product)productStore.load(productEntries.iterator().next().getKey());
+        if (!productEntries.iterator().next().getValue().equals(product))
+            throw new RuntimeException("Product values were incorrectly deserialized from Cassandra");
 
-        LOGGER.info("Running bulk operation read tests");
+        ProductOrder order = (ProductOrder)orderStore.load(orderEntries.iterator().next().getKey());
+        if (!orderEntries.iterator().next().getValue().equals(order))
+            throw new RuntimeException("Order values were incorrectly deserialized from Cassandra");
+
+        LOGGER.info("Single read operation tests passed");
+
+        LOGGER.info("Running bulk read operation tests");
 
         Map persons = store1.loadAll(TestsHelper.getKeys(entries1));
         if (!TestsHelper.checkPersonCollectionsEqual(persons, entries1, true))
-            throw new RuntimeException("Person values was incorrectly deserialized from Cassandra");
+            throw new RuntimeException("Person values were incorrectly deserialized from Cassandra");
 
         persons = store2.loadAll(TestsHelper.getKeys(entries2));
         if (!TestsHelper.checkPersonCollectionsEqual(persons, entries2, true))
-            throw new RuntimeException("Person values was incorrectly deserialized from Cassandra");
+            throw new RuntimeException("Person values were incorrectly deserialized from Cassandra");
 
         persons = store3.loadAll(TestsHelper.getKeys(entries3));
         if (!TestsHelper.checkPersonCollectionsEqual(persons, entries3, false))
-            throw new RuntimeException("Person values was incorrectly deserialized from Cassandra");
+            throw new RuntimeException("Person values were incorrectly deserialized from Cassandra");
 
         persons = store4.loadAll(TestsHelper.getKeys(entries3));
         if (!TestsHelper.checkPersonCollectionsEqual(persons, entries3, false))
-            throw new RuntimeException("Person values was incorrectly deserialized from Cassandra");
+            throw new RuntimeException("Person values were incorrectly deserialized from Cassandra");
+
+        Map products = productStore.loadAll(TestsHelper.getKeys(productEntries));
+        if (!TestsHelper.checkProductCollectionsEqual(products, productEntries))
+            throw new RuntimeException("Product values were incorrectly deserialized from Cassandra");
+
+        Map orders = orderStore.loadAll(TestsHelper.getKeys(orderEntries));
+        if (!TestsHelper.checkOrderCollectionsEqual(orders, orderEntries))
+            throw new RuntimeException("Order values were incorrectly deserialized from Cassandra");
 
-        LOGGER.info("Bulk operation read tests passed");
+        LOGGER.info("Bulk read operation tests passed");
 
         LOGGER.info("POJO strategy read tests passed");
 
@@ -383,6 +420,277 @@ public class CassandraDirectPersistenceTest {
         store4.delete(entries3.iterator().next().getKey());
         store4.deleteAll(TestsHelper.getKeys(entries3));
 
+        productStore.delete(productEntries.iterator().next().getKey());
+        productStore.deleteAll(TestsHelper.getKeys(productEntries));
+
+        orderStore.delete(orderEntries.iterator().next().getKey());
+        orderStore.deleteAll(TestsHelper.getKeys(orderEntries));
+
         LOGGER.info("POJO strategy delete tests passed");
     }
+
+    /** */
+    @Test
+    @SuppressWarnings("unchecked")
+    public void pojoStrategyTransactionTest() {
+        Map<Object, Object> sessionProps = U.newHashMap(1);
+        Transaction sessionTx = new TestTransaction();
+
+        CacheStore productStore = CacheStoreHelper.createCacheStore("product",
+            new ClassPathResource("org/apache/ignite/tests/persistence/pojo/product.xml"),
+            CassandraHelper.getAdminDataSrc(), new TestCacheSession("product", sessionTx, sessionProps));
+
+        CacheStore orderStore = CacheStoreHelper.createCacheStore("order",
+            new ClassPathResource("org/apache/ignite/tests/persistence/pojo/order.xml"),
+            CassandraHelper.getAdminDataSrc(), new TestCacheSession("order", sessionTx, sessionProps));
+
+        List<CacheEntryImpl<Long, Product>> productEntries = TestsHelper.generateProductEntries();
+        Map<Long, List<CacheEntryImpl<Long, ProductOrder>>> ordersPerProduct =
+                TestsHelper.generateOrdersPerProductEntries(productEntries, 2);
+
+        Collection<Long> productIds =  TestsHelper.getProductIds(productEntries);
+        Collection<Long> orderIds =  TestsHelper.getOrderIds(ordersPerProduct);
+
+        LOGGER.info("Running POJO strategy transaction write tests");
+
+        LOGGER.info("Running single write operation tests");
+
+        CassandraHelper.dropTestKeyspaces();
+
+        Product product = productEntries.iterator().next().getValue();
+        ProductOrder order = ordersPerProduct.get(product.getId()).iterator().next().getValue();
+
+        productStore.write(productEntries.iterator().next());
+        orderStore.write(ordersPerProduct.get(product.getId()).iterator().next());
+
+        if (productStore.load(product.getId()) != null || orderStore.load(order.getId()) != null) {
+            throw new RuntimeException("Single write operation test failed. Transaction wasn't committed yet, but " +
+                    "objects were already persisted into Cassandra");
+        }
+
+        Map<Long, Product> products = (Map<Long, Product>)productStore.loadAll(productIds);
+        Map<Long, ProductOrder> orders = (Map<Long, ProductOrder>)orderStore.loadAll(orderIds);
+
+        if ((products != null && !products.isEmpty()) || (orders != null && !orders.isEmpty())) {
+            throw new RuntimeException("Single write operation test failed. Transaction wasn't committed yet, but " +
+                    "objects were already persisted into Cassandra");
+        }
+
+        //noinspection deprecation
+        orderStore.sessionEnd(true);
+        //noinspection deprecation
+        productStore.sessionEnd(true);
+
+        Product product1 = (Product)productStore.load(product.getId());
+        ProductOrder order1 = (ProductOrder)orderStore.load(order.getId());
+
+        if (product1 == null || order1 == null) {
+            throw new RuntimeException("Single write operation test failed. Transaction was committed, but " +
+                    "no objects were persisted into Cassandra");
+        }
+
+        if (!product.equals(product1) || !order.equals(order1)) {
+            throw new RuntimeException("Single write operation test failed. Transaction was committed, but " +
+                    "objects were incorrectly persisted/loaded to/from Cassandra");
+        }
+
+        products = (Map<Long, Product>)productStore.loadAll(productIds);
+        orders = (Map<Long, ProductOrder>)orderStore.loadAll(orderIds);
+
+        if (products == null || products.isEmpty() || orders == null || orders.isEmpty()) {
+            throw new RuntimeException("Single write operation test failed. Transaction was committed, but " +
+                    "no objects were persisted into Cassandra");
+        }
+
+        if (products.size() > 1 || orders.size() > 1) {
+            throw new RuntimeException("Single write operation test failed. There were committed more objects " +
+                    "into Cassandra than expected");
+        }
+
+        product1 = products.entrySet().iterator().next().getValue();
+        order1 = orders.entrySet().iterator().next().getValue();
+
+        if (!product.equals(product1) || !order.equals(order1)) {
+            throw new RuntimeException("Single write operation test failed. Transaction was committed, but " +
+                    "objects were incorrectly persisted/loaded to/from Cassandra");
+        }
+
+        LOGGER.info("Single write operation tests passed");
+
+        LOGGER.info("Running bulk write operation tests");
+
+        CassandraHelper.dropTestKeyspaces();
+        sessionProps.clear();
+
+        productStore.writeAll(productEntries);
+
+        for (Long productId : ordersPerProduct.keySet())
+            orderStore.writeAll(ordersPerProduct.get(productId));
+
+        for (Long productId : productIds) {
+            if (productStore.load(productId) != null) {
+                throw new RuntimeException("Bulk write operation test failed. Transaction wasn't committed yet, but " +
+                        "objects were already persisted into Cassandra");
+            }
+        }
+
+        for (Long orderId : orderIds) {
+            if (orderStore.load(orderId) != null) {
+                throw new RuntimeException("Bulk write operation test failed. Transaction wasn't committed yet, but " +
+                        "objects were already persisted into Cassandra");
+            }
+        }
+
+        products = (Map<Long, Product>)productStore.loadAll(productIds);
+        orders = (Map<Long, ProductOrder>)orderStore.loadAll(orderIds);
+
+        if ((products != null && !products.isEmpty()) || (orders != null && !orders.isEmpty())) {
+            throw new RuntimeException("Bulk write operation test failed. Transaction wasn't committed yet, but " +
+                    "objects were already persisted into Cassandra");
+        }
+
+        //noinspection deprecation
+        productStore.sessionEnd(true);
+        //noinspection deprecation
+        orderStore.sessionEnd(true);
+
+        for (CacheEntryImpl<Long, Product> entry : productEntries) {
+            product = (Product)productStore.load(entry.getKey());
+
+            if (!entry.getValue().equals(product)) {
+                throw new RuntimeException("Bulk write operation test failed. Transaction was committed, but " +
+                        "not all objects were persisted into Cassandra");
+            }
+        }
+
+        for (Long productId : ordersPerProduct.keySet()) {
+            for (CacheEntryImpl<Long, ProductOrder> entry : ordersPerProduct.get(productId)) {
+                order = (ProductOrder)orderStore.load(entry.getKey());
+
+                if (!entry.getValue().equals(order)) {
+                    throw new RuntimeException("Bulk write operation test failed. Transaction was committed, but " +
+                            "not all objects were persisted into Cassandra");
+                }
+            }
+        }
+
+        products = (Map<Long, Product>)productStore.loadAll(productIds);
+        orders = (Map<Long, ProductOrder>)orderStore.loadAll(orderIds);
+
+        if (products == null || products.isEmpty() || orders == null || orders.isEmpty()) {
+            throw new RuntimeException("Bulk write operation test failed. Transaction was committed, but " +
+                    "no objects were persisted into Cassandra");
+        }
+
+        if (products.size() < productIds.size() || orders.size() < orderIds.size()) {
+            throw new RuntimeException("Bulk write operation test failed. There were committed less objects " +
+                    "into Cassandra than expected");
+        }
+
+        if (products.size() > productIds.size() || orders.size() > orderIds.size()) {
+            throw new RuntimeException("Bulk write operation test failed. There were committed more objects " +
+                    "into Cassandra than expected");
+        }
+
+        for (CacheEntryImpl<Long, Product> entry : productEntries) {
+            product = products.get(entry.getKey());
+
+            if (!entry.getValue().equals(product)) {
+                throw new RuntimeException("Bulk write operation test failed. Transaction was committed, but " +
+                        "some objects were incorrectly persisted/loaded to/from Cassandra");
+            }
+        }
+
+        for (Long productId : ordersPerProduct.keySet()) {
+            for (CacheEntryImpl<Long, ProductOrder> entry : ordersPerProduct.get(productId)) {
+                order = orders.get(entry.getKey());
+
+                if (!entry.getValue().equals(order)) {
+                    throw new RuntimeException("Bulk write operation test failed. Transaction was committed, but " +
+                            "some objects were incorrectly persisted/loaded to/from Cassandra");
+                }
+            }
+        }
+
+        LOGGER.info("Bulk write operation tests passed");
+
+        LOGGER.info("POJO strategy transaction write tests passed");
+
+        LOGGER.info("Running POJO strategy transaction delete tests");
+
+        LOGGER.info("Running single delete tests");
+
+        sessionProps.clear();
+
+        Product deletedProduct = productEntries.remove(0).getValue();
+        ProductOrder deletedOrder = ordersPerProduct.get(deletedProduct.getId()).remove(0).getValue();
+
+        productStore.delete(deletedProduct.getId());
+        orderStore.delete(deletedOrder.getId());
+
+        if (productStore.load(deletedProduct.getId()) == null || orderStore.load(deletedOrder.getId()) == null) {
+            throw new RuntimeException("Single delete operation test failed. Transaction wasn't committed yet, but " +
+                    "objects were already deleted from Cassandra");
+        }
+
+        products = (Map<Long, Product>)productStore.loadAll(productIds);
+        orders = (Map<Long, ProductOrder>)orderStore.loadAll(orderIds);
+
+        if (products.size() != productIds.size() || orders.size() != orderIds.size()) {
+            throw new RuntimeException("Single delete operation test failed. Transaction wasn't committed yet, but " +
+                    "objects were already deleted from Cassandra");
+        }
+
+        //noinspection deprecation
+        productStore.sessionEnd(true);
+        //noinspection deprecation
+        orderStore.sessionEnd(true);
+
+        if (productStore.load(deletedProduct.getId()) != null || orderStore.load(deletedOrder.getId()) != null) {
+            throw new RuntimeException("Single delete operation test failed. Transaction was committed, but " +
+                    "objects were not deleted from Cassandra");
+        }
+
+        products = (Map<Long, Product>)productStore.loadAll(productIds);
+        orders = (Map<Long, ProductOrder>)orderStore.loadAll(orderIds);
+
+        if (products.get(deletedProduct.getId()) != null || orders.get(deletedOrder.getId()) != null) {
+            throw new RuntimeException("Single delete operation test failed. Transaction was committed, but " +
+                    "objects were not deleted from Cassandra");
+        }
+
+        LOGGER.info("Single delete tests passed");
+
+        LOGGER.info("Running bulk delete tests");
+
+        sessionProps.clear();
+
+        productStore.deleteAll(productIds);
+        orderStore.deleteAll(orderIds);
+
+        products = (Map<Long, Product>)productStore.loadAll(productIds);
+        orders = (Map<Long, ProductOrder>)orderStore.loadAll(orderIds);
+
+        if (products == null || products.isEmpty() || orders == null || orders.isEmpty()) {
+            throw new RuntimeException("Bulk delete operation test failed. Transaction wasn't committed yet, but " +
+                    "objects were already deleted from Cassandra");
+        }
+
+        //noinspection deprecation
+        orderStore.sessionEnd(true);
+        //noinspection deprecation
+        productStore.sessionEnd(true);
+
+        products = (Map<Long, Product>)productStore.loadAll(productIds);
+        orders = (Map<Long, ProductOrder>)orderStore.loadAll(orderIds);
+
+        if ((products != null && !products.isEmpty()) || (orders != null && !orders.isEmpty())) {
+            throw new RuntimeException("Bulk delete operation test failed. Transaction was committed, but " +
+                    "objects were not deleted from Cassandra");
+        }
+
+        LOGGER.info("Bulk delete tests passed");
+
+        LOGGER.info("POJO strategy transaction delete tests passed");
+    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/test/java/org/apache/ignite/tests/CassandraLocalServer.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/CassandraLocalServer.java b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/CassandraLocalServer.java
new file mode 100644
index 0000000..fc54e5b
--- /dev/null
+++ b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/CassandraLocalServer.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.tests;
+
+import org.apache.ignite.tests.utils.CassandraHelper;
+import org.apache.log4j.Logger;
+
+/**
+ * Simple helper class to run Cassandra on localhost
+ */
+public class CassandraLocalServer {
+    /** */
+    private static final Logger LOGGER = Logger.getLogger(CassandraLocalServer.class.getName());
+
+    /** */
+    public static void main(String[] args) {
+        try {
+            CassandraHelper.startEmbeddedCassandra(LOGGER);
+        }
+        catch (Throwable e) {
+            throw new RuntimeException("Failed to start embedded Cassandra instance", e);
+        }
+
+        LOGGER.info("Testing admin connection to Cassandra");
+        CassandraHelper.testAdminConnection();
+
+        LOGGER.info("Testing regular connection to Cassandra");
+        CassandraHelper.testRegularConnection();
+
+        LOGGER.info("Dropping all artifacts from previous tests execution session");
+        CassandraHelper.dropTestKeyspaces();
+
+        while (true) {
+            try {
+                System.out.println("Cassandra server running");
+                Thread.sleep(10000);
+            }
+            catch (Throwable e) {
+                throw new RuntimeException("Cassandra server terminated", e);
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/test/java/org/apache/ignite/tests/DDLGeneratorTest.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/DDLGeneratorTest.java b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/DDLGeneratorTest.java
index 43b6d3c..6465580 100644
--- a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/DDLGeneratorTest.java
+++ b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/DDLGeneratorTest.java
@@ -25,33 +25,30 @@ import org.junit.Test;
  * DDLGenerator test.
  */
 public class DDLGeneratorTest {
-    private static final String URL1 = "org/apache/ignite/tests/persistence/primitive/persistence-settings-1.xml";
-    private static final String URL2 = "org/apache/ignite/tests/persistence/pojo/persistence-settings-3.xml";
-    private static final String URL3 = "org/apache/ignite/tests/persistence/pojo/persistence-settings-4.xml";
+    private static final String[] RESOURCES = new String[] {
+        "org/apache/ignite/tests/persistence/primitive/persistence-settings-1.xml",
+        "org/apache/ignite/tests/persistence/pojo/persistence-settings-3.xml",
+        "org/apache/ignite/tests/persistence/pojo/persistence-settings-4.xml",
+        "org/apache/ignite/tests/persistence/pojo/product.xml",
+        "org/apache/ignite/tests/persistence/pojo/order.xml"
+    };
 
     @Test
     @SuppressWarnings("unchecked")
     /** */
     public void generatorTest() {
-        ClassLoader clsLdr = DDLGeneratorTest.class.getClassLoader();
-
-        URL url1 = clsLdr.getResource(URL1);
-        if (url1 == null)
-            throw new IllegalStateException("Failed to find resource: " + URL1);
+        String[] files = new String[RESOURCES.length];
 
-        URL url2 = clsLdr.getResource(URL2);
-        if (url2 == null)
-            throw new IllegalStateException("Failed to find resource: " + URL2);
+        ClassLoader clsLdr = DDLGeneratorTest.class.getClassLoader();
 
-        URL url3 = clsLdr.getResource(URL3);
-        if (url3 == null)
-            throw new IllegalStateException("Failed to find resource: " + URL3);
+        for (int i = 0; i < RESOURCES.length; i++) {
+            URL url = clsLdr.getResource(RESOURCES[i]);
+            if (url == null)
+                throw new IllegalStateException("Failed to find resource: " + RESOURCES[i]);
 
-        String file1 = url1.getFile();
-        String file2 = url2.getFile();
-        String file3 = url3.getFile();
+            files[i] = url.getFile();
+        }
 
-        DDLGenerator.main(new String[]{file1, file2, file3});
+        DDLGenerator.main(files);
     }
-
 }


[44/50] [abbrv] ignite git commit: added toString()

Posted by sh...@apache.org.
added toString()


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

Branch: refs/heads/ignite-2788
Commit: 3d9f892613d7d0b5474ad0916968872d47ca87c1
Parents: f600750
Author: yzhdanov <yz...@apache.org>
Authored: Mon Oct 10 20:09:46 2016 +0300
Committer: yzhdanov <yz...@apache.org>
Committed: Mon Oct 10 20:09:46 2016 +0300

----------------------------------------------------------------------
 .../cache/version/GridCacheLazyPlainVersionedEntry.java        | 6 ++++++
 .../processors/cache/version/GridCachePlainVersionedEntry.java | 5 ++++-
 2 files changed, 10 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/3d9f8926/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheLazyPlainVersionedEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheLazyPlainVersionedEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheLazyPlainVersionedEntry.java
index 50de328..dae50bf 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheLazyPlainVersionedEntry.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheLazyPlainVersionedEntry.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.processors.cache.version;
 import org.apache.ignite.internal.processors.cache.CacheObject;
 import org.apache.ignite.internal.processors.cache.GridCacheContext;
 import org.apache.ignite.internal.processors.cache.KeyCacheObject;
+import org.apache.ignite.internal.util.typedef.internal.S;
 
 /**
  * Lazy plain versioned entry.
@@ -104,4 +105,9 @@ public class GridCacheLazyPlainVersionedEntry<K, V> extends GridCachePlainVersio
         return val;
     }
 
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(GridCacheLazyPlainVersionedEntry.class, this,
+            "super", super.toString(), "key", key(), "val", value());
+    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/3d9f8926/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCachePlainVersionedEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCachePlainVersionedEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCachePlainVersionedEntry.java
index dd682e9..c175e5a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCachePlainVersionedEntry.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCachePlainVersionedEntry.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.processors.cache.version;
 
+import org.apache.ignite.internal.util.tostring.GridToStringInclude;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.jetbrains.annotations.Nullable;
 
@@ -25,9 +26,11 @@ import org.jetbrains.annotations.Nullable;
  */
 public class GridCachePlainVersionedEntry<K, V> implements GridCacheVersionedEntryEx<K, V> {
     /** Key. */
+    @GridToStringInclude
     protected K key;
 
     /** Value. */
+    @GridToStringInclude
     protected V val;
 
     /** TTL. */
@@ -125,4 +128,4 @@ public class GridCachePlainVersionedEntry<K, V> implements GridCacheVersionedEnt
     @Override public String toString() {
         return S.toString(GridCachePlainVersionedEntry.class, this);
     }
-}
\ No newline at end of file
+}


[02/50] [abbrv] ignite git commit: Fixed incorrect test count calculation leading to afterTestsStopped() not being called.

Posted by sh...@apache.org.
Fixed incorrect test count calculation leading to afterTestsStopped() not being called.


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

Branch: refs/heads/ignite-2788
Commit: 78144c4c9d6200ceef8b666a186039685f053381
Parents: 33d3494
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Wed Sep 28 16:52:13 2016 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Wed Sep 28 16:52:13 2016 +0300

----------------------------------------------------------------------
 .../ignite/testframework/IgniteTestSuite.java   | 79 +++++++++++++++++---
 .../testframework/junits/GridAbstractTest.java  | 31 +++++++-
 2 files changed, 94 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/78144c4c/modules/core/src/test/java/org/apache/ignite/testframework/IgniteTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/IgniteTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testframework/IgniteTestSuite.java
index 7db9664..1cf69ae 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/IgniteTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/IgniteTestSuite.java
@@ -29,6 +29,7 @@ import org.junit.internal.MethodSorter;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.ArrayList;
+import java.util.LinkedList;
 import java.util.List;
 
 /**
@@ -134,7 +135,9 @@ public class IgniteTestSuite extends TestSuite {
             Class superCls = theClass;
 
             int testAdded = 0;
-            int testIgnored = 0;
+            int testSkipped = 0;
+
+            LinkedList<Test> addedTests = new LinkedList<>();
 
             for(List<String> names = new ArrayList<>(); Test.class.isAssignableFrom(superCls);
                 superCls = superCls.getSuperclass()) {
@@ -142,15 +145,29 @@ public class IgniteTestSuite extends TestSuite {
                 Method[] methods = MethodSorter.getDeclaredMethods(superCls);
 
                 for (Method each : methods) {
-                    if (addTestMethod(each, names, theClass, clsIgnore))
+                    AddResult res = addTestMethod(each, names, theClass, clsIgnore);
+
+                    if (res.added()) {
                         testAdded++;
+
+                        addedTests.add(res.test());
+                    }
                     else
-                        testIgnored++;
+                        testSkipped++;
                 }
             }
 
-            if(testAdded == 0 && testIgnored == 0)
+            if(testAdded == 0 && testSkipped == 0)
                 addTest(warning("No tests found in " + theClass.getName()));
+
+            // Populate tests count.
+            for (Test test : addedTests) {
+                if (test instanceof GridAbstractTest) {
+                    GridAbstractTest test0 = (GridAbstractTest)test;
+
+                    test0.forceTestCount(addedTests.size());
+                }
+            }
         }
     }
 
@@ -161,20 +178,20 @@ public class IgniteTestSuite extends TestSuite {
      * @param names Test name list.
      * @param theClass Test class.
      * @param clsIgnore Class ignore descriptor (if any).
-     * @return Whether test method was added.
+     * @return Result.
      */
-    private boolean addTestMethod(Method m, List<String> names, Class<?> theClass,
+    private AddResult addTestMethod(Method m, List<String> names, Class<?> theClass,
         @Nullable IgnoreDescriptor clsIgnore) {
         String name = m.getName();
 
         if (names.contains(name))
-            return false;
+            return new AddResult(false, null);
 
         if (!isPublicTestMethod(m)) {
             if (isTestMethod(m))
                 addTest(warning("Test method isn't public: " + m.getName() + "(" + theClass.getCanonicalName() + ")"));
 
-            return false;
+            return new AddResult(false, null);
         }
 
         names.add(name);
@@ -197,18 +214,20 @@ public class IgniteTestSuite extends TestSuite {
 
                 addTest(test);
 
-                return true;
+                return new AddResult(true, test);
             }
         }
         else {
             if (ignore == null) {
-                addTest(createTest(theClass, name));
+                Test test = createTest(theClass, name);
+
+                addTest(test);
 
-                return true;
+                return new AddResult(true, test);
             }
         }
 
-        return false;
+        return new AddResult(false, null);
     }
 
     /**
@@ -337,6 +356,42 @@ public class IgniteTestSuite extends TestSuite {
     }
 
     /**
+     * Test add result.
+     */
+    private static class AddResult {
+        /** Result. */
+        private final boolean added;
+
+        /** Test */
+        private final Test test;
+
+        /**
+         * Constructor.
+         *
+         * @param added Result.
+         * @param test Test.
+         */
+        public AddResult(boolean added, Test test) {
+            this.added = added;
+            this.test = test;
+        }
+
+        /**
+         * @return Result.
+         */
+        public boolean added() {
+            return added;
+        }
+
+        /**
+         * @return Test.
+         */
+        public Test test() {
+            return test;
+        }
+    }
+
+    /**
      * Test case simulating failure.
      */
     private static class ForcedFailure extends TestCase {

http://git-wip-us.apache.org/repos/asf/ignite/blob/78144c4c/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
index 8d6fd07..aa90af0 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
@@ -161,6 +161,12 @@ public abstract class GridAbstractTest extends TestCase {
     /** Force failure message. */
     private String forceFailureMsg;
 
+    /** Whether test count is known is advance. */
+    private boolean forceTestCnt;
+
+    /** Number of tests. */
+    private int testCnt;
+
     /**
      *
      */
@@ -1770,6 +1776,15 @@ public abstract class GridAbstractTest extends TestCase {
     }
 
     /**
+     * Set test count.
+     */
+    public void forceTestCount(int cnt) {
+        testCnt = cnt;
+
+        forceTestCnt = true;
+    }
+
+    /**
      * @throws Throwable If failed.
      */
     @SuppressWarnings({"ProhibitedExceptionDeclared"})
@@ -2076,11 +2091,19 @@ public abstract class GridAbstractTest extends TestCase {
          */
         public int getNumberOfTests() {
             if (numOfTests == -1) {
-                int cnt = 0;
+                GridAbstractTest this0 = GridAbstractTest.this;
+
+                int cnt;
 
-                for (Method m : GridAbstractTest.this.getClass().getMethods())
-                    if (m.getName().startsWith("test") && Modifier.isPublic(m.getModifiers()))
-                        cnt++;
+                if (this0.forceTestCnt)
+                    cnt = this0.testCnt;
+                else {
+                    cnt = 0;
+
+                    for (Method m : this0.getClass().getMethods())
+                        if (m.getName().startsWith("test") && Modifier.isPublic(m.getModifiers()))
+                            cnt++;
+                }
 
                 numOfTests = cnt;
             }


[36/50] [abbrv] ignite git commit: Merge ignite-1.7.3 to master.

Posted by sh...@apache.org.
Merge ignite-1.7.3 to master.


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

Branch: refs/heads/ignite-2788
Commit: a01927a91ba7bf0544e1afa61459b452e4c785d8
Parents: 04f72c1 bfdb5c3
Author: Alexey Kuznetsov <ak...@apache.org>
Authored: Tue Oct 4 16:50:36 2016 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Tue Oct 4 16:50:36 2016 +0700

----------------------------------------------------------------------
 .../Apache.Ignite.Core.Tests.NuGet.csproj       |  10 +
 .../Log4NetTest.cs                              |  87 +++++++++
 .../packages.config                             |   2 +
 .../Apache.Ignite.Core.Tests.csproj             |   9 +
 .../Log/Log4NetLoggerTest.cs                    | 188 +++++++++++++++++++
 .../Apache.Ignite.Core.Tests/packages.config    |   4 +-
 .../Apache.Ignite.Log4Net.csproj                |  76 ++++++++
 .../Apache.Ignite.Log4Net.nuspec                |  50 +++++
 .../Apache.Ignite.Log4Net.snk                   | Bin 0 -> 596 bytes
 .../IgniteLog4NetLogger.cs                      | 123 ++++++++++++
 .../Properties/AssemblyInfo.cs                  |  40 ++++
 .../Apache.Ignite.Log4Net/packages.config       |  20 ++
 .../Properties/AssemblyInfo.cs                  |   2 +-
 modules/platforms/dotnet/Apache.Ignite.sln      |  14 ++
 .../frontend/controllers/caches-controller.js   |  14 ++
 15 files changed, 637 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/a01927a9/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/Apache.Ignite.Core.Tests.NuGet.csproj
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/a01927a9/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
----------------------------------------------------------------------
diff --cc modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
index c1c4953,008229a..840d970
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
@@@ -55,22 -59,10 +59,23 @@@
      <Reference Include="System.Runtime.Serialization" />
      <Reference Include="System.ServiceProcess" />
      <Reference Include="System.XML" />
 +    <Reference Include="System.Xml.Linq" />
    </ItemGroup>
    <ItemGroup>
 +    <Compile Include="Binary\BinaryReaderWriterTest.cs" />
 +    <Compile Include="Binary\IO\BinaryStreamsTest.cs" />
 +    <Compile Include="Binary\JavaTypeMappingTest.cs" />
 +    <Compile Include="Binary\TypeResolverTest.cs" />
 +    <Compile Include="Cache\Affinity\AffinityKeyTest.cs" />
 +    <Compile Include="Cache\Affinity\AffinityTopologyVersionTest.cs" />
 +    <Compile Include="Cache\CacheResultTest.cs" />
 +    <Compile Include="Cache\Store\CacheStoreAdapterTest.cs" />
 +    <Compile Include="Collections\MultiValueDictionaryTest.cs" />
 +    <Compile Include="Collections\ReadOnlyCollectionTest.cs" />
 +    <Compile Include="Collections\ReadOnlyDictionaryTest.cs" />
 +    <Compile Include="Common\IgniteGuidTest.cs" />
      <Compile Include="Log\DefaultLoggerTest.cs" />
+     <Compile Include="Log\Log4NetLoggerTest.cs" />
      <Compile Include="Log\NLogLoggerTest.cs" />
      <Compile Include="TestAppConfig.cs" />
      <Compile Include="Binary\BinaryBuilderSelfTestFullFooter.cs" />

http://git-wip-us.apache.org/repos/asf/ignite/blob/a01927a9/modules/platforms/dotnet/Apache.Ignite.Core.Tests/packages.config
----------------------------------------------------------------------
diff --cc modules/platforms/dotnet/Apache.Ignite.Core.Tests/packages.config
index c1198cb,d369a35..ccf079c
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/packages.config
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/packages.config
@@@ -19,4 -19,6 +19,6 @@@
  
  <packages>
    <package id="NUnit.Runners" version="2.6.3" targetFramework="net40" />
- </packages>
+   <package id="log4net" version="2.0.5" targetFramework="net40" />
+   <package id="NLog" version="4.3.7" targetFramework="net40" />
 -</packages>
++</packages>

http://git-wip-us.apache.org/repos/asf/ignite/blob/a01927a9/modules/platforms/dotnet/Apache.Ignite.NLog/Properties/AssemblyInfo.cs
----------------------------------------------------------------------


[42/50] [abbrv] ignite git commit: Fixed javadoc

Posted by sh...@apache.org.
Fixed javadoc


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

Branch: refs/heads/ignite-2788
Commit: 3e4042b6d49b7000ec5c6a919d50b2c076ec193d
Parents: c478d03
Author: yzhdanov <yz...@apache.org>
Authored: Fri Oct 7 12:33:54 2016 +0300
Committer: yzhdanov <yz...@apache.org>
Committed: Fri Oct 7 12:33:54 2016 +0300

----------------------------------------------------------------------
 .../java/org/apache/ignite/IgniteServices.java  | 48 ++++++++++----------
 .../ignite/internal/IgniteServicesImpl.java     |  4 +-
 2 files changed, 26 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/3e4042b6/modules/core/src/main/java/org/apache/ignite/IgniteServices.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteServices.java b/modules/core/src/main/java/org/apache/ignite/IgniteServices.java
index 08577c5..5430e4d 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteServices.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteServices.java
@@ -62,9 +62,9 @@ import org.jetbrains.annotations.Nullable;
  * you can also automatically deploy services on startup by specifying them in {@link IgniteConfiguration}
  * like so:
  * <pre name="code" class="java">
- * IgniteConfiguration gridCfg = new IgniteConfiguration();
+ * IgniteConfiguration cfg = new IgniteConfiguration();
  *
- * GridServiceConfiguration svcCfg1 = new GridServiceConfiguration();
+ * ServiceConfiguration svcCfg1 = new ServiceConfiguration();
  *
  * // Cluster-wide singleton configuration.
  * svcCfg1.setName("myClusterSingletonService");
@@ -72,16 +72,16 @@ import org.jetbrains.annotations.Nullable;
  * svcCfg1.setTotalCount(1);
  * svcCfg1.setService(new MyClusterSingletonService());
  *
- * GridServiceConfiguration svcCfg2 = new GridServiceConfiguration();
+ * ServiceConfiguration svcCfg2 = new ServiceConfiguration();
  *
  * // Per-node singleton configuration.
  * svcCfg2.setName("myNodeSingletonService");
  * svcCfg2.setMaxPerNodeCount(1);
  * svcCfg2.setService(new MyNodeSingletonService());
  *
- * gridCfg.setServiceConfiguration(svcCfg1, svcCfg2);
+ * cfg.setServiceConfiguration(svcCfg1, svcCfg2);
  * ...
- * Ignition.start(gridCfg);
+ * Ignition.start(cfg);
  * </pre>
  * <h1 class="header">Load Balancing</h1>
  * In all cases, other than singleton service deployment, Ignite will automatically make sure that
@@ -106,18 +106,18 @@ import org.jetbrains.annotations.Nullable;
  * Here is an example of how an distributed service may be implemented and deployed:
  * <pre name="code" class="java">
  * // Simple service implementation.
- * public class MyGridService implements GridService {
+ * public class MyIgniteService implements Service {
  *      ...
  *      // Example of ignite resource injection. All resources are optional.
  *      // You should inject resources only as needed.
  *      &#64;IgniteInstanceResource
- *      private Grid grid;
+ *      private Ignite ignite;
  *      ...
- *      &#64;Override public void cancel(GridServiceContext ctx) {
+ *      &#64;Override public void cancel(ServiceContext ctx) {
  *          // No-op.
  *      }
  *
- *      &#64;Override public void execute(GridServiceContext ctx) {
+ *      &#64;Override public void execute(ServiceContext ctx) {
  *          // Loop until service is cancelled.
  *          while (!ctx.isCancelled()) {
  *              // Do something.
@@ -126,16 +126,16 @@ import org.jetbrains.annotations.Nullable;
  *      }
  *  }
  * ...
- * GridServices svcs = grid.services();
+ * IgniteServices svcs = ignite.services();
  *
- * svcs.deployClusterSingleton("mySingleton", new MyGridService());
+ * svcs.deployClusterSingleton("mySingleton", new MyIgniteService());
  * </pre>
  */
 public interface IgniteServices extends IgniteAsyncSupport {
     /**
-     * Gets the cluster group to which this {@code GridServices} instance belongs.
+     * Gets the cluster group to which this {@code IgniteServices} instance belongs.
      *
-     * @return Cluster group to which this {@code GridServices} instance belongs.
+     * @return Cluster group to which this {@code IgniteServices} instance belongs.
      */
     public ClusterGroup clusterGroup();
 
@@ -187,7 +187,7 @@ public interface IgniteServices extends IgniteAsyncSupport {
      * This method is analogous to the invocation of {@link #deploy(org.apache.ignite.services.ServiceConfiguration)} method
      * as follows:
      * <pre name="code" class="java">
-     *     GridServiceConfiguration cfg = new GridServiceConfiguration();
+     *     ServiceConfiguration cfg = new ServiceConfiguration();
      *
      *     cfg.setName(name);
      *     cfg.setService(svc);
@@ -196,7 +196,7 @@ public interface IgniteServices extends IgniteAsyncSupport {
      *     cfg.setTotalCount(1);
      *     cfg.setMaxPerNodeCount(1);
      *
-     *     grid.services().deploy(cfg);
+     *     ignite.services().deploy(cfg);
      * </pre>
      *
      * @param name Service name.
@@ -224,14 +224,14 @@ public interface IgniteServices extends IgniteAsyncSupport {
      * This method is analogous to the invocation of {@link #deploy(org.apache.ignite.services.ServiceConfiguration)} method
      * as follows:
      * <pre name="code" class="java">
-     *     GridServiceConfiguration cfg = new GridServiceConfiguration();
+     *     ServiceConfiguration cfg = new ServiceConfiguration();
      *
      *     cfg.setName(name);
      *     cfg.setService(svc);
      *     cfg.setTotalCount(totalCnt);
      *     cfg.setMaxPerNodeCount(maxPerNodeCnt);
      *
-     *     grid.services().deploy(cfg);
+     *     ignite.services().deploy(cfg);
      * </pre>
      *
      * @param name Service name.
@@ -266,14 +266,14 @@ public interface IgniteServices extends IgniteAsyncSupport {
      * <p>
      * Here is an example of creating service deployment configuration:
      * <pre name="code" class="java">
-     *     GridServiceConfiguration cfg = new GridServiceConfiguration();
+     *     ServiceConfiguration cfg = new ServiceConfiguration();
      *
      *     cfg.setName(name);
      *     cfg.setService(svc);
      *     cfg.setTotalCount(0); // Unlimited.
      *     cfg.setMaxPerNodeCount(2); // Deploy 2 instances of service on each node.
      *
-     *     grid.services().deploy(cfg);
+     *     ignite.services().deploy(cfg);
      * </pre>
      *
      * @param cfg Service configuration.
@@ -312,14 +312,14 @@ public interface IgniteServices extends IgniteAsyncSupport {
     public void cancelAll() throws IgniteException;
 
     /**
-     * Gets metadata about all deployed services.
+     * Gets metadata about all deployed services in the grid.
      *
-     * @return Metadata about all deployed services.
+     * @return Metadata about all deployed services in the grid.
      */
     public Collection<ServiceDescriptor> serviceDescriptors();
 
     /**
-     * Gets deployed service with specified name.
+     * Gets locally deployed service with specified name.
      *
      * @param name Service name.
      * @param <T> Service type
@@ -328,7 +328,7 @@ public interface IgniteServices extends IgniteAsyncSupport {
     public <T> T service(String name);
 
     /**
-     * Gets all deployed services with specified name.
+     * Gets all locally deployed services with specified name.
      *
      * @param name Service name.
      * @param <T> Service type.
@@ -352,4 +352,4 @@ public interface IgniteServices extends IgniteAsyncSupport {
 
     /** {@inheritDoc} */
     @Override public IgniteServices withAsync();
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/3e4042b6/modules/core/src/main/java/org/apache/ignite/internal/IgniteServicesImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteServicesImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteServicesImpl.java
index b8042c3..c9d205b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteServicesImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteServicesImpl.java
@@ -36,7 +36,7 @@ import org.apache.ignite.services.ServiceDescriptor;
 import org.jetbrains.annotations.Nullable;
 
 /**
- * {@link org.apache.ignite.IgniteCompute} implementation.
+ * {@link org.apache.ignite.IgniteServices} implementation.
  */
 public class IgniteServicesImpl extends AsyncSupportAdapter implements IgniteServices, Externalizable {
     /** */
@@ -289,4 +289,4 @@ public class IgniteServicesImpl extends AsyncSupportAdapter implements IgniteSer
     protected Object readResolve() throws ObjectStreamException {
         return prj.services();
     }
-}
\ No newline at end of file
+}


[06/50] [abbrv] ignite git commit: Fixed missing Apache header.

Posted by sh...@apache.org.
Fixed missing Apache header.


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

Branch: refs/heads/ignite-2788
Commit: b280c3efa1eb84c6bc8abbe31ba669b0c24323d8
Parents: d1e3a78
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Thu Sep 29 10:23:54 2016 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Thu Sep 29 10:23:54 2016 +0300

----------------------------------------------------------------------
 .../internal/binary/BinaryFieldOrderSelfTest.java  | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/b280c3ef/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFieldOrderSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFieldOrderSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFieldOrderSelfTest.java
index 6bb1e13..e470948 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFieldOrderSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFieldOrderSelfTest.java
@@ -1,3 +1,20 @@
+/*
+ * 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.binary;
 
 import org.apache.ignite.binary.BinaryObject;


[32/50] [abbrv] ignite git commit: Merge remote-tracking branch 'remotes/community/ignite-1.7.3' into UPSTREAM_master

Posted by sh...@apache.org.
Merge remote-tracking branch 'remotes/community/ignite-1.7.3' into UPSTREAM_master


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

Branch: refs/heads/ignite-2788
Commit: 909f0466e1c600063dd7b5b3e1b69a26e2243364
Parents: 2137740 48b293d
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Mon Oct 3 14:16:06 2016 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Mon Oct 3 14:16:06 2016 +0300

----------------------------------------------------------------------
 .../Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj     | 4 ++++
 modules/platforms/dotnet/Apache.Ignite.sln                       | 2 ++
 2 files changed, 6 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/909f0466/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
----------------------------------------------------------------------
diff --cc modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
index c1c4953,ef62498..d956972
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
@@@ -196,6 -184,6 +196,10 @@@
        <Project>{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}</Project>
        <Name>Apache.Ignite.NLog</Name>
      </ProjectReference>
++    <ProjectReference Include="..\Apache.Ignite.NLog\Apache.Ignite.NLog.csproj">
++      <Project>{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}</Project>
++      <Name>Apache.Ignite.NLog</Name>
++    </ProjectReference>
      <ProjectReference Include="..\Apache.Ignite\Apache.Ignite.csproj">
        <Project>{27F7F3C6-BDDE-43A9-B565-856F8395A04B}</Project>
        <Name>Apache.Ignite</Name>

http://git-wip-us.apache.org/repos/asf/ignite/blob/909f0466/modules/platforms/dotnet/Apache.Ignite.sln
----------------------------------------------------------------------
diff --cc modules/platforms/dotnet/Apache.Ignite.sln
index 1f5163d,2978780..df25510
--- a/modules/platforms/dotnet/Apache.Ignite.sln
+++ b/modules/platforms/dotnet/Apache.Ignite.sln
@@@ -36,10 -36,10 +36,12 @@@ Project("{FAE04EC0-301F-11D3-BF4B-00C04
  EndProject
  Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.AspNet", "Apache.Ignite.AspNet\Apache.Ignite.AspNet.csproj", "{13EA96FC-CC83-4164-A7C0-4F30ED797460}"
  EndProject
 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.NLog", "Apache.Ignite.NLog\Apache.Ignite.NLog.csproj", "{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}"
 +EndProject
  Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.AspNet.Tests", "Apache.Ignite.AspNet.Tests\Apache.Ignite.AspNet.Tests.csproj", "{18EA4C71-A11D-4AB1-8042-418F7559D84F}"
  EndProject
+ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.NLog", "Apache.Ignite.NLog\Apache.Ignite.NLog.csproj", "{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}"
+ EndProject
  Global
  	GlobalSection(SolutionConfigurationPlatforms) = preSolution
  		Debug|Any CPU = Debug|Any CPU


[15/50] [abbrv] ignite git commit: IGNITE-3609 Utilize Cassandra logged batches for transactions. - Fixes #1111.

Posted by sh...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/test/java/org/apache/ignite/tests/IgnitePersistentStoreTest.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/IgnitePersistentStoreTest.java b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/IgnitePersistentStoreTest.java
index 8fdcf4c..d0a787a 100644
--- a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/IgnitePersistentStoreTest.java
+++ b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/IgnitePersistentStoreTest.java
@@ -18,19 +18,27 @@
 package org.apache.ignite.tests;
 
 import java.util.Collection;
+import java.util.Date;
 import java.util.Map;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
+import org.apache.ignite.IgniteTransactions;
 import org.apache.ignite.Ignition;
 import org.apache.ignite.cache.CachePeekMode;
 import org.apache.ignite.cache.store.CacheStore;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.internal.processors.cache.CacheEntryImpl;
+import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.tests.pojos.Person;
 import org.apache.ignite.tests.pojos.PersonId;
+import org.apache.ignite.tests.pojos.Product;
+import org.apache.ignite.tests.pojos.ProductOrder;
 import org.apache.ignite.tests.utils.CacheStoreHelper;
 import org.apache.ignite.tests.utils.CassandraHelper;
 import org.apache.ignite.tests.utils.TestsHelper;
+import org.apache.ignite.transactions.Transaction;
+import org.apache.ignite.transactions.TransactionConcurrency;
+import org.apache.ignite.transactions.TransactionIsolation;
 import org.apache.log4j.Logger;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -244,12 +252,19 @@ public class IgnitePersistentStoreTest {
 
         Map<Long, Person> personMap1 = TestsHelper.generateLongsPersonsMap();
         Map<PersonId, Person> personMap2 = TestsHelper.generatePersonIdsPersonsMap();
+        Map<Long, Product> productsMap = TestsHelper.generateProductsMap();
+        Map<Long, ProductOrder> ordersMap = TestsHelper.generateOrdersMap();
+
+        Product product = TestsHelper.generateRandomProduct(-1L);
+        ProductOrder order = TestsHelper.generateRandomOrder(-1L);
 
         try (Ignite ignite = Ignition.start("org/apache/ignite/tests/persistence/pojo/ignite-config.xml")) {
             IgniteCache<Long, Person> personCache1 = ignite.getOrCreateCache(new CacheConfiguration<Long, Person>("cache1"));
             IgniteCache<PersonId, Person> personCache2 = ignite.getOrCreateCache(new CacheConfiguration<PersonId, Person>("cache2"));
             IgniteCache<PersonId, Person> personCache3 = ignite.getOrCreateCache(new CacheConfiguration<PersonId, Person>("cache3"));
             IgniteCache<PersonId, Person> personCache4 = ignite.getOrCreateCache(new CacheConfiguration<PersonId, Person>("cache4"));
+            IgniteCache<Long, Product> productCache = ignite.getOrCreateCache(new CacheConfiguration<Long, Product>("product"));
+            IgniteCache<Long, ProductOrder> orderCache = ignite.getOrCreateCache(new CacheConfiguration<Long, ProductOrder>("order"));
 
             LOGGER.info("Running single operation write tests");
 
@@ -262,6 +277,9 @@ public class IgnitePersistentStoreTest {
             personCache3.put(id, TestsHelper.generateRandomPerson(id.getPersonNumber()));
             personCache4.put(id, TestsHelper.generateRandomPerson(id.getPersonNumber()));
 
+            productCache.put(product.getId(), product);
+            orderCache.put(order.getId(), order);
+
             LOGGER.info("Single operation write tests passed");
 
             LOGGER.info("Running bulk operation write tests");
@@ -269,6 +287,8 @@ public class IgnitePersistentStoreTest {
             personCache2.putAll(personMap2);
             personCache3.putAll(personMap2);
             personCache4.putAll(personMap2);
+            productCache.putAll(productsMap);
+            orderCache.putAll(ordersMap);
             LOGGER.info("Bulk operation write tests passed");
         }
 
@@ -283,6 +303,8 @@ public class IgnitePersistentStoreTest {
             IgniteCache<PersonId, Person> personCache2 = ignite.getOrCreateCache(new CacheConfiguration<PersonId, Person>("cache2"));
             IgniteCache<PersonId, Person> personCache3 = ignite.getOrCreateCache(new CacheConfiguration<PersonId, Person>("cache3"));
             IgniteCache<PersonId, Person> personCache4 = ignite.getOrCreateCache(new CacheConfiguration<PersonId, Person>("cache4"));
+            IgniteCache<Long, Product> productCache = ignite.getOrCreateCache(new CacheConfiguration<Long, Product>("product"));
+            IgniteCache<Long, ProductOrder> orderCache = ignite.getOrCreateCache(new CacheConfiguration<Long, ProductOrder>("order"));
 
             LOGGER.info("Running single operation read tests");
             Person person = personCache1.get(1L);
@@ -303,6 +325,14 @@ public class IgnitePersistentStoreTest {
             if (!person.equals(personMap2.get(id)))
                 throw new RuntimeException("Person value was incorrectly deserialized from Cassandra");
 
+            Product product1 = productCache.get(product.getId());
+            if (!product.equals(product1))
+                throw new RuntimeException("Product value was incorrectly deserialized from Cassandra");
+
+            ProductOrder order1 = orderCache.get(order.getId());
+            if (!order.equals(order1))
+                throw new RuntimeException("Order value was incorrectly deserialized from Cassandra");
+
             LOGGER.info("Single operation read tests passed");
 
             LOGGER.info("Running bulk operation read tests");
@@ -323,6 +353,14 @@ public class IgnitePersistentStoreTest {
             if (!TestsHelper.checkPersonMapsEqual(persons4, personMap2, false))
                 throw new RuntimeException("Person values batch was incorrectly deserialized from Cassandra");
 
+            Map<Long, Product> productsMap1 = productCache.getAll(productsMap.keySet());
+            if (!TestsHelper.checkProductMapsEqual(productsMap, productsMap1))
+                throw new RuntimeException("Product values batch was incorrectly deserialized from Cassandra");
+
+            Map<Long, ProductOrder> ordersMap1 = orderCache.getAll(ordersMap.keySet());
+            if (!TestsHelper.checkOrderMapsEqual(ordersMap, ordersMap1))
+                throw new RuntimeException("Order values batch was incorrectly deserialized from Cassandra");
+
             LOGGER.info("Bulk operation read tests passed");
 
             LOGGER.info("POJO strategy read tests passed");
@@ -341,12 +379,35 @@ public class IgnitePersistentStoreTest {
             personCache4.remove(id);
             personCache4.removeAll(personMap2.keySet());
 
+            productCache.remove(product.getId());
+            productCache.removeAll(productsMap.keySet());
+
+            orderCache.remove(order.getId());
+            orderCache.removeAll(ordersMap.keySet());
+
             LOGGER.info("POJO strategy delete tests passed");
         }
     }
 
     /** */
     @Test
+    public void pojoStrategyTransactionTest() {
+        CassandraHelper.dropTestKeyspaces();
+
+        Ignition.stopAll(true);
+
+        try (Ignite ignite = Ignition.start("org/apache/ignite/tests/persistence/pojo/ignite-config.xml")) {
+            pojoStrategyTransactionTest(ignite, TransactionConcurrency.OPTIMISTIC, TransactionIsolation.READ_COMMITTED);
+            pojoStrategyTransactionTest(ignite, TransactionConcurrency.OPTIMISTIC, TransactionIsolation.REPEATABLE_READ);
+            pojoStrategyTransactionTest(ignite, TransactionConcurrency.OPTIMISTIC, TransactionIsolation.SERIALIZABLE);
+            pojoStrategyTransactionTest(ignite, TransactionConcurrency.PESSIMISTIC, TransactionIsolation.READ_COMMITTED);
+            pojoStrategyTransactionTest(ignite, TransactionConcurrency.PESSIMISTIC, TransactionIsolation.REPEATABLE_READ);
+            pojoStrategyTransactionTest(ignite, TransactionConcurrency.PESSIMISTIC, TransactionIsolation.SERIALIZABLE);
+        }
+    }
+
+    /** */
+    @Test
     public void loadCacheTest() {
         Ignition.stopAll(true);
 
@@ -360,6 +421,7 @@ public class IgnitePersistentStoreTest {
 
         Collection<CacheEntryImpl<PersonId, Person>> entries = TestsHelper.generatePersonIdsPersonsEntries();
 
+        //noinspection unchecked
         store.writeAll(entries);
 
         LOGGER.info("Cassandra table filled with test data");
@@ -387,4 +449,207 @@ public class IgnitePersistentStoreTest {
 
         LOGGER.info("loadCache test passed");
     }
+
+    /** */
+    @SuppressWarnings("unchecked")
+    private void pojoStrategyTransactionTest(Ignite ignite, TransactionConcurrency concurrency,
+                                             TransactionIsolation isolation) {
+        LOGGER.info("-----------------------------------------------------------------------------------");
+        LOGGER.info("Running POJO transaction tests using " + concurrency +
+                " concurrency and " + isolation + " isolation level");
+        LOGGER.info("-----------------------------------------------------------------------------------");
+
+        CacheStore productStore = CacheStoreHelper.createCacheStore("product",
+            new ClassPathResource("org/apache/ignite/tests/persistence/pojo/product.xml"),
+            CassandraHelper.getAdminDataSrc());
+
+        CacheStore orderStore = CacheStoreHelper.createCacheStore("order",
+            new ClassPathResource("org/apache/ignite/tests/persistence/pojo/order.xml"),
+            CassandraHelper.getAdminDataSrc());
+
+        Map<Long, Product> productsMap = TestsHelper.generateProductsMap(5);
+        Map<Long, Product> productsMap1;
+        Map<Long, ProductOrder> ordersMap = TestsHelper.generateOrdersMap(5);
+        Map<Long, ProductOrder> ordersMap1;
+        Product product = TestsHelper.generateRandomProduct(-1L);
+        ProductOrder order = TestsHelper.generateRandomOrder(-1L, -1L, new Date());
+
+        IgniteTransactions txs = ignite.transactions();
+
+        IgniteCache<Long, Product> productCache = ignite.getOrCreateCache(new CacheConfiguration<Long, Product>("product"));
+        IgniteCache<Long, ProductOrder> orderCache = ignite.getOrCreateCache(new CacheConfiguration<Long, ProductOrder>("order"));
+
+        LOGGER.info("Running POJO strategy write tests");
+
+        LOGGER.info("Running single operation write tests");
+
+        Transaction tx = txs.txStart(concurrency, isolation);
+
+        try {
+            productCache.put(product.getId(), product);
+            orderCache.put(order.getId(), order);
+
+            if (productStore.load(product.getId()) != null || orderStore.load(order.getId()) != null) {
+                throw new RuntimeException("Single write operation test failed. Transaction wasn't committed yet, but " +
+                        "objects were already persisted into Cassandra");
+            }
+
+            Map<Long, Product> products = (Map<Long, Product>)productStore.loadAll(productsMap.keySet());
+            Map<Long, ProductOrder> orders = (Map<Long, ProductOrder>)orderStore.loadAll(ordersMap.keySet());
+
+            if ((products != null && !products.isEmpty()) || (orders != null && !orders.isEmpty())) {
+                throw new RuntimeException("Single write operation test failed. Transaction wasn't committed yet, but " +
+                        "objects were already persisted into Cassandra");
+            }
+
+            tx.commit();
+        }
+        finally {
+            U.closeQuiet(tx);
+        }
+
+        Product product1 = (Product)productStore.load(product.getId());
+        ProductOrder order1 = (ProductOrder)orderStore.load(order.getId());
+
+        if (product1 == null || order1 == null) {
+            throw new RuntimeException("Single write operation test failed. Transaction was committed, but " +
+                    "no objects were persisted into Cassandra");
+        }
+
+        if (!product.equals(product1) || !order.equals(order1)) {
+            throw new RuntimeException("Single write operation test failed. Transaction was committed, but " +
+                    "objects were incorrectly persisted/loaded to/from Cassandra");
+        }
+
+        LOGGER.info("Single operation write tests passed");
+
+        LOGGER.info("Running bulk operation write tests");
+
+        tx = txs.txStart(concurrency, isolation);
+
+        try {
+            productCache.putAll(productsMap);
+            orderCache.putAll(ordersMap);
+
+            productsMap1 = (Map<Long, Product>)productStore.loadAll(productsMap.keySet());
+            ordersMap1 = (Map<Long, ProductOrder>)orderStore.loadAll(ordersMap.keySet());
+
+            if ((productsMap1 != null && !productsMap1.isEmpty()) || (ordersMap1 != null && !ordersMap1.isEmpty())) {
+                throw new RuntimeException("Bulk write operation test failed. Transaction wasn't committed yet, but " +
+                        "objects were already persisted into Cassandra");
+            }
+
+            tx.commit();
+        }
+        finally {
+            U.closeQuiet(tx);
+        }
+
+        productsMap1 = (Map<Long, Product>)productStore.loadAll(productsMap.keySet());
+        ordersMap1 = (Map<Long, ProductOrder>)orderStore.loadAll(ordersMap.keySet());
+
+        if (productsMap1 == null || productsMap1.isEmpty() || ordersMap1 == null || ordersMap1.isEmpty()) {
+            throw new RuntimeException("Bulk write operation test failed. Transaction was committed, but " +
+                    "no objects were persisted into Cassandra");
+        }
+
+        if (productsMap1.size() < productsMap.size() || ordersMap1.size() < ordersMap.size()) {
+            throw new RuntimeException("Bulk write operation test failed. There were committed less objects " +
+                    "into Cassandra than expected");
+        }
+
+        if (productsMap1.size() > productsMap.size() || ordersMap1.size() > ordersMap.size()) {
+            throw new RuntimeException("Bulk write operation test failed. There were committed more objects " +
+                    "into Cassandra than expected");
+        }
+
+        for (Map.Entry<Long, Product> entry : productsMap.entrySet()) {
+            product = productsMap1.get(entry.getKey());
+
+            if (!entry.getValue().equals(product)) {
+                throw new RuntimeException("Bulk write operation test failed. Transaction was committed, but " +
+                        "some objects were incorrectly persisted/loaded to/from Cassandra");
+            }
+        }
+
+        for (Map.Entry<Long, ProductOrder> entry : ordersMap.entrySet()) {
+            order = ordersMap1.get(entry.getKey());
+
+            if (!entry.getValue().equals(order)) {
+                throw new RuntimeException("Bulk write operation test failed. Transaction was committed, but " +
+                        "some objects were incorrectly persisted/loaded to/from Cassandra");
+            }
+        }
+
+        LOGGER.info("Bulk operation write tests passed");
+
+        LOGGER.info("POJO strategy write tests passed");
+
+        LOGGER.info("Running POJO strategy delete tests");
+
+        LOGGER.info("Running single delete tests");
+
+        tx = txs.txStart(concurrency, isolation);
+
+        try {
+            productCache.remove(-1L);
+            orderCache.remove(-1L);
+
+            if (productStore.load(-1L) == null || orderStore.load(-1L) == null) {
+                throw new RuntimeException("Single delete operation test failed. Transaction wasn't committed yet, but " +
+                        "objects were already deleted from Cassandra");
+            }
+
+            tx.commit();
+        }
+        finally {
+            U.closeQuiet(tx);
+        }
+
+        if (productStore.load(-1L) != null || orderStore.load(-1L) != null) {
+            throw new RuntimeException("Single delete operation test failed. Transaction was committed, but " +
+                    "objects were not deleted from Cassandra");
+        }
+
+        LOGGER.info("Single delete tests passed");
+
+        LOGGER.info("Running bulk delete tests");
+
+        tx = txs.txStart(concurrency, isolation);
+
+        try {
+            productCache.removeAll(productsMap.keySet());
+            orderCache.removeAll(ordersMap.keySet());
+
+            productsMap1 = (Map<Long, Product>)productStore.loadAll(productsMap.keySet());
+            ordersMap1 = (Map<Long, ProductOrder>)orderStore.loadAll(ordersMap.keySet());
+
+            if (productsMap1.size() != productsMap.size() || ordersMap1.size() != ordersMap.size()) {
+                throw new RuntimeException("Bulk delete operation test failed. Transaction wasn't committed yet, but " +
+                        "objects were already deleted from Cassandra");
+            }
+
+            tx.commit();
+        }
+        finally {
+            U.closeQuiet(tx);
+        }
+
+        productsMap1 = (Map<Long, Product>)productStore.loadAll(productsMap.keySet());
+        ordersMap1 = (Map<Long, ProductOrder>)orderStore.loadAll(ordersMap.keySet());
+
+        if ((productsMap1 != null && !productsMap1.isEmpty()) || (ordersMap1 != null && !ordersMap1.isEmpty())) {
+            throw new RuntimeException("Bulk delete operation test failed. Transaction was committed, but " +
+                    "objects were not deleted from Cassandra");
+        }
+
+        LOGGER.info("Bulk delete tests passed");
+
+        LOGGER.info("POJO strategy delete tests passed");
+
+        LOGGER.info("-----------------------------------------------------------------------------------");
+        LOGGER.info("Passed POJO transaction tests for " + concurrency +
+                " concurrency and " + isolation + " isolation level");
+        LOGGER.info("-----------------------------------------------------------------------------------");
+    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/test/java/org/apache/ignite/tests/pojos/Product.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/pojos/Product.java b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/pojos/Product.java
new file mode 100644
index 0000000..f8eadf4
--- /dev/null
+++ b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/pojos/Product.java
@@ -0,0 +1,123 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.tests.pojos;
+
+import org.apache.ignite.cache.query.annotations.QuerySqlField;
+
+/**
+ * Simple POJO to store information about product
+ */
+public class Product {
+    /** */
+    private long id;
+
+    /** */
+    private String type;
+
+    /** */
+    private String title;
+
+    /** */
+    private String description;
+
+    /** */
+    private float price;
+
+    /** */
+    public Product() {
+    }
+
+    /** */
+    public Product(long id, String type, String title, String description, float price) {
+        this.id = id;
+        this.type = type;
+        this.title = title;
+        this.description = description;
+        this.price = price;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int hashCode() {
+        return ((Long)id).hashCode();
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean equals(Object obj) {
+        return obj instanceof Product && id == ((Product) obj).id;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return id + ", " + price + ", " + type + ", " + title + ", " + description;
+    }
+
+    /** */
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    /** */
+    @QuerySqlField(index = true)
+    public long getId() {
+        return id;
+    }
+
+    /** */
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    /** */
+    @QuerySqlField
+    public String getType() {
+        return type;
+    }
+
+    /** */
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    /** */
+    @QuerySqlField(index = true)
+    public String getTitle() {
+        return title;
+    }
+
+    /** */
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    /** */
+    @QuerySqlField
+    public String getDescription() {
+        return description;
+    }
+
+    /** */
+    public void setPrice(float price) {
+        this.price = price;
+    }
+
+    /** */
+    @QuerySqlField
+    public float getPrice() {
+        return price;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/test/java/org/apache/ignite/tests/pojos/ProductOrder.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/pojos/ProductOrder.java b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/pojos/ProductOrder.java
new file mode 100644
index 0000000..4baee83
--- /dev/null
+++ b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/pojos/ProductOrder.java
@@ -0,0 +1,148 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.tests.pojos;
+
+import org.apache.ignite.cache.query.annotations.QuerySqlField;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * Simple POJO to store information about product order
+ */
+public class ProductOrder {
+    /** */
+    private static final DateFormat FORMAT = new SimpleDateFormat("MM/dd/yyyy/S");
+
+    /** */
+    private static final DateFormat FULL_FORMAT = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss:S");
+
+    /** */
+    private long id;
+
+    /** */
+    private long productId;
+
+    /** */
+    private Date date;
+
+    /** */
+    private int amount;
+
+    /** */
+    private float price;
+
+    /** */
+    public ProductOrder() {
+    }
+
+    /** */
+    public ProductOrder(long id, Product product, Date date, int amount) {
+        this(id, product.getId(), product.getPrice(), date, amount);
+    }
+
+    /** */
+    public ProductOrder(long id, long productId, float productPrice, Date date, int amount) {
+        this.id = id;
+        this.productId = productId;
+        this.date = date;
+        this.amount = amount;
+        this.price = productPrice * amount;
+
+        // if user ordered more than 10 items provide 5% discount
+        if (amount > 10)
+            this.price = this.price * 0.95F;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int hashCode() {
+        return ((Long)id).hashCode();
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean equals(Object obj) {
+        return obj instanceof ProductOrder && id == ((ProductOrder) obj).id;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return id + ", " + productId + ", " + FULL_FORMAT.format(date) + ", " + getDayMillisecond() + ", " + amount + ", " + price;
+    }
+
+    /** */
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    /** */
+    @QuerySqlField(index = true)
+    public long getId() {
+        return id;
+    }
+
+    /** */
+    public void setProductId(long productId) {
+        this.productId = productId;
+    }
+
+    /** */
+    @QuerySqlField(index = true)
+    public long getProductId() {
+        return productId;
+    }
+
+    /** */
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    /** */
+    @QuerySqlField
+    public Date getDate() {
+        return date;
+    }
+
+    /** */
+    public void setAmount(int amount) {
+        this.amount = amount;
+    }
+
+    /** */
+    @QuerySqlField
+    public int getAmount() {
+        return amount;
+    }
+
+    /** */
+    public void setPrice(float price) {
+        this.price = price;
+    }
+
+    /** */
+    @QuerySqlField
+    public float getPrice() {
+        return price;
+    }
+
+    /** */
+    @QuerySqlField
+    public String getDayMillisecond() {
+        return FORMAT.format(date);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/CacheStoreHelper.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/CacheStoreHelper.java b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/CacheStoreHelper.java
index b5ff5ad..9bcda6e 100644
--- a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/CacheStoreHelper.java
+++ b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/CacheStoreHelper.java
@@ -19,6 +19,7 @@ package org.apache.ignite.tests.utils;
 
 import java.lang.reflect.Field;
 import org.apache.ignite.cache.store.CacheStore;
+import org.apache.ignite.cache.store.CacheStoreSession;
 import org.apache.ignite.cache.store.cassandra.CassandraCacheStore;
 import org.apache.ignite.cache.store.cassandra.datasource.DataSource;
 import org.apache.ignite.cache.store.cassandra.persistence.KeyValuePersistenceSettings;
@@ -35,12 +36,24 @@ public class CacheStoreHelper {
 
     /** */
     public static CacheStore createCacheStore(String cacheName, Resource persistenceSettings, DataSource conn) {
-        return createCacheStore(cacheName, persistenceSettings, conn, LOGGER);
+        return createCacheStore(cacheName, persistenceSettings, conn, null, LOGGER);
     }
 
     /** */
     public static CacheStore createCacheStore(String cacheName, Resource persistenceSettings, DataSource conn,
-        Logger log) {
+                                              CacheStoreSession session) {
+        return createCacheStore(cacheName, persistenceSettings, conn, session, LOGGER);
+    }
+
+    /** */
+    public static CacheStore createCacheStore(String cacheName, Resource persistenceSettings, DataSource conn,
+                                              Logger log) {
+        return createCacheStore(cacheName, persistenceSettings, conn, null, log);
+    }
+
+    /** */
+    public static CacheStore createCacheStore(String cacheName, Resource persistenceSettings, DataSource conn,
+                                              CacheStoreSession session, Logger log) {
         CassandraCacheStore<Integer, Integer> cacheStore =
             new CassandraCacheStore<>(conn, new KeyValuePersistenceSettings(persistenceSettings),
                 Runtime.getRuntime().availableProcessors());
@@ -52,7 +65,7 @@ public class CacheStoreHelper {
             sesField.setAccessible(true);
             logField.setAccessible(true);
 
-            sesField.set(cacheStore, new TestCacheSession(cacheName));
+            sesField.set(cacheStore, session != null ? session : new TestCacheSession(cacheName));
             logField.set(cacheStore, new Log4JLogger(log));
         }
         catch (Throwable e) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/TestCacheSession.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/TestCacheSession.java b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/TestCacheSession.java
index 1cedb7a..3cb47e9 100644
--- a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/TestCacheSession.java
+++ b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/TestCacheSession.java
@@ -34,7 +34,7 @@ public class TestCacheSession implements CacheStoreSession {
     private Transaction tx;
 
     /** */
-    private Map<Object, Object> props;
+    private Map<Object, Object> props = U.newHashMap(1);
 
     /** */
     private Object attach;
@@ -45,6 +45,13 @@ public class TestCacheSession implements CacheStoreSession {
     }
 
     /** */
+    public TestCacheSession(String cacheName, Transaction tx, Map<Object, Object> props) {
+        this.cacheName = cacheName;
+        this.tx = tx;
+        this.props = props;
+    }
+
+    /** */
     @SuppressWarnings("UnusedDeclaration")
     public void newSession(@Nullable Transaction tx) {
         this.tx = tx;
@@ -78,9 +85,6 @@ public class TestCacheSession implements CacheStoreSession {
     /** {@inheritDoc} */
     @SuppressWarnings("unchecked")
     @Override public <K, V> Map<K, V> properties() {
-        if (props == null)
-            props = U.newHashMap(1);
-
         return (Map<K, V>)props;
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/TestTransaction.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/TestTransaction.java b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/TestTransaction.java
new file mode 100644
index 0000000..cda6715
--- /dev/null
+++ b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/TestTransaction.java
@@ -0,0 +1,133 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.tests.utils;
+
+import org.apache.ignite.lang.IgniteAsyncSupport;
+import org.apache.ignite.lang.IgniteFuture;
+import org.apache.ignite.lang.IgniteUuid;
+import org.apache.ignite.transactions.Transaction;
+import org.apache.ignite.transactions.TransactionConcurrency;
+import org.apache.ignite.transactions.TransactionIsolation;
+import org.apache.ignite.transactions.TransactionState;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.UUID;
+
+/**
+ * Dummy transaction for test purposes.
+ */
+public class TestTransaction implements Transaction {
+    /** */
+    private final IgniteUuid xid = IgniteUuid.randomUuid();
+
+    /** {@inheritDoc} */
+    @Nullable
+    @Override public IgniteUuid xid() {
+        return xid;
+    }
+
+    /** {@inheritDoc} */
+    @Nullable @Override public UUID nodeId() {
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long threadId() {
+        return 0;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long startTime() {
+        return 0;
+    }
+
+    /** {@inheritDoc} */
+    @Nullable @Override public TransactionIsolation isolation() {
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Nullable @Override public TransactionConcurrency concurrency() {
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean implicit() {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean isInvalidate() {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Nullable @Override public TransactionState state() {
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long timeout() {
+        return 0;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long timeout(long timeout) {
+        return 0;
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean setRollbackOnly() {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean isRollbackOnly() {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void commit() {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
+    @Override public void close() {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
+    @Override public IgniteAsyncSupport withAsync() {
+        throw new UnsupportedOperationException();
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean isAsync() {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override public <R> IgniteFuture<R> future() {
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void rollback() {
+        // No-op.
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/TestsHelper.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/TestsHelper.java b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/TestsHelper.java
index 2e266f6..24d64c9 100644
--- a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/TestsHelper.java
+++ b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/TestsHelper.java
@@ -17,19 +17,27 @@
 
 package org.apache.ignite.tests.utils;
 
+
+import org.apache.ignite.cache.store.cassandra.common.SystemHelper;
+import org.apache.ignite.internal.processors.cache.CacheEntryImpl;
+import org.apache.ignite.tests.load.Generator;
+import org.apache.ignite.tests.pojos.Person;
+import org.apache.ignite.tests.pojos.PersonId;
+import org.apache.ignite.tests.pojos.Product;
+import org.apache.ignite.tests.pojos.ProductOrder;
+import org.springframework.core.io.ClassPathResource;
+
 import java.util.Collection;
-import java.util.Date;
-import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.HashMap;
+import java.util.Set;
+import java.util.HashSet;
 import java.util.Random;
 import java.util.ResourceBundle;
-import org.apache.ignite.internal.processors.cache.CacheEntryImpl;
-import org.apache.ignite.tests.load.Generator;
-import org.apache.ignite.tests.pojos.Person;
-import org.apache.ignite.tests.pojos.PersonId;
-import org.springframework.core.io.ClassPathResource;
+import java.util.Calendar;
+import java.util.Date;
 
 /**
  * Helper class for all tests
@@ -66,6 +74,21 @@ public class TestsHelper {
     private static final int LOAD_TESTS_REQUESTS_LATENCY = parseTestSettings("load.tests.requests.latency");
 
     /** */
+    private static final int TRANSACTION_PRODUCTS_COUNT = parseTestSettings("transaction.products.count");
+
+    /** */
+    private static final int TRANSACTION_ORDERS_COUNT = parseTestSettings("transaction.orders.count");
+
+    /** */
+    private static final int ORDERS_YEAR;
+
+    /** */
+    private static final int ORDERS_MONTH;
+
+    /** */
+    private static final int ORDERS_DAY;
+
+    /** */
     private static final String LOAD_TESTS_PERSISTENCE_SETTINGS = TESTS_SETTINGS.getString("load.tests.persistence.settings");
 
     /** */
@@ -78,14 +101,30 @@ public class TestsHelper {
     private static final Generator LOAD_TESTS_VALUE_GENERATOR;
 
     /** */
-    private static int parseTestSettings(String name) {
-        return Integer.parseInt(TESTS_SETTINGS.getString(name));
-    }
+    private static final String HOST_PREFIX;
 
     static {
         try {
             LOAD_TESTS_KEY_GENERATOR = (Generator)Class.forName(TESTS_SETTINGS.getString("load.tests.key.generator")).newInstance();
             LOAD_TESTS_VALUE_GENERATOR = (Generator)Class.forName(TESTS_SETTINGS.getString("load.tests.value.generator")).newInstance();
+
+            String[] parts = SystemHelper.HOST_IP.split("\\.");
+
+            String prefix = parts[3];
+            prefix = prefix.length() > 2 ? prefix.substring(prefix.length() - 2) : prefix;
+
+            HOST_PREFIX = prefix;
+
+            Calendar cl = Calendar.getInstance();
+
+            String year = TESTS_SETTINGS.getString("orders.year");
+            ORDERS_YEAR = !year.trim().isEmpty() ? Integer.parseInt(year) : cl.get(Calendar.YEAR);
+
+            String month = TESTS_SETTINGS.getString("orders.month");
+            ORDERS_MONTH = !month.trim().isEmpty() ? Integer.parseInt(month) : cl.get(Calendar.MONTH);
+
+            String day = TESTS_SETTINGS.getString("orders.day");
+            ORDERS_DAY = !day.trim().isEmpty() ? Integer.parseInt(day) : cl.get(Calendar.DAY_OF_MONTH);
         }
         catch (Throwable e) {
             throw new RuntimeException("Failed to initialize TestsHelper", e);
@@ -93,6 +132,11 @@ public class TestsHelper {
     }
 
     /** */
+    private static int parseTestSettings(String name) {
+        return Integer.parseInt(TESTS_SETTINGS.getString(name));
+    }
+
+    /** */
     public static int getLoadTestsThreadsCount() {
         return LOAD_TESTS_THREADS_COUNT;
     }
@@ -275,6 +319,130 @@ public class TestsHelper {
     }
 
     /** */
+    public static List<CacheEntryImpl<Long, Product>> generateProductEntries() {
+        List<CacheEntryImpl<Long, Product>> entries = new LinkedList<>();
+
+        for (long i = 0; i < BULK_OPERATION_SIZE; i++)
+            entries.add(new CacheEntryImpl<>(i, generateRandomProduct(i)));
+
+        return entries;
+    }
+
+    /** */
+    public static Collection<Long> getProductIds(Collection<CacheEntryImpl<Long, Product>> entries) {
+        List<Long> ids = new LinkedList<>();
+
+        for (CacheEntryImpl<Long, Product> entry : entries)
+            ids.add(entry.getKey());
+
+        return ids;
+    }
+
+    /** */
+    public static Map<Long, Product> generateProductsMap() {
+        return generateProductsMap(BULK_OPERATION_SIZE);
+    }
+
+    /** */
+    public static Map<Long, Product> generateProductsMap(int count) {
+        Map<Long, Product> map = new HashMap<>();
+
+        for (long i = 0; i < count; i++)
+            map.put(i, generateRandomProduct(i));
+
+        return map;
+    }
+
+    /** */
+    public static Collection<CacheEntryImpl<Long, ProductOrder>> generateOrderEntries() {
+        Collection<CacheEntryImpl<Long, ProductOrder>> entries = new LinkedList<>();
+
+        for (long i = 0; i < BULK_OPERATION_SIZE; i++) {
+            ProductOrder order = generateRandomOrder(i);
+            entries.add(new CacheEntryImpl<>(order.getId(), order));
+        }
+
+        return entries;
+    }
+
+    /** */
+    public static Map<Long, ProductOrder> generateOrdersMap() {
+        return generateOrdersMap(BULK_OPERATION_SIZE);
+    }
+
+    /** */
+    public static Map<Long, ProductOrder> generateOrdersMap(int count) {
+        Map<Long, ProductOrder> map = new HashMap<>();
+
+        for (long i = 0; i < count; i++) {
+            ProductOrder order = generateRandomOrder(i);
+            map.put(order.getId(), order);
+        }
+
+        return map;
+    }
+
+    /** */
+    public static Map<Long, List<CacheEntryImpl<Long, ProductOrder>>> generateOrdersPerProductEntries(
+            Collection<CacheEntryImpl<Long, Product>> products) {
+        return generateOrdersPerProductEntries(products, TRANSACTION_ORDERS_COUNT);
+    }
+
+    /** */
+    public static Map<Long, List<CacheEntryImpl<Long, ProductOrder>>> generateOrdersPerProductEntries(
+            Collection<CacheEntryImpl<Long, Product>> products, int ordersPerProductCount) {
+        Map<Long, List<CacheEntryImpl<Long, ProductOrder>>> map = new HashMap<>();
+
+        for (CacheEntryImpl<Long, Product> entry : products) {
+            List<CacheEntryImpl<Long, ProductOrder>> orders = new LinkedList<>();
+
+            for (long i = 0; i < ordersPerProductCount; i++) {
+                ProductOrder order = generateRandomOrder(entry.getKey());
+                orders.add(new CacheEntryImpl<>(order.getId(), order));
+            }
+
+            map.put(entry.getKey(), orders);
+        }
+
+        return map;
+    }
+
+    /** */
+    public static Map<Long, Map<Long, ProductOrder>> generateOrdersPerProductMap(Map<Long, Product> products) {
+        return generateOrdersPerProductMap(products, TRANSACTION_ORDERS_COUNT);
+    }
+
+    /** */
+    public static Map<Long, Map<Long, ProductOrder>> generateOrdersPerProductMap(Map<Long, Product> products,
+                                                                                 int ordersPerProductCount) {
+        Map<Long, Map<Long, ProductOrder>> map = new HashMap<>();
+
+        for (Map.Entry<Long, Product> entry : products.entrySet()) {
+            Map<Long, ProductOrder> orders = new HashMap<>();
+
+            for (long i = 0; i < ordersPerProductCount; i++) {
+                ProductOrder order = generateRandomOrder(entry.getKey());
+                orders.put(order.getId(), order);
+            }
+
+            map.put(entry.getKey(), orders);
+        }
+
+        return map;
+    }
+
+    public static Collection<Long> getOrderIds(Map<Long, List<CacheEntryImpl<Long, ProductOrder>>> orders) {
+        Set<Long> ids = new HashSet<>();
+
+        for (Long key : orders.keySet()) {
+            for (CacheEntryImpl<Long, ProductOrder> entry : orders.get(key))
+                ids.add(entry.getKey());
+        }
+
+        return ids;
+    }
+
+    /** */
     public static Person generateRandomPerson(long personNum) {
         int phonesCnt = RANDOM.nextInt(4);
 
@@ -293,6 +461,33 @@ public class TestsHelper {
     }
 
     /** */
+    public static Product generateRandomProduct(long id) {
+        return new Product(id, randomString(2), randomString(6), randomString(20), generateProductPrice(id));
+    }
+
+    /** */
+    public static ProductOrder generateRandomOrder(long productId) {
+        return generateRandomOrder(productId, RANDOM.nextInt(10000));
+    }
+
+    /** */
+    private static ProductOrder generateRandomOrder(long productId, int saltedNumber) {
+        Calendar cl = Calendar.getInstance();
+        cl.set(Calendar.YEAR, ORDERS_YEAR);
+        cl.set(Calendar.MONTH, ORDERS_MONTH);
+        cl.set(Calendar.DAY_OF_MONTH, ORDERS_DAY);
+
+        long id = Long.parseLong(productId + System.currentTimeMillis() + HOST_PREFIX + saltedNumber);
+
+        return generateRandomOrder(id, productId, cl.getTime());
+    }
+
+    /** */
+    public static ProductOrder generateRandomOrder(long id, long productId, Date date) {
+        return new ProductOrder(id, productId, generateProductPrice(productId), date, 1 + RANDOM.nextInt(20));
+    }
+
+    /** */
     public static boolean checkMapsEqual(Map map1, Map map2) {
         if (map1 == null || map2 == null || map1.size() != map2.size())
             return false;
@@ -360,6 +555,66 @@ public class TestsHelper {
     }
 
     /** */
+    public static <K> boolean checkProductCollectionsEqual(Map<K, Product> map, Collection<CacheEntryImpl<K, Product>> col) {
+        if (map == null || col == null || map.size() != col.size())
+            return false;
+
+        for (CacheEntryImpl<K, Product> entry : col)
+            if (!entry.getValue().equals(map.get(entry.getKey())))
+                return false;
+
+        return true;
+    }
+
+    /** */
+    public static <K> boolean checkProductMapsEqual(Map<K, Product> map1, Map<K, Product> map2) {
+        if (map1 == null || map2 == null || map1.size() != map2.size())
+            return false;
+
+        for (K key : map1.keySet()) {
+            Product product1 = map1.get(key);
+            Product product2 = map2.get(key);
+
+            boolean equals = product1 != null && product2 != null && product1.equals(product2);
+
+            if (!equals)
+                return false;
+        }
+
+        return true;
+    }
+
+    /** */
+    public static <K> boolean checkOrderCollectionsEqual(Map<K, ProductOrder> map, Collection<CacheEntryImpl<K, ProductOrder>> col) {
+        if (map == null || col == null || map.size() != col.size())
+            return false;
+
+        for (CacheEntryImpl<K, ProductOrder> entry : col)
+            if (!entry.getValue().equals(map.get(entry.getKey())))
+                return false;
+
+        return true;
+    }
+
+    /** */
+    public static <K> boolean checkOrderMapsEqual(Map<K, ProductOrder> map1, Map<K, ProductOrder> map2) {
+        if (map1 == null || map2 == null || map1.size() != map2.size())
+            return false;
+
+        for (K key : map1.keySet()) {
+            ProductOrder order1 = map1.get(key);
+            ProductOrder order2 = map2.get(key);
+
+            boolean equals = order1 != null && order2 != null && order1.equals(order2);
+
+            if (!equals)
+                return false;
+        }
+
+        return true;
+    }
+
+    /** */
     public static String randomString(int len) {
         StringBuilder builder = new StringBuilder(len);
 
@@ -378,4 +633,28 @@ public class TestsHelper {
 
         return builder.toString();
     }
+
+    /** */
+    private static float generateProductPrice(long productId) {
+        long id = productId < 1000 ?
+                (((productId + 1) * (productId + 1) * 1000) / 2) * 10 :
+                (productId / 20) * (productId / 20);
+
+        id = id == 0 ? 24 : id;
+
+        float price = Long.parseLong(Long.toString(id).replace("0", ""));
+
+        int i = 0;
+
+        while (price > 100) {
+            if (i % 2 != 0)
+                price = price / 2;
+            else
+                price = (float) Math.sqrt(price);
+
+            i++;
+        }
+
+        return ((float)((int)(price * 100))) / 100.0F;
+    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/test/resources/org/apache/ignite/tests/persistence/pojo/ignite-config.xml
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/test/resources/org/apache/ignite/tests/persistence/pojo/ignite-config.xml b/modules/cassandra/store/src/test/resources/org/apache/ignite/tests/persistence/pojo/ignite-config.xml
index cd23a2a..c9b45c8 100644
--- a/modules/cassandra/store/src/test/resources/org/apache/ignite/tests/persistence/pojo/ignite-config.xml
+++ b/modules/cassandra/store/src/test/resources/org/apache/ignite/tests/persistence/pojo/ignite-config.xml
@@ -46,6 +46,16 @@
         <constructor-arg type="org.springframework.core.io.Resource" value="classpath:org/apache/ignite/tests/persistence/pojo/persistence-settings-4.xml" />
     </bean>
 
+    <!-- Persistence settings for 'product' -->
+    <bean id="product_persistence_settings" class="org.apache.ignite.cache.store.cassandra.persistence.KeyValuePersistenceSettings">
+        <constructor-arg type="org.springframework.core.io.Resource" value="classpath:org/apache/ignite/tests/persistence/pojo/product.xml" />
+    </bean>
+
+    <!-- Persistence settings for 'order' -->
+    <bean id="order_persistence_settings" class="org.apache.ignite.cache.store.cassandra.persistence.KeyValuePersistenceSettings">
+        <constructor-arg type="org.springframework.core.io.Resource" value="classpath:org/apache/ignite/tests/persistence/pojo/order.xml" />
+    </bean>
+
     <!-- Ignite configuration -->
     <bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
         <property name="cacheConfiguration">
@@ -89,7 +99,7 @@
                     </property>
                 </bean>
 
-                <!-- Configuring persistence for "cache3" cache -->
+                <!-- Configuring persistence for "cache4" cache -->
                 <bean class="org.apache.ignite.configuration.CacheConfiguration">
                     <property name="name" value="cache4"/>
                     <property name="readThrough" value="true"/>
@@ -101,6 +111,35 @@
                         </bean>
                     </property>
                 </bean>
+
+                <!-- Configuring persistence for "product" cache -->
+                <bean class="org.apache.ignite.configuration.CacheConfiguration">
+                    <property name="name" value="product"/>
+                    <property name="readThrough" value="true"/>
+                    <property name="writeThrough" value="true"/>
+                    <property name="atomicityMode" value="TRANSACTIONAL"/>
+                    <property name="cacheStoreFactory">
+                        <bean class="org.apache.ignite.cache.store.cassandra.CassandraCacheStoreFactory">
+                            <property name="dataSourceBean" value="cassandraAdminDataSource"/>
+                            <property name="persistenceSettingsBean" value="product_persistence_settings"/>
+                        </bean>
+                    </property>
+                </bean>
+
+                <!-- Configuring persistence for "order" cache -->
+                <bean class="org.apache.ignite.configuration.CacheConfiguration">
+                    <property name="name" value="order"/>
+                    <property name="readThrough" value="true"/>
+                    <property name="writeThrough" value="true"/>
+                    <property name="atomicityMode" value="TRANSACTIONAL"/>
+                    <property name="cacheStoreFactory">
+                        <bean class="org.apache.ignite.cache.store.cassandra.CassandraCacheStoreFactory">
+                            <property name="dataSourceBean" value="cassandraAdminDataSource"/>
+                            <property name="persistenceSettingsBean" value="order_persistence_settings"/>
+                        </bean>
+                    </property>
+                </bean>
+
             </list>
         </property>
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/test/resources/org/apache/ignite/tests/persistence/pojo/order.xml
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/test/resources/org/apache/ignite/tests/persistence/pojo/order.xml b/modules/cassandra/store/src/test/resources/org/apache/ignite/tests/persistence/pojo/order.xml
new file mode 100644
index 0000000..d616364
--- /dev/null
+++ b/modules/cassandra/store/src/test/resources/org/apache/ignite/tests/persistence/pojo/order.xml
@@ -0,0 +1,21 @@
+<!--
+  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.
+-->
+
+<persistence keyspace="test1" table="order">
+    <keyPersistence class="java.lang.Long" column="id" strategy="PRIMITIVE" />
+    <valuePersistence class="org.apache.ignite.tests.pojos.ProductOrder" strategy="POJO" />
+</persistence>

http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/test/resources/org/apache/ignite/tests/persistence/pojo/product.xml
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/test/resources/org/apache/ignite/tests/persistence/pojo/product.xml b/modules/cassandra/store/src/test/resources/org/apache/ignite/tests/persistence/pojo/product.xml
new file mode 100644
index 0000000..c761e1c
--- /dev/null
+++ b/modules/cassandra/store/src/test/resources/org/apache/ignite/tests/persistence/pojo/product.xml
@@ -0,0 +1,21 @@
+<!--
+  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.
+-->
+
+<persistence keyspace="test1" table="product">
+    <keyPersistence class="java.lang.Long" column="id" strategy="PRIMITIVE" />
+    <valuePersistence class="org.apache.ignite.tests.pojos.Product" strategy="POJO" />
+</persistence>

http://git-wip-us.apache.org/repos/asf/ignite/blob/3b8aca64/modules/cassandra/store/src/test/resources/tests.properties
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/test/resources/tests.properties b/modules/cassandra/store/src/test/resources/tests.properties
index 2c91e57..b11f2c8 100644
--- a/modules/cassandra/store/src/test/resources/tests.properties
+++ b/modules/cassandra/store/src/test/resources/tests.properties
@@ -16,6 +16,21 @@
 # Number of elements for CacheStore bulk operations: loadAll, writeAll, deleteAll
 bulk.operation.size=100
 
+# Number of product per transaction
+transaction.products.count=2
+
+# Number of orders per transaction
+transaction.orders.count=10
+
+# Year to use for generating new orders
+orders.year=
+
+# Month to use for generating new orders
+orders.month=
+
+# Day of month to use for generating new orders
+orders.day=
+
 # ----- Load tests settings -----
 
 # Ignite cache to be used by load tests


[17/50] [abbrv] ignite git commit: IGNITE-3609 Review.

Posted by sh...@apache.org.
IGNITE-3609 Review.


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

Branch: refs/heads/ignite-2788
Commit: e7f353283af2792a2ff0fe8c744b5d2308ece366
Parents: 3b8aca6
Author: Alexey Kuznetsov <ak...@apache.org>
Authored: Fri Sep 30 14:51:54 2016 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Fri Sep 30 14:51:54 2016 +0700

----------------------------------------------------------------------
 .../store/cassandra/common/RandomSleeper.java    |  2 +-
 .../persistence/PersistenceController.java       |  8 +++++++-
 .../store/cassandra/persistence/PojoField.java   | 10 ++++++----
 .../cassandra/persistence/PojoKeyField.java      | 10 +++-------
 .../cassandra/persistence/PojoValueField.java    | 19 ++++++-------------
 .../cassandra/session/CassandraSessionImpl.java  |  4 ++--
 .../cassandra/session/pool/SessionPool.java      |  2 +-
 .../cassandra/session/transaction/Mutation.java  |  1 -
 .../ignite/tests/CassandraLocalServer.java       |  1 +
 .../apache/ignite/tests/DDLGeneratorTest.java    |  5 ++++-
 .../apache/ignite/tests/load/IntGenerator.java   |  2 +-
 .../apache/ignite/tests/load/LoadTestDriver.java | 14 +++++++-------
 .../org/apache/ignite/tests/load/Worker.java     | 18 +++++++++---------
 .../apache/ignite/tests/pojos/ProductOrder.java  |  2 +-
 .../ignite/tests/utils/CacheStoreHelper.java     |  6 +++---
 .../ignite/tests/utils/TestTransaction.java      |  3 +--
 16 files changed, 53 insertions(+), 54 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/e7f35328/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/common/RandomSleeper.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/common/RandomSleeper.java b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/common/RandomSleeper.java
index 6745a16..f2e57a9 100644
--- a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/common/RandomSleeper.java
+++ b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/common/RandomSleeper.java
@@ -43,7 +43,7 @@ public class RandomSleeper {
     private Random random = new Random(System.currentTimeMillis());
 
     /** */
-    private int summary = 0;
+    private int summary;
 
     /**
      * Creates sleeper instance.

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7f35328/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PersistenceController.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PersistenceController.java b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PersistenceController.java
index 122f0c8..e287a4e 100644
--- a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PersistenceController.java
+++ b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PersistenceController.java
@@ -166,7 +166,7 @@ public class PersistenceController {
     }
 
     /**
-     * Binds Ignite cache key object to {@link com.datastax.driver.core.PreparedStatement}.
+     * Binds Ignite cache key object to {@link PreparedStatement}.
      *
      * @param statement statement to which key object should be bind.
      * @param key key object.
@@ -347,6 +347,12 @@ public class PersistenceController {
         return new String[] {hdrWithKeyFields + statement.toString(), hdr + statement.toString()};
     }
 
+    /**
+     * @param table Table.
+     * @param template Template.
+     * @param statements Statements.
+     * @return Statement.
+     */
     private String getStatement(final String table, final String template, final Map<String, String> statements) {
         //noinspection SynchronizationOnLocalVariableOrMethodParameter
         synchronized (statements) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7f35328/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoField.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoField.java b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoField.java
index 78e75a9..99b96d5 100644
--- a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoField.java
+++ b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoField.java
@@ -21,6 +21,7 @@ import com.datastax.driver.core.DataType;
 import com.datastax.driver.core.Row;
 import java.beans.PropertyDescriptor;
 import java.io.Serializable;
+import java.lang.reflect.Method;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.cache.query.annotations.QuerySqlField;
 import org.apache.ignite.cache.store.cassandra.common.PropertyMappingHelper;
@@ -85,10 +86,11 @@ public abstract class PojoField implements Serializable {
     public PojoField(PropertyDescriptor desc) {
         this.name = desc.getName();
 
-        QuerySqlField sqlField = desc.getReadMethod() != null &&
-                desc.getReadMethod().getAnnotation(QuerySqlField.class) != null ?
-                desc.getReadMethod().getAnnotation(QuerySqlField.class) :
-                    desc.getWriteMethod() == null ? null : desc.getWriteMethod().getAnnotation(QuerySqlField.class);
+        Method rdMthd = desc.getReadMethod();
+
+        QuerySqlField sqlField = rdMthd != null && rdMthd.getAnnotation(QuerySqlField.class) != null
+            ? rdMthd.getAnnotation(QuerySqlField.class)
+            : desc.getWriteMethod() == null ? null : desc.getWriteMethod().getAnnotation(QuerySqlField.class);
 
         col = sqlField != null && sqlField.name() != null &&
             !sqlField.name().trim().isEmpty() ? sqlField.name() : name.toLowerCase();

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7f35328/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoKeyField.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoKeyField.java b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoKeyField.java
index 4e86d74..6f42db2 100644
--- a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoKeyField.java
+++ b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoKeyField.java
@@ -40,7 +40,7 @@ public class PojoKeyField extends PojoField {
     private static final String SORT_ATTR = "sort";
 
     /** Sort order. */
-    private SortOrder sortOrder = null;
+    private SortOrder sortOrder;
 
     /**
      * Constructs Ignite cache key POJO object descriptor.
@@ -79,12 +79,8 @@ public class PojoKeyField extends PojoField {
         return sortOrder;
     }
 
-    /**
-     * Initializes descriptor from {@link QuerySqlField} annotation.
-     *
-     * @param sqlField {@link QuerySqlField} annotation.
-     */
-    protected void init(QuerySqlField sqlField) {
+    /** {@inheritDoc} */
+    @Override protected void init(QuerySqlField sqlField) {
         if (sqlField.descending())
             sortOrder = SortOrder.DESC;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7f35328/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoValueField.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoValueField.java b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoValueField.java
index 3e636c0..fcdd408 100644
--- a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoValueField.java
+++ b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/persistence/PojoValueField.java
@@ -87,16 +87,12 @@ public class PojoValueField extends PojoField {
         super(desc);
     }
 
-    /**
-     * Returns DDL for Cassandra columns corresponding to POJO field.
-     *
-     * @return columns DDL.
-     */
-    public String getColumnDDL() {
+    /** {@inheritDoc} */
+    @Override public String getColumnDDL() {
         String colDDL = super.getColumnDDL();
 
         if (isStatic != null && isStatic)
-            colDDL = colDDL + " static";
+            colDDL += " static";
 
         return colDDL;
     }
@@ -140,11 +136,8 @@ public class PojoValueField extends PojoField {
         return builder.append(";").toString();
     }
 
-    /**
-     * Initializes descriptor from {@link QuerySqlField} annotation.
-     *
-     * @param sqlField {@link QuerySqlField} annotation.
-     */
-    protected void init(QuerySqlField sqlField) {
+    /** {@inheritDoc} */
+    @Override protected void init(QuerySqlField sqlField) {
+        // No-op.
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7f35328/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java
index 4857fa4..ac11686 100644
--- a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java
+++ b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/CassandraSessionImpl.java
@@ -69,7 +69,7 @@ public class CassandraSessionImpl implements CassandraSession {
     private volatile Session ses;
 
     /** Number of references to Cassandra driver session (for multithreaded environment). */
-    private volatile int refCnt = 0;
+    private volatile int refCnt;
 
     /** Storage for the session prepared statements */
     private static final Map<String, PreparedStatement> sesStatements = new HashMap<>();
@@ -748,7 +748,7 @@ public class CassandraSessionImpl implements CassandraSession {
                     catch (AlreadyExistsException ignored) {
                     }
                     catch (Throwable e) {
-                        if (!(e instanceof InvalidQueryException) || !e.getMessage().equals("Index already exists"))
+                        if (!(e instanceof InvalidQueryException) || !"Index already exists".equals(e.getMessage()))
                             throw new IgniteException(errorMsg, e);
                     }
                 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7f35328/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/pool/SessionPool.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/pool/SessionPool.java b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/pool/SessionPool.java
index fc4a907..95938bd 100644
--- a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/pool/SessionPool.java
+++ b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/pool/SessionPool.java
@@ -146,7 +146,7 @@ public class SessionPool {
 
         synchronized (sessions) {
             try {
-                if (sessions.size() == 0)
+                if (sessions.isEmpty())
                     return;
 
                 wrappers = new LinkedList<>();

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7f35328/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/Mutation.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/Mutation.java b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/Mutation.java
index cb014f8..f3fb354 100644
--- a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/Mutation.java
+++ b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/session/transaction/Mutation.java
@@ -57,7 +57,6 @@ public interface Mutation {
      * Binds prepared statement to current Cassandra session.
      *
      * @param statement Statement.
-     * @param obj Parameters for statement binding.
      * @return Bounded statement.
      */
     public BoundStatement bindStatement(PreparedStatement statement);

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7f35328/modules/cassandra/store/src/test/java/org/apache/ignite/tests/CassandraLocalServer.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/CassandraLocalServer.java b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/CassandraLocalServer.java
index fc54e5b..eea4e9e 100644
--- a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/CassandraLocalServer.java
+++ b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/CassandraLocalServer.java
@@ -48,6 +48,7 @@ public class CassandraLocalServer {
         while (true) {
             try {
                 System.out.println("Cassandra server running");
+
                 Thread.sleep(10000);
             }
             catch (Throwable e) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7f35328/modules/cassandra/store/src/test/java/org/apache/ignite/tests/DDLGeneratorTest.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/DDLGeneratorTest.java b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/DDLGeneratorTest.java
index 6465580..e982e16 100644
--- a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/DDLGeneratorTest.java
+++ b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/DDLGeneratorTest.java
@@ -25,6 +25,7 @@ import org.junit.Test;
  * DDLGenerator test.
  */
 public class DDLGeneratorTest {
+    /** */
     private static final String[] RESOURCES = new String[] {
         "org/apache/ignite/tests/persistence/primitive/persistence-settings-1.xml",
         "org/apache/ignite/tests/persistence/pojo/persistence-settings-3.xml",
@@ -33,9 +34,11 @@ public class DDLGeneratorTest {
         "org/apache/ignite/tests/persistence/pojo/order.xml"
     };
 
+    /**
+     * Test DDL generator.
+     */
     @Test
     @SuppressWarnings("unchecked")
-    /** */
     public void generatorTest() {
         String[] files = new String[RESOURCES.length];
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7f35328/modules/cassandra/store/src/test/java/org/apache/ignite/tests/load/IntGenerator.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/load/IntGenerator.java b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/load/IntGenerator.java
index a31abee..21490f6 100644
--- a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/load/IntGenerator.java
+++ b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/load/IntGenerator.java
@@ -26,7 +26,7 @@ public class IntGenerator implements Generator {
         long val = i / 10000;
 
         while (val > Integer.MAX_VALUE)
-            val = val / 2;
+            val /= 2;
 
         return (int)val;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7f35328/modules/cassandra/store/src/test/java/org/apache/ignite/tests/load/LoadTestDriver.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/load/LoadTestDriver.java b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/load/LoadTestDriver.java
index 296839d..2582007 100644
--- a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/load/LoadTestDriver.java
+++ b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/load/LoadTestDriver.java
@@ -74,7 +74,7 @@ public abstract class LoadTestDriver {
         }
 
         // calculates host unique prefix based on its subnet IP address
-        long hostUniqePrefix = getHostUniquePrefix();
+        long hostUniquePrefix = getHostUniquePrefix();
 
         logger().info("Load tests driver setup successfully completed");
 
@@ -87,8 +87,8 @@ public abstract class LoadTestDriver {
 
             for (int i = 0; i < TestsHelper.getLoadTestsThreadsCount(); i++) {
                 Worker worker = createWorker(clazz, cfg,
-                    hostUniqePrefix + startPosition,
-                    hostUniqePrefix + startPosition + 100000000);
+                    hostUniquePrefix + startPosition,
+                    hostUniquePrefix + startPosition + 100000000);
                 workers.add(worker);
                 worker.setName(testName + "-worker-" + i);
                 worker.start();
@@ -224,14 +224,14 @@ public abstract class LoadTestDriver {
         long part4 = Long.parseLong(parts[3]);
 
         if (part3 < 10)
-            part3 = part3 * 100;
+            part3 *= 100;
         else if (part4 < 100)
-            part3 = part3 * 10;
+            part3 *= 10;
 
         if (part4 < 10)
-            part4 = part4 * 100;
+            part4 *= 100;
         else if (part4 < 100)
-            part4 = part4 * 10;
+            part4 *= 10;
 
         return (part4 * 100000000000000L) + (part3 * 100000000000L) + Thread.currentThread().getId();
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7f35328/modules/cassandra/store/src/test/java/org/apache/ignite/tests/load/Worker.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/load/Worker.java b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/load/Worker.java
index f4bffc7..5f3c393 100644
--- a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/load/Worker.java
+++ b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/load/Worker.java
@@ -46,31 +46,31 @@ public abstract class Worker extends Thread {
     boolean warmup = TestsHelper.getLoadTestsWarmupPeriod() != 0;
 
     /** */
-    private volatile long warmupStartTime = 0;
+    private volatile long warmupStartTime;
 
     /** */
-    private volatile long warmupFinishTime = 0;
+    private volatile long warmupFinishTime;
 
     /** */
-    private volatile long startTime = 0;
+    private volatile long startTime;
 
     /** */
-    private volatile long finishTime = 0;
+    private volatile long finishTime;
 
     /** */
-    private volatile long warmupMsgProcessed = 0;
+    private volatile long warmupMsgProcessed;
 
     /** */
-    private volatile long warmupSleepCnt = 0;
+    private volatile long warmupSleepCnt;
 
     /** */
-    private volatile long msgProcessed = 0;
+    private volatile long msgProcessed;
 
     /** */
-    private volatile long msgFailed = 0;
+    private volatile long msgFailed;
 
     /** */
-    private volatile long sleepCnt = 0;
+    private volatile long sleepCnt;
 
     /** */
     private Throwable executionError;

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7f35328/modules/cassandra/store/src/test/java/org/apache/ignite/tests/pojos/ProductOrder.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/pojos/ProductOrder.java b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/pojos/ProductOrder.java
index 4baee83..bafc8f3 100644
--- a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/pojos/ProductOrder.java
+++ b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/pojos/ProductOrder.java
@@ -67,7 +67,7 @@ public class ProductOrder {
 
         // if user ordered more than 10 items provide 5% discount
         if (amount > 10)
-            this.price = this.price * 0.95F;
+            price *= 0.95F;
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7f35328/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/CacheStoreHelper.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/CacheStoreHelper.java b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/CacheStoreHelper.java
index 9bcda6e..ddfa111 100644
--- a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/CacheStoreHelper.java
+++ b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/CacheStoreHelper.java
@@ -41,19 +41,19 @@ public class CacheStoreHelper {
 
     /** */
     public static CacheStore createCacheStore(String cacheName, Resource persistenceSettings, DataSource conn,
-                                              CacheStoreSession session) {
+        CacheStoreSession session) {
         return createCacheStore(cacheName, persistenceSettings, conn, session, LOGGER);
     }
 
     /** */
     public static CacheStore createCacheStore(String cacheName, Resource persistenceSettings, DataSource conn,
-                                              Logger log) {
+        Logger log) {
         return createCacheStore(cacheName, persistenceSettings, conn, null, log);
     }
 
     /** */
     public static CacheStore createCacheStore(String cacheName, Resource persistenceSettings, DataSource conn,
-                                              CacheStoreSession session, Logger log) {
+        CacheStoreSession session, Logger log) {
         CassandraCacheStore<Integer, Integer> cacheStore =
             new CassandraCacheStore<>(conn, new KeyValuePersistenceSettings(persistenceSettings),
                 Runtime.getRuntime().availableProcessors());

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7f35328/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/TestTransaction.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/TestTransaction.java b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/TestTransaction.java
index cda6715..5f3ec69 100644
--- a/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/TestTransaction.java
+++ b/modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/TestTransaction.java
@@ -36,8 +36,7 @@ public class TestTransaction implements Transaction {
     private final IgniteUuid xid = IgniteUuid.randomUuid();
 
     /** {@inheritDoc} */
-    @Nullable
-    @Override public IgniteUuid xid() {
+    @Nullable @Override public IgniteUuid xid() {
         return xid;
     }
 


[22/50] [abbrv] ignite git commit: Merge branch 'ignite-1.6.9' into ignite-1.7.3

Posted by sh...@apache.org.
Merge branch 'ignite-1.6.9' into ignite-1.7.3


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

Branch: refs/heads/ignite-2788
Commit: 36087cfa6867d29e7db56cf47e7a87b5aa9b63dc
Parents: b590233 de50287
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Mon Oct 3 10:48:50 2016 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Mon Oct 3 10:48:50 2016 +0300

----------------------------------------------------------------------
 .../client/ClientReconnectionSelfTest.java      |   4 +-
 .../client/router/TcpSslRouterSelfTest.java     |   7 +-
 .../client/suite/IgniteClientTestSuite.java     |  71 +++----
 .../internal/binary/BinaryClassDescriptor.java  |  16 +-
 .../internal/binary/BinaryEnumObjectImpl.java   |   5 +
 .../ignite/internal/binary/BinaryObjectEx.java  |   8 +
 .../internal/binary/BinaryObjectImpl.java       |   7 +
 .../binary/BinaryObjectOffheapImpl.java         |   7 +
 .../ignite/internal/binary/BinaryUtils.java     |   5 +-
 .../internal/binary/BinaryWriterExImpl.java     |   6 +-
 .../binary/builder/BinaryObjectBuilderImpl.java |  11 +-
 .../processors/cache/GridCacheAdapter.java      |   7 +
 .../processors/cache/GridCacheUtils.java        |   5 +
 .../distributed/near/GridNearCacheAdapter.java  |   7 +
 .../query/GridCacheQueryMetricsAdapter.java     |  12 +-
 .../ignite/internal/util/IgniteUtils.java       |  23 ++-
 .../cache/VisorCacheResetQueryMetricsTask.java  |  69 +++++++
 ...ridCacheStoreManagerDeserializationTest.java |   1 +
 .../cache/GridCacheUtilsSelfTest.java           |  64 +++++-
 ...calCacheStoreManagerDeserializationTest.java |   2 +-
 ...niteCacheExpireAndUpdateConsistencyTest.java |   7 +
 .../GridCacheBinaryObjectsAbstractSelfTest.java |  37 ++++
 .../ignite/testframework/IgniteTestSuite.java   | 203 ++++++++++++++++---
 .../testframework/junits/GridAbstractTest.java  |  31 ++-
 .../apache/ignite/testsuites/IgniteIgnore.java  |   2 +-
 modules/ignored-tests/pom.xml                   | 128 +++++++++++-
 .../testsuites/IgniteIgnoredTestSuite.java      |   9 +
 .../CacheAbstractQueryMetricsSelfTest.java      |   6 +-
 ...titionedCacheJtaLookupClassNameSelfTest.java |   4 +-
 .../ignite/testsuites/IgniteJtaTestSuite.java   |   3 +-
 .../p2p/GridP2PUserVersionChangeSelfTest.java   |   7 +-
 .../testsuites/IgniteResourceSelfTestSuite.java |  11 +-
 .../testsuites/IgniteSpringTestSuite.java       |  15 +-
 33 files changed, 676 insertions(+), 124 deletions(-)
----------------------------------------------------------------------


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

http://git-wip-us.apache.org/repos/asf/ignite/blob/36087cfa/modules/spring/src/test/java/org/apache/ignite/testsuites/IgniteSpringTestSuite.java
----------------------------------------------------------------------
diff --cc modules/spring/src/test/java/org/apache/ignite/testsuites/IgniteSpringTestSuite.java
index 135714f,fff8108..671d339
--- a/modules/spring/src/test/java/org/apache/ignite/testsuites/IgniteSpringTestSuite.java
+++ b/modules/spring/src/test/java/org/apache/ignite/testsuites/IgniteSpringTestSuite.java
@@@ -46,10 -46,9 +47,10 @@@ public class IgniteSpringTestSuite exte
       * @throws Exception Thrown in case of the failure.
       */
      public static TestSuite suite() throws Exception {
-         TestSuite suite = new TestSuite("Spring Test Suite");
+         TestSuite suite = new IgniteTestSuite("Spring Test Suite");
  
          suite.addTestSuite(GridSpringBeanSerializationSelfTest.class);
 +        suite.addTestSuite(IgniteSpringBeanTest.class);
          suite.addTestSuite(GridFactorySelfTest.class);
  
          suite.addTest(IgniteResourceSelfTestSuite.suite());


[34/50] [abbrv] ignite git commit: IGNITE-3820: .NET: Added log4net integration. This closes #1138.

Posted by sh...@apache.org.
IGNITE-3820: .NET: Added log4net integration. This closes #1138.


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

Branch: refs/heads/ignite-2788
Commit: 02f48d72364fb0c52e95aef8ed383a14ee531bf6
Parents: 48b293d
Author: ptupitsyn <pt...@gridgain.com>
Authored: Tue Oct 4 11:17:54 2016 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Tue Oct 4 11:17:54 2016 +0300

----------------------------------------------------------------------
 .../Apache.Ignite.Core.Tests.NuGet.csproj       |  10 +
 .../Log4NetTest.cs                              |  87 +++++++++
 .../packages.config                             |   2 +
 .../Apache.Ignite.Core.Tests.csproj             |   9 +
 .../Log/Log4NetLoggerTest.cs                    | 188 +++++++++++++++++++
 .../Apache.Ignite.Core.Tests/packages.config    |  24 +++
 .../Apache.Ignite.Log4Net.csproj                |  76 ++++++++
 .../Apache.Ignite.Log4Net.nuspec                |  50 +++++
 .../Apache.Ignite.Log4Net.snk                   | Bin 0 -> 596 bytes
 .../IgniteLog4NetLogger.cs                      | 123 ++++++++++++
 .../Properties/AssemblyInfo.cs                  |  40 ++++
 .../Apache.Ignite.Log4Net/packages.config       |  20 ++
 .../Properties/AssemblyInfo.cs                  |   2 +-
 modules/platforms/dotnet/Apache.Ignite.sln      |  16 +-
 14 files changed, 645 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/02f48d72/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/Apache.Ignite.Core.Tests.NuGet.csproj
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/Apache.Ignite.Core.Tests.NuGet.csproj b/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/Apache.Ignite.Core.Tests.NuGet.csproj
index f3f917e..335d711 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/Apache.Ignite.Core.Tests.NuGet.csproj
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/Apache.Ignite.Core.Tests.NuGet.csproj
@@ -90,6 +90,11 @@
       <HintPath>packages\Apache.Ignite.NLog.1.8.0\lib\net40\Apache.Ignite.NLog.dll</HintPath>
       <Private>True</Private>
     </Reference>
+    <Reference Include="Apache.Ignite.Log4Net">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>packages\Apache.Ignite.Log4Net.1.8.0\lib\net40\Apache.Ignite.Log4Net.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
     <Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
       <HintPath>packages\NLog.4.3.7\lib\net40\NLog.dll</HintPath>
       <Private>True</Private>
@@ -105,6 +110,10 @@
       <HintPath>packages\Remotion.Linq.2.0.1\lib\net40\Remotion.Linq.dll</HintPath>
       <Private>True</Private>
     </Reference>
+    <Reference Include="log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
+      <HintPath>packages\log4net.2.0.5\lib\net40-full\log4net.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Configuration" />
     <Reference Include="System.Core" />
@@ -112,6 +121,7 @@
     <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Log4NetTest.cs" />
     <Compile Include="NLogTest.cs" />
     <Compile Include="AspNetTest.cs" />
     <Compile Include="ComputeTest.cs" />

http://git-wip-us.apache.org/repos/asf/ignite/blob/02f48d72/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/Log4NetTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/Log4NetTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/Log4NetTest.cs
new file mode 100644
index 0000000..c53ea28
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/Log4NetTest.cs
@@ -0,0 +1,87 @@
+\ufeff/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Tests.NuGet
+{
+    using System;
+    using System.Collections.Generic;
+    using System.Linq;
+    using Apache.Ignite.Core.Log;
+    using Apache.Ignite.Log4Net;
+    using global::log4net;
+    using global::log4net.Appender;
+    using global::log4net.Core;
+    using global::log4net.Repository.Hierarchy;
+    using NUnit.Framework;
+
+    /// <summary>
+    /// log4net tests.
+    /// </summary>
+    public class Log4NetTest
+    {
+        /// <summary>
+        /// Tests the logger with Ignite.
+        /// </summary>
+        [Test]
+        public void TestIgniteStartup()
+        {
+            var memoryLog = CreateMemoryLogger();
+            var logger = new IgniteLog4NetLogger();
+
+            var cfg = new IgniteConfiguration
+            {
+                DiscoverySpi = TestUtil.GetLocalDiscoverySpi(),
+                Logger = logger
+            };
+
+            Func<IEnumerable<string>> getLogs = () => memoryLog.GetEvents().Select(x => x.MessageObject.ToString());
+
+            using (var ignite = Ignition.Start(cfg))
+            {
+                Assert.IsTrue(getLogs().Contains(
+                    string.Format("Starting Ignite.NET {0}", typeof(Ignition).Assembly.GetName().Version)));
+
+                Assert.IsTrue(getLogs().Any(x => x.Contains(">>> Topology snapshot.")));
+
+                Assert.IsInstanceOf<IgniteLog4NetLogger>(ignite.Logger);
+
+                ignite.Logger.Info("Log from user code.");
+
+                Assert.IsTrue(getLogs().Contains("Log from user code."));
+            }
+
+            Assert.IsTrue(getLogs().Contains("Grid is stopping."));
+        }
+
+        /// <summary>
+        /// Creates the memory logger.
+        /// </summary>
+        private static MemoryAppender CreateMemoryLogger()
+        {
+            var hierarchy = (Hierarchy) LogManager.GetRepository();
+
+            var memory = new MemoryAppender();
+            memory.ActivateOptions();
+            hierarchy.Root.AddAppender(memory);
+
+            hierarchy.Root.Level = Level.All;
+            hierarchy.Configured = true;
+
+            return memory;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/02f48d72/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/packages.config
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/packages.config b/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/packages.config
index 30e71a1..80454e0 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/packages.config
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/packages.config
@@ -20,8 +20,10 @@
   <package id="Apache.Ignite.AspNet" version="1.8.0" targetFramework="net40" />
   <package id="Apache.Ignite.Linq" version="1.8.0" targetFramework="net40" />
   <package id="Apache.Ignite.NLog" version="1.8.0" targetFramework="net40" />
+  <package id="Apache.Ignite.Log4Net" version="1.8.0" targetFramework="net40" />
   <package id="Apache.Ignite.Schema" version="1.8.0" targetFramework="net40" />
   <package id="NLog" version="4.3.7" targetFramework="net40" />
   <package id="NUnit.Runners" version="2.6.3" targetFramework="net40" />
   <package id="Remotion.Linq" version="2.0.1" targetFramework="net40" />
+  <package id="log4net" version="2.0.5" targetFramework="net40" />
 </packages>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/02f48d72/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
index ef62498..008229a 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
@@ -37,6 +37,10 @@
     <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
+      <HintPath>..\packages\log4net.2.0.5\lib\net40-full\log4net.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
     <Reference Include="Microsoft.CSharp" />
     <Reference Include="NLog">
       <HintPath>..\packages\NLog.4.3.7\lib\net40\NLog.dll</HintPath>
@@ -58,6 +62,7 @@
   </ItemGroup>
   <ItemGroup>
     <Compile Include="Log\DefaultLoggerTest.cs" />
+    <Compile Include="Log\Log4NetLoggerTest.cs" />
     <Compile Include="Log\NLogLoggerTest.cs" />
     <Compile Include="TestAppConfig.cs" />
     <Compile Include="Binary\BinaryBuilderSelfTestFullFooter.cs" />
@@ -180,6 +185,10 @@
       <Project>{5b571661-17f4-4f29-8c7d-0edb38ca9b55}</Project>
       <Name>Apache.Ignite.Linq</Name>
     </ProjectReference>
+    <ProjectReference Include="..\Apache.Ignite.log4net\Apache.Ignite.Log4Net.csproj">
+      <Project>{6F82D669-382E-4435-8092-68C4440146D8}</Project>
+      <Name>Apache.Ignite.Log4Net</Name>
+    </ProjectReference>
     <ProjectReference Include="..\Apache.Ignite.NLog\Apache.Ignite.NLog.csproj">
       <Project>{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}</Project>
       <Name>Apache.Ignite.NLog</Name>

http://git-wip-us.apache.org/repos/asf/ignite/blob/02f48d72/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Log/Log4NetLoggerTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Log/Log4NetLoggerTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Log/Log4NetLoggerTest.cs
new file mode 100644
index 0000000..2b28439
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Log/Log4NetLoggerTest.cs
@@ -0,0 +1,188 @@
+\ufeff/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Tests.Log
+{
+    using System;
+    using System.Collections.Generic;
+    using System.Globalization;
+    using System.Linq;
+    using Apache.Ignite.Core.Log;
+    using Apache.Ignite.Log4Net;
+    using global::log4net;
+    using global::log4net.Appender;
+    using global::log4net.Core;
+    using global::log4net.Repository.Hierarchy;
+    using NUnit.Framework;
+
+    /// <summary>
+    /// Tests for <see cref="IgniteLog4NetLogger"/>.
+    /// </summary>
+    public class Log4NetLoggerTest
+    {
+        /// <summary>
+        /// Tests the log level conversion.
+        /// </summary>
+        [Test]
+        public void TestLogLevelConversion()
+        {
+            var levels = new[] { LogLevel.Trace, LogLevel.Info, LogLevel.Debug, LogLevel.Warn, LogLevel.Error };
+
+            foreach (var igniteLevel in levels)
+            {
+                var log4NetLevel = IgniteLog4NetLogger.ConvertLogLevel(igniteLevel);
+
+                Assert.AreEqual(igniteLevel.ToString().ToUpperInvariant(), log4NetLevel.ToString());
+            }
+        }
+
+        /// <summary>
+        /// Tests the logger in isolated environment.
+        /// </summary>
+        [Test]
+        public void TestLogging()
+        {
+            var memoryLog = CreateMemoryLogger();
+            var logger = new IgniteLog4NetLogger();
+
+            Func<LoggingEvent> getLastLog = () => memoryLog.PopAllEvents().Single();
+
+            // All parameters.
+            logger.Log(LogLevel.Trace, "msg{0}", new object[] { 1 }, CultureInfo.InvariantCulture, "category",
+                "java-err", new Exception("myException"));
+
+            var log = getLastLog();
+            Assert.AreEqual("msg1", log.MessageObject.ToString());
+            Assert.AreEqual("category", log.LoggerName);
+            Assert.AreEqual("java-err", log.Properties["nativeErrorInfo"]);
+            Assert.AreEqual("myException", log.ExceptionObject.Message);
+            Assert.AreEqual(Level.Trace, log.Level);
+
+            // No Java error.
+            logger.Log(LogLevel.Info, "msg{0}", new object[] { 1 }, CultureInfo.InvariantCulture, "category",
+                null, new Exception("myException"));
+
+            log = getLastLog();
+            Assert.AreEqual("msg1", log.MessageObject.ToString());
+            Assert.AreEqual("category", log.LoggerName);
+            Assert.AreEqual(null, log.Properties["nativeErrorInfo"]);
+            Assert.AreEqual("myException", log.ExceptionObject.Message);
+            Assert.AreEqual(Level.Info, log.Level);
+
+            // No exception.
+            logger.Log(LogLevel.Debug, "msg{0}", new object[] { 1 }, CultureInfo.InvariantCulture, "category",
+                null, null);
+
+            log = getLastLog();
+            Assert.AreEqual("msg1", log.MessageObject.ToString());
+            Assert.AreEqual("category", log.LoggerName);
+            Assert.AreEqual(null, log.Properties["nativeErrorInfo"]);
+            Assert.AreEqual(null, log.ExceptionObject);
+            Assert.AreEqual(Level.Debug, log.Level);
+
+            // No params.
+            logger.Log(LogLevel.Warn, "msg{0}", null, CultureInfo.InvariantCulture, "category", null, null);
+
+            log = getLastLog();
+            Assert.AreEqual("msg{0}", log.MessageObject.ToString());
+            Assert.AreEqual("category", log.LoggerName);
+            Assert.AreEqual(null, log.Properties["nativeErrorInfo"]);
+            Assert.AreEqual(null, log.ExceptionObject);
+            Assert.AreEqual(Level.Warn, log.Level);
+
+            // No formatter.
+            logger.Log(LogLevel.Error, "msg{0}", null, null, "category", null, null);
+
+            log = getLastLog();
+            Assert.AreEqual("msg{0}", log.MessageObject.ToString());
+            Assert.AreEqual("category", log.LoggerName);
+            Assert.AreEqual(null, log.Properties["nativeErrorInfo"]);
+            Assert.AreEqual(null, log.ExceptionObject);
+            Assert.AreEqual(Level.Error, log.Level);
+
+            // No category.
+            logger.Log(LogLevel.Error, "msg{0}", null, null, null, null, null);
+
+            log = getLastLog();
+            Assert.AreEqual("msg{0}", log.MessageObject.ToString());
+            Assert.AreEqual(null, log.LoggerName);
+            Assert.AreEqual(null, log.Properties["nativeErrorInfo"]);
+            Assert.AreEqual(null, log.ExceptionObject);
+            Assert.AreEqual(Level.Error, log.Level);
+
+            // No message.
+            logger.Log(LogLevel.Error, null, null, null, null, null, null);
+
+            log = getLastLog();
+            Assert.AreEqual(null, log.MessageObject);
+            Assert.AreEqual(null, log.LoggerName);
+            Assert.AreEqual(null, log.Properties["nativeErrorInfo"]);
+            Assert.AreEqual(null, log.ExceptionObject);
+            Assert.AreEqual(Level.Error, log.Level);
+        }
+
+        /// <summary>
+        /// Tests the logger with Ignite.
+        /// </summary>
+        [Test]
+        public void TestIgniteStartup()
+        {
+            var memoryLog = CreateMemoryLogger();
+            var logger = new IgniteLog4NetLogger();
+
+            var cfg = new IgniteConfiguration(TestUtils.GetTestConfiguration())
+            {
+                Logger = logger
+            };
+
+            Func<IEnumerable<string>> getLogs = () => memoryLog.GetEvents().Select(x => x.MessageObject.ToString());
+
+            using (var ignite = Ignition.Start(cfg))
+            {
+                Assert.IsTrue(getLogs().Contains(
+                    string.Format("Starting Ignite.NET {0}", typeof(Ignition).Assembly.GetName().Version)));
+
+                Assert.IsTrue(getLogs().Any(x => x.Contains(">>> Topology snapshot.")));
+
+                Assert.IsInstanceOf<IgniteLog4NetLogger>(ignite.Logger);
+
+                ignite.Logger.Info("Log from user code.");
+
+                Assert.IsTrue(getLogs().Contains("Log from user code."));
+            }
+
+            Assert.IsTrue(getLogs().Contains("Grid is stopping."));
+        }
+
+        /// <summary>
+        /// Creates the memory logger.
+        /// </summary>
+        private static MemoryAppender CreateMemoryLogger()
+        {
+            var hierarchy = (Hierarchy) LogManager.GetRepository();
+
+            var memory = new MemoryAppender();
+            memory.ActivateOptions();
+            hierarchy.Root.AddAppender(memory);
+
+            hierarchy.Root.Level = Level.All;
+            hierarchy.Configured = true;
+
+            return memory;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/02f48d72/modules/platforms/dotnet/Apache.Ignite.Core.Tests/packages.config
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/packages.config b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/packages.config
new file mode 100644
index 0000000..d369a35
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/packages.config
@@ -0,0 +1,24 @@
+\ufeff<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  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.
+-->
+
+<packages>
+  <package id="NUnit.Runners" version="2.6.3" targetFramework="net40" />
+  <package id="log4net" version="2.0.5" targetFramework="net40" />
+  <package id="NLog" version="4.3.7" targetFramework="net40" />
+</packages>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/02f48d72/modules/platforms/dotnet/Apache.Ignite.Log4Net/Apache.Ignite.Log4Net.csproj
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Log4Net/Apache.Ignite.Log4Net.csproj b/modules/platforms/dotnet/Apache.Ignite.Log4Net/Apache.Ignite.Log4Net.csproj
new file mode 100644
index 0000000..0fdd611
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Log4Net/Apache.Ignite.Log4Net.csproj
@@ -0,0 +1,76 @@
+\ufeff<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{6F82D669-382E-4435-8092-68C4440146D8}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Apache.Ignite.Log4Net</RootNamespace>
+    <AssemblyName>Apache.Ignite.Log4Net</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <RunCodeAnalysis>true</RunCodeAnalysis>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>Apache.Ignite.Log4Net.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
+      <HintPath>..\packages\log4net.2.0.5\lib\net40-full\log4net.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="IgniteLog4NetLogger.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Apache.Ignite.Core\Apache.Ignite.Core.csproj">
+      <Project>{4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}</Project>
+      <Name>Apache.Ignite.Core</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Apache.Ignite.Log4Net.snk" />
+    <None Include="Apache.Ignite.Log4Net.nuspec" />
+    <None Include="packages.config" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/02f48d72/modules/platforms/dotnet/Apache.Ignite.Log4Net/Apache.Ignite.Log4Net.nuspec
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Log4Net/Apache.Ignite.Log4Net.nuspec b/modules/platforms/dotnet/Apache.Ignite.Log4Net/Apache.Ignite.Log4Net.nuspec
new file mode 100644
index 0000000..fa5c39a
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Log4Net/Apache.Ignite.Log4Net.nuspec
@@ -0,0 +1,50 @@
+<?xml version="1.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.
+-->
+
+<!-- 
+
+Creating NuGet package:
+1) Build Apache.Ignite.sln (AnyCPU configuration)
+2) Create package (use csproj instead of nuspec so that template substitution works): 
+   nuget pack Apache.Ignite.Log4Net.csproj -Prop Configuration=Release -Prop Platform=AnyCPU
+
+-->
+
+<package >
+    <metadata>
+        <id>Apache.Ignite.Log4Net</id>
+        <title>Apache Ignite log4net Logger</title>
+        <!-- -->
+        <version>$version$</version>
+        <authors>Apache Ignite</authors>
+        <owners>Apache Software Foundation</owners>
+        <licenseUrl>http://www.apache.org/licenses/LICENSE-2.0</licenseUrl>
+        <projectUrl>https://ignite.apache.org/</projectUrl>
+        <iconUrl>https://ignite.apache.org/images/logo_ignite_32_32.png</iconUrl>
+        <requireLicenseAcceptance>false</requireLicenseAcceptance>
+        <description>log4net Logger for Apache Ignite</description>
+        <releaseNotes></releaseNotes>
+        <copyright>Copyright 2016</copyright>
+        <tags>Apache Ignite In-Memory Distributed Computing SQL NoSQL LINQ Grid Map Reduce Cache log4net logger</tags>
+        <dependencies>
+            <dependency id="Apache.Ignite" version="[$version$]" />
+            <dependency id="log4net" version="[2.0.0, 3.0.0)" />
+        </dependencies>    
+    </metadata>
+</package>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/02f48d72/modules/platforms/dotnet/Apache.Ignite.Log4Net/Apache.Ignite.Log4Net.snk
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Log4Net/Apache.Ignite.Log4Net.snk b/modules/platforms/dotnet/Apache.Ignite.Log4Net/Apache.Ignite.Log4Net.snk
new file mode 100644
index 0000000..a4d1622
Binary files /dev/null and b/modules/platforms/dotnet/Apache.Ignite.Log4Net/Apache.Ignite.Log4Net.snk differ

http://git-wip-us.apache.org/repos/asf/ignite/blob/02f48d72/modules/platforms/dotnet/Apache.Ignite.Log4Net/IgniteLog4NetLogger.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Log4Net/IgniteLog4NetLogger.cs b/modules/platforms/dotnet/Apache.Ignite.Log4Net/IgniteLog4NetLogger.cs
new file mode 100644
index 0000000..058176f
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Log4Net/IgniteLog4NetLogger.cs
@@ -0,0 +1,123 @@
+\ufeff/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Log4Net
+{
+    using System;
+    using Apache.Ignite.Core.Impl.Common;
+    using Apache.Ignite.Core.Log;
+    using global::log4net;
+    using global::log4net.Core;
+    using global::log4net.Util;
+    using ILogger = Apache.Ignite.Core.Log.ILogger;
+
+    /// <summary>
+    /// Ignite log4net integration.
+    /// </summary>
+    public class IgniteLog4NetLogger : ILogger
+    {
+        /** Wrapped log4net log. */
+        private readonly ILog _log;
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="IgniteLog4NetLogger"/> class.
+        /// </summary>
+        public IgniteLog4NetLogger() : this (LogManager.GetLogger(typeof(IgniteLog4NetLogger)))
+        {
+            // No-op.
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="IgniteLog4NetLogger"/> class.
+        /// </summary>
+        /// <param name="log">The log.</param>
+        public IgniteLog4NetLogger(ILog log)
+        {
+            IgniteArgumentCheck.NotNull(log, "log");
+
+            _log = log;
+        }
+
+        /// <summary>
+        /// Logs the specified message.
+        /// </summary>
+        /// <param name="logLevel">The level.</param>
+        /// <param name="message">The message.</param>
+        /// <param name="args">The arguments to format <paramref name="message" />.
+        /// Can be null (formatting will not occur).</param>
+        /// <param name="formatProvider">The format provider. Can be null if <paramref name="args" /> is null.</param>
+        /// <param name="category">The logging category name.</param>
+        /// <param name="nativeErrorInfo">The native error information.</param>
+        /// <param name="ex">The exception. Can be null.</param>
+        public void Log(LogLevel logLevel, string message, object[] args, IFormatProvider formatProvider, 
+            string category, string nativeErrorInfo, Exception ex)
+        {
+            var level = ConvertLogLevel(logLevel);
+
+            var repo = _log.Logger.Repository;
+
+            var messageObject = args == null 
+                ? (object) message 
+                : new SystemStringFormat(formatProvider, message, args);
+
+            var evt = new LoggingEvent(GetType(), repo, category, level, messageObject, ex);
+
+            if (nativeErrorInfo != null)
+                evt.Properties["nativeErrorInfo"] = nativeErrorInfo;
+
+            _log.Logger.Log(evt);
+        }
+
+        /// <summary>
+        /// Determines whether the specified log level is enabled.
+        /// </summary>
+        /// <param name="logLevel">The level.</param>
+        /// <returns>
+        /// Value indicating whether the specified log level is enabled
+        /// </returns>
+        public bool IsEnabled(LogLevel logLevel)
+        {
+            var level = ConvertLogLevel(logLevel);
+
+            return _log.Logger.IsEnabledFor(level);
+        }
+
+        /// <summary>
+        /// Converts the Ignite LogLevel to the log4net log level.
+        /// </summary>
+        /// <param name="level">The Ignite log level.</param>
+        /// <returns>Corresponding log4net log level.</returns>
+        public static Level ConvertLogLevel(LogLevel level)
+        {
+            switch (level)
+            {
+                case LogLevel.Trace:
+                    return Level.Trace;
+                case LogLevel.Debug:
+                    return Level.Debug;
+                case LogLevel.Info:
+                    return Level.Info;
+                case LogLevel.Warn:
+                    return Level.Warn;
+                case LogLevel.Error:
+                    return Level.Error;
+                default:
+                    throw new ArgumentOutOfRangeException("level", level, null);
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/02f48d72/modules/platforms/dotnet/Apache.Ignite.Log4Net/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Log4Net/Properties/AssemblyInfo.cs b/modules/platforms/dotnet/Apache.Ignite.Log4Net/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..bb8e830
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Log4Net/Properties/AssemblyInfo.cs
@@ -0,0 +1,40 @@
+\ufeff/*
+* 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.
+*/
+
+using System;
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+[assembly: AssemblyTitle("Apache.Ignite.Log4Net")]
+[assembly: AssemblyDescription("Apache Ignite.NET log4net integration.")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Apache Software Foundation")]
+[assembly: AssemblyProduct("Apache Ignite.NET")]
+[assembly: AssemblyCopyright("Copyright �  2016")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("6f82d669-382e-4435-8092-68c4440146d8")]
+
+[assembly: AssemblyVersion("1.8.0.14218")]
+[assembly: AssemblyFileVersion("1.8.0.14218")]
+[assembly: AssemblyInformationalVersion("1.8.0")]
+
+[assembly: CLSCompliant(true)]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/02f48d72/modules/platforms/dotnet/Apache.Ignite.Log4Net/packages.config
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Log4Net/packages.config b/modules/platforms/dotnet/Apache.Ignite.Log4Net/packages.config
new file mode 100644
index 0000000..e1e44b8
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Log4Net/packages.config
@@ -0,0 +1,20 @@
+\ufeff<?xml version="1.0" encoding="utf-8"?>
+<!--
+  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.
+-->
+<packages>
+  <package id="log4net" version="2.0.5" targetFramework="net40" />
+</packages>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/02f48d72/modules/platforms/dotnet/Apache.Ignite.NLog/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.NLog/Properties/AssemblyInfo.cs b/modules/platforms/dotnet/Apache.Ignite.NLog/Properties/AssemblyInfo.cs
index baaa60d..50220d2 100644
--- a/modules/platforms/dotnet/Apache.Ignite.NLog/Properties/AssemblyInfo.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.NLog/Properties/AssemblyInfo.cs
@@ -24,7 +24,7 @@ using System.Runtime.InteropServices;
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("Apache Software Foundation")]
 [assembly: AssemblyProduct("Apache Ignite.NET")]
-[assembly: AssemblyCopyright("Copyright �  2015")]
+[assembly: AssemblyCopyright("Copyright �  2016")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/02f48d72/modules/platforms/dotnet/Apache.Ignite.sln
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.sln b/modules/platforms/dotnet/Apache.Ignite.sln
index 2978780..de7cf19 100644
--- a/modules/platforms/dotnet/Apache.Ignite.sln
+++ b/modules/platforms/dotnet/Apache.Ignite.sln
@@ -36,9 +36,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.Linq", "Apach
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.AspNet", "Apache.Ignite.AspNet\Apache.Ignite.AspNet.csproj", "{13EA96FC-CC83-4164-A7C0-4F30ED797460}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.NLog", "Apache.Ignite.NLog\Apache.Ignite.NLog.csproj", "{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}"
+EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.AspNet.Tests", "Apache.Ignite.AspNet.Tests\Apache.Ignite.AspNet.Tests.csproj", "{18EA4C71-A11D-4AB1-8042-418F7559D84F}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.NLog", "Apache.Ignite.NLog\Apache.Ignite.NLog.csproj", "{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.Log4Net", "Apache.Ignite.log4net\Apache.Ignite.Log4Net.csproj", "{6F82D669-382E-4435-8092-68C4440146D8}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -202,6 +204,18 @@ Global
 		{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Release|x64.Build.0 = Release|Any CPU
 		{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Release|x86.ActiveCfg = Release|Any CPU
 		{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Release|x86.Build.0 = Release|Any CPU
+		{6F82D669-382E-4435-8092-68C4440146D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6F82D669-382E-4435-8092-68C4440146D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6F82D669-382E-4435-8092-68C4440146D8}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{6F82D669-382E-4435-8092-68C4440146D8}.Debug|x64.Build.0 = Debug|Any CPU
+		{6F82D669-382E-4435-8092-68C4440146D8}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{6F82D669-382E-4435-8092-68C4440146D8}.Debug|x86.Build.0 = Debug|Any CPU
+		{6F82D669-382E-4435-8092-68C4440146D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6F82D669-382E-4435-8092-68C4440146D8}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6F82D669-382E-4435-8092-68C4440146D8}.Release|x64.ActiveCfg = Release|Any CPU
+		{6F82D669-382E-4435-8092-68C4440146D8}.Release|x64.Build.0 = Release|Any CPU
+		{6F82D669-382E-4435-8092-68C4440146D8}.Release|x86.ActiveCfg = Release|Any CPU
+		{6F82D669-382E-4435-8092-68C4440146D8}.Release|x86.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE


[35/50] [abbrv] ignite git commit: IGNITE-3841 Web console added check for eviction policy max mem and max size consistency. Fixes #1136.

Posted by sh...@apache.org.
IGNITE-3841 Web console added check for eviction policy max mem and max size consistency. Fixes #1136.


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

Branch: refs/heads/ignite-2788
Commit: bfdb5c3b374fd3512481cf16779d227d7f96e569
Parents: 02f48d7
Author: Saikat Maitra <sa...@gmail.com>
Authored: Tue Oct 4 16:40:35 2016 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Tue Oct 4 16:40:35 2016 +0700

----------------------------------------------------------------------
 .../frontend/controllers/caches-controller.js         | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/bfdb5c3b/modules/web-console/frontend/controllers/caches-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/controllers/caches-controller.js b/modules/web-console/frontend/controllers/caches-controller.js
index 9873051..8c32906 100644
--- a/modules/web-console/frontend/controllers/caches-controller.js
+++ b/modules/web-console/frontend/controllers/caches-controller.js
@@ -292,6 +292,17 @@ export default ['cachesController', [
             return true;
         }
 
+        function checkEvictionPolicy(evictionPlc) {
+            if (evictionPlc && evictionPlc.kind) {
+                const plc = evictionPlc[evictionPlc.kind];
+
+                if (plc.maxMemorySize === 0 && plc.maxSize === 0)
+                    return ErrorPopover.show('evictionPolicymaxMemorySizeInput', 'Either maximum memory size or maximum size should be great than 0!', $scope.ui, 'memory');
+            }
+
+            return true;
+        }
+
         function checkSQLSchemas() {
             const clusters = cacheClusters();
 
@@ -367,6 +378,9 @@ export default ['cachesController', [
             if (item.memoryMode === 'OFFHEAP_TIERED' && item.offHeapMaxMemory === -1)
                 return ErrorPopover.show('offHeapModeInput', 'Invalid value!', $scope.ui, 'memory');
 
+            if (!checkEvictionPolicy(item.evictionPolicy))
+                return false;
+
             if (!checkSQLSchemas())
                 return false;
 


[18/50] [abbrv] ignite git commit: IGNITE-4007 Fixed update of QueryMetrics.minimumTime() metric. Tests added. Added Visor reset metrics task.

Posted by sh...@apache.org.
IGNITE-4007 Fixed update of QueryMetrics.minimumTime() metric.  Tests added. Added Visor reset metrics task.


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

Branch: refs/heads/ignite-2788
Commit: c32082fe8b1e02758179c1b7bb61a75be53534fe
Parents: f447559
Author: Alexey Kuznetsov <ak...@apache.org>
Authored: Fri Sep 30 15:20:11 2016 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Fri Sep 30 15:20:11 2016 +0700

----------------------------------------------------------------------
 .../query/GridCacheQueryMetricsAdapter.java     | 12 ++--
 .../cache/VisorCacheResetQueryMetricsTask.java  | 69 ++++++++++++++++++++
 .../CacheAbstractQueryMetricsSelfTest.java      |  6 +-
 3 files changed, 80 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/c32082fe/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryMetricsAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryMetricsAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryMetricsAdapter.java
index 1928ea5..e70ea9f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryMetricsAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryMetricsAdapter.java
@@ -34,7 +34,7 @@ public class GridCacheQueryMetricsAdapter implements QueryMetrics, Externalizabl
     private static final long serialVersionUID = 0L;
 
     /** Minimum time of execution. */
-    private final GridAtomicLong minTime = new GridAtomicLong();
+    private final GridAtomicLong minTime = new GridAtomicLong(Long.MAX_VALUE);
 
     /** Maximum time of execution. */
     private final GridAtomicLong maxTime = new GridAtomicLong();
@@ -58,7 +58,9 @@ public class GridCacheQueryMetricsAdapter implements QueryMetrics, Externalizabl
 
     /** {@inheritDoc} */
     @Override public long minimumTime() {
-        return minTime.get();
+        long min = minTime.get();
+
+        return min == Long.MAX_VALUE ? 0 : min;
     }
 
     /** {@inheritDoc} */
@@ -71,9 +73,9 @@ public class GridCacheQueryMetricsAdapter implements QueryMetrics, Externalizabl
         if (avgTime > 0)
             return avgTime;
         else {
-            long val = completed.sum();
+            double val = completed.sum();
 
-            return val > 0 ? sumTime.sum() / val : 0;
+            return val > 0 ? sumTime.sum() / val : 0.0;
         }
     }
 
@@ -170,4 +172,4 @@ public class GridCacheQueryMetricsAdapter implements QueryMetrics, Externalizabl
     @Override public String toString() {
         return S.toString(GridCacheQueryMetricsAdapter.class, this);
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/c32082fe/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheResetQueryMetricsTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheResetQueryMetricsTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheResetQueryMetricsTask.java
new file mode 100644
index 0000000..96d9857
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheResetQueryMetricsTask.java
@@ -0,0 +1,69 @@
+/*
+ * 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.visor.cache;
+
+import org.apache.ignite.internal.processors.cache.IgniteInternalCache;
+import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.visor.VisorJob;
+import org.apache.ignite.internal.visor.VisorOneNodeTask;
+
+/**
+ * Reset compute grid query metrics.
+ */
+@GridInternal
+public class VisorCacheResetQueryMetricsTask extends VisorOneNodeTask<String, Void> {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** {@inheritDoc} */
+    @Override protected VisorCacheResetQueryMetricsJob job(String arg) {
+        return new VisorCacheResetQueryMetricsJob(arg, debug);
+    }
+
+    /**
+     * Job that reset cache query metrics.
+     */
+    private static class VisorCacheResetQueryMetricsJob extends VisorJob<String, Void> {
+        /** */
+        private static final long serialVersionUID = 0L;
+
+        /**
+         * @param arg Cache name to reset query metrics for.
+         * @param debug Debug flag.
+         */
+        private VisorCacheResetQueryMetricsJob(String arg, boolean debug) {
+            super(arg, debug);
+        }
+
+        /** {@inheritDoc} */
+        @Override protected Void run(String cacheName) {
+            IgniteInternalCache cache = ignite.cachex(cacheName);
+
+            if (cache != null)
+                cache.context().queries().resetMetrics();
+
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public String toString() {
+            return S.toString(VisorCacheResetQueryMetricsJob.class, this);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/c32082fe/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheAbstractQueryMetricsSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheAbstractQueryMetricsSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheAbstractQueryMetricsSelfTest.java
index d2d8c4d..10f7612 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheAbstractQueryMetricsSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheAbstractQueryMetricsSelfTest.java
@@ -236,6 +236,7 @@ public abstract class CacheAbstractQueryMetricsSelfTest extends GridCommonAbstra
         assertTrue(m.averageTime() >= 0);
         assertTrue(m.maximumTime() >= 0);
         assertTrue(m.minimumTime() >= 0);
+        assertTrue("On first execution minTime == maxTime", m.minimumTime() == m.maximumTime());
 
         // Execute again with the same parameters.
         cache.query(qry).getAll();
@@ -274,6 +275,7 @@ public abstract class CacheAbstractQueryMetricsSelfTest extends GridCommonAbstra
         assertTrue(m.averageTime() >= 0);
         assertTrue(m.maximumTime() >= 0);
         assertTrue(m.minimumTime() >= 0);
+        assertTrue("On first execution minTime == maxTime", m.minimumTime() == m.maximumTime());
 
         // Execute again with the same parameters.
         cache.query(qry).iterator().next();
@@ -301,7 +303,7 @@ public abstract class CacheAbstractQueryMetricsSelfTest extends GridCommonAbstra
         try {
             cache.query(qry).getAll();
         }
-        catch (Exception e) {
+        catch (Exception ignored) {
             // No-op.
         }
 
@@ -320,7 +322,7 @@ public abstract class CacheAbstractQueryMetricsSelfTest extends GridCommonAbstra
         try {
             cache.query(qry).getAll();
         }
-        catch (Exception e) {
+        catch (Exception ignored) {
             // No-op.
         }
 


[11/50] [abbrv] ignite git commit: GridNearCacheAdapter, GridDhtCacheAdapter - test fix

Posted by sh...@apache.org.
GridNearCacheAdapter, GridDhtCacheAdapter - test fix


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

Branch: refs/heads/ignite-2788
Commit: 22dc2c9e05e5183f838865023c9cb7a8291ac67f
Parents: ad613af
Author: Alexander Paschenko <al...@gmail.com>
Authored: Thu Sep 29 15:43:20 2016 +0300
Committer: Alexander Paschenko <al...@gmail.com>
Committed: Thu Sep 29 15:43:59 2016 +0300

----------------------------------------------------------------------
 .../cache/distributed/dht/GridDhtCacheAdapter.java      | 12 ++++++++++++
 .../cache/distributed/near/GridNearCacheAdapter.java    | 12 ++++++++++++
 2 files changed, 24 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/22dc2c9e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheAdapter.java
index 35e6267..8ced02f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheAdapter.java
@@ -261,6 +261,18 @@ public abstract class GridDhtCacheAdapter<K, V> extends GridDistributedCacheAdap
      */
     public abstract GridNearCacheAdapter<K, V> near();
 
+    /** {@inheritDoc} */
+    @Override public void forceKeyCheck() {
+        if (!keyCheck) {
+            super.forceKeyCheck();
+
+            GridNearCacheAdapter near = near();
+
+            if (near != null)
+                near.forceKeyCheck();
+        }
+    }
+
     /**
      * @return Partition topology.
      */

http://git-wip-us.apache.org/repos/asf/ignite/blob/22dc2c9e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheAdapter.java
index dd66a33..6acf48e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheAdapter.java
@@ -115,6 +115,18 @@ public abstract class GridNearCacheAdapter<K, V> extends GridDistributedCacheAda
     public abstract GridDhtCacheAdapter<K, V> dht();
 
     /** {@inheritDoc} */
+    @Override public void forceKeyCheck() {
+        if (!keyCheck) {
+            super.forceKeyCheck();
+
+            GridDhtCacheAdapter dht = dht();
+
+            if (dht != null)
+                dht.forceKeyCheck();
+        }
+    }
+
+    /** {@inheritDoc} */
     @Override public void onReconnected() {
         map = new GridCacheConcurrentMapImpl(
             ctx,


[07/50] [abbrv] ignite git commit: Added node stop to IgniteCacheExpireAndUpdateConsistencyTest.

Posted by sh...@apache.org.
Added node stop to IgniteCacheExpireAndUpdateConsistencyTest.


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

Branch: refs/heads/ignite-2788
Commit: 3e8a1c6b045c231dbb3c972463000f824386aee9
Parents: b280c3e
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Thu Sep 29 11:08:23 2016 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Thu Sep 29 11:08:23 2016 +0300

----------------------------------------------------------------------
 .../cache/IgniteCacheExpireAndUpdateConsistencyTest.java      | 7 +++++++
 1 file changed, 7 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/3e8a1c6b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheExpireAndUpdateConsistencyTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheExpireAndUpdateConsistencyTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheExpireAndUpdateConsistencyTest.java
index 7f54a83..882ed22 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheExpireAndUpdateConsistencyTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheExpireAndUpdateConsistencyTest.java
@@ -97,6 +97,13 @@ public class IgniteCacheExpireAndUpdateConsistencyTest extends GridCommonAbstrac
         assertTrue(client.configuration().isClientMode());
     }
 
+    /** {@inheritDoc} */
+    @Override protected void afterTestsStopped() throws Exception {
+        stopAllGrids();
+
+        super.afterTestsStopped();
+    }
+
     /**
      * @throws Exception If failed.
      */


[40/50] [abbrv] ignite git commit: ignite-3722 Cached in a file text must be written with UTF-8 charset, not default. This closes #1144.

Posted by sh...@apache.org.
ignite-3722 Cached in a file text must be written with UTF-8 charset, not default. This closes #1144.


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

Branch: refs/heads/ignite-2788
Commit: 5afd6546f6ed650ad0db8d7ce83944188902b805
Parents: 3271d75
Author: Saikat Maitra <sa...@gmail.com>
Authored: Thu Oct 6 08:42:45 2016 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Oct 6 08:42:45 2016 +0300

----------------------------------------------------------------------
 .../ignite/internal/MarshallerContextImpl.java  |  7 +-
 .../marshaller/MarshallerContextSelfTest.java   | 90 ++++++++++++++++++++
 .../ignite/testsuites/IgniteBasicTestSuite.java |  2 +
 3 files changed, 96 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/5afd6546/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
index 0420e18..5f1622d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
@@ -28,6 +28,7 @@ import java.io.Writer;
 import java.nio.channels.FileChannel;
 import java.nio.channels.FileLock;
 import java.nio.channels.OverlappingFileLockException;
+import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ThreadLocalRandom;
@@ -179,7 +180,7 @@ public class MarshallerContextImpl extends MarshallerContextAdapter {
     }
 
     /** {@inheritDoc} */
-    @Override protected String className(int id) throws IgniteCheckedException {
+    @Override public String className(int id) throws IgniteCheckedException {
         GridCacheAdapter<Integer, String> cache0 = cache;
 
         if (cache0 == null) {
@@ -208,7 +209,7 @@ public class MarshallerContextImpl extends MarshallerContextAdapter {
 
                     assert fileLock != null : fileName;
 
-                    try (BufferedReader reader = new BufferedReader(new InputStreamReader(in))) {
+                    try (BufferedReader reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8))) {
                         clsName = reader.readLine();
                     }
                 }
@@ -297,7 +298,7 @@ public class MarshallerContextImpl extends MarshallerContextAdapter {
 
                             assert fileLock != null : fileName;
 
-                            try (Writer writer = new OutputStreamWriter(out)) {
+                            try (Writer writer = new OutputStreamWriter(out, StandardCharsets.UTF_8)) {
                                 writer.write(evt.getValue());
 
                                 writer.flush();

http://git-wip-us.apache.org/repos/asf/ignite/blob/5afd6546/modules/core/src/test/java/org/apache/ignite/marshaller/MarshallerContextSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/marshaller/MarshallerContextSelfTest.java b/modules/core/src/test/java/org/apache/ignite/marshaller/MarshallerContextSelfTest.java
new file mode 100644
index 0000000..f61a2aa
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/marshaller/MarshallerContextSelfTest.java
@@ -0,0 +1,90 @@
+/*
+ * 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.marshaller;
+
+import java.io.File;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import javax.cache.event.EventType;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.internal.IgniteKernal;
+import org.apache.ignite.internal.MarshallerContextImpl;
+import org.apache.ignite.internal.processors.cache.IgniteCacheProxy;
+import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryManager;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+
+import static java.nio.file.Files.readAllBytes;
+
+/**
+ * Test marshaller context.
+ */
+public class MarshallerContextSelfTest extends GridCommonAbstractTest {
+    /**
+     * @throws Exception If failed.
+     */
+    public void testClassName() throws Exception {
+        File workDir = U.resolveWorkDirectory("marshaller", false);
+
+        final MarshallerContextImpl.ContinuousQueryListener queryListener =
+                new MarshallerContextImpl.ContinuousQueryListener(log, workDir);
+
+        final ArrayList evts = new ArrayList<>();
+
+        IgniteCacheProxy cache = new IgniteCacheProxy();
+
+        evts.add(new CacheContinuousQueryManager.CacheEntryEventImpl(cache,
+            EventType.CREATED,
+            1,
+            String.class.getName()));
+
+        queryListener.onUpdated(evts);
+
+        try (Ignite g1 = startGrid(1)) {
+            MarshallerContextImpl marshCtx = ((IgniteKernal)g1).context().marshallerContext();
+            String clsName = marshCtx.className(1);
+
+            assertEquals("java.lang.String", clsName);
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testOnUpdated() throws Exception {
+        File workDir = U.resolveWorkDirectory("marshaller", false);
+
+        final MarshallerContextImpl.ContinuousQueryListener queryListener =
+                new MarshallerContextImpl.ContinuousQueryListener(log, workDir);
+
+        final ArrayList evts = new ArrayList<>();
+
+        IgniteCacheProxy cache = new IgniteCacheProxy();
+
+        evts.add(new CacheContinuousQueryManager.CacheEntryEventImpl(cache,
+            EventType.CREATED,
+            1,
+            String.class.getName()));
+
+        queryListener.onUpdated(evts);
+
+        String fileName = "1.classname";
+
+        assertEquals("java.lang.String", new String(readAllBytes(Paths.get(workDir + "/" + fileName))));
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/5afd6546/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java
index 2717b06..3dca5e1 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java
@@ -51,6 +51,7 @@ import org.apache.ignite.internal.product.GridProductVersionSelfTest;
 import org.apache.ignite.internal.util.nio.IgniteExceptionInNioWorkerSelfTest;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.marshaller.DynamicProxySerializationMultiJvmSelfTest;
+import org.apache.ignite.marshaller.MarshallerContextSelfTest;
 import org.apache.ignite.messaging.GridMessagingNoPeerClassLoadingSelfTest;
 import org.apache.ignite.messaging.GridMessagingSelfTest;
 import org.apache.ignite.messaging.IgniteMessagingWithClientTest;
@@ -143,6 +144,7 @@ public class IgniteBasicTestSuite extends TestSuite {
         suite.addTestSuite(NotStringSystemPropertyTest.class);
 
         suite.addTestSuite(MarshallerContextLockingSelfTest.class);
+        suite.addTestSuite(MarshallerContextSelfTest.class);
 
         return suite;
     }


[05/50] [abbrv] ignite git commit: IGNITE-3191 - Fixed ordering of fields in binary objects

Posted by sh...@apache.org.
IGNITE-3191 - Fixed ordering of fields in binary objects


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

Branch: refs/heads/ignite-2788
Commit: d1e3a78ae569fa5d5692816db44f2c677e1b8283
Parents: e3dfdec
Author: Valentin Kulichenko <va...@gmail.com>
Authored: Wed Sep 28 17:53:42 2016 -0700
Committer: Valentin Kulichenko <va...@gmail.com>
Committed: Wed Sep 28 17:53:42 2016 -0700

----------------------------------------------------------------------
 .../internal/binary/BinaryClassDescriptor.java  | 16 ++--
 .../binary/builder/BinaryObjectBuilderImpl.java | 24 ++---
 .../binary/BinaryFieldOrderSelfTest.java        | 98 ++++++++++++++++++++
 .../IgniteBinaryObjectsTestSuite.java           |  2 +
 4 files changed, 121 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/d1e3a78a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
index 4c824d4..276dfe5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
@@ -25,7 +25,6 @@ import java.lang.reflect.Modifier;
 import java.lang.reflect.Proxy;
 import java.math.BigDecimal;
 import java.sql.Timestamp;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
@@ -33,6 +32,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+import java.util.TreeMap;
 import java.util.UUID;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.binary.BinaryObjectException;
@@ -269,10 +269,9 @@ public class BinaryClassDescriptor {
             case OBJECT:
                 // Must not use constructor to honor transient fields semantics.
                 ctor = null;
-                ArrayList<BinaryFieldAccessor> fields0 = new ArrayList<>();
                 stableFieldsMeta = metaDataEnabled ? new HashMap<String, Integer>() : null;
 
-                BinarySchema.Builder schemaBuilder = BinarySchema.Builder.newBuilder();
+                Map<String, BinaryFieldAccessor> fields0 = new TreeMap<>();
 
                 Set<String> duplicates = duplicateFields(cls);
 
@@ -300,9 +299,7 @@ public class BinaryClassDescriptor {
 
                             BinaryFieldAccessor fieldInfo = BinaryFieldAccessor.create(f, fieldId);
 
-                            fields0.add(fieldInfo);
-
-                            schemaBuilder.addField(fieldId);
+                            fields0.put(name, fieldInfo);
 
                             if (metaDataEnabled)
                                 stableFieldsMeta.put(name, fieldInfo.mode().typeId());
@@ -310,7 +307,12 @@ public class BinaryClassDescriptor {
                     }
                 }
 
-                fields = fields0.toArray(new BinaryFieldAccessor[fields0.size()]);
+                fields = fields0.values().toArray(new BinaryFieldAccessor[fields0.size()]);
+
+                BinarySchema.Builder schemaBuilder = BinarySchema.Builder.newBuilder();
+
+                for (BinaryFieldAccessor field : fields)
+                    schemaBuilder.addField(field.id);
 
                 stableSchema = schemaBuilder.build();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/d1e3a78a/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 2c76192..d166051 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
@@ -17,32 +17,32 @@
 
 package org.apache.ignite.internal.binary.builder;
 
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
 import org.apache.ignite.binary.BinaryInvalidTypeException;
 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.BinaryContext;
 import org.apache.ignite.internal.binary.BinaryMetadata;
 import org.apache.ignite.internal.binary.BinaryObjectImpl;
-import org.apache.ignite.internal.binary.BinaryWriterExImpl;
-import org.apache.ignite.internal.binary.GridBinaryMarshaller;
-import org.apache.ignite.internal.binary.BinaryContext;
+import org.apache.ignite.internal.binary.BinaryObjectOffheapImpl;
 import org.apache.ignite.internal.binary.BinarySchema;
 import org.apache.ignite.internal.binary.BinarySchemaRegistry;
-import org.apache.ignite.internal.binary.BinaryObjectOffheapImpl;
 import org.apache.ignite.internal.binary.BinaryUtils;
+import org.apache.ignite.internal.binary.BinaryWriterExImpl;
+import org.apache.ignite.internal.binary.GridBinaryMarshaller;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteBiTuple;
 import org.jetbrains.annotations.Nullable;
 
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Set;
-
 /**
  *
  */
@@ -522,7 +522,7 @@ public class BinaryObjectBuilderImpl implements BinaryObjectBuilder {
         Object val = val0 == null ? new BinaryValueWithType(BinaryUtils.typeByClass(Object.class), null) : val0;
 
         if (assignedVals == null)
-            assignedVals = new LinkedHashMap<>();
+            assignedVals = new TreeMap<>();
 
         Object oldVal = assignedVals.put(name, val);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/d1e3a78a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFieldOrderSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFieldOrderSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFieldOrderSelfTest.java
new file mode 100644
index 0000000..6bb1e13
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFieldOrderSelfTest.java
@@ -0,0 +1,98 @@
+package org.apache.ignite.internal.binary;
+
+import org.apache.ignite.binary.BinaryObject;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.IgniteEx;
+import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+
+/**
+ * Test that field ordering doesn't change the schema.
+ */
+public class BinaryFieldOrderSelfTest extends GridCommonAbstractTest {
+    /** {@inheritDoc} */
+    @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
+        IgniteConfiguration cfg = super.getConfiguration(gridName);
+
+        cfg.setMarshaller(new BinaryMarshaller());
+        cfg.setDiscoverySpi(new TcpDiscoverySpi().setIpFinder(new TcpDiscoveryVmIpFinder(true)));
+
+        return cfg;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void beforeTest() throws Exception {
+        startGrid();
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void afterTest() throws Exception {
+        stopAllGrids();
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testEquals() throws Exception {
+        IgniteEx ignite = grid();
+
+        BinaryObject bo0 = ignite.binary().toBinary(new MyType(222, 333, 111));
+
+        BinaryObject bo1 = ignite.binary().builder(bo0.type().typeName()).
+            setField("b", 222).
+            setField("c", 333).
+            setField("a", 111).
+            hashCode(12345).
+            build();
+
+        BinaryObject bo2 = ignite.binary().builder(bo0.type().typeName()).
+            setField("a", 111).
+            setField("b", 222).
+            setField("c", 333).
+            hashCode(12345).
+            build();
+
+        assertEquals(12345, bo0.hashCode());
+        assertEquals(12345, bo1.hashCode());
+        assertEquals(12345, bo2.hashCode());
+
+        assertTrue(bo0.equals(bo1));
+        assertTrue(bo0.equals(bo2));
+        assertTrue(bo1.equals(bo2));
+    }
+
+    /**
+     */
+    private static class MyType {
+        /** B. */
+        private int b;
+
+        /** C. */
+        private int c;
+
+        /** A. */
+        private int a;
+
+        /**
+         * @param b B.
+         * @param c C.
+         * @param a A.
+         */
+        MyType(int b, int c, int a) {
+            this.b = b;
+            this.c = c;
+            this.a = a;
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean equals(Object obj) {
+            return super.equals(obj);
+        }
+
+        /** {@inheritDoc} */
+        @Override public int hashCode() {
+            return 12345;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/d1e3a78a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsTestSuite.java
index c1d9974..50c6f0b 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsTestSuite.java
@@ -22,6 +22,7 @@ import org.apache.ignite.internal.binary.BinaryBasicIdMapperSelfTest;
 import org.apache.ignite.internal.binary.BinaryBasicNameMapperSelfTest;
 import org.apache.ignite.internal.binary.BinaryConfigurationConsistencySelfTest;
 import org.apache.ignite.internal.binary.BinaryEnumsSelfTest;
+import org.apache.ignite.internal.binary.BinaryFieldOrderSelfTest;
 import org.apache.ignite.internal.binary.BinaryFieldsHeapSelfTest;
 import org.apache.ignite.internal.binary.BinaryFieldsOffheapSelfTest;
 import org.apache.ignite.internal.binary.BinaryFooterOffsetsHeapSelfTest;
@@ -104,6 +105,7 @@ public class IgniteBinaryObjectsTestSuite extends TestSuite {
         suite.addTestSuite(GridBinaryAffinityKeySelfTest.class);
         suite.addTestSuite(GridBinaryWildcardsSelfTest.class);
         suite.addTestSuite(BinaryObjectToStringSelfTest.class);
+        suite.addTestSuite(BinaryFieldOrderSelfTest.class);
 
         // Tests for objects with non-compact footers.
         suite.addTestSuite(BinaryMarshallerNonCompactSelfTest.class);


[30/50] [abbrv] ignite git commit: IGNITE-3279 .NET: NLog logger

Posted by sh...@apache.org.
IGNITE-3279 .NET: NLog logger


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

Branch: refs/heads/ignite-2788
Commit: 1c82cd04fadc61ab5da02e1d395aedfb28a039da
Parents: ae4ae71
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Tue Aug 23 13:28:40 2016 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Mon Oct 3 14:08:01 2016 +0300

----------------------------------------------------------------------
 .../Apache.Ignite.Core.Tests.NuGet.csproj       |  18 +-
 .../Apache.Ignite.Core.Tests.NuGet/NLogTest.cs  |  82 +++++++++
 .../packages.config                             |  13 +-
 .../Apache.Ignite.Core.Tests.csproj             |  13 +-
 .../IgniteConfigurationSerializerTest.cs        |   3 +-
 .../Log/NLogLoggerTest.cs                       | 166 +++++++++++++++++++
 .../Apache.Ignite.NLog.csproj                   |  74 +++++++++
 .../Apache.Ignite.NLog.nuspec                   |  50 ++++++
 .../Apache.Ignite.NLog/Apache.Ignite.NLog.snk   | Bin 0 -> 596 bytes
 .../Apache.Ignite.NLog/IgniteNLogLogger.cs      | 125 ++++++++++++++
 .../Properties/AssemblyInfo.cs                  |  40 +++++
 .../dotnet/Apache.Ignite.NLog/packages.config   |   4 +
 modules/platforms/dotnet/Apache.Ignite.sln      |  14 ++
 13 files changed, 589 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/1c82cd04/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/Apache.Ignite.Core.Tests.NuGet.csproj
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/Apache.Ignite.Core.Tests.NuGet.csproj b/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/Apache.Ignite.Core.Tests.NuGet.csproj
index 8c4c46b..f3f917e 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/Apache.Ignite.Core.Tests.NuGet.csproj
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/Apache.Ignite.Core.Tests.NuGet.csproj
@@ -72,17 +72,26 @@
   <ItemGroup>
     <Reference Include="Apache.Ignite.Core">
       <SpecificVersion>False</SpecificVersion>
-      <HintPath>packages\Apache.Ignite.1.6.0\lib\net40\Apache.Ignite.Core.dll</HintPath>
+      <HintPath>packages\Apache.Ignite.1.8.0\lib\net40\Apache.Ignite.Core.dll</HintPath>
       <Private>True</Private>
     </Reference>
     <Reference Include="Apache.Ignite.Linq">
       <SpecificVersion>False</SpecificVersion>
-      <HintPath>packages\Apache.Ignite.Linq.1.6.0\lib\net40\Apache.Ignite.Linq.dll</HintPath>
+      <HintPath>packages\Apache.Ignite.Linq.1.8.0\lib\net40\Apache.Ignite.Linq.dll</HintPath>
       <Private>True</Private>
     </Reference>
     <Reference Include="Apache.Ignite.AspNet">
       <SpecificVersion>False</SpecificVersion>
-      <HintPath>packages\Apache.Ignite.AspNet.1.6.0\lib\net40\Apache.Ignite.AspNet.dll</HintPath>
+      <HintPath>packages\Apache.Ignite.AspNet.1.8.0\lib\net40\Apache.Ignite.AspNet.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="Apache.Ignite.NLog">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>packages\Apache.Ignite.NLog.1.8.0\lib\net40\Apache.Ignite.NLog.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
+      <HintPath>packages\NLog.4.3.7\lib\net40\NLog.dll</HintPath>
       <Private>True</Private>
     </Reference>
     <Reference Include="nunit-console-runner">
@@ -103,6 +112,7 @@
     <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="NLogTest.cs" />
     <Compile Include="AspNetTest.cs" />
     <Compile Include="ComputeTest.cs" />
     <Compile Include="SchemaTest.cs" />
@@ -132,7 +142,7 @@
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>
     <PostBuildEvent>if not exist "$(TargetDir)Libs" md "$(TargetDir)Libs"
-xcopy /s /y "$(SolutionDir)packages\Apache.Ignite.1.6.0\Libs\*.*" "$(TargetDir)Libs"</PostBuildEvent>
+xcopy /s /y "$(SolutionDir)packages\Apache.Ignite.1.8.0\Libs\*.*" "$(TargetDir)Libs"</PostBuildEvent>
   </PropertyGroup>
   <PropertyGroup>
     <PreBuildEvent>

http://git-wip-us.apache.org/repos/asf/ignite/blob/1c82cd04/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/NLogTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/NLogTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/NLogTest.cs
new file mode 100644
index 0000000..d3c58e1
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/NLogTest.cs
@@ -0,0 +1,82 @@
+\ufeff/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Tests.NuGet
+{
+    using System.Linq;
+    using Apache.Ignite.NLog;
+    using global::NLog;
+    using global::NLog.Config;
+    using global::NLog.Layouts;
+    using global::NLog.Targets;
+    using NUnit.Framework;
+
+    /// <summary>
+    /// NLog test.
+    /// </summary>
+    public class NLogTest
+    {
+        /// <summary>
+        /// The log target.
+        /// </summary>
+        private MemoryTarget _logTarget;
+
+        /// <summary>
+        /// Test set up.
+        /// </summary>
+        [SetUp]
+        public void SetUp()
+        {
+            var cfg = new LoggingConfiguration();
+
+            _logTarget = new MemoryTarget("mem")
+            {
+                Layout = new SimpleLayout("${Logger}|${Level}|${Message}|${exception}|${all-event-properties}")
+            };
+
+            cfg.AddTarget(_logTarget);
+
+            cfg.AddRule(LogLevel.Trace, LogLevel.Error, _logTarget);
+
+            LogManager.Configuration = cfg;
+        }
+
+        /// <summary>
+        /// Tests the logger with Ignite.
+        /// </summary>
+        [Test]
+        public void TestIgniteStartup()
+        {
+            var cfg = new IgniteConfiguration
+            {
+                DiscoverySpi = TestUtil.GetLocalDiscoverySpi(),
+                Logger = new IgniteNLogLogger(LogManager.GetCurrentClassLogger())
+            };
+
+            using (Ignition.Start(cfg))
+            {
+                Assert.IsTrue(_logTarget.Logs.Contains(
+                    string.Format("|Debug|Starting Ignite.NET {0}||", typeof(Ignition).Assembly.GetName().Version)));
+
+                Assert.IsTrue(_logTarget.Logs.Any(x => x.Contains(">>> Topology snapshot.")));
+            }
+
+            Assert.IsTrue(_logTarget.Logs.Contains(
+                "org.apache.ignite.internal.IgniteKernal|Debug|Grid is stopping.||"));
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/1c82cd04/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/packages.config
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/packages.config b/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/packages.config
index 88d9cc2..30e71a1 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/packages.config
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests.NuGet/packages.config
@@ -1,5 +1,4 @@
 \ufeff<?xml version="1.0" encoding="utf-8"?>
-
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
@@ -16,11 +15,13 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-
 <packages>
-  <package id="Apache.Ignite" version="1.6.0" targetFramework="net40" />
-  <package id="Apache.Ignite.Linq" version="1.6.0" targetFramework="net40" />
-  <package id="Apache.Ignite.AspNet" version="1.6.0" targetFramework="net40" />
-  <package id="Apache.Ignite.Schema" version="1.6.0" targetFramework="net40" />
+  <package id="Apache.Ignite" version="1.8.0" targetFramework="net40" />
+  <package id="Apache.Ignite.AspNet" version="1.8.0" targetFramework="net40" />
+  <package id="Apache.Ignite.Linq" version="1.8.0" targetFramework="net40" />
+  <package id="Apache.Ignite.NLog" version="1.8.0" targetFramework="net40" />
+  <package id="Apache.Ignite.Schema" version="1.8.0" targetFramework="net40" />
+  <package id="NLog" version="4.3.7" targetFramework="net40" />
+  <package id="NUnit.Runners" version="2.6.3" targetFramework="net40" />
   <package id="Remotion.Linq" version="2.0.1" targetFramework="net40" />
 </packages>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/1c82cd04/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
index 2c6150c..ef62498 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
@@ -38,8 +38,12 @@
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="Microsoft.CSharp" />
-    <Reference Include="nunit-console-runner">
-      <HintPath>..\libs\nunit-console-runner.dll</HintPath>
+    <Reference Include="NLog">
+      <HintPath>..\packages\NLog.4.3.7\lib\net40\NLog.dll</HintPath>
+    </Reference>
+    <Reference Include="nunit-console-runner, Version=2.6.3.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\packages\NUnit.Runners.2.6.3\tools\lib\nunit-console-runner.dll</HintPath>
     </Reference>
     <Reference Include="nunit.framework, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
@@ -54,6 +58,7 @@
   </ItemGroup>
   <ItemGroup>
     <Compile Include="Log\DefaultLoggerTest.cs" />
+    <Compile Include="Log\NLogLoggerTest.cs" />
     <Compile Include="TestAppConfig.cs" />
     <Compile Include="Binary\BinaryBuilderSelfTestFullFooter.cs" />
     <Compile Include="Binary\BinaryCompactFooterInteropTest.cs" />
@@ -175,6 +180,10 @@
       <Project>{5b571661-17f4-4f29-8c7d-0edb38ca9b55}</Project>
       <Name>Apache.Ignite.Linq</Name>
     </ProjectReference>
+    <ProjectReference Include="..\Apache.Ignite.NLog\Apache.Ignite.NLog.csproj">
+      <Project>{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}</Project>
+      <Name>Apache.Ignite.NLog</Name>
+    </ProjectReference>
     <ProjectReference Include="..\Apache.Ignite\Apache.Ignite.csproj">
       <Project>{27F7F3C6-BDDE-43A9-B565-856F8395A04B}</Project>
       <Name>Apache.Ignite</Name>

http://git-wip-us.apache.org/repos/asf/ignite/blob/1c82cd04/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
index beb1e8d..bb703f5 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
@@ -46,6 +46,7 @@ namespace Apache.Ignite.Core.Tests
     using Apache.Ignite.Core.Log;
     using Apache.Ignite.Core.Tests.Binary;
     using Apache.Ignite.Core.Transactions;
+    using Apache.Ignite.NLog;
     using NUnit.Framework;
 
     /// <summary>
@@ -549,7 +550,7 @@ namespace Apache.Ignite.Core.Tests
                 },
                 IsLateAffinityAssignment = false,
                 SpringConfigUrl = "test",
-                Logger = new TestLogger()
+                Logger = new IgniteNLogLogger()
             };
         }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/1c82cd04/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Log/NLogLoggerTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Log/NLogLoggerTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Log/NLogLoggerTest.cs
new file mode 100644
index 0000000..7806ecd
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Log/NLogLoggerTest.cs
@@ -0,0 +1,166 @@
+\ufeff/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Tests.Log
+{
+    using System;
+    using System.Globalization;
+    using System.Linq;
+    using Apache.Ignite.Core.Log;
+    using Apache.Ignite.NLog;
+    using global::NLog;
+    using global::NLog.Config;
+    using global::NLog.Layouts;
+    using global::NLog.Targets;
+    using NUnit.Framework;
+    using LogLevel = Apache.Ignite.Core.Log.LogLevel;
+
+    /// <summary>
+    /// Tests the NLog integration.
+    /// </summary>
+    public class NLogLoggerTest
+    {
+        /** */
+        private MemoryTarget _logTarget;
+
+        /// <summary>
+        /// Test set up.
+        /// </summary>
+        [SetUp]
+        public void SetUp()
+        {
+            var cfg = new LoggingConfiguration();
+
+            _logTarget = new MemoryTarget("mem")
+            {
+                Layout = new SimpleLayout("${Logger}|${Level}|${Message}|${exception}|${all-event-properties}")
+            };
+
+            cfg.AddTarget(_logTarget);
+
+            cfg.AddRule(global::NLog.LogLevel.Trace, global::NLog.LogLevel.Error, _logTarget);
+
+            LogManager.Configuration = cfg;
+        }
+
+        /// <summary>
+        /// Tests the log level conversion.
+        /// </summary>
+        [Test]
+        public void TestLogLevelConversion()
+        {
+            var levels = new[] { LogLevel.Trace, LogLevel.Info, LogLevel.Debug, LogLevel.Warn, LogLevel.Error };
+
+            var nLogger = new IgniteNLogLogger(LogManager.GetCurrentClassLogger());
+
+            foreach (var igniteLevel in levels)
+            {
+                var nlogLevel = IgniteNLogLogger.ConvertLogLevel(igniteLevel);
+
+                Assert.AreEqual(igniteLevel.ToString(), nlogLevel.ToString());
+
+
+                Assert.IsTrue(nLogger.IsEnabled(igniteLevel));
+            }
+        }
+
+        /// <summary>
+        /// Tests the logger in isolated environment.
+        /// </summary>
+        [Test]
+        public void TestLogging()
+        {
+            var nLogger = new IgniteNLogLogger();
+
+            // All parameters.
+            nLogger.Log(LogLevel.Trace, "msg{0}", new object[] {1}, CultureInfo.InvariantCulture, "category", 
+                "java-err", new Exception("myException"));
+
+            Assert.AreEqual("category|Trace|msg1|myException|nativeErrorInfo=java-err", GetLastLog());
+
+            // No Java error.
+            nLogger.Log(LogLevel.Info, "msg{0}", new object[] { 1 }, CultureInfo.InvariantCulture, "category",
+                null, new Exception("myException"));
+
+            Assert.AreEqual("category|Info|msg1|myException|", GetLastLog());
+
+            // No exception.
+            nLogger.Log(LogLevel.Debug, "msg{0}", new object[] { 1 }, CultureInfo.InvariantCulture, "category",
+                null, null);
+
+            Assert.AreEqual("category|Debug|msg1||", GetLastLog());
+
+            // No params.
+            nLogger.Log(LogLevel.Warn, "msg{0}", null, CultureInfo.InvariantCulture, "category", null, null);
+
+            Assert.AreEqual("category|Warn|msg{0}||", GetLastLog());
+
+            // No formatter.
+            nLogger.Log(LogLevel.Error, "msg{0}", null, null, "category", null, null);
+
+            Assert.AreEqual("category|Error|msg{0}||", GetLastLog());
+
+            // No category.
+            nLogger.Log(LogLevel.Error, "msg{0}", null, null, null, null, null);
+
+            Assert.AreEqual("|Error|msg{0}||", GetLastLog());
+
+            // No message.
+            nLogger.Log(LogLevel.Error, null, null, null, null, null, null);
+
+            Assert.AreEqual("|Error|||", GetLastLog());
+        }
+
+        /// <summary>
+        /// Tests the logger with Ignite.
+        /// </summary>
+        [Test]
+        public void TestIgniteStartup()
+        {
+            var cfg = new IgniteConfiguration(TestUtils.GetTestConfiguration())
+            {
+                Logger = new IgniteNLogLogger(LogManager.GetLogger("foo"))
+            };
+
+            using (var ignite = Ignition.Start(cfg))
+            {
+                Assert.IsTrue(_logTarget.Logs.Contains(
+                    string.Format("|Debug|Starting Ignite.NET {0}||", typeof(Ignition).Assembly.GetName().Version)));
+
+                Assert.IsTrue(_logTarget.Logs.Any(x => x.Contains(">>> Topology snapshot.")));
+
+                Assert.IsInstanceOf<IgniteNLogLogger>(ignite.Logger);
+
+                ignite.Logger.Info("Log from user code.");
+
+                Assert.IsTrue(_logTarget.Logs.Contains("|Info|Log from user code.||"));
+            }
+
+            Assert.IsTrue(_logTarget.Logs.Contains(
+                "org.apache.ignite.internal.IgniteKernal|Debug|Grid is stopping.||"));
+        }
+
+        /// <summary>
+        /// Gets the last log.
+        /// </summary>
+        private string GetLastLog()
+        {
+            return _logTarget.Logs.Last();
+        }
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/1c82cd04/modules/platforms/dotnet/Apache.Ignite.NLog/Apache.Ignite.NLog.csproj
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.NLog/Apache.Ignite.NLog.csproj b/modules/platforms/dotnet/Apache.Ignite.NLog/Apache.Ignite.NLog.csproj
new file mode 100644
index 0000000..c8d8705
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.NLog/Apache.Ignite.NLog.csproj
@@ -0,0 +1,74 @@
+\ufeff<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Apache.Ignite.NLog</RootNamespace>
+    <AssemblyName>Apache.Ignite.NLog</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>Apache.Ignite.NLog.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
+      <HintPath>..\packages\NLog.4.3.7\lib\net40\NLog.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="IgniteNLogLogger.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Apache.Ignite.Core\Apache.Ignite.Core.csproj">
+      <Project>{4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}</Project>
+      <Name>Apache.Ignite.Core</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Apache.Ignite.NLog.snk" />
+    <None Include="Apache.Ignite.NLog.nuspec" />
+    <None Include="packages.config" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/1c82cd04/modules/platforms/dotnet/Apache.Ignite.NLog/Apache.Ignite.NLog.nuspec
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.NLog/Apache.Ignite.NLog.nuspec b/modules/platforms/dotnet/Apache.Ignite.NLog/Apache.Ignite.NLog.nuspec
new file mode 100644
index 0000000..765e26f
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.NLog/Apache.Ignite.NLog.nuspec
@@ -0,0 +1,50 @@
+<?xml version="1.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.
+-->
+
+<!-- 
+
+Creating NuGet package:
+1) Build Apache.Ignite.sln (AnyCPU configuration)
+2) Create package (use csproj instead of nuspec so that template substitution works): 
+   nuget pack Apache.Ignite.NLog.csproj -Prop Configuration=Release -Prop Platform=AnyCPU
+
+-->
+
+<package >
+    <metadata>
+        <id>Apache.Ignite.NLog</id>
+        <title>Apache Ignite NLog Logger</title>
+        <!-- -->
+        <version>$version$</version>
+        <authors>Apache Ignite</authors>
+        <owners>Apache Software Foundation</owners>
+        <licenseUrl>http://www.apache.org/licenses/LICENSE-2.0</licenseUrl>
+        <projectUrl>https://ignite.apache.org/</projectUrl>
+        <iconUrl>https://ignite.apache.org/images/logo_ignite_32_32.png</iconUrl>
+        <requireLicenseAcceptance>false</requireLicenseAcceptance>
+        <description>NLog Logger for Apache Ignite</description>
+        <releaseNotes></releaseNotes>
+        <copyright>Copyright 2016</copyright>
+        <tags>Apache Ignite In-Memory Distributed Computing SQL NoSQL LINQ Grid Map Reduce Cache NLog logger</tags>
+        <dependencies>
+            <dependency id="Apache.Ignite" version="[$version$]" />
+            <dependency id="NLog" version="[4.0.0, 5.0.0)" />
+        </dependencies>    
+    </metadata>
+</package>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/1c82cd04/modules/platforms/dotnet/Apache.Ignite.NLog/Apache.Ignite.NLog.snk
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.NLog/Apache.Ignite.NLog.snk b/modules/platforms/dotnet/Apache.Ignite.NLog/Apache.Ignite.NLog.snk
new file mode 100644
index 0000000..799e742
Binary files /dev/null and b/modules/platforms/dotnet/Apache.Ignite.NLog/Apache.Ignite.NLog.snk differ

http://git-wip-us.apache.org/repos/asf/ignite/blob/1c82cd04/modules/platforms/dotnet/Apache.Ignite.NLog/IgniteNLogLogger.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.NLog/IgniteNLogLogger.cs b/modules/platforms/dotnet/Apache.Ignite.NLog/IgniteNLogLogger.cs
new file mode 100644
index 0000000..2730e37
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.NLog/IgniteNLogLogger.cs
@@ -0,0 +1,125 @@
+\ufeff/*
+ * 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.
+ */
+
+namespace Apache.Ignite.NLog
+{
+    using System;
+    using Apache.Ignite.Core.Impl.Common;
+    using global::NLog;
+    using ILogger = Apache.Ignite.Core.Log.ILogger;
+    using IgniteLogLevel = Apache.Ignite.Core.Log.LogLevel;
+    using NLogLogLevel = global::NLog.LogLevel;
+
+    /// <summary>
+    /// Ignite NLog integration.
+    /// </summary>
+    public class IgniteNLogLogger : ILogger
+    {
+        /// <summary>
+        /// The NLog logger.
+        /// </summary>
+        private readonly Logger _logger;
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="IgniteNLogLogger"/> class using the
+        /// <see cref="LogManager.GetCurrentClassLogger()"/> to retrieve the NLog logger.
+        /// </summary>
+        public IgniteNLogLogger() : this(LogManager.GetCurrentClassLogger())
+        {
+            // No-op.
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="IgniteNLogLogger"/> class.
+        /// </summary>
+        /// <param name="logger">The NLog logger instance.</param>
+        public IgniteNLogLogger(Logger logger)
+        {
+            IgniteArgumentCheck.NotNull(logger, "logger");
+
+            _logger = logger;
+        }
+
+        /// <summary>
+        /// Logs the specified message.
+        /// </summary>
+        /// <param name="level">The level.</param>
+        /// <param name="message">The message.</param>
+        /// <param name="args">The arguments to format <paramref name="message" />.
+        /// Can be null (formatting will not occur).</param>
+        /// <param name="formatProvider">The format provider. Can be null if <paramref name="args" /> is null.</param>
+        /// <param name="category">The logging category name.</param>
+        /// <param name="nativeErrorInfo">The native error information.</param>
+        /// <param name="ex">The exception. Can be null.</param>
+        /// <exception cref="System.NotImplementedException"></exception>
+        public void Log(IgniteLogLevel level, string message, object[] args, IFormatProvider formatProvider, 
+            string category, string nativeErrorInfo, Exception ex)
+        {
+            var logEvent = new LogEventInfo
+            {
+                Level = ConvertLogLevel(level),
+                Message = message,
+                FormatProvider = formatProvider,
+                Parameters = args,
+                Exception = ex,
+                LoggerName = category
+            };
+
+            if (nativeErrorInfo != null)
+                logEvent.Properties.Add("nativeErrorInfo", nativeErrorInfo);
+
+            _logger.Log(logEvent);
+        }
+
+        /// <summary>
+        /// Determines whether the specified log level is enabled.
+        /// </summary>
+        /// <param name="level">The level.</param>
+        /// <returns>
+        /// Value indicating whether the specified log level is enabled
+        /// </returns>
+        /// <exception cref="System.NotImplementedException"></exception>
+        public bool IsEnabled(IgniteLogLevel level)
+        {
+            return _logger.IsEnabled(ConvertLogLevel(level));
+        }
+
+        /// <summary>
+        /// Converts the Ignite LogLevel to the NLog log level.
+        /// </summary>
+        /// <param name="level">The Ignite log level.</param>
+        /// <returns>Corresponding NLog log level.</returns>
+        public static NLogLogLevel ConvertLogLevel(IgniteLogLevel level)
+        {
+            switch (level)
+            {
+                case IgniteLogLevel.Trace:
+                    return NLogLogLevel.Trace;
+                case IgniteLogLevel.Debug:
+                    return NLogLogLevel.Debug;
+                case IgniteLogLevel.Info:
+                    return NLogLogLevel.Info;
+                case IgniteLogLevel.Warn:
+                    return NLogLogLevel.Warn;
+                case IgniteLogLevel.Error:
+                    return NLogLogLevel.Error;
+                default:
+                    throw new ArgumentOutOfRangeException("level", level, "Invalid Ignite LogLevel.");
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/1c82cd04/modules/platforms/dotnet/Apache.Ignite.NLog/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.NLog/Properties/AssemblyInfo.cs b/modules/platforms/dotnet/Apache.Ignite.NLog/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..6603836
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.NLog/Properties/AssemblyInfo.cs
@@ -0,0 +1,40 @@
+\ufeff/*
+* 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.
+*/
+
+using System;
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+[assembly: AssemblyTitle("Apache.Ignite.NLog")]
+[assembly: AssemblyDescription("Apache Ignite.NET NLog integration.")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Apache Software Foundation")]
+[assembly: AssemblyProduct("Apache Ignite.NET")]
+[assembly: AssemblyCopyright("Copyright �  2015")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("c6b58e4a-a2e9-4554-ad02-68ce6da5cfb7")]
+
+[assembly: AssemblyVersion("1.8.0.13244")]
+[assembly: AssemblyFileVersion("1.8.0.13244")]
+[assembly: AssemblyInformationalVersion("1.8.0")]
+
+[assembly: CLSCompliant(true)]

http://git-wip-us.apache.org/repos/asf/ignite/blob/1c82cd04/modules/platforms/dotnet/Apache.Ignite.NLog/packages.config
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.NLog/packages.config b/modules/platforms/dotnet/Apache.Ignite.NLog/packages.config
new file mode 100644
index 0000000..50aeb52
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.NLog/packages.config
@@ -0,0 +1,4 @@
+\ufeff<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="NLog" version="4.3.7" targetFramework="net40" />
+</packages>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/1c82cd04/modules/platforms/dotnet/Apache.Ignite.sln
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.sln b/modules/platforms/dotnet/Apache.Ignite.sln
index 8a3bf04..2978780 100644
--- a/modules/platforms/dotnet/Apache.Ignite.sln
+++ b/modules/platforms/dotnet/Apache.Ignite.sln
@@ -38,6 +38,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.AspNet", "Apa
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.AspNet.Tests", "Apache.Ignite.AspNet.Tests\Apache.Ignite.AspNet.Tests.csproj", "{18EA4C71-A11D-4AB1-8042-418F7559D84F}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.NLog", "Apache.Ignite.NLog\Apache.Ignite.NLog.csproj", "{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -188,6 +190,18 @@ Global
 		{18EA4C71-A11D-4AB1-8042-418F7559D84F}.Release|x64.Build.0 = Release|Any CPU
 		{18EA4C71-A11D-4AB1-8042-418F7559D84F}.Release|x86.ActiveCfg = Release|Any CPU
 		{18EA4C71-A11D-4AB1-8042-418F7559D84F}.Release|x86.Build.0 = Release|Any CPU
+		{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Debug|x64.Build.0 = Debug|Any CPU
+		{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Debug|x86.Build.0 = Debug|Any CPU
+		{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Release|Any CPU.Build.0 = Release|Any CPU
+		{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Release|x64.ActiveCfg = Release|Any CPU
+		{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Release|x64.Build.0 = Release|Any CPU
+		{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Release|x86.ActiveCfg = Release|Any CPU
+		{C6B58E4A-A2E9-4554-AD02-68CE6DA5CFB7}.Release|x86.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE


[39/50] [abbrv] ignite git commit: IGNITE-3770: GridLogThrottle.warn ignores the exception. Fixes #1095.

Posted by sh...@apache.org.
IGNITE-3770: GridLogThrottle.warn ignores the exception. Fixes #1095.


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

Branch: refs/heads/ignite-2788
Commit: 3271d75fca41db9ae186047c08f422f6b6f66498
Parents: a370bad
Author: Roman Shtykh <ap...@gmail.com>
Authored: Tue Oct 4 15:16:40 2016 -0700
Committer: Valentin Kulichenko <va...@gmail.com>
Committed: Tue Oct 4 15:16:40 2016 -0700

----------------------------------------------------------------------
 .../affinity/fair/FairAffinityFunction.java     |  2 +-
 .../rendezvous/RendezvousAffinityFunction.java  |  2 +-
 .../apache/ignite/internal/IgniteKernal.java    |  2 +-
 .../GridDeploymentPerVersionStore.java          |  2 +-
 .../discovery/GridDiscoveryManager.java         |  2 +-
 .../eventstorage/GridEventStorageManager.java   |  2 +-
 .../cache/GridCacheDeploymentManager.java       |  4 +-
 .../processors/cache/GridCacheEventManager.java | 10 ++---
 .../store/GridCacheStoreManagerAdapter.java     |  2 +-
 .../cache/store/GridCacheWriteBehindStore.java  |  2 +-
 .../clock/GridClockSyncProcessor.java           |  2 +-
 .../igfs/IgfsFragmentizerManager.java           | 29 +++++++--------
 .../internal/processors/igfs/IgfsImpl.java      | 35 +++++++++---------
 .../OsDiscoveryNodeValidationProcessor.java     |  2 +-
 .../processors/task/GridTaskWorker.java         |  2 +-
 .../ignite/internal/util/GridLogThrottle.java   | 35 +++++++++---------
 .../ignite/internal/util/IgniteUtils.java       |  6 +--
 .../ipc/shmem/IpcSharedMemoryNativeLoader.java  |  2 +-
 .../shmem/IpcSharedMemoryServerEndpoint.java    |  4 +-
 .../nio/GridConnectionBytesVerifyFilter.java    |  2 +-
 .../internal/util/nio/GridNioCodecFilter.java   |  2 +-
 .../internal/util/nio/GridNioFilterChain.java   |  2 +-
 .../ignite/internal/util/nio/GridNioServer.java |  2 +-
 .../util/nio/GridSelectorNioSessionImpl.java    |  2 +-
 .../communication/tcp/TcpCommunicationSpi.java  | 12 +++---
 .../ignite/spi/discovery/tcp/ClientImpl.java    |  7 ++--
 .../ignite/spi/discovery/tcp/ServerImpl.java    | 39 +++++++++-----------
 .../spi/discovery/tcp/TcpDiscoveryImpl.java     |  2 +-
 .../spi/discovery/tcp/TcpDiscoverySpi.java      |  8 ++--
 .../TcpDiscoveryMulticastIpFinder.java          |  4 +-
 .../ignite/testframework/GridTestUtils.java     |  2 +-
 .../junits/common/GridCommonAbstractTest.java   |  6 +--
 .../apache/ignite/util/GridLogThrottleTest.java | 27 +++++---------
 .../HadoopExternalCommunication.java            |  6 +--
 .../processors/query/h2/IgniteH2Indexing.java   |  2 +-
 .../cache/IgniteCacheOffheapEvictQueryTest.java |  2 +-
 .../scanners/http/UriDeploymentHttpScanner.java |  8 ++--
 37 files changed, 133 insertions(+), 149 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/cache/affinity/fair/FairAffinityFunction.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/cache/affinity/fair/FairAffinityFunction.java b/modules/core/src/main/java/org/apache/ignite/cache/affinity/fair/FairAffinityFunction.java
index c624df4..cf1cb02 100644
--- a/modules/core/src/main/java/org/apache/ignite/cache/affinity/fair/FairAffinityFunction.java
+++ b/modules/core/src/main/java/org/apache/ignite/cache/affinity/fair/FairAffinityFunction.java
@@ -331,7 +331,7 @@ public class FairAffinityFunction implements AffinityFunction {
                 balance(tier, pendingParts, fullMap, topSnapshot, true);
 
                 if (!exclNeighborsWarn) {
-                    LT.warn(log, null, "Affinity function excludeNeighbors property is ignored " +
+                    LT.warn(log, "Affinity function excludeNeighbors property is ignored " +
                         "because topology has no enough nodes to assign backups.");
 
                     exclNeighborsWarn = true;

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.java b/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.java
index e876fb5..8f2d2f8 100644
--- a/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.java
+++ b/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.java
@@ -440,7 +440,7 @@ public class RendezvousAffinityFunction implements AffinityFunction, Externaliza
             }
 
             if (!exclNeighborsWarn) {
-                LT.warn(log, null, "Affinity function excludeNeighbors property is ignored " +
+                LT.warn(log, "Affinity function excludeNeighbors property is ignored " +
                     "because topology has no enough nodes to assign backups.");
 
                 exclNeighborsWarn = true;

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index e0a36a7..c521718 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@ -991,7 +991,7 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
                     // at least one waiting request, then it is possible starvation.
                     if (exec.getPoolSize() == exec.getActiveCount() && completedCnt == lastCompletedCnt &&
                         !exec.getQueue().isEmpty())
-                        LT.warn(log, null, "Possible thread pool starvation detected (no task completed in last " +
+                        LT.warn(log, "Possible thread pool starvation detected (no task completed in last " +
                             interval + "ms, is executorService pool size large enough?)");
 
                     lastCompletedCnt = completedCnt;

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentPerVersionStore.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentPerVersionStore.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentPerVersionStore.java
index 5e30bf6..0bf8328 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentPerVersionStore.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentPerVersionStore.java
@@ -317,7 +317,7 @@ public class GridDeploymentPerVersionStore extends GridDeploymentStoreAdapter {
                         if (ctx.localNodeId().equals(e.getKey())) {
                             // Warn only if mode is not CONTINUOUS.
                             if (meta.deploymentMode() != CONTINUOUS)
-                                LT.warn(log, null, "Local node is in participants (most probably, " +
+                                LT.warn(log, "Local node is in participants (most probably, " +
                                     "IgniteConfiguration.getPeerClassLoadingLocalClassPathExclude() " +
                                     "is not used properly " +
                                     "[locNodeId=" + ctx.localNodeId() + ", meta=" + meta + ']');

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
index d24f900..931d99a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
@@ -995,7 +995,7 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
                 break;
 
             if (ctx.config().isWaitForSegmentOnStart()) {
-                LT.warn(log, null, "Failed to check network segment (retrying every 2000 ms).");
+                LT.warn(log, "Failed to check network segment (retrying every 2000 ms).");
 
                 // Wait and check again.
                 U.sleep(2000);

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/internal/managers/eventstorage/GridEventStorageManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/eventstorage/GridEventStorageManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/eventstorage/GridEventStorageManager.java
index 0095707..a4cee9a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/eventstorage/GridEventStorageManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/eventstorage/GridEventStorageManager.java
@@ -278,7 +278,7 @@ public class GridEventStorageManager extends GridManagerAdapter<EventStorageSpi>
             int type = evt.type();
 
             if (!isRecordable(type)) {
-                LT.warn(log, null, "Trying to record event without checking if it is recordable: " +
+                LT.warn(log, "Trying to record event without checking if it is recordable: " +
                     U.gridEventName(type));
             }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentManager.java
index 8e66233..ad4892b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentManager.java
@@ -399,7 +399,7 @@ public class GridCacheDeploymentManager<K, V> extends GridCacheSharedManagerAdap
                     ", daemon=" + daemon + ']');
 
             if (!daemon) {
-                LT.warn(log, null, "Ignoring deployment in PRIVATE or ISOLATED mode " +
+                LT.warn(log, "Ignoring deployment in PRIVATE or ISOLATED mode " +
                     "[sndId=" + sndId + ", ldrId=" + ldrId + ", userVer=" + userVer + ", mode=" + mode +
                     ", participants=" + participants + ", daemon=" + daemon + ']');
             }
@@ -408,7 +408,7 @@ public class GridCacheDeploymentManager<K, V> extends GridCacheSharedManagerAdap
         }
 
         if (mode != cctx.gridConfig().getDeploymentMode()) {
-            LT.warn(log, null, "Local and remote deployment mode mismatch (please fix configuration and restart) " +
+            LT.warn(log, "Local and remote deployment mode mismatch (please fix configuration and restart) " +
                 "[locDepMode=" + cctx.gridConfig().getDeploymentMode() + ", rmtDepMode=" + mode + ", rmtNodeId=" +
                 sndId + ']');
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEventManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEventManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEventManager.java
index ec8b8cc..1c18738 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEventManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEventManager.java
@@ -251,7 +251,7 @@ public class GridCacheEventManager extends GridCacheManagerAdapter {
         assert key != null || type == EVT_CACHE_STARTED || type == EVT_CACHE_STOPPED;
 
         if (!cctx.events().isRecordable(type))
-            LT.warn(log, null, "Added event without checking if event is recordable: " + U.gridEventName(type));
+            LT.warn(log, "Added event without checking if event is recordable: " + U.gridEventName(type));
 
         // Events are not fired for internal entry.
         if (key == null || !key.internal()) {
@@ -261,7 +261,7 @@ public class GridCacheEventManager extends GridCacheManagerAdapter {
                 evtNode = findNodeInHistory(evtNodeId);
 
             if (evtNode == null)
-                LT.warn(log, null, "Failed to find event node in grid topology history " +
+                LT.warn(log, "Failed to find event node in grid topology history " +
                     "(try to increase topology history size configuration property of configured " +
                     "discovery SPI): " + evtNodeId);
 
@@ -284,7 +284,7 @@ public class GridCacheEventManager extends GridCacheManagerAdapter {
                     log.debug("Failed to unmarshall cache object value for the event notification: " + e);
 
                 if (!forceKeepBinary)
-                    LT.warn(log, null, "Failed to unmarshall cache object value for the event notification " +
+                    LT.warn(log, "Failed to unmarshall cache object value for the event notification " +
                         "(all further notifications will keep binary object format).");
 
                 forceKeepBinary = true;
@@ -351,7 +351,7 @@ public class GridCacheEventManager extends GridCacheManagerAdapter {
         assert discoTs > 0;
 
         if (!cctx.events().isRecordable(type))
-            LT.warn(log, null, "Added event without checking if event is recordable: " + U.gridEventName(type));
+            LT.warn(log, "Added event without checking if event is recordable: " + U.gridEventName(type));
 
         cctx.gridEvents().record(new CacheRebalancingEvent(cctx.name(), cctx.localNode(),
             "Cache rebalancing event.", type, part, discoNode, discoType, discoTs));
@@ -364,7 +364,7 @@ public class GridCacheEventManager extends GridCacheManagerAdapter {
      */
     public void addUnloadEvent(int part) {
         if (!cctx.events().isRecordable(EVT_CACHE_REBALANCE_PART_UNLOADED))
-            LT.warn(log, null, "Added event without checking if event is recordable: " +
+            LT.warn(log, "Added event without checking if event is recordable: " +
                 U.gridEventName(EVT_CACHE_REBALANCE_PART_UNLOADED));
 
         cctx.gridEvents().record(new CacheRebalancingEvent(cctx.name(), cctx.localNode(),

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheStoreManagerAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheStoreManagerAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheStoreManagerAdapter.java
index cd0c50f..024375e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheStoreManagerAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheStoreManagerAdapter.java
@@ -547,7 +547,7 @@ public abstract class GridCacheStoreManagerAdapter extends GridCacheManagerAdapt
             return true;
         }
 
-        LT.warn(log, null, "Calling Cache.loadCache() method will have no effect, " +
+        LT.warn(log, "Calling Cache.loadCache() method will have no effect, " +
             "CacheConfiguration.getStore() is not defined for cache: " + cctx.namexx());
 
         return false;

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStore.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStore.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStore.java
index 468945b..858d9a7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStore.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStore.java
@@ -705,7 +705,7 @@ public class GridCacheWriteBehindStore<K, V> implements CacheStore<K, V>, Lifecy
             }
         }
         catch (Exception e) {
-            LT.warn(log, e, "Unable to update underlying store: " + store);
+            LT.error(log, e, "Unable to update underlying store: " + store);
 
             if (writeCache.sizex() > cacheCriticalSize || stopping.get()) {
                 for (Map.Entry<K, Entry<? extends K, ? extends  V>> entry : vals.entrySet()) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/internal/processors/clock/GridClockSyncProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/clock/GridClockSyncProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/clock/GridClockSyncProcessor.java
index b5c89cf..0764316 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/clock/GridClockSyncProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/clock/GridClockSyncProcessor.java
@@ -458,7 +458,7 @@ public class GridClockSyncProcessor extends GridProcessorAdapter {
                     srv.sendPacket(req, addr, port);
                 }
                 catch (IgniteCheckedException e) {
-                    LT.warn(log, e, "Failed to send time request to remote node [rmtNodeId=" + rmtNodeId +
+                    LT.error(log, e, "Failed to send time request to remote node [rmtNodeId=" + rmtNodeId +
                         ", addr=" + addr + ", port=" + port + ']');
                 }
             }

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsFragmentizerManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsFragmentizerManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsFragmentizerManager.java
index d64c64a..2e82f33 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsFragmentizerManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsFragmentizerManager.java
@@ -17,6 +17,19 @@
 
 package org.apache.ignite.internal.processors.igfs;
 
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.LinkedBlockingDeque;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.cluster.ClusterNode;
@@ -41,20 +54,6 @@ import org.apache.ignite.lang.IgniteUuid;
 import org.apache.ignite.thread.IgniteThread;
 import org.jetbrains.annotations.Nullable;
 
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.LinkedBlockingDeque;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 import static org.apache.ignite.events.EventType.EVT_NODE_FAILED;
 import static org.apache.ignite.events.EventType.EVT_NODE_LEFT;
@@ -383,7 +382,7 @@ public class IgfsFragmentizerManager extends IgfsManager {
                 }
                 catch (IgniteCheckedException | IgniteException e) {
                     if (!X.hasCause(e, InterruptedException.class) && !X.hasCause(e, IgniteInterruptedCheckedException.class))
-                        LT.warn(log, e, "Failed to get fragmentizer file info (will retry).");
+                        LT.error(log, e, "Failed to get fragmentizer file info (will retry).");
                     else {
                         if (log.isDebugEnabled())
                             log.debug("Got interrupted exception in fragmentizer coordinator (grid is stopping).");

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsImpl.java
index 1dd12d9..9dc5e78 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsImpl.java
@@ -17,6 +17,21 @@
 
 package org.apache.ignite.internal.processors.igfs;
 
+import java.io.OutputStream;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.SynchronousQueue;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
@@ -81,22 +96,6 @@ import org.apache.ignite.thread.IgniteThreadPoolExecutor;
 import org.jetbrains.annotations.Nullable;
 import org.jsr166.ConcurrentHashMap8;
 
-import java.io.OutputStream;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.Callable;
-import java.util.concurrent.SynchronousQueue;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicLong;
-
 import static org.apache.ignite.events.EventType.EVT_IGFS_DIR_DELETED;
 import static org.apache.ignite.events.EventType.EVT_IGFS_FILE_DELETED;
 import static org.apache.ignite.events.EventType.EVT_IGFS_FILE_OPENED_READ;
@@ -1313,7 +1312,7 @@ public final class IgfsImpl implements IgfsEx {
                         secondarySpaceSize = secondaryFs.usedSpaceSize();
                     }
                     catch (IgniteException e) {
-                        LT.warn(log, e, "Failed to get secondary file system consumed space size.");
+                        LT.error(log, e, "Failed to get secondary file system consumed space size.");
 
                         secondarySpaceSize = -1;
                     }
@@ -1846,4 +1845,4 @@ public final class IgfsImpl implements IgfsEx {
             }
         }
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/internal/processors/nodevalidation/OsDiscoveryNodeValidationProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/nodevalidation/OsDiscoveryNodeValidationProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/nodevalidation/OsDiscoveryNodeValidationProcessor.java
index a7e06e9..37e59bc 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/nodevalidation/OsDiscoveryNodeValidationProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/nodevalidation/OsDiscoveryNodeValidationProcessor.java
@@ -58,7 +58,7 @@ public class OsDiscoveryNodeValidationProcessor extends GridProcessorAdapter imp
                     ", rmtNodeAddrs=" + U.addressesAsString(node) +
                     ", locNodeId=" + locNode.id() + ", rmtNodeId=" + node.id() + ']';
 
-                LT.warn(log, null, errMsg);
+                LT.warn(log, errMsg);
 
                 // Always output in debug.
                 if (log.isDebugEnabled())

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java
index 452e48c..84edb14 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java
@@ -626,7 +626,7 @@ class GridTaskWorker<T, R> extends GridWorker implements GridTimeoutObject {
                 res.setOccupied(true);
 
                 if (resCache && jobRes.size() > ctx.discovery().size() && jobRes.size() % SPLIT_WARN_THRESHOLD == 0)
-                    LT.warn(log, null, "Number of jobs in task is too large for task: " + ses.getTaskName() +
+                    LT.warn(log, "Number of jobs in task is too large for task: " + ses.getTaskName() +
                         ". Consider reducing number of jobs or disabling job result cache with " +
                         "@ComputeTaskNoResultCache annotation.");
             }

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/internal/util/GridLogThrottle.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridLogThrottle.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridLogThrottle.java
index 745619a..c4a107a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridLogThrottle.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridLogThrottle.java
@@ -79,41 +79,38 @@ public class GridLogThrottle {
      * Logs warning if needed.
      *
      * @param log Logger.
-     * @param e Error (optional).
      * @param msg Message.
      */
-    public static void warn(@Nullable IgniteLogger log, @Nullable Throwable e, String msg) {
+    public static void warn(@Nullable IgniteLogger log, String msg) {
         assert !F.isEmpty(msg);
 
-        log(log, e, msg, null, LogLevel.WARN, false);
+        log(log, null, msg, null, LogLevel.WARN, false);
     }
 
     /**
      * Logs warning if needed.
      *
      * @param log Logger.
-     * @param e Error (optional).
      * @param msg Message.
-     * @param quite Print warning anyway.
+     * @param quiet Print warning anyway.
      */
-    public static void warn(@Nullable IgniteLogger log, @Nullable Throwable e, String msg, boolean quite) {
+    public static void warn(@Nullable IgniteLogger log, String msg, boolean quiet) {
         assert !F.isEmpty(msg);
 
-        log(log, e, msg, null, LogLevel.WARN, quite);
+        log(log, null, msg, null, LogLevel.WARN, quiet);
     }
 
     /**
      * Logs warning if needed.
      *
      * @param log Logger.
-     * @param e Error (optional).
      * @param longMsg Long message (or just message).
-     * @param shortMsg Short message for quite logging.
+     * @param shortMsg Short message for quiet logging.
      */
-    public static void warn(@Nullable IgniteLogger log, @Nullable Throwable e, String longMsg, @Nullable String shortMsg) {
+    public static void warn(@Nullable IgniteLogger log, String longMsg, @Nullable String shortMsg) {
         assert !F.isEmpty(longMsg);
 
-        log(log, e, longMsg, shortMsg, LogLevel.WARN, false);
+        log(log, null, longMsg, shortMsg, LogLevel.WARN, false);
     }
 
     /**
@@ -121,12 +118,12 @@ public class GridLogThrottle {
      *
      * @param log Logger.
      * @param msg Message.
-     * @param quite Print info anyway.
+     * @param quiet Print info anyway.
      */
-    public static void info(@Nullable IgniteLogger log, String msg, boolean quite) {
+    public static void info(@Nullable IgniteLogger log, String msg, boolean quiet) {
         assert !F.isEmpty(msg);
 
-        log(log, null, msg, null, LogLevel.INFO, quite);
+        log(log, null, msg, null, LogLevel.INFO, quiet);
     }
 
     /**
@@ -136,6 +133,8 @@ public class GridLogThrottle {
      * @param msg Message.
      */
     public static void info(@Nullable IgniteLogger log, String msg) {
+        assert !F.isEmpty(msg);
+
         info(log, msg, false);
     }
 
@@ -152,12 +151,12 @@ public class GridLogThrottle {
      * @param log Logger.
      * @param e Error (optional).
      * @param longMsg Long message (or just message).
-     * @param shortMsg Short message for quite logging.
+     * @param shortMsg Short message for quiet logging.
      * @param level Level where messages should appear.
      */
     @SuppressWarnings({"RedundantTypeArguments"})
-    private static void log(@Nullable IgniteLogger log, @Nullable Throwable e, String longMsg, @Nullable String shortMsg,
-        LogLevel level, boolean quiet) {
+    private static void log(@Nullable IgniteLogger log, @Nullable Throwable e, String longMsg,
+        @Nullable String shortMsg, LogLevel level, boolean quiet) {
         assert !F.isEmpty(longMsg);
 
         IgniteBiTuple<Class<? extends Throwable>, String> tup =
@@ -252,4 +251,4 @@ public class GridLogThrottle {
          */
         public abstract void doLog(IgniteLogger log, String longMsg, String shortMsg, Throwable e, boolean quiet);
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/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 569a25f..1c6da49 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
@@ -4075,7 +4075,7 @@ public abstract class IgniteUtils {
     }
 
     /**
-     * Logs warning message in both verbose and quite modes.
+     * Logs warning message in both verbose and quiet modes.
      *
      * @param log Logger to use.
      * @param msg Message to log.
@@ -4085,7 +4085,7 @@ public abstract class IgniteUtils {
     }
 
     /**
-     * Logs warning message in both verbose and quite modes.
+     * Logs warning message in both verbose and quiet modes.
      *
      * @param log Logger to use.
      * @param shortMsg Short message.
@@ -4255,7 +4255,7 @@ public abstract class IgniteUtils {
     }
 
     /**
-     * Prints out the message in quite and info modes.
+     * Prints out the message in quiet and info modes.
      *
      * @param log Logger.
      * @param msg Message to print.

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/internal/util/ipc/shmem/IpcSharedMemoryNativeLoader.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/ipc/shmem/IpcSharedMemoryNativeLoader.java b/modules/core/src/main/java/org/apache/ignite/internal/util/ipc/shmem/IpcSharedMemoryNativeLoader.java
index 2771d28..02c4de5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/ipc/shmem/IpcSharedMemoryNativeLoader.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/ipc/shmem/IpcSharedMemoryNativeLoader.java
@@ -150,7 +150,7 @@ public class IpcSharedMemoryNativeLoader {
 
             try {
                 if (log != null)
-                    LT.warn(log, null, "Failed to load 'igniteshmem' library from classpath. Will try to load it from IGNITE_HOME.");
+                    LT.warn(log, "Failed to load 'igniteshmem' library from classpath. Will try to load it from IGNITE_HOME.");
 
                 String igniteHome = X.resolveIgniteHome();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/internal/util/ipc/shmem/IpcSharedMemoryServerEndpoint.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/ipc/shmem/IpcSharedMemoryServerEndpoint.java b/modules/core/src/main/java/org/apache/ignite/internal/util/ipc/shmem/IpcSharedMemoryServerEndpoint.java
index 6fd6482..3cc673e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/ipc/shmem/IpcSharedMemoryServerEndpoint.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/ipc/shmem/IpcSharedMemoryServerEndpoint.java
@@ -297,13 +297,13 @@ public class IpcSharedMemoryServerEndpoint implements IpcServerEndpoint {
                     String msg = "Failed to process incoming connection (most probably, shared memory " +
                         "rest endpoint has been configured by mistake).";
 
-                    LT.warn(log, null, msg);
+                    LT.warn(log, msg);
 
                     sendErrorResponse(out, e);
                 }
                 catch (IpcOutOfSystemResourcesException e) {
                     if (!omitOutOfResourcesWarn)
-                        LT.warn(log, null, OUT_OF_RESOURCES_MSG);
+                        LT.warn(log, OUT_OF_RESOURCES_MSG);
 
                     sendErrorResponse(out, e);
                 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridConnectionBytesVerifyFilter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridConnectionBytesVerifyFilter.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridConnectionBytesVerifyFilter.java
index 13d7ca7..213fd8d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridConnectionBytesVerifyFilter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridConnectionBytesVerifyFilter.java
@@ -115,7 +115,7 @@ public class GridConnectionBytesVerifyFilter extends GridNioFilterAdapter {
             else {
                 ses.close();
 
-                LT.warn(log, null, "Unknown connection detected (is some other software connecting to this " +
+                LT.warn(log, "Unknown connection detected (is some other software connecting to this " +
                     "Ignite port?) [rmtAddr=" + ses.remoteAddress() + ", locAddr=" + ses.localAddress() + ']');
             }
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioCodecFilter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioCodecFilter.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioCodecFilter.java
index a2f543d..7083ccf 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioCodecFilter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioCodecFilter.java
@@ -110,7 +110,7 @@ public class GridNioCodecFilter extends GridNioFilterAdapter {
                         if (directMode)
                             return;
 
-                        LT.warn(log, null, "Parser returned null but there are still unread data in input buffer (bug in " +
+                        LT.warn(log, "Parser returned null but there are still unread data in input buffer (bug in " +
                             "parser code?) [parser=" + parser + ", ses=" + ses + ']');
 
                         input.position(input.limit());

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioFilterChain.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioFilterChain.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioFilterChain.java
index 8a43e29..a3a74e3 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioFilterChain.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioFilterChain.java
@@ -158,7 +158,7 @@ public class GridNioFilterChain<T> extends GridNioFilterAdapter {
             head.onExceptionCaught(ses, e);
         }
         catch (Exception ex) {
-            LT.warn(log, ex, "Failed to forward GridNioException to filter chain [ses=" + ses + ", e=" + e + ']');
+            LT.error(log, ex, "Failed to forward GridNioException to filter chain [ses=" + ses + ", e=" + e + ']');
         }
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
index 24b8fad..c8e2e0b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
@@ -768,7 +768,7 @@ public class GridNioServer<T> {
                 filterChain.onMessageReceived(ses, readBuf);
 
                 if (readBuf.remaining() > 0) {
-                    LT.warn(log, null, "Read buffer contains data after filter chain processing (will discard " +
+                    LT.warn(log, "Read buffer contains data after filter chain processing (will discard " +
                         "remaining bytes) [ses=" + ses + ", remainingCnt=" + readBuf.remaining() + ']');
 
                     readBuf.clear();

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java
index 0ba6af2..63c9845 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java
@@ -227,7 +227,7 @@ class GridSelectorNioSessionImpl extends GridNioSessionImpl {
 
             if (recovery != null) {
                 if (!recovery.add(last)) {
-                    LT.warn(log, null, "Unacknowledged messages queue size overflow, will attempt to reconnect " +
+                    LT.warn(log, "Unacknowledged messages queue size overflow, will attempt to reconnect " +
                         "[remoteAddr=" + remoteAddress() +
                         ", queueLimit=" + recovery.queueLimit() + ']');
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
index 74ecc45..ac347bc 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
@@ -329,7 +329,7 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
     private final GridNioServerListener<Message> srvLsnr =
         new GridNioServerListenerAdapter<Message>() {
             @Override public void onSessionWriteTimeout(GridNioSession ses) {
-                LT.warn(log, null, "Communication SPI Session write timed out (consider increasing " +
+                LT.warn(log, "Communication SPI Session write timed out (consider increasing " +
                     "'socketWriteTimeout' " + "configuration property) [remoteAddr=" + ses.remoteAddress() +
                     ", writeTimeout=" + sockWriteTimeout + ']');
 
@@ -2142,9 +2142,9 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
             catch (IgniteCheckedException e) {
                 if (e.hasCause(IpcOutOfSystemResourcesException.class))
                     // Has cause or is itself the IpcOutOfSystemResourcesException.
-                    LT.warn(log, null, OUT_OF_RESOURCES_TCP_MSG);
+                    LT.warn(log, OUT_OF_RESOURCES_TCP_MSG);
                 else if (getSpiContext().node(node.id()) != null)
-                    LT.warn(log, null, e.getMessage());
+                    LT.warn(log, e.getMessage());
                 else if (log.isDebugEnabled())
                     log.debug("Failed to establish shared memory connection with local node (node has left): " +
                         node.id());
@@ -2505,11 +2505,11 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
                     boolean failureDetThrReached = timeoutHelper.checkFailureTimeoutReached(e);
 
                     if (failureDetThrReached)
-                        LT.warn(log, null, "Connect timed out (consider increasing 'failureDetectionTimeout' " +
+                        LT.warn(log, "Connect timed out (consider increasing 'failureDetectionTimeout' " +
                             "configuration property) [addr=" + addr + ", failureDetectionTimeout=" +
                             failureDetectionTimeout() + ']');
                     else if (X.hasCause(e, SocketTimeoutException.class))
-                        LT.warn(log, null, "Connect timed out (consider increasing 'connTimeout' " +
+                        LT.warn(log, "Connect timed out (consider increasing 'connTimeout' " +
                             "configuration property) [addr=" + addr + ", connTimeout=" + connTimeout + ']');
 
                     if (errs == null)
@@ -2540,7 +2540,7 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
             assert errs != null;
 
             if (X.hasCause(errs, ConnectException.class))
-                LT.warn(log, null, "Failed to connect to a remote node " +
+                LT.warn(log, "Failed to connect to a remote node " +
                     "(make sure that destination node is alive and " +
                     "operating system firewall is disabled on local and remote hosts) " +
                     "[addrs=" + addrs + ']');

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java
index 79cfe49..0024f7b 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java
@@ -64,7 +64,6 @@ import org.apache.ignite.internal.util.typedef.internal.LT;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteInClosure;
 import org.apache.ignite.lang.IgniteUuid;
-import org.apache.ignite.marshaller.MarshallerUtils;
 import org.apache.ignite.spi.IgniteSpiContext;
 import org.apache.ignite.spi.IgniteSpiException;
 import org.apache.ignite.spi.IgniteSpiOperationTimeoutHelper;
@@ -483,7 +482,7 @@ class ClientImpl extends TcpDiscoveryImpl {
                     if (timeout > 0 && (U.currentTimeMillis() - startTime) > timeout)
                         return null;
 
-                    LT.warn(log, null, "IP finder returned empty addresses list. " +
+                    LT.warn(log, "IP finder returned empty addresses list. " +
                             "Please check IP finder configuration" +
                             (spi.ipFinder instanceof TcpDiscoveryMulticastIpFinder ?
                                 " and make sure multicast works on your network. " : ". ") +
@@ -553,7 +552,7 @@ class ClientImpl extends TcpDiscoveryImpl {
                 if (timeout > 0 && (U.currentTimeMillis() - startTime) > timeout)
                     return null;
 
-                LT.warn(log, null, "Failed to connect to any address from IP finder (will retry to join topology " +
+                LT.warn(log, "Failed to connect to any address from IP finder (will retry to join topology " +
                     "every 2 secs): " + toOrderedList(addrs0), true);
 
                 Thread.sleep(2000);
@@ -917,7 +916,7 @@ class ClientImpl extends TcpDiscoveryImpl {
                             ClassNotFoundException clsNotFoundEx = X.cause(e, ClassNotFoundException.class);
 
                             if (clsNotFoundEx != null)
-                                LT.warn(log, null, "Failed to read message due to ClassNotFoundException " +
+                                LT.warn(log, "Failed to read message due to ClassNotFoundException " +
                                     "(make sure same versions of all classes are available on all nodes) " +
                                     "[rmtNodeId=" + rmtNodeId + ", err=" + clsNotFoundEx.getMessage() + ']');
                             else

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
index 135a737..95398e0 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
@@ -516,7 +516,7 @@ class ServerImpl extends TcpDiscoveryImpl {
         boolean res = pingNode(node);
 
         if (!res && !node.isClient() && nodeAlive(nodeId)) {
-            LT.warn(log, null, "Failed to ping node (status check will be initiated): " + nodeId);
+            LT.warn(log, "Failed to ping node (status check will be initiated): " + nodeId);
 
             msgWorker.addMessage(new TcpDiscoveryStatusCheckMessage(locNode, node.id()));
         }
@@ -906,7 +906,7 @@ class ServerImpl extends TcpDiscoveryImpl {
                         U.addressesAsString(msg.addresses(), msg.hostNames()) + ']');
                 }
                 else
-                    LT.warn(log, null, "Node has not been connected to topology and will repeat join process. " +
+                    LT.warn(log, "Node has not been connected to topology and will repeat join process. " +
                         "Check remote nodes logs for possible error messages. " +
                         "Note that large topology may require significant time to start. " +
                         "Increase 'TcpDiscoverySpi.networkTimeout' configuration property " +
@@ -1026,7 +1026,7 @@ class ServerImpl extends TcpDiscoveryImpl {
                 }
 
                 if (e != null && X.hasCause(e, ConnectException.class)) {
-                    LT.warn(log, null, "Failed to connect to any address from IP finder " +
+                    LT.warn(log, "Failed to connect to any address from IP finder " +
                         "(make sure IP finder addresses are correct and firewalls are disabled on all host machines): " +
                         toOrderedList(addrs), true);
                 }
@@ -2905,7 +2905,7 @@ class ServerImpl extends TcpDiscoveryImpl {
                     }
                 }
 
-                LT.warn(log, null, "Local node has detected failed nodes and started cluster-wide procedure. " +
+                LT.warn(log, "Local node has detected failed nodes and started cluster-wide procedure. " +
                         "To speed up failure detection please see 'Failure Detection' section under javadoc" +
                         " for 'TcpDiscoverySpi'");
             }
@@ -2990,7 +2990,7 @@ class ServerImpl extends TcpDiscoveryImpl {
                         "[locNodeAddrs=" + U.addressesAsString(locNode) +
                         ", rmtNodeAddrs=" + U.addressesAsString(node) + ']';
 
-                    LT.warn(log, null, errMsg);
+                    LT.warn(log, errMsg);
 
                     // Always output in debug.
                     if (log.isDebugEnabled())
@@ -3043,7 +3043,7 @@ class ServerImpl extends TcpDiscoveryImpl {
                         }
 
                         // Output warning.
-                        LT.warn(log, null, "Ignoring join request from node (duplicate ID) [node=" + node +
+                        LT.warn(log, "Ignoring join request from node (duplicate ID) [node=" + node +
                             ", existingNode=" + existingNode + ']');
 
                         // Ignore join request.
@@ -3098,8 +3098,7 @@ class ServerImpl extends TcpDiscoveryImpl {
 
                         if (subj == null) {
                             // Node has not pass authentication.
-                            LT.warn(log, null,
-                                "Authentication failed [nodeId=" + node.id() +
+                            LT.warn(log, "Authentication failed [nodeId=" + node.id() +
                                     ", addrs=" + U.addressesAsString(node) + ']',
                                 "Authentication failed [nodeId=" + U.id8(node.id()) + ", addrs=" +
                                     U.addressesAsString(node) + ']');
@@ -3128,8 +3127,7 @@ class ServerImpl extends TcpDiscoveryImpl {
                         else {
                             if (!(subj instanceof Serializable)) {
                                 // Node has not pass authentication.
-                                LT.warn(log, null,
-                                    "Authentication subject is not Serializable [nodeId=" + node.id() +
+                                LT.warn(log, "Authentication subject is not Serializable [nodeId=" + node.id() +
                                         ", addrs=" + U.addressesAsString(node) + ']',
                                     "Authentication subject is not Serializable [nodeId=" + U.id8(node.id()) +
                                         ", addrs=" +
@@ -3199,7 +3197,7 @@ class ServerImpl extends TcpDiscoveryImpl {
                                     return;
                                 }
 
-                                LT.warn(log, null, err.message());
+                                LT.warn(log, err.message());
 
                                 // Always output in debug.
                                 if (log.isDebugEnabled())
@@ -3240,7 +3238,7 @@ class ServerImpl extends TcpDiscoveryImpl {
                                     ", rmtNodeAddrs=" + U.addressesAsString(node) +
                                     ", locNodeId=" + locNode.id() + ", rmtNodeId=" + msg.creatorNodeId() + ']';
 
-                                LT.warn(log, null, errMsg);
+                                LT.warn(log, errMsg);
 
                                 // Always output in debug.
                                 if (log.isDebugEnabled())
@@ -3528,7 +3526,7 @@ class ServerImpl extends TcpDiscoveryImpl {
          * @param sndMsg Message to send.
          */
         private void nodeCheckError(TcpDiscoveryNode node, String errMsg, String sndMsg) {
-            LT.warn(log, null, errMsg);
+            LT.warn(log, errMsg);
 
             // Always output in debug.
             if (log.isDebugEnabled())
@@ -3811,8 +3809,7 @@ class ServerImpl extends TcpDiscoveryImpl {
 
                             if (!permissionsEqual(coordSubj.subject().permissions(), subj.subject().permissions())) {
                                 // Node has not pass authentication.
-                                LT.warn(log, null,
-                                    "Authentication failed [nodeId=" + node.id() +
+                                LT.warn(log, "Authentication failed [nodeId=" + node.id() +
                                         ", addrs=" + U.addressesAsString(node) + ']',
                                     "Authentication failed [nodeId=" + U.id8(node.id()) + ", addrs=" +
                                         U.addressesAsString(node) + ']');
@@ -5267,7 +5264,7 @@ class ServerImpl extends TcpDiscoveryImpl {
                                     "[rmtAddr=" + sock.getRemoteSocketAddress() +
                                     ", locAddr=" + sock.getLocalSocketAddress() + ']');
 
-                            LT.warn(log, null, "Failed to read magic header (too few bytes received) [rmtAddr=" +
+                            LT.warn(log, "Failed to read magic header (too few bytes received) [rmtAddr=" +
                                 sock.getRemoteSocketAddress() + ", locAddr=" + sock.getLocalSocketAddress() + ']');
 
                             return;
@@ -5283,7 +5280,7 @@ class ServerImpl extends TcpDiscoveryImpl {
                                 "[rmtAddr=" + sock.getRemoteSocketAddress() +
                                 ", locAddr=" + sock.getLocalSocketAddress() + ']');
 
-                        LT.warn(log, null, "Unknown connection detected (is some other software connecting to " +
+                        LT.warn(log, "Unknown connection detected (is some other software connecting to " +
                             "this Ignite port?" +
                             (!spi.isSslEnabled() ? " missing SSL configuration on remote node?" : "" ) +
                             ") [rmtAddr=" + sock.getInetAddress() + ']', true);
@@ -5403,7 +5400,7 @@ class ServerImpl extends TcpDiscoveryImpl {
                         U.error(log, "Caught exception on handshake [err=" + e +", sock=" + sock + ']', e);
 
                     if (X.hasCause(e, SSLException.class) && spi.isSslEnabled() && !spi.isNodeStopping0())
-                        LT.warn(log, null, "Failed to initialize connection " +
+                        LT.warn(log, "Failed to initialize connection " +
                             "(missing SSL configuration on remote node?) " +
                             "[rmtAddr=" + sock.getInetAddress() + ']', true);
                     else if ((X.hasCause(e, ObjectStreamException.class) || !sock.isClosed())
@@ -5432,12 +5429,12 @@ class ServerImpl extends TcpDiscoveryImpl {
                     onException("Caught exception on handshake [err=" + e +", sock=" + sock + ']', e);
 
                     if (e.hasCause(SocketTimeoutException.class))
-                        LT.warn(log, null, "Socket operation timed out on handshake " +
+                        LT.warn(log, "Socket operation timed out on handshake " +
                             "(consider increasing 'networkTimeout' configuration property) " +
                             "[netTimeout=" + spi.netTimeout + ']');
 
                     else if (e.hasCause(ClassNotFoundException.class))
-                        LT.warn(log, null, "Failed to read message due to ClassNotFoundException " +
+                        LT.warn(log, "Failed to read message due to ClassNotFoundException " +
                             "(make sure same versions of all classes are available on all nodes) " +
                             "[rmtAddr=" + sock.getRemoteSocketAddress() +
                             ", err=" + X.cause(e, ClassNotFoundException.class).getMessage() + ']');
@@ -5667,7 +5664,7 @@ class ServerImpl extends TcpDiscoveryImpl {
                             return;
 
                         if (e.hasCause(ClassNotFoundException.class))
-                            LT.warn(log, null, "Failed to read message due to ClassNotFoundException " +
+                            LT.warn(log, "Failed to read message due to ClassNotFoundException " +
                                 "(make sure same versions of all classes are available on all nodes) " +
                                 "[rmtNodeId=" + nodeId +
                                 ", err=" + X.cause(e, ClassNotFoundException.class).getMessage() + ']');

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryImpl.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryImpl.java
index 30b83e5..1d63852 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryImpl.java
@@ -303,7 +303,7 @@ abstract class TcpDiscoveryImpl {
      */
     protected boolean checkAckTimeout(long ackTimeout) {
         if (ackTimeout > spi.getMaxAckTimeout()) {
-            LT.warn(log, null, "Acknowledgement timeout is greater than maximum acknowledgement timeout " +
+            LT.warn(log, "Acknowledgement timeout is greater than maximum acknowledgement timeout " +
                 "(consider increasing 'maxAckTimeout' configuration property) " +
                 "[ackTimeout=" + ackTimeout + ", maxAckTimeout=" + spi.getMaxAckTimeout() + ']');
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index 426eb8e..dee93aa 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -1471,7 +1471,7 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter implements DiscoverySpi, T
         }
         catch (IOException | IgniteCheckedException e) {
             if (X.hasCause(e, SocketTimeoutException.class))
-                LT.warn(log, null, "Timed out waiting for message to be read (most probably, the reason is " +
+                LT.warn(log, "Timed out waiting for message to be read (most probably, the reason is " +
                     "in long GC pauses on remote node) [curTimeout=" + timeout + ']');
 
             throw e;
@@ -1511,7 +1511,7 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter implements DiscoverySpi, T
             return res;
         }
         catch (SocketTimeoutException e) {
-            LT.warn(log, null, "Timed out waiting for message delivery receipt (most probably, the reason is " +
+            LT.warn(log, "Timed out waiting for message delivery receipt (most probably, the reason is " +
                 "in long GC pauses on remote node; consider tuning GC and increasing 'ackTimeout' " +
                 "configuration property). Will retry to send message with increased timeout. " +
                 "Current timeout: " + timeout + '.');
@@ -1575,7 +1575,7 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter implements DiscoverySpi, T
                     res.add(resolved);
             }
             catch (UnknownHostException ignored) {
-                LT.warn(log, null, "Failed to resolve address from IP finder (host is unknown): " + addr);
+                LT.warn(log, "Failed to resolve address from IP finder (host is unknown): " + addr);
 
                 // Add address in any case.
                 res.add(addr);
@@ -2045,7 +2045,7 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter implements DiscoverySpi, T
                 // Close socket - timeout occurred.
                 U.closeQuiet(sock);
 
-                LT.warn(log, null, "Socket write has timed out (consider increasing " +
+                LT.warn(log, "Socket write has timed out (consider increasing " +
                     (failureDetectionTimeoutEnabled() ?
                     "'IgniteConfiguration.failureDetectionTimeout' configuration property) [" +
                     "failureDetectionTimeout=" + failureDetectionTimeout() + ']' :

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/TcpDiscoveryMulticastIpFinder.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/TcpDiscoveryMulticastIpFinder.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/TcpDiscoveryMulticastIpFinder.java
index 5bbe90e..d5d3533 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/TcpDiscoveryMulticastIpFinder.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/TcpDiscoveryMulticastIpFinder.java
@@ -598,7 +598,7 @@ public class TcpDiscoveryMulticastIpFinder extends TcpDiscoveryVmIpFinder {
                                 addrRes = new AddressResponse(data);
                             }
                             catch (IgniteCheckedException e) {
-                                LT.warn(log, e, "Failed to deserialize multicast response.");
+                                LT.error(log, e, "Failed to deserialize multicast response.");
 
                                 continue;
                             }
@@ -876,7 +876,7 @@ public class TcpDiscoveryMulticastIpFinder extends TcpDiscoveryVmIpFinder {
                 }
                 catch (IOException e) {
                     if (!isInterrupted()) {
-                        LT.warn(log, e, "Failed to send/receive address message (will try to reconnect).");
+                        LT.error(log, e, "Failed to send/receive address message (will try to reconnect).");
 
                         synchronized (this) {
                             U.close(sock);

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/test/java/org/apache/ignite/testframework/GridTestUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/GridTestUtils.java b/modules/core/src/test/java/org/apache/ignite/testframework/GridTestUtils.java
index 524c643..e6a5537 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/GridTestUtils.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/GridTestUtils.java
@@ -1024,7 +1024,7 @@ public final class GridTestUtils {
                     Collection<ClusterNode> nodes = top.nodes(p, AffinityTopologyVersion.NONE);
 
                     if (nodes.size() > backups + 1) {
-                        LT.warn(log, null, "Partition map was not updated yet (will wait) [grid=" + g.name() +
+                        LT.warn(log, "Partition map was not updated yet (will wait) [grid=" + g.name() +
                             ", p=" + p + ", nodes=" + F.nodeIds(nodes) + ']');
 
                         wait = true;

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
index 032d99e..e0432a0 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
@@ -486,7 +486,7 @@ public abstract class GridCommonAbstractTest extends GridAbstractTest {
 
                                 if (affNodes.size() != owners.size() || !affNodes.containsAll(owners) ||
                                     (waitEvicts && loc != null && loc.state() != GridDhtPartitionState.OWNING)) {
-                                    LT.warn(log(), null, "Waiting for topology map update [" +
+                                    LT.warn(log(), "Waiting for topology map update [" +
                                         "grid=" + g.name() +
                                         ", cache=" + cfg.getName() +
                                         ", cacheId=" + dht.context().cacheId() +
@@ -503,7 +503,7 @@ public abstract class GridCommonAbstractTest extends GridAbstractTest {
                                     match = true;
                             }
                             else {
-                                LT.warn(log(), null, "Waiting for topology map update [" +
+                                LT.warn(log(), "Waiting for topology map update [" +
                                     "grid=" + g.name() +
                                     ", cache=" + cfg.getName() +
                                     ", cacheId=" + dht.context().cacheId() +
@@ -569,7 +569,7 @@ public abstract class GridCommonAbstractTest extends GridAbstractTest {
                                     }
 
                                     if (entry.getValue() != GridDhtPartitionState.OWNING) {
-                                        LT.warn(log(), null,
+                                        LT.warn(log(),
                                             "Waiting for correct partition state, should be OWNING [state=" +
                                                 entry.getValue() + "]");
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/core/src/test/java/org/apache/ignite/util/GridLogThrottleTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/util/GridLogThrottleTest.java b/modules/core/src/test/java/org/apache/ignite/util/GridLogThrottleTest.java
index d9540a8..9eac0cc 100644
--- a/modules/core/src/test/java/org/apache/ignite/util/GridLogThrottleTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/util/GridLogThrottleTest.java
@@ -53,26 +53,20 @@ public class GridLogThrottleTest extends GridCommonAbstractTest {
         // LOGGED.
         LT.error(log, new RuntimeException("Test exception 2."), "Test");
 
-        // OMITTED.
-        LT.warn(log, new RuntimeException("Test exception 1."), "Test");
-
-        // OMITTED.
-        LT.warn(log, new RuntimeException("Test exception 2."), "Test1");
-
-        // OMITTED.
-        LT.warn(log, new RuntimeException("Test exception 2."), "Test3");
-
         // LOGGED.
         LT.error(log, null, "Test - without throwable.");
 
         // OMITTED.
         LT.error(log, null, "Test - without throwable.");
 
+        // OMITTED.
+        LT.warn(log, "Test - without throwable.");
+
         // LOGGED.
-        LT.warn(log, null, "Test - without throwable1.");
+        LT.warn(log, "Test - without throwable1.");
 
         // OMITTED.
-        LT.warn(log, null, "Test - without throwable1.");
+        LT.warn(log, "Test - without throwable1.");
 
         Thread.sleep(LT.throttleTimeout());
 
@@ -90,14 +84,11 @@ public class GridLogThrottleTest extends GridCommonAbstractTest {
         // LOGGED.
         LT.error(log, new RuntimeException("Test exception 2."), "Test");
 
-        // OMITTED.
-        LT.warn(log, new RuntimeException("Test exception 1."), "Test");
-
-        // OMITTED.
-        LT.warn(log, new RuntimeException("Test exception 2."), "Test1");
+        // LOGGED.
+        LT.warn(log, "Test - without throwable.");
 
         // OMITTED.
-        LT.warn(log, new RuntimeException("Test exception 2."), "Test3");
+        LT.warn(log, "Test - without throwable.");
 
         Thread.sleep(LT.throttleTimeout());
 
@@ -121,4 +112,4 @@ public class GridLogThrottleTest extends GridCommonAbstractTest {
         //OMMITED.
         LT.info(log(), "Test info message.");
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/taskexecutor/external/communication/HadoopExternalCommunication.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/taskexecutor/external/communication/HadoopExternalCommunication.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/taskexecutor/external/communication/HadoopExternalCommunication.java
index 1d59a95..6202c41 100644
--- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/taskexecutor/external/communication/HadoopExternalCommunication.java
+++ b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/taskexecutor/external/communication/HadoopExternalCommunication.java
@@ -850,7 +850,7 @@ public class HadoopExternalCommunication {
             catch (IgniteCheckedException e) {
                 if (e.hasCause(IpcOutOfSystemResourcesException.class))
                     // Has cause or is itself the IpcOutOfSystemResourcesException.
-                    LT.warn(log, null, OUT_OF_RESOURCES_TCP_MSG);
+                    LT.warn(log, OUT_OF_RESOURCES_TCP_MSG);
                 else if (log.isDebugEnabled())
                     log.debug("Failed to establish shared memory connection with local hadoop process: " +
                         desc);
@@ -1053,7 +1053,7 @@ public class HadoopExternalCommunication {
                         ", err=" + e + ']');
 
                 if (X.hasCause(e, SocketTimeoutException.class))
-                    LT.warn(log, null, "Connect timed out (consider increasing 'connTimeout' " +
+                    LT.warn(log, "Connect timed out (consider increasing 'connTimeout' " +
                         "configuration property) [addr=" + addr + ", port=" + port + ']');
 
                 if (errs == null)
@@ -1078,7 +1078,7 @@ public class HadoopExternalCommunication {
             assert errs != null;
 
             if (X.hasCause(errs, ConnectException.class))
-                LT.warn(log, null, "Failed to connect to a remote Hadoop process (is process still running?). " +
+                LT.warn(log, "Failed to connect to a remote Hadoop process (is process still running?). " +
                     "Make sure operating system firewall is disabled on local and remote host) " +
                     "[addrs=" + addr + ", port=" + port + ']');
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/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 2e8b93f..000e70d 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
@@ -921,7 +921,7 @@ public class IgniteH2Indexing implements GridQueryIndexing {
                 String longMsg = "Query execution is too long [time=" + time + " ms, sql='" + sql + '\'' +
                     ", plan=" + U.nl() + plan.getString(1) + U.nl() + ", parameters=" + params + "]";
 
-                LT.warn(log, null, longMsg, msg);
+                LT.warn(log, longMsg, msg);
             }
 
             return rs;

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapEvictQueryTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapEvictQueryTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapEvictQueryTest.java
index f21a279..aecbb03 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapEvictQueryTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapEvictQueryTest.java
@@ -174,7 +174,7 @@ public class IgniteCacheOffheapEvictQueryTest extends GridCommonAbstractTest {
                             }
                         }
 
-                        LT.warn(log, null, e.getMessage());
+                        LT.warn(log, e.getMessage());
 
                         return;
                     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/3271d75f/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/http/UriDeploymentHttpScanner.java
----------------------------------------------------------------------
diff --git a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/http/UriDeploymentHttpScanner.java b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/http/UriDeploymentHttpScanner.java
index 48bfd7f..bb7260d 100644
--- a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/http/UriDeploymentHttpScanner.java
+++ b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/scanners/http/UriDeploymentHttpScanner.java
@@ -343,11 +343,11 @@ public class UriDeploymentHttpScanner implements UriDeploymentScanner {
                     catch (IOException e) {
                         if (!scanCtx.isCancelled()) {
                             if (X.hasCause(e, ConnectException.class)) {
-                                LT.warn(scanCtx.getLogger(), e, "Failed to connect to HTTP server " +
+                                LT.error(scanCtx.getLogger(), e, "Failed to connect to HTTP server " +
                                     "(connection refused): " + U.hidePassword(url));
                             }
                             else if (X.hasCause(e, UnknownHostException.class)) {
-                                LT.warn(scanCtx.getLogger(), e, "Failed to connect to HTTP server " +
+                                LT.error(scanCtx.getLogger(), e, "Failed to connect to HTTP server " +
                                     "(host is unknown): " + U.hidePassword(url));
                             }
                             else
@@ -404,11 +404,11 @@ public class UriDeploymentHttpScanner implements UriDeploymentScanner {
             catch (IOException e) {
                 if (!scanCtx.isCancelled()) {
                     if (X.hasCause(e, ConnectException.class)) {
-                        LT.warn(scanCtx.getLogger(), e, "Failed to connect to HTTP server (connection refused): " +
+                        LT.error(scanCtx.getLogger(), e, "Failed to connect to HTTP server (connection refused): " +
                             U.hidePassword(url.toString()));
                     }
                     else if (X.hasCause(e, UnknownHostException.class)) {
-                        LT.warn(scanCtx.getLogger(), e, "Failed to connect to HTTP server (host is unknown): " +
+                        LT.error(scanCtx.getLogger(), e, "Failed to connect to HTTP server (host is unknown): " +
                             U.hidePassword(url.toString()));
                     }
                     else


[47/50] [abbrv] ignite git commit: Add test case for testing permits releasing by IgniteSempahore with failoverSafe enabled

Posted by sh...@apache.org.
Add test case for testing permits releasing by IgniteSempahore with failoverSafe enabled


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

Branch: refs/heads/ignite-2788
Commit: 138a3aad20f7dcb16a6c7e6d047d0503450ea06e
Parents: e1defc0
Author: agura <ag...@apache.org>
Authored: Thu Nov 3 15:40:01 2016 +0300
Committer: agura <ag...@apache.org>
Committed: Thu Nov 3 15:40:01 2016 +0300

----------------------------------------------------------------------
 ...SemaphoreFailoverSafeReleasePermitsTest.java | 129 +++++++++++++++++++
 .../IgniteCacheDataStructuresSelfTestSuite.java |   2 +
 2 files changed, 131 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/138a3aad/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/SemaphoreFailoverSafeReleasePermitsTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/SemaphoreFailoverSafeReleasePermitsTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/SemaphoreFailoverSafeReleasePermitsTest.java
new file mode 100644
index 0000000..241253d
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/SemaphoreFailoverSafeReleasePermitsTest.java
@@ -0,0 +1,129 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.cache.datastructures;
+
+import java.util.concurrent.TimeUnit;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteSemaphore;
+import org.apache.ignite.cache.CacheMode;
+import org.apache.ignite.configuration.AtomicConfiguration;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+
+import static org.apache.ignite.cache.CacheMode.PARTITIONED;
+import static org.apache.ignite.cache.CacheMode.REPLICATED;
+
+/**
+ *
+ */
+public class SemaphoreFailoverSafeReleasePermitsTest extends GridCommonAbstractTest {
+    /** */
+    protected static TcpDiscoveryIpFinder ipFinder = new TcpDiscoveryVmIpFinder(true);
+
+    /** Grid count. */
+    private static final int GRID_CNT = 3;
+
+    /** Atomics cache mode. */
+    private CacheMode atomicsCacheMode;
+
+    /** {@inheritDoc} */
+    @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
+        IgniteConfiguration cfg = super.getConfiguration(gridName);
+
+        TcpDiscoverySpi spi = new TcpDiscoverySpi();
+
+        spi.setIpFinder(ipFinder);
+
+        cfg.setDiscoverySpi(spi);
+
+        AtomicConfiguration atomicCfg = atomicConfiguration();
+
+        assertNotNull(atomicCfg);
+
+        cfg.setAtomicConfiguration(atomicCfg);
+
+        return cfg;
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testReleasePermitsPartitioned() throws Exception {
+        atomicsCacheMode = PARTITIONED;
+
+        doTest();
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testReleasePermitsReplicated() throws Exception {
+        atomicsCacheMode = REPLICATED;
+
+        doTest();
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    private void doTest() throws Exception {
+        try {
+            startGrids(GRID_CNT);
+
+            Ignite ignite = grid(0);
+
+            IgniteSemaphore sem = ignite.semaphore("sem", 1, true, true);
+
+            assertEquals(1, sem.availablePermits());
+
+            sem.acquire(1);
+
+            assertEquals(0, sem.availablePermits());
+
+            ignite.close();
+
+            awaitPartitionMapExchange();
+
+            ignite = grid(1);
+
+            sem = ignite.semaphore("sem", 1, true, true);
+
+            assertTrue(sem.tryAcquire(1, 5000, TimeUnit.MILLISECONDS));
+        }
+        finally {
+            stopAllGrids();
+        }
+    }
+
+    /**
+     * @return Atomic configuration.
+     */
+    protected AtomicConfiguration atomicConfiguration() {
+        AtomicConfiguration atomicCfg = new AtomicConfiguration();
+
+        atomicCfg.setCacheMode(atomicsCacheMode);
+
+        if (atomicsCacheMode == PARTITIONED)
+            atomicCfg.setBackups(1);
+
+        return atomicCfg;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/138a3aad/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheDataStructuresSelfTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheDataStructuresSelfTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheDataStructuresSelfTestSuite.java
index d62369c..45a49bf 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheDataStructuresSelfTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheDataStructuresSelfTestSuite.java
@@ -24,6 +24,7 @@ import org.apache.ignite.internal.processors.cache.datastructures.IgniteClientDa
 import org.apache.ignite.internal.processors.cache.datastructures.IgniteClientDiscoveryDataStructuresTest;
 import org.apache.ignite.internal.processors.cache.datastructures.IgniteDataStructureUniqueNameTest;
 import org.apache.ignite.internal.processors.cache.datastructures.IgniteDataStructureWithJobTest;
+import org.apache.ignite.internal.processors.cache.datastructures.SemaphoreFailoverSafeReleasePermitsTest;
 import org.apache.ignite.internal.processors.cache.datastructures.local.GridCacheLocalAtomicOffheapSetSelfTest;
 import org.apache.ignite.internal.processors.cache.datastructures.local.GridCacheLocalAtomicQueueApiSelfTest;
 import org.apache.ignite.internal.processors.cache.datastructures.local.GridCacheLocalAtomicSetSelfTest;
@@ -144,6 +145,7 @@ public class IgniteCacheDataStructuresSelfTestSuite extends TestSuite {
         suite.addTest(new TestSuite(IgnitePartitionedCountDownLatchSelfTest.class));
         suite.addTest(new TestSuite(IgniteDataStructureWithJobTest.class));
         suite.addTest(new TestSuite(IgnitePartitionedSemaphoreSelfTest.class));
+        suite.addTest(new TestSuite(SemaphoreFailoverSafeReleasePermitsTest.class));
         // TODO IGNITE-3141, enabled when fixed.
         // suite.addTest(new TestSuite(IgnitePartitionedLockSelfTest.class));
 


[10/50] [abbrv] ignite git commit: ignite-3621 Fixed 'testEvictExpired'.

Posted by sh...@apache.org.
ignite-3621 Fixed 'testEvictExpired'.

(cherry picked from commit a4d7aa3)


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

Branch: refs/heads/ignite-2788
Commit: ad613afd7165ed2d8bf0a62805fc2506dfe6c59a
Parents: 062b9b6
Author: sboikov <sb...@gridgain.com>
Authored: Thu Sep 29 12:04:44 2016 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Sep 29 14:16:31 2016 +0300

----------------------------------------------------------------------
 .../cache/IgniteCacheConfigVariationsFullApiTest.java         | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/ad613afd/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheConfigVariationsFullApiTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheConfigVariationsFullApiTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheConfigVariationsFullApiTest.java
index 2ca09c8..6b0e193 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheConfigVariationsFullApiTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheConfigVariationsFullApiTest.java
@@ -3336,7 +3336,12 @@ public class IgniteCacheConfigVariationsFullApiTest extends IgniteCacheConfigVar
 
         boolean wait = waitForCondition(new GridAbsPredicate() {
             @Override public boolean apply() {
-                return cache.localPeek(key) == null;
+                for (int i = 0; i < gridCount(); i++) {
+                    if (peek(jcache(i), key) != null)
+                        return false;
+                }
+
+                return true;
             }
         }, ttl + 1000);
 


[20/50] [abbrv] ignite git commit: Revert "IGNITE-3191 - Fixed ordering of fields in binary objects"

Posted by sh...@apache.org.
Revert "IGNITE-3191 - Fixed ordering of fields in binary objects"

This reverts commit d1e3a78ae569fa5d5692816db44f2c677e1b8283.


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

Branch: refs/heads/ignite-2788
Commit: de50287d493acc73186926d34431733bc76c549b
Parents: f745371
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Mon Oct 3 10:07:33 2016 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Mon Oct 3 10:07:33 2016 +0300

----------------------------------------------------------------------
 .../internal/binary/BinaryClassDescriptor.java  | 16 ++--
 .../binary/builder/BinaryObjectBuilderImpl.java | 24 ++---
 .../binary/BinaryFieldOrderSelfTest.java        | 98 --------------------
 .../IgniteBinaryObjectsTestSuite.java           |  2 -
 4 files changed, 19 insertions(+), 121 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/de50287d/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
index 276dfe5..4c824d4 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
@@ -25,6 +25,7 @@ import java.lang.reflect.Modifier;
 import java.lang.reflect.Proxy;
 import java.math.BigDecimal;
 import java.sql.Timestamp;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
@@ -32,7 +33,6 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
-import java.util.TreeMap;
 import java.util.UUID;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.binary.BinaryObjectException;
@@ -269,9 +269,10 @@ public class BinaryClassDescriptor {
             case OBJECT:
                 // Must not use constructor to honor transient fields semantics.
                 ctor = null;
+                ArrayList<BinaryFieldAccessor> fields0 = new ArrayList<>();
                 stableFieldsMeta = metaDataEnabled ? new HashMap<String, Integer>() : null;
 
-                Map<String, BinaryFieldAccessor> fields0 = new TreeMap<>();
+                BinarySchema.Builder schemaBuilder = BinarySchema.Builder.newBuilder();
 
                 Set<String> duplicates = duplicateFields(cls);
 
@@ -299,7 +300,9 @@ public class BinaryClassDescriptor {
 
                             BinaryFieldAccessor fieldInfo = BinaryFieldAccessor.create(f, fieldId);
 
-                            fields0.put(name, fieldInfo);
+                            fields0.add(fieldInfo);
+
+                            schemaBuilder.addField(fieldId);
 
                             if (metaDataEnabled)
                                 stableFieldsMeta.put(name, fieldInfo.mode().typeId());
@@ -307,12 +310,7 @@ public class BinaryClassDescriptor {
                     }
                 }
 
-                fields = fields0.values().toArray(new BinaryFieldAccessor[fields0.size()]);
-
-                BinarySchema.Builder schemaBuilder = BinarySchema.Builder.newBuilder();
-
-                for (BinaryFieldAccessor field : fields)
-                    schemaBuilder.addField(field.id);
+                fields = fields0.toArray(new BinaryFieldAccessor[fields0.size()]);
 
                 stableSchema = schemaBuilder.build();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/de50287d/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 d166051..2c76192 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
@@ -17,32 +17,32 @@
 
 package org.apache.ignite.internal.binary.builder;
 
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
 import org.apache.ignite.binary.BinaryInvalidTypeException;
 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.BinaryContext;
 import org.apache.ignite.internal.binary.BinaryMetadata;
 import org.apache.ignite.internal.binary.BinaryObjectImpl;
-import org.apache.ignite.internal.binary.BinaryObjectOffheapImpl;
+import org.apache.ignite.internal.binary.BinaryWriterExImpl;
+import org.apache.ignite.internal.binary.GridBinaryMarshaller;
+import org.apache.ignite.internal.binary.BinaryContext;
 import org.apache.ignite.internal.binary.BinarySchema;
 import org.apache.ignite.internal.binary.BinarySchemaRegistry;
+import org.apache.ignite.internal.binary.BinaryObjectOffheapImpl;
 import org.apache.ignite.internal.binary.BinaryUtils;
-import org.apache.ignite.internal.binary.BinaryWriterExImpl;
-import org.apache.ignite.internal.binary.GridBinaryMarshaller;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteBiTuple;
 import org.jetbrains.annotations.Nullable;
 
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Set;
+
 /**
  *
  */
@@ -522,7 +522,7 @@ public class BinaryObjectBuilderImpl implements BinaryObjectBuilder {
         Object val = val0 == null ? new BinaryValueWithType(BinaryUtils.typeByClass(Object.class), null) : val0;
 
         if (assignedVals == null)
-            assignedVals = new TreeMap<>();
+            assignedVals = new LinkedHashMap<>();
 
         Object oldVal = assignedVals.put(name, val);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/de50287d/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFieldOrderSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFieldOrderSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFieldOrderSelfTest.java
deleted file mode 100644
index 6bb1e13..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFieldOrderSelfTest.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package org.apache.ignite.internal.binary;
-
-import org.apache.ignite.binary.BinaryObject;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.IgniteEx;
-import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
-import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-
-/**
- * Test that field ordering doesn't change the schema.
- */
-public class BinaryFieldOrderSelfTest extends GridCommonAbstractTest {
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
-        IgniteConfiguration cfg = super.getConfiguration(gridName);
-
-        cfg.setMarshaller(new BinaryMarshaller());
-        cfg.setDiscoverySpi(new TcpDiscoverySpi().setIpFinder(new TcpDiscoveryVmIpFinder(true)));
-
-        return cfg;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTest() throws Exception {
-        startGrid();
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void afterTest() throws Exception {
-        stopAllGrids();
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testEquals() throws Exception {
-        IgniteEx ignite = grid();
-
-        BinaryObject bo0 = ignite.binary().toBinary(new MyType(222, 333, 111));
-
-        BinaryObject bo1 = ignite.binary().builder(bo0.type().typeName()).
-            setField("b", 222).
-            setField("c", 333).
-            setField("a", 111).
-            hashCode(12345).
-            build();
-
-        BinaryObject bo2 = ignite.binary().builder(bo0.type().typeName()).
-            setField("a", 111).
-            setField("b", 222).
-            setField("c", 333).
-            hashCode(12345).
-            build();
-
-        assertEquals(12345, bo0.hashCode());
-        assertEquals(12345, bo1.hashCode());
-        assertEquals(12345, bo2.hashCode());
-
-        assertTrue(bo0.equals(bo1));
-        assertTrue(bo0.equals(bo2));
-        assertTrue(bo1.equals(bo2));
-    }
-
-    /**
-     */
-    private static class MyType {
-        /** B. */
-        private int b;
-
-        /** C. */
-        private int c;
-
-        /** A. */
-        private int a;
-
-        /**
-         * @param b B.
-         * @param c C.
-         * @param a A.
-         */
-        MyType(int b, int c, int a) {
-            this.b = b;
-            this.c = c;
-            this.a = a;
-        }
-
-        /** {@inheritDoc} */
-        @Override public boolean equals(Object obj) {
-            return super.equals(obj);
-        }
-
-        /** {@inheritDoc} */
-        @Override public int hashCode() {
-            return 12345;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/de50287d/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsTestSuite.java
index 50c6f0b..c1d9974 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsTestSuite.java
@@ -22,7 +22,6 @@ import org.apache.ignite.internal.binary.BinaryBasicIdMapperSelfTest;
 import org.apache.ignite.internal.binary.BinaryBasicNameMapperSelfTest;
 import org.apache.ignite.internal.binary.BinaryConfigurationConsistencySelfTest;
 import org.apache.ignite.internal.binary.BinaryEnumsSelfTest;
-import org.apache.ignite.internal.binary.BinaryFieldOrderSelfTest;
 import org.apache.ignite.internal.binary.BinaryFieldsHeapSelfTest;
 import org.apache.ignite.internal.binary.BinaryFieldsOffheapSelfTest;
 import org.apache.ignite.internal.binary.BinaryFooterOffsetsHeapSelfTest;
@@ -105,7 +104,6 @@ public class IgniteBinaryObjectsTestSuite extends TestSuite {
         suite.addTestSuite(GridBinaryAffinityKeySelfTest.class);
         suite.addTestSuite(GridBinaryWildcardsSelfTest.class);
         suite.addTestSuite(BinaryObjectToStringSelfTest.class);
-        suite.addTestSuite(BinaryFieldOrderSelfTest.class);
 
         // Tests for objects with non-compact footers.
         suite.addTestSuite(BinaryMarshallerNonCompactSelfTest.class);


[41/50] [abbrv] ignite git commit: Fixed javadoc

Posted by sh...@apache.org.
Fixed javadoc


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

Branch: refs/heads/ignite-2788
Commit: c478d03a81f9d3b55ad7757f743a7471b768e2ba
Parents: 5afd654
Author: yzhdanov <yz...@apache.org>
Authored: Fri Oct 7 11:43:34 2016 +0300
Committer: yzhdanov <yz...@apache.org>
Committed: Fri Oct 7 11:43:34 2016 +0300

----------------------------------------------------------------------
 .../main/java/org/apache/ignite/services/Service.java   | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/c478d03a/modules/core/src/main/java/org/apache/ignite/services/Service.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/services/Service.java b/modules/core/src/main/java/org/apache/ignite/services/Service.java
index 60b977d..e82f6c3 100644
--- a/modules/core/src/main/java/org/apache/ignite/services/Service.java
+++ b/modules/core/src/main/java/org/apache/ignite/services/Service.java
@@ -53,21 +53,21 @@ import java.io.Serializable;
  * Consecutively, this service can be deployed as follows:
  * <pre name="code" class="java">
  * ...
- * GridServices svcs = grid.services();
+ * IgniteServices svcs = ignite.services();
  *
- * svcs.deployClusterSingleton("mySingleton", new MyGridService());
+ * svcs.deployClusterSingleton("mySingleton", new MyIgniteService());
  * </pre>
  * Or from grid configuration on startup:
  * <pre name="code" class="java">
  * IgniteConfiguration gridCfg = new IgniteConfiguration();
  *
- * GridServiceConfiguration svcCfg = new GridServiceConfiguration();
+ * IgniteServiceConfiguration svcCfg = new IgniteServiceConfiguration();
  *
  * // Configuration for cluster-singleton service.
  * svcCfg.setName("mySingleton");
  * svcCfg.setMaxPerNodeCount(1);
  * svcCfg.setTotalCount(1);
- * svcCfg.setService(new MyGridService());
+ * svcCfg.setService(new MyIgniteService());
  *
  * gridCfg.setServiceConfiguration(svcCfg);
  * ...
@@ -88,7 +88,7 @@ public interface Service extends Serializable {
      * {@code cancel} methods on {@link org.apache.ignite.IgniteServices} API are called.
      * <p>
      * Note that Ignite cannot guarantee that the service exits from {@link #execute(ServiceContext)}
-     * method whenever {@code cancel(GridServiceContext)} method is called. It is up to the user to
+     * method whenever {@code cancel(ServiceContext)} method is called. It is up to the user to
      * make sure that the service code properly reacts to cancellations.
      *
      * @param ctx Service execution context.
@@ -117,4 +117,4 @@ public interface Service extends Serializable {
      *      {@link org.apache.ignite.IgniteServices#cancel(String)} method will be called.
      */
     public void execute(ServiceContext ctx) throws Exception;
-}
\ No newline at end of file
+}


[03/50] [abbrv] ignite git commit: Validate hash code presence in BinaryObject. Fixes #928

Posted by sh...@apache.org.
Validate hash code presence in BinaryObject. Fixes #928


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

Branch: refs/heads/ignite-2788
Commit: e3dfdecc3607b5f3183bfcb1ce36c57543a8965f
Parents: 78144c4
Author: Alexander Paschenko <al...@gmail.com>
Authored: Wed Sep 28 16:46:46 2016 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Wed Sep 28 17:00:45 2016 +0300

----------------------------------------------------------------------
 .../internal/binary/BinaryClassDescriptor.java  | 16 ++++-
 .../internal/binary/BinaryEnumObjectImpl.java   |  5 ++
 .../ignite/internal/binary/BinaryObjectEx.java  |  8 +++
 .../internal/binary/BinaryObjectImpl.java       |  7 +++
 .../binary/BinaryObjectOffheapImpl.java         |  7 +++
 .../ignite/internal/binary/BinaryUtils.java     |  5 +-
 .../internal/binary/BinaryWriterExImpl.java     |  6 +-
 .../binary/builder/BinaryObjectBuilderImpl.java | 11 +++-
 .../processors/cache/GridCacheUtils.java        |  5 ++
 .../ignite/internal/util/IgniteUtils.java       | 23 ++++++-
 ...ridCacheStoreManagerDeserializationTest.java |  1 +
 .../cache/GridCacheUtilsSelfTest.java           | 64 +++++++++++++++++++-
 ...calCacheStoreManagerDeserializationTest.java |  2 +-
 .../GridCacheBinaryObjectsAbstractSelfTest.java | 31 ++++++++++
 14 files changed, 182 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/e3dfdecc/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
index 083057d..4c824d4 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
@@ -41,6 +41,7 @@ import org.apache.ignite.binary.BinarySerializer;
 import org.apache.ignite.binary.Binarylizable;
 import org.apache.ignite.internal.processors.cache.CacheObjectImpl;
 import org.apache.ignite.internal.util.GridUnsafe;
+import org.apache.ignite.internal.util.IgniteUtils;
 import org.apache.ignite.internal.util.tostring.GridToStringExclude;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
@@ -114,6 +115,9 @@ public class BinaryClassDescriptor {
     private final boolean excluded;
 
     /** */
+    private final boolean overridesHashCode;
+
+    /** */
     private final Class<?>[] intfs;
 
     /**
@@ -164,6 +168,8 @@ public class BinaryClassDescriptor {
         this.mapper = mapper;
         this.registered = registered;
 
+        overridesHashCode = IgniteUtils.overridesEqualsAndHashCode(cls);
+
         schemaReg = ctx.schemaRegistry(typeId);
 
         excluded = MarshallerExclusions.isExcluded(cls);
@@ -845,7 +851,15 @@ public class BinaryClassDescriptor {
      * @param obj Object.
      */
     private void postWrite(BinaryWriterExImpl writer, Object obj) {
-        writer.postWrite(userType, registered, obj instanceof CacheObjectImpl ? 0 : obj.hashCode());
+        if (obj instanceof CacheObjectImpl)
+            writer.postWrite(userType, registered, 0, false);
+        else if (obj instanceof BinaryObjectEx) {
+            boolean flagSet = ((BinaryObjectEx)obj).isFlagSet(BinaryUtils.FLAG_EMPTY_HASH_CODE);
+
+            writer.postWrite(userType, registered, obj.hashCode(), !flagSet);
+        }
+        else
+            writer.postWrite(userType, registered, obj.hashCode(), overridesHashCode);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/e3dfdecc/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java
index c9874ed..dcfcc9d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java
@@ -139,6 +139,11 @@ public class BinaryEnumObjectImpl implements BinaryObjectEx, Externalizable, Cac
     }
 
     /** {@inheritDoc} */
+    @Override public boolean isFlagSet(short flag) {
+        return false;
+    }
+
+    /** {@inheritDoc} */
     @Override public <F> F field(String fieldName) throws BinaryObjectException {
         return null;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/e3dfdecc/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectEx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectEx.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectEx.java
index e3566bc..4e137b7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectEx.java
@@ -38,4 +38,12 @@ public interface BinaryObjectEx extends BinaryObject {
      * @throws BinaryObjectException If failed.
      */
     @Nullable public BinaryType rawType() throws BinaryObjectException;
+
+    /**
+     * Check if flag set.
+     *
+     * @param flag flag to check.
+     * @return {@code true} if flag is set, {@code false} otherwise.
+     */
+    public boolean isFlagSet(short flag);
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/e3dfdecc/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
index 7b42c03..f37d7c2 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
@@ -246,6 +246,13 @@ public final class BinaryObjectImpl extends BinaryObjectExImpl implements Extern
     }
 
     /** {@inheritDoc} */
+    @Override public boolean isFlagSet(short flag) {
+        short flags = BinaryPrimitives.readShort(arr, start + GridBinaryMarshaller.FLAGS_POS);
+
+        return BinaryUtils.isFlagSet(flags, flag);
+    }
+
+    /** {@inheritDoc} */
     @Override public int typeId() {
         int off = start + GridBinaryMarshaller.TYPE_ID_POS;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/e3dfdecc/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 2225b7a..9cbbaa2 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
@@ -145,6 +145,13 @@ public class BinaryObjectOffheapImpl extends BinaryObjectExImpl implements Exter
     }
 
     /** {@inheritDoc} */
+    @Override public boolean isFlagSet(short flag) {
+        short flags = BinaryPrimitives.readShort(ptr, start + GridBinaryMarshaller.FLAGS_POS);
+
+        return BinaryUtils.isFlagSet(flags, flag);
+    }
+
+    /** {@inheritDoc} */
     @Nullable @Override public BinaryType type() throws BinaryObjectException {
         return BinaryUtils.typeProxy(ctx, this);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/e3dfdecc/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
index b5834a5..25d87ff 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
@@ -109,6 +109,9 @@ public class BinaryUtils {
     /** Flag: compact footer, no field IDs. */
     public static final short FLAG_COMPACT_FOOTER = 0x0020;
 
+    /** Flag: no hash code has been set. */
+    public static final short FLAG_EMPTY_HASH_CODE = 0x0040;
+
     /** Offset which fits into 1 byte. */
     public static final int OFFSET_1 = 1;
 
@@ -305,7 +308,7 @@ public class BinaryUtils {
      * @param flag Flag.
      * @return {@code True} if flag is set in flags.
      */
-    private static boolean isFlagSet(short flags, short flag) {
+    static boolean isFlagSet(short flags, short flag) {
         return (flags & flag) == flag;
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/e3dfdecc/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
index 1a81819..22b4d1f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
@@ -245,8 +245,9 @@ public class BinaryWriterExImpl implements BinaryWriter, BinaryRawWriterEx, Obje
      * @param userType User type flag.
      * @param registered Whether type is registered.
      * @param hashCode Hash code.
+     * @param isHashCodeSet Hash code presence flag.
      */
-    public void postWrite(boolean userType, boolean registered, int hashCode) {
+    public void postWrite(boolean userType, boolean registered, int hashCode, boolean isHashCodeSet) {
         short flags;
         boolean useCompactFooter;
 
@@ -303,6 +304,9 @@ public class BinaryWriterExImpl implements BinaryWriter, BinaryRawWriterEx, Obje
             }
         }
 
+        if (!isHashCodeSet)
+            flags |= BinaryUtils.FLAG_EMPTY_HASH_CODE;
+
         // Actual write.
         int retPos = out.position();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/e3dfdecc/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 086da5c..2c76192 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
@@ -86,6 +86,9 @@ public class BinaryObjectBuilderImpl implements BinaryObjectBuilder {
     /** */
     private int hashCode;
 
+    /** */
+    private boolean isHashCodeSet;
+
     /**
      * @param clsName Class name.
      * @param ctx Binary context.
@@ -117,7 +120,7 @@ public class BinaryObjectBuilderImpl implements BinaryObjectBuilder {
      */
     public BinaryObjectBuilderImpl(BinaryObjectImpl obj) {
         this(new BinaryBuilderReader(obj), obj.start());
-
+        isHashCodeSet = !obj.isFlagSet(BinaryUtils.FLAG_EMPTY_HASH_CODE);
         reader.registerObject(this);
     }
 
@@ -329,7 +332,8 @@ public class BinaryObjectBuilderImpl implements BinaryObjectBuilder {
                 reader.position(start + BinaryUtils.length(reader, start));
             }
 
-            writer.postWrite(true, registeredType, hashCode);
+            //noinspection NumberEquality
+            writer.postWrite(true, registeredType, hashCode, isHashCodeSet);
 
             // Update metadata if needed.
             int schemaId = writer.schemaId();
@@ -408,9 +412,12 @@ public class BinaryObjectBuilderImpl implements BinaryObjectBuilder {
     }
 
     /** {@inheritDoc} */
+    @SuppressWarnings("UnnecessaryBoxing")
     @Override public BinaryObjectBuilderImpl hashCode(int hashCode) {
         this.hashCode = hashCode;
 
+        isHashCodeSet = true;
+
         return this;
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/e3dfdecc/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
index 1a4ffd5..0f4e89b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
@@ -1170,6 +1170,7 @@ public class GridCacheUtils {
 
     /**
      * Validates that cache key object has overridden equals and hashCode methods.
+     * Will also check that a BinaryObject has a hash code set.
      *
      * @param key Key.
      * @throws IllegalArgumentException If equals or hashCode is not implemented.
@@ -1181,6 +1182,10 @@ public class GridCacheUtils {
         if (!U.overridesEqualsAndHashCode(key))
             throw new IllegalArgumentException("Cache key must override hashCode() and equals() methods: " +
                 key.getClass().getName());
+
+        if (U.isHashCodeEmpty(key))
+            throw new IllegalArgumentException("Cache key created with BinaryBuilder is missing hash code - " +
+                "please set it explicitly during building by using BinaryBuilder.hashCode(int)");
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/e3dfdecc/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 cdaeab1..501cdb2 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
@@ -149,6 +149,7 @@ import org.apache.ignite.IgniteException;
 import org.apache.ignite.IgniteInterruptedException;
 import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.IgniteSystemProperties;
+import org.apache.ignite.binary.BinaryObject;
 import org.apache.ignite.binary.BinaryRawReader;
 import org.apache.ignite.binary.BinaryRawWriter;
 import org.apache.ignite.cluster.ClusterGroupEmptyException;
@@ -170,6 +171,8 @@ import org.apache.ignite.internal.IgniteFutureTimeoutCheckedException;
 import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.IgniteInterruptedCheckedException;
 import org.apache.ignite.internal.IgniteNodeAttributes;
+import org.apache.ignite.internal.binary.BinaryObjectEx;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.cluster.ClusterGroupEmptyCheckedException;
 import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException;
 import org.apache.ignite.internal.compute.ComputeTaskCancelledCheckedException;
@@ -8479,9 +8482,15 @@ public abstract class IgniteUtils {
      * @return {@code True} if given object has overridden equals and hashCode method.
      */
     public static boolean overridesEqualsAndHashCode(Object obj) {
-        try {
-            Class<?> cls = obj.getClass();
+        return overridesEqualsAndHashCode(obj.getClass());
+    }
 
+    /**
+     * @param cls Class.
+     * @return {@code True} if given class has overridden equals and hashCode method.
+     */
+    public static boolean overridesEqualsAndHashCode(Class<?> cls) {
+        try {
             return !Object.class.equals(cls.getMethod("equals", Object.class).getDeclaringClass()) &&
                 !Object.class.equals(cls.getMethod("hashCode").getDeclaringClass());
         }
@@ -8491,6 +8500,16 @@ public abstract class IgniteUtils {
     }
 
     /**
+     * @param obj Object.
+     * @return {@code True} if given object is a {@link BinaryObjectEx} and
+     * has {@link BinaryUtils#FLAG_EMPTY_HASH_CODE} set
+     */
+    public static boolean isHashCodeEmpty(Object obj) {
+        return obj != null && obj instanceof BinaryObjectEx &&
+            ((BinaryObjectEx)obj).isFlagSet(BinaryUtils.FLAG_EMPTY_HASH_CODE);
+    }
+
+    /**
      * Checks if error is MAC invalid argument error which ususally requires special handling.
      *
      * @param e Exception.

http://git-wip-us.apache.org/repos/asf/ignite/blob/e3dfdecc/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManagerDeserializationTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManagerDeserializationTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManagerDeserializationTest.java
index 4a069a9..39ce33d 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManagerDeserializationTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManagerDeserializationTest.java
@@ -279,6 +279,7 @@ public class GridCacheStoreManagerDeserializationTest extends GridCommonAbstract
 
         for (int i = 0; i < 1; i++) {
             builder.setField("id", i);
+            builder.hashCode(i);
 
             entity = builder.build();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/e3dfdecc/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheUtilsSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheUtilsSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheUtilsSelfTest.java
index d5888e7..5f2c004 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheUtilsSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheUtilsSelfTest.java
@@ -18,7 +18,21 @@
 package org.apache.ignite.internal.processors.cache;
 
 import java.util.concurrent.Callable;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.binary.BinaryObject;
+import org.apache.ignite.configuration.BinaryConfiguration;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.binary.BinaryCachingMetadataHandler;
+import org.apache.ignite.internal.binary.BinaryContext;
+import org.apache.ignite.internal.binary.BinaryMarshaller;
+import org.apache.ignite.internal.binary.BinaryObjectImpl;
+import org.apache.ignite.internal.binary.GridBinaryMarshaller;
+import org.apache.ignite.internal.binary.builder.BinaryObjectBuilderImpl;
+import org.apache.ignite.internal.util.IgniteUtils;
 import org.apache.ignite.internal.util.typedef.internal.CU;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.logger.NullLogger;
+import org.apache.ignite.marshaller.MarshallerContextTestImpl;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 
@@ -104,7 +118,8 @@ public class GridCacheUtilsSelfTest extends GridCommonAbstractTest {
 
     /**
      */
-    public void testCacheKeyValidation() {
+    @SuppressWarnings("ResultOfMethodCallIgnored")
+    public void testCacheKeyValidation() throws IgniteCheckedException {
         CU.validateCacheKey("key");
 
         CU.validateCacheKey(1);
@@ -124,6 +139,53 @@ public class GridCacheUtilsSelfTest extends GridCommonAbstractTest {
         assertThrowsForInvalidKey(new NoHashCode());
 
         assertThrowsForInvalidKey(new WrongEquals());
+
+        BinaryObjectBuilderImpl binBuilder = new BinaryObjectBuilderImpl(binaryContext(),
+            EqualsAndHashCode.class.getName());
+
+        assertThrowsForInvalidKey(binBuilder.build());
+
+        binBuilder.hashCode(0xFE12);
+
+        BinaryObject binObj = binBuilder.build();
+
+        CU.validateCacheKey(binObj);
+
+        BinaryObjectBuilderImpl binBuilder2 = new BinaryObjectBuilderImpl((BinaryObjectImpl) binObj);
+
+        CU.validateCacheKey(binBuilder2.build());
+    }
+
+    /**
+     * @return Binary marshaller.
+     * @throws IgniteCheckedException if failed.
+     */
+    private BinaryMarshaller binaryMarshaller() throws IgniteCheckedException {
+        IgniteConfiguration iCfg = new IgniteConfiguration();
+
+        BinaryConfiguration bCfg = new BinaryConfiguration();
+
+        iCfg.setBinaryConfiguration(bCfg);
+
+        BinaryContext ctx = new BinaryContext(BinaryCachingMetadataHandler.create(), iCfg, new NullLogger());
+
+        BinaryMarshaller marsh = new BinaryMarshaller();
+
+        marsh.setContext(new MarshallerContextTestImpl(null));
+
+        IgniteUtils.invoke(BinaryMarshaller.class, marsh, "setBinaryContext", ctx, iCfg);
+
+        return marsh;
+    }
+
+    /**
+     * @return Binary context.
+     * @throws IgniteCheckedException if failed.
+     */
+    private BinaryContext binaryContext() throws IgniteCheckedException {
+        GridBinaryMarshaller impl = U.field(binaryMarshaller(), "impl");
+
+        return impl.context();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/e3dfdecc/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridLocalCacheStoreManagerDeserializationTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridLocalCacheStoreManagerDeserializationTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridLocalCacheStoreManagerDeserializationTest.java
index 827b3cf..b86fe53 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridLocalCacheStoreManagerDeserializationTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridLocalCacheStoreManagerDeserializationTest.java
@@ -86,7 +86,7 @@ public class GridLocalCacheStoreManagerDeserializationTest extends GridCacheStor
 
         final BinaryObjectBuilder builder = grid.binary().builder("custom_type");
 
-        final BinaryObject entity = builder.setField("id", 0).build();
+        final BinaryObject entity = builder.setField("id", 0).hashCode(0).build();
 
         cache.put(entity, entity);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/e3dfdecc/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java
index 3a510c3..7936ea4 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java
@@ -28,6 +28,7 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
+import java.util.concurrent.Callable;
 import javax.cache.Cache;
 import javax.cache.processor.EntryProcessor;
 import javax.cache.processor.EntryProcessorException;
@@ -887,6 +888,36 @@ public abstract class GridCacheBinaryObjectsAbstractSelfTest extends GridCommonA
     }
 
     /**
+     * @throws Exception If failed.
+     */
+    @SuppressWarnings({ "ThrowableResultOfMethodCallIgnored", "unchecked" })
+    public void testPutWithoutHashCode() throws Exception {
+        final IgniteCache c = jcache(0);
+
+        GridTestUtils.assertThrows(log, new Callable<Object>() {
+            /** {@inheritDoc} */
+            @Override public Object call() throws Exception {
+                c.put(new TestObject(5), 5);
+                return null;
+            }
+        }, IllegalArgumentException.class, "Cache key must override hashCode() and equals() methods: ");
+
+        BinaryObjectBuilder bldr = grid(0).binary().builder(TestObject.class.getName());
+        bldr.setField("val", 5);
+
+        final BinaryObject binKey = bldr.build();
+
+        GridTestUtils.assertThrows(log, new Callable<Object>() {
+            /** {@inheritDoc} */
+            @Override public Object call() throws Exception {
+                c.put(binKey, 5);
+                return null;
+            }
+        }, IllegalArgumentException.class, "Cache key created with BinaryBuilder is missing hash code - " +
+            "please set it explicitly during building by using BinaryBuilder.hashCode(int)");
+    }
+
+    /**
      * @throws Exception if failed.
      */
     public void testKeepBinaryTxOverwrite() throws Exception {


[21/50] [abbrv] ignite git commit: Merge branch 'ignite-1.7.2' into ignite-1.7.3

Posted by sh...@apache.org.
Merge branch 'ignite-1.7.2' into ignite-1.7.3


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

Branch: refs/heads/ignite-2788
Commit: b5902336ba7a2c313b61050e38d7e033d310d55f
Parents: c7fa918 a4d7aa3
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Mon Oct 3 10:47:13 2016 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Mon Oct 3 10:47:13 2016 +0300

----------------------------------------------------------------------
 .../cache/GridCacheAbstractFullApiSelfTest.java    | 11 ++++++++---
 .../IgniteCacheConfigVariationsFullApiTest.java    |  7 ++++++-
 ...heAtomicClientOnlyMultiNodeFullApiSelfTest.java | 17 +++++++++++++++--
 ...acheAtomicNearOnlyMultiNodeFullApiSelfTest.java | 17 +++++++++++++++--
 .../IgniteSessionStateStoreProviderTest.cs         | 13 +++++++++++++
 .../IgniteOutputCacheProvider.cs                   |  2 +-
 .../IgniteSessionStateStoreProvider.cs             |  8 +++++++-
 .../dotnet/Apache.Ignite.AspNet/Impl/ConfigUtil.cs | 13 +++++++------
 8 files changed, 72 insertions(+), 16 deletions(-)
----------------------------------------------------------------------



[23/50] [abbrv] ignite git commit: IGNITE-1629 .NET: Introduced native logging facility

Posted by sh...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core/Apache.Ignite.Core.csproj
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Apache.Ignite.Core.csproj b/modules/platforms/dotnet/Apache.Ignite.Core/Apache.Ignite.Core.csproj
index 59bf090..db2a96b 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Apache.Ignite.Core.csproj
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Apache.Ignite.Core.csproj
@@ -308,7 +308,6 @@
     <Compile Include="Impl\Common\IgniteConfigurationXmlSerializer.cs" />
     <Compile Include="Impl\Common\IgniteHome.cs" />
     <Compile Include="Impl\Common\LoadedAssembliesResolver.cs" />
-    <Compile Include="Impl\Common\Logger.cs" />
     <Compile Include="Impl\Common\ResizeableArray.cs" />
     <Compile Include="Impl\Common\TypeCaster.cs" />
     <Compile Include="Impl\Common\TypeStringConverter.cs" />
@@ -343,6 +342,7 @@
     <Compile Include="Impl\Ignite.cs" />
     <Compile Include="Impl\IgniteManager.cs" />
     <Compile Include="Impl\IgniteProxy.cs" />
+    <Compile Include="Impl\Log\JavaLogger.cs" />
     <Compile Include="Impl\PlatformTarget.cs" />
     <Compile Include="Impl\IgniteUtils.cs" />
     <Compile Include="Impl\Handle\Handle.cs" />
@@ -435,6 +435,10 @@
     <Compile Include="Interop\Package-Info.cs" />
     <Compile Include="Lifecycle\ClientReconnectEventArgs.cs" />
     <Compile Include="Lifecycle\Package-Info.cs" />
+    <Compile Include="Log\CategoryLogger.cs" />
+    <Compile Include="Log\ILogger.cs" />
+    <Compile Include="Log\LoggerExtensions.cs" />
+    <Compile Include="Log\LogLevel.cs" />
     <Compile Include="Messaging\Package-Info.cs" />
     <Compile Include="Package-Info.cs" />
     <Compile Include="Lifecycle\ILifecycleBean.cs" />

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheConfiguration.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheConfiguration.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheConfiguration.cs
index e5e79cd..cb15564 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheConfiguration.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheConfiguration.cs
@@ -23,6 +23,7 @@ namespace Apache.Ignite.Core.Cache.Configuration
     using System;
     using System.Collections.Generic;
     using System.ComponentModel;
+    using System.Diagnostics;
     using System.Diagnostics.CodeAnalysis;
     using System.Linq;
     using Apache.Ignite.Core.Binary;
@@ -35,6 +36,7 @@ namespace Apache.Ignite.Core.Cache.Configuration
     using Apache.Ignite.Core.Common;
     using Apache.Ignite.Core.Impl.Binary;
     using Apache.Ignite.Core.Impl.Cache.Affinity;
+    using Apache.Ignite.Core.Log;
 
     /// <summary>
     /// Defines grid cache configuration.
@@ -353,6 +355,21 @@ namespace Apache.Ignite.Core.Cache.Configuration
         }
 
         /// <summary>
+        /// Validates this instance and outputs information to the log, if necessary.
+        /// </summary>
+        internal void Validate(ILogger log)
+        {
+            Debug.Assert(log != null);
+
+            var entities = QueryEntities;
+            if (entities != null)
+            {
+                foreach (var entity in entities)
+                    entity.Validate(log, string.Format("Validating cache configuration '{0}'", Name ?? ""));
+            }
+        }
+
+        /// <summary>
         /// Gets or sets write synchronization mode. This mode controls whether the main        
         /// caller should wait for update on other nodes to complete or not.
         /// </summary>
@@ -669,7 +686,7 @@ namespace Apache.Ignite.Core.Cache.Configuration
         /// <summary>
         /// Gets or sets the affinity function to provide mapping from keys to nodes.
         /// <para />
-        /// Predefined implementations: 
+        /// Predefined implementations:
         /// <see cref="RendezvousAffinityFunction"/>, <see cref="FairAffinityFunction"/>.
         /// </summary>
         public IAffinityFunction AffinityFunction { get; set; }

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QueryEntity.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QueryEntity.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QueryEntity.cs
index e6eceb8..adfe9e1 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QueryEntity.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QueryEntity.cs
@@ -27,6 +27,7 @@ namespace Apache.Ignite.Core.Cache.Configuration
     using System.Reflection;
     using Apache.Ignite.Core.Binary;
     using Apache.Ignite.Core.Impl.Binary;
+    using Apache.Ignite.Core.Log;
 
     /// <summary>
     /// Query entity is a description of cache entry (composed of key and value) 
@@ -104,7 +105,7 @@ namespace Apache.Ignite.Core.Cache.Configuration
 
                 KeyTypeName = value == null
                     ? null
-                    : (JavaTypes.GetJavaTypeNameAndLogWarning(value) ?? BinaryUtils.GetTypeName(value));
+                    : (JavaTypes.GetJavaTypeName(value) ?? BinaryUtils.GetTypeName(value));
 
                 _keyType = value;
             }
@@ -140,7 +141,7 @@ namespace Apache.Ignite.Core.Cache.Configuration
 
                 ValueTypeName = value == null
                     ? null
-                    : (JavaTypes.GetJavaTypeNameAndLogWarning(value) ?? BinaryUtils.GetTypeName(value));
+                    : (JavaTypes.GetJavaTypeName(value) ?? BinaryUtils.GetTypeName(value));
 
                 _valueType = value;
             }
@@ -239,6 +240,26 @@ namespace Apache.Ignite.Core.Cache.Configuration
                 writer.WriteInt(0);
         }
 
+        /// <summary>
+        /// Validates this instance and outputs information to the log, if necessary.
+        /// </summary>
+        internal void Validate(ILogger log, string logInfo)
+        {
+            Debug.Assert(log != null);
+            Debug.Assert(logInfo != null);
+
+            logInfo += string.Format(", QueryEntity '{0}:{1}'", _keyTypeName ?? "", _valueTypeName ?? "");
+
+            JavaTypes.LogIndirectMappingWarning(_keyType, log, logInfo);
+            JavaTypes.LogIndirectMappingWarning(_valueType, log, logInfo);
+
+            var fields = Fields;
+            if (fields != null)
+            {
+                foreach (var field in fields)
+                    field.Validate(log, logInfo);
+            }
+        }
 
         /// <summary>
         /// Rescans the attributes in <see cref="KeyType"/> and <see cref="ValueType"/>.

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QueryField.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QueryField.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QueryField.cs
index b11e53d..12028e2 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QueryField.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QueryField.cs
@@ -20,8 +20,10 @@
 namespace Apache.Ignite.Core.Cache.Configuration
 {
     using System;
+    using System.Diagnostics;
     using Apache.Ignite.Core.Impl.Binary;
     using Apache.Ignite.Core.Impl.Common;
+    using Apache.Ignite.Core.Log;
 
     /// <summary>
     /// Represents a queryable field.
@@ -71,7 +73,7 @@ namespace Apache.Ignite.Core.Cache.Configuration
         }
 
         /// <summary>
-        /// Gets the field name.
+        /// Gets or sets the field name.
         /// </summary>
         public string Name { get; set; }
 
@@ -87,7 +89,7 @@ namespace Apache.Ignite.Core.Cache.Configuration
             {
                 FieldTypeName = value == null
                     ? null
-                    : (JavaTypes.GetJavaTypeNameAndLogWarning(value) ?? BinaryUtils.GetTypeName(value));
+                    : (JavaTypes.GetJavaTypeName(value) ?? BinaryUtils.GetTypeName(value));
 
                 _type = value;
             }
@@ -105,5 +107,18 @@ namespace Apache.Ignite.Core.Cache.Configuration
                 _type = null;
             }
         }
+
+        /// <summary>
+        /// Validates this instance and outputs information to the log, if necessary.
+        /// </summary>
+        internal void Validate(ILogger log, string logInfo)
+        {
+            Debug.Assert(log != null);
+            Debug.Assert(logInfo != null);
+
+            logInfo += string.Format(", QueryField '{0}'", Name);
+
+            JavaTypes.LogIndirectMappingWarning(_type, log, logInfo);
+        }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core/IIgnite.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/IIgnite.cs b/modules/platforms/dotnet/Apache.Ignite.Core/IIgnite.cs
index a16ae3a..91aa1dd 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/IIgnite.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/IIgnite.cs
@@ -29,6 +29,7 @@ namespace Apache.Ignite.Core
     using Apache.Ignite.Core.Datastream;
     using Apache.Ignite.Core.DataStructures;
     using Apache.Ignite.Core.Events;
+    using Apache.Ignite.Core.Log;
     using Apache.Ignite.Core.Lifecycle;
     using Apache.Ignite.Core.Messaging;
     using Apache.Ignite.Core.Services;
@@ -277,6 +278,13 @@ namespace Apache.Ignite.Core
         ICollection<string> GetCacheNames();
 
         /// <summary>
+        /// Gets the logger.
+        /// <para />
+        /// See <see cref="IgniteConfiguration.Logger"/> for customization.
+        /// </summary>
+        ILogger Logger { get; }
+
+        /// <summary>
         /// Occurs when node begins to stop. Node is fully functional at this point.
         /// See also: <see cref="LifecycleEventType.BeforeNodeStop"/>.
         /// </summary>

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
index 6bdf1ab..8e16fb5 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
@@ -38,6 +38,7 @@
     using Apache.Ignite.Core.Impl.Binary;
     using Apache.Ignite.Core.Impl.Common;
     using Apache.Ignite.Core.Lifecycle;
+    using Apache.Ignite.Core.Log;
     using Apache.Ignite.Core.Transactions;
     using BinaryReader = Apache.Ignite.Core.Impl.Binary.BinaryReader;
     using BinaryWriter = Apache.Ignite.Core.Impl.Binary.BinaryWriter;
@@ -292,6 +293,21 @@
         }
 
         /// <summary>
+        /// Validates this instance and outputs information to the log, if necessary.
+        /// </summary>
+        internal void Validate(ILogger log)
+        {
+            Debug.Assert(log != null);
+
+            var ccfg = CacheConfiguration;
+            if (ccfg != null)
+            {
+                foreach (var cfg in ccfg)
+                    cfg.Validate(log);
+            }
+        }
+
+        /// <summary>
         /// Reads data from specified reader into current instance.
         /// </summary>
         /// <param name="r">The binary reader.</param>
@@ -398,6 +414,7 @@
             Assemblies = cfg.Assemblies;
             SuppressWarnings = cfg.SuppressWarnings;
             LifecycleBeans = cfg.LifecycleBeans;
+            Logger = cfg.Logger;
             JvmInitialMemoryMb = cfg.JvmInitialMemoryMb;
             JvmMaxMemoryMb = cfg.JvmMaxMemoryMb;
         }
@@ -678,5 +695,76 @@
             get { return _isLateAffinityAssignment ?? DefaultIsLateAffinityAssignment; }
             set { _isLateAffinityAssignment = value; }
         }
+
+        /// <summary>
+        /// Serializes this instance to the specified XML writer.
+        /// </summary>
+        /// <param name="writer">The writer.</param>
+        /// <param name="rootElementName">Name of the root element.</param>
+        public void ToXml(XmlWriter writer, string rootElementName)
+        {
+            IgniteArgumentCheck.NotNull(writer, "writer");
+            IgniteArgumentCheck.NotNullOrEmpty(rootElementName, "rootElementName");
+
+            IgniteConfigurationXmlSerializer.Serialize(this, writer, rootElementName);
+        }
+
+        /// <summary>
+        /// Serializes this instance to an XML string.
+        /// </summary>
+        public string ToXml()
+        {
+            var sb = new StringBuilder();
+
+            var settings = new XmlWriterSettings
+            {
+                Indent = true
+            };
+
+            using (var xmlWriter = XmlWriter.Create(sb, settings))
+            {
+                ToXml(xmlWriter, "igniteConfiguration");
+            }
+
+            return sb.ToString();
+        }
+
+        /// <summary>
+        /// Deserializes IgniteConfiguration from the XML reader.
+        /// </summary>
+        /// <param name="reader">The reader.</param>
+        /// <returns>Deserialized instance.</returns>
+        public static IgniteConfiguration FromXml(XmlReader reader)
+        {
+            IgniteArgumentCheck.NotNull(reader, "reader");
+
+            return IgniteConfigurationXmlSerializer.Deserialize(reader);
+        }
+
+        /// <summary>
+        /// Deserializes IgniteConfiguration from the XML string.
+        /// </summary>
+        /// <param name="xml">Xml string.</param>
+        /// <returns>Deserialized instance.</returns>
+        public static IgniteConfiguration FromXml(string xml)
+        {
+            IgniteArgumentCheck.NotNullOrEmpty(xml, "xml");
+
+            using (var xmlReader = XmlReader.Create(new StringReader(xml)))
+            {
+                // Skip XML header.
+                xmlReader.MoveToContent();
+
+                return FromXml(xmlReader);
+            }
+        }
+
+        /// <summary>
+        /// Gets or sets the logger.
+        /// <para />
+        /// If no logger is set, logging is delegated to Java, which uses the logger defined in Spring XML (if present)
+        /// or logs to console otherwise.
+        /// </summary>
+        public ILogger Logger { get; set; }
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
index 24eaa30..916fd20 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
@@ -357,6 +357,18 @@
                         <xs:attribute name="pessimisticTransactionLogLinger" type="xs:string" />
                     </xs:complexType>
                 </xs:element>
+                <xs:element name="logger" minOccurs="0">
+                    <xs:annotation>
+                        <xs:documentation>The logger. If no logger is set, logging is delegated to Java, which uses the logger defined in Spring XML (if present) or logs to console otherwise.</xs:documentation>
+                    </xs:annotation>
+                    <xs:complexType>
+                        <xs:attribute name="type" type="xs:string" use="required">
+                            <xs:annotation>
+                                <xs:documentation>Assembly-qualified type name.</xs:documentation>
+                            </xs:annotation>
+                        </xs:attribute>
+                    </xs:complexType>
+                </xs:element>
             </xs:all>
             <xs:attribute name="gridName" type="xs:string" />
             <xs:attribute name="jvmDllPath" type="xs:string" />

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core/Ignition.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Ignition.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Ignition.cs
index 552a7f2..7b023f3 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Ignition.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Ignition.cs
@@ -35,9 +35,11 @@ namespace Apache.Ignite.Core
     using Apache.Ignite.Core.Impl.Cache.Affinity;
     using Apache.Ignite.Core.Impl.Common;
     using Apache.Ignite.Core.Impl.Handle;
+    using Apache.Ignite.Core.Impl.Log;
     using Apache.Ignite.Core.Impl.Memory;
     using Apache.Ignite.Core.Impl.Unmanaged;
     using Apache.Ignite.Core.Lifecycle;
+    using Apache.Ignite.Core.Log;
     using Apache.Ignite.Core.Resource;
     using BinaryReader = Apache.Ignite.Core.Impl.Binary.BinaryReader;
     using UU = Apache.Ignite.Core.Impl.Unmanaged.UnmanagedUtils;
@@ -201,15 +203,21 @@ namespace Apache.Ignite.Core
 
             lock (SyncRoot)
             {
+                // 0. Init logger
+                var log = cfg.Logger ?? new JavaLogger();
+
+                log.Debug("Starting Ignite.NET " + Assembly.GetExecutingAssembly().GetName().Version);
+
                 // 1. Check GC settings.
-                CheckServerGc(cfg);
+                CheckServerGc(cfg, log);
 
                 // 2. Create context.
-                IgniteUtils.LoadDlls(cfg.JvmDllPath);
+                IgniteUtils.LoadDlls(cfg.JvmDllPath, log);
 
-                var cbs = new UnmanagedCallbacks();
+                var cbs = new UnmanagedCallbacks(log);
 
-                IgniteManager.CreateJvmContext(cfg, cbs);
+                IgniteManager.CreateJvmContext(cfg, cbs, log);
+                log.Debug("JVM started.");
 
                 var gridName = cfg.GridName;
 
@@ -221,12 +229,17 @@ namespace Apache.Ignite.Core
                 try
                 {
                     // 4. Initiate Ignite start.
-                    UU.IgnitionStart(cbs.Context, cfg.SpringConfigUrl, gridName, ClientMode);
+                    UU.IgnitionStart(cbs.Context, cfg.SpringConfigUrl, gridName, ClientMode, cfg.Logger != null);
+
 
                     // 5. At this point start routine is finished. We expect STARTUP object to have all necessary data.
                     var node = _startup.Ignite;
                     interopProc = node.InteropProcessor;
 
+                    var javaLogger = log as JavaLogger;
+                    if (javaLogger != null)
+                        javaLogger.SetProcessor(interopProc);
+
                     // 6. On-start callback (notify lifecycle components).
                     node.OnStart();
 
@@ -271,10 +284,11 @@ namespace Apache.Ignite.Core
         /// Check whether GC is set to server mode.
         /// </summary>
         /// <param name="cfg">Configuration.</param>
-        private static void CheckServerGc(IgniteConfiguration cfg)
+        /// <param name="log">Log.</param>
+        private static void CheckServerGc(IgniteConfiguration cfg, ILogger log)
         {
             if (!cfg.SuppressWarnings && !GCSettings.IsServerGC && Interlocked.CompareExchange(ref _gcWarn, 1, 0) == 0)
-                Logger.LogWarning("GC server mode is not enabled, this could lead to less " +
+                log.Warn("GC server mode is not enabled, this could lead to less " +
                     "than optimal performance on multi-core machines (to enable see " +
                     "http://msdn.microsoft.com/en-us/library/ms229357(v=vs.110).aspx).");
         }
@@ -285,14 +299,15 @@ namespace Apache.Ignite.Core
         /// <param name="inStream">Input stream with data.</param>
         /// <param name="outStream">Output stream.</param>
         /// <param name="handleRegistry">Handle registry.</param>
-        internal static void OnPrepare(PlatformMemoryStream inStream, PlatformMemoryStream outStream, 
-            HandleRegistry handleRegistry)
+        /// <param name="log">Log.</param>
+        internal static void OnPrepare(PlatformMemoryStream inStream, PlatformMemoryStream outStream,
+            HandleRegistry handleRegistry, ILogger log)
         {
             try
             {
                 BinaryReader reader = BinaryUtils.Marshaller.StartUnmarshal(inStream);
 
-                PrepareConfiguration(reader, outStream);
+                PrepareConfiguration(reader, outStream, log);
 
                 PrepareLifecycleBeans(reader, outStream, handleRegistry);
 
@@ -313,7 +328,8 @@ namespace Apache.Ignite.Core
         /// </summary>
         /// <param name="reader">Reader.</param>
         /// <param name="outStream">Response stream.</param>
-        private static void PrepareConfiguration(BinaryReader reader, PlatformMemoryStream outStream)
+        /// <param name="log">Log.</param>
+        private static void PrepareConfiguration(BinaryReader reader, PlatformMemoryStream outStream, ILogger log)
         {
             // 1. Load assemblies.
             IgniteConfiguration cfg = _startup.Configuration;
@@ -334,6 +350,7 @@ namespace Apache.Ignite.Core
             _startup.Marshaller = new Marshaller(cfg.BinaryConfiguration);
 
             // 3. Send configuration details to Java
+            cfg.Validate(log);
             cfg.Write(_startup.Marshaller.StartMarshal(outStream));
         }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/JavaTypes.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/JavaTypes.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/JavaTypes.cs
index f30264d..a8d94f2 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/JavaTypes.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/JavaTypes.cs
@@ -20,7 +20,7 @@ namespace Apache.Ignite.Core.Impl.Binary
     using System;
     using System.Collections.Generic;
     using System.Linq;
-    using Apache.Ignite.Core.Impl.Common;
+    using Apache.Ignite.Core.Log;
 
     /// <summary>
     /// Provides mapping between Java and .NET basic types.
@@ -67,26 +67,33 @@ namespace Apache.Ignite.Core.Impl.Binary
 
         /// <summary>
         /// Gets the corresponding Java type name.
-        /// Logs a warning for indirectly mapped types.
         /// </summary>
-        public static string GetJavaTypeNameAndLogWarning(Type type)
+        public static string GetJavaTypeName(Type type)
         {
             if (type == null)
                 return null;
 
             string res;
 
-            if (!NetToJava.TryGetValue(type, out res))
-                return null;
+            return NetToJava.TryGetValue(type, out res) ? res : null;
+        }
 
-            Type directType;
+        /// <summary>
+        /// Logs a warning for indirectly mapped types.
+        /// </summary>
+        public static void LogIndirectMappingWarning(Type type, ILogger log, string logInfo)
+        {
+            if (type == null)
+                return;
 
-            if (IndirectMappingTypes.TryGetValue(type, out directType))
-                Logger.LogWarning("Type '{0}' maps to Java type '{1}' using unchecked conversion. " +
-                                  "This may cause issues in SQL queries. " +
-                                  "You can use '{2}' instead to achieve direct mapping.", type, res, directType);
+            Type directType;
+            if (!IndirectMappingTypes.TryGetValue(type, out directType))
+                return;
 
-            return res;
+            log.Warn("{0}: Type '{1}' maps to Java type '{2}' using unchecked conversion. " +
+                     "This may cause issues in SQL queries. " +
+                     "You can use '{3}' instead to achieve direct mapping.",
+                logInfo, type, NetToJava[type], directType);
         }
 
         /// <summary>

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Common/Logger.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Common/Logger.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Common/Logger.cs
deleted file mode 100644
index cab5afc..0000000
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Common/Logger.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-\ufeff/*
-* 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.
-*/
-
-namespace Apache.Ignite.Core.Impl.Common
-{
-    using System;
-
-    /// <summary>
-    /// Console logger.
-    /// </summary>
-    internal static class Logger
-    {
-        /// <summary>
-        /// Logs the warning.
-        /// </summary>
-        /// <param name="warning">The warning.</param>
-        /// <param name="args">The arguments.</param>
-        public static void LogWarning(string warning, params object[] args)
-        {
-            Console.WriteLine("WARNING: " + string.Format(warning, args));
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs
index 0fac417..2a3a014 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs
@@ -43,6 +43,7 @@ namespace Apache.Ignite.Core.Impl
     using Apache.Ignite.Core.Impl.Transactions;
     using Apache.Ignite.Core.Impl.Unmanaged;
     using Apache.Ignite.Core.Lifecycle;
+    using Apache.Ignite.Core.Log;
     using Apache.Ignite.Core.Messaging;
     using Apache.Ignite.Core.Services;
     using Apache.Ignite.Core.Transactions;
@@ -407,6 +408,7 @@ namespace Apache.Ignite.Core.Impl
             NearCacheConfiguration nearConfiguration)
         {
             IgniteArgumentCheck.NotNull(configuration, "configuration");
+            configuration.Validate(Logger);
 
             using (var stream = IgniteManager.Memory.Allocate().GetStream())
             {
@@ -445,6 +447,7 @@ namespace Apache.Ignite.Core.Impl
             NearCacheConfiguration nearConfiguration)
         {
             IgniteArgumentCheck.NotNull(configuration, "configuration");
+            configuration.Validate(Logger);
 
             using (var stream = IgniteManager.Memory.Allocate().GetStream())
             {
@@ -674,6 +677,12 @@ namespace Apache.Ignite.Core.Impl
         }
 
         /** <inheritdoc /> */
+        public ILogger Logger
+        {
+            get { return _cbs.Log; }
+        }
+
+        /** <inheritdoc /> */
         public event EventHandler Stopping;
 
         /** <inheritdoc /> */

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteManager.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteManager.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteManager.cs
index 05bc786..ee54218 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteManager.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteManager.cs
@@ -27,6 +27,7 @@ namespace Apache.Ignite.Core.Impl
     using Apache.Ignite.Core.Impl.Common;
     using Apache.Ignite.Core.Impl.Memory;
     using Apache.Ignite.Core.Impl.Unmanaged;
+    using Apache.Ignite.Core.Log;
     using UU = Apache.Ignite.Core.Impl.Unmanaged.UnmanagedUtils;
 
     /// <summary>
@@ -57,8 +58,9 @@ namespace Apache.Ignite.Core.Impl
         /// </summary>
         /// <param name="cfg">Configuration.</param>
         /// <param name="cbs">Callbacks.</param>
+        /// <param name="log"></param>
         /// <returns>Context.</returns>
-        internal static void CreateJvmContext(IgniteConfiguration cfg, UnmanagedCallbacks cbs)
+        internal static void CreateJvmContext(IgniteConfiguration cfg, UnmanagedCallbacks cbs, ILogger log)
         {
             lock (SyncRoot)
             {
@@ -69,7 +71,7 @@ namespace Apache.Ignite.Core.Impl
                 {
                     if (!_jvmCfg.Equals(jvmCfg))
                     {
-                        Logger.LogWarning("Attempting to start Ignite node with different Java " +
+                        log.Warn("Attempting to start Ignite node with different Java " +
                             "configuration; current Java configuration will be ignored (consider " +
                             "starting node in separate process) [oldConfig=" + _jvmCfg +
                             ", newConfig=" + jvmCfg + ']');

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteProxy.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteProxy.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteProxy.cs
index 12de847..914a87d 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteProxy.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteProxy.cs
@@ -31,6 +31,7 @@ namespace Apache.Ignite.Core.Impl
     using Apache.Ignite.Core.Events;
     using Apache.Ignite.Core.Impl.Binary;
     using Apache.Ignite.Core.Impl.Cluster;
+    using Apache.Ignite.Core.Log;
     using Apache.Ignite.Core.Lifecycle;
     using Apache.Ignite.Core.Messaging;
     using Apache.Ignite.Core.Services;
@@ -392,6 +393,12 @@ namespace Apache.Ignite.Core.Impl
         }
 
         /** <inheritdoc /> */
+        public ILogger Logger
+        {
+            get { return _ignite.Logger; }
+        }
+
+        /** <inheritdoc /> */
         public event EventHandler Stopping
         {
             add { _ignite.Stopping += value; }

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteUtils.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteUtils.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteUtils.cs
index 048c8ac..70d483d 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteUtils.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteUtils.cs
@@ -35,6 +35,7 @@ namespace Apache.Ignite.Core.Impl
     using Apache.Ignite.Core.Impl.Cluster;
     using Apache.Ignite.Core.Impl.Common;
     using Apache.Ignite.Core.Impl.Unmanaged;
+    using Apache.Ignite.Core.Log;
     using Microsoft.Win32;
     using BinaryReader = Apache.Ignite.Core.Impl.Binary.BinaryReader;
 
@@ -124,12 +125,17 @@ namespace Apache.Ignite.Core.Impl
         /// Load JVM DLL if needed.
         /// </summary>
         /// <param name="configJvmDllPath">JVM DLL path from config.</param>
-        public static void LoadDlls(string configJvmDllPath)
+        /// <param name="log">Log.</param>
+        public static void LoadDlls(string configJvmDllPath, ILogger log)
         {
-            if (_loaded) return;
+            if (_loaded)
+            {
+                log.Debug("JNI dll is already loaded.");
+                return;
+            }
 
             // 1. Load JNI dll.
-            LoadJvmDll(configJvmDllPath);
+            LoadJvmDll(configJvmDllPath, log);
 
             // 2. Load GG JNI dll.
             UnmanagedUtils.Initialize();
@@ -190,17 +196,25 @@ namespace Apache.Ignite.Core.Impl
         /// <summary>
         /// Loads the JVM DLL.
         /// </summary>
-        private static void LoadJvmDll(string configJvmDllPath)
+        private static void LoadJvmDll(string configJvmDllPath, ILogger log)
         {
             var messages = new List<string>();
             foreach (var dllPath in GetJvmDllPaths(configJvmDllPath))
             {
+                log.Debug("Trying to load JVM dll from [option={0}, path={1}]...", dllPath.Key, dllPath.Value);
+
                 var errCode = LoadDll(dllPath.Value, FileJvmDll);
                 if (errCode == 0)
+                {
+                    log.Debug("jvm.dll successfully loaded from [option={0}, path={1}]", dllPath.Key, dllPath.Value);
                     return;
+                }
+
+                var message = string.Format(CultureInfo.InvariantCulture, "[option={0}, path={1}, error={2}]",
+                                                  dllPath.Key, dllPath.Value, FormatWin32Error(errCode));
+                messages.Add(message);
 
-                messages.Add(string.Format(CultureInfo.InvariantCulture, "[option={0}, path={1}, error={2}]",
-                    dllPath.Key, dllPath.Value, FormatWin32Error(errCode)));
+                log.Debug("Failed to load jvm.dll: " + message);
 
                 if (dllPath.Value == configJvmDllPath)
                     break;  // if configJvmDllPath is specified and is invalid - do not try other options

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Log/JavaLogger.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Log/JavaLogger.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Log/JavaLogger.cs
new file mode 100644
index 0000000..23e7a37
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Log/JavaLogger.cs
@@ -0,0 +1,110 @@
+\ufeff/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Impl.Log
+{
+    using System;
+    using System.Collections.Generic;
+    using System.Diagnostics;
+    using System.Linq;
+    using Apache.Ignite.Core.Impl.Unmanaged;
+    using Apache.Ignite.Core.Log;
+
+    /// <summary>
+    /// Logger that delegates to Java.
+    /// </summary>
+    internal class JavaLogger : ILogger
+    {
+        /** */
+        private IUnmanagedTarget _proc;
+
+        /** */
+        private readonly List<LogLevel> _enabledLevels = new List<LogLevel>(5);
+
+        /** */
+        private readonly List<Tuple<LogLevel, string, string, string>> _pendingLogs 
+            = new List<Tuple<LogLevel, string, string, string>>();
+
+        /** */
+        private readonly object _syncRoot = new object();
+
+        /// <summary>
+        /// Sets the processor.
+        /// </summary>
+        /// <param name="proc">The proc.</param>
+        public void SetProcessor(IUnmanagedTarget proc)
+        {
+            Debug.Assert(proc != null);
+
+            lock (_syncRoot)
+            {
+                _proc = proc;
+
+                // Preload enabled levels.
+                _enabledLevels.AddRange(
+                    new[] { LogLevel.Trace, LogLevel.Debug, LogLevel.Info, LogLevel.Warn, LogLevel.Error }
+                        .Where(x => UnmanagedUtils.ProcessorLoggerIsLevelEnabled(proc, (int)x)));
+
+                foreach (var log in _pendingLogs)
+                {
+                    Log(log.Item1, log.Item2, log.Item3, log.Item4);
+                }
+            }
+        }
+
+        /** <inheritdoc /> */
+        public void Log(LogLevel level, string message, object[] args, IFormatProvider formatProvider, string category,
+            string nativeErrorInfo, Exception ex)
+        {
+            // Java error info should not go back to Java.
+            // Either we log in .NET, and Java sends us logs, or we log in Java, and .NET sends logs, not both.
+            Debug.Assert(nativeErrorInfo == null);
+
+            lock (_syncRoot)
+            {
+                if (!IsEnabled(level))
+                    return;
+
+                var msg = args == null ? message : string.Format(formatProvider, message, args);
+                var err = ex != null ? ex.ToString() : null;
+
+                if (_proc != null)
+                    Log(level, msg, category, err);
+                else
+                    _pendingLogs.Add(Tuple.Create(level, msg, category, err));
+            }
+        }
+
+        /** <inheritdoc /> */
+        public bool IsEnabled(LogLevel level)
+        {
+            lock (_syncRoot)
+            {
+                return _proc == null || _enabledLevels.Contains(level);
+            }
+        }
+
+        /// <summary>
+        /// Logs the message.
+        /// </summary>
+        private void Log(LogLevel level, string msg, string category, string err)
+        {
+            if (IsEnabled(level))
+                UnmanagedUtils.ProcessorLoggerLog(_proc, (int)level, msg, category, err);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/IgniteJniNativeMethods.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/IgniteJniNativeMethods.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/IgniteJniNativeMethods.cs
index 2da4192..8756dec 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/IgniteJniNativeMethods.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/IgniteJniNativeMethods.cs
@@ -113,6 +113,13 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
         [DllImport(IgniteUtils.FileIgniteJniDll, EntryPoint = "IgniteProcessorGetCacheNames")]
         public static extern void ProcessorGetCacheNames(void* ctx, void* obj, long memPtr);
 
+        [DllImport(IgniteUtils.FileIgniteJniDll, EntryPoint = "IgniteProcessorLoggerIsLevelEnabled")]
+        [return: MarshalAs(UnmanagedType.U1)]
+        public static extern bool ProcessorLoggerIsLevelEnabled(void* ctx, void* obj, int level);
+
+        [DllImport(IgniteUtils.FileIgniteJniDll, EntryPoint = "IgniteProcessorLoggerLog")]
+        public static extern void ProcessorLoggerLog(void* ctx, void* obj, int level, sbyte* messsage, sbyte* category, sbyte* errorInfo);
+
         [DllImport(IgniteUtils.FileIgniteJniDll, EntryPoint = "IgniteTargetInStreamOutLong")]
         public static extern long TargetInStreamOutLong(void* ctx, void* target, int opType, long memPtr);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbackHandlers.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbackHandlers.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbackHandlers.cs
index 51d9c74..6367e1e 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbackHandlers.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbackHandlers.cs
@@ -104,5 +104,8 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
         internal void* affinityFunctionAssignPartitions;
         internal void* affinityFunctionRemoveNode;
         internal void* affinityFunctionDestroy;
+
+        internal void* loggerLog;
+        internal void* loggerIsLevelEnabled;
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
index 223eb5b..493e061 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
@@ -22,6 +22,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
     using System.Diagnostics;
     using System.Diagnostics.CodeAnalysis;
     using System.IO;
+    using System.Globalization;
     using System.Runtime.InteropServices;
     using System.Threading;
     using Apache.Ignite.Core.Cache.Affinity;
@@ -38,11 +39,13 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
     using Apache.Ignite.Core.Impl.Datastream;
     using Apache.Ignite.Core.Impl.Events;
     using Apache.Ignite.Core.Impl.Handle;
+    using Apache.Ignite.Core.Impl.Log;
     using Apache.Ignite.Core.Impl.Memory;
     using Apache.Ignite.Core.Impl.Messaging;
     using Apache.Ignite.Core.Impl.Resource;
     using Apache.Ignite.Core.Impl.Services;
     using Apache.Ignite.Core.Lifecycle;
+    using Apache.Ignite.Core.Log;
     using Apache.Ignite.Core.Services;
     using UU = UnmanagedUtils;
 
@@ -89,6 +92,9 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
         [SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
         private readonly IntPtr _cbsPtr;
 
+        /** Log. */
+        private readonly ILogger _log;
+
         /** Error type: generic. */
         private const int ErrGeneric = 1;
 
@@ -98,7 +104,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
         /** Error type: attach. */
         private const int ErrJvmAttach = 3;
 
-        /** Opeartion: prepare .Net. */
+        /** Operation: prepare .Net. */
         private const int OpPrepareDotNet = 1;
 
         private delegate long CacheStoreCreateCallbackDelegate(void* target, long memPtr);
@@ -174,6 +180,9 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
         private delegate void OnClientDisconnectedDelegate(void* target);
         private delegate void OnClientReconnectedDelegate(void* target, bool clusterRestarted);
 
+        private delegate void LoggerLogDelegate(void* target, int level, sbyte* messageChars, int messageCharsLen, sbyte* categoryChars, int categoryCharsLen, sbyte* errorInfoChars, int errorInfoCharsLen, long memPtr);
+        private delegate bool LoggerIsLevelEnabledDelegate(void* target, int level);
+
         private delegate long AffinityFunctionInitDelegate(void* target, long memPtr, void* baseFunc);
         private delegate int AffinityFunctionPartitionDelegate(void* target, long ptr, long memPtr);
         private delegate void AffinityFunctionAssignPartitionsDelegate(void* target, long ptr, long inMemPtr, long outMemPtr);
@@ -183,10 +192,14 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
         private delegate void ConsoleWriteDelegate(sbyte* chars, int charsLen, bool isErr);
 
         /// <summary>
-        /// constructor.
+        /// Constructor.
         /// </summary>
-        public UnmanagedCallbacks()
+        /// <param name="log">Logger.</param>
+        public UnmanagedCallbacks(ILogger log)
         {
+            Debug.Assert(log != null);
+            _log = log;
+
             var cbs = new UnmanagedCallbackHandlers
             {
                 target = IntPtr.Zero.ToPointer(), // Target is not used in .Net as we rely on dynamic FP creation.
@@ -270,7 +283,10 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
                 affinityFunctionPartition = CreateFunctionPointer((AffinityFunctionPartitionDelegate)AffinityFunctionPartition),
                 affinityFunctionAssignPartitions = CreateFunctionPointer((AffinityFunctionAssignPartitionsDelegate)AffinityFunctionAssignPartitions),
                 affinityFunctionRemoveNode = CreateFunctionPointer((AffinityFunctionRemoveNodeDelegate)AffinityFunctionRemoveNode),
-                affinityFunctionDestroy = CreateFunctionPointer((AffinityFunctionDestroyDelegate)AffinityFunctionDestroy)
+                affinityFunctionDestroy = CreateFunctionPointer((AffinityFunctionDestroyDelegate)AffinityFunctionDestroy),
+
+                loggerLog = CreateFunctionPointer((LoggerLogDelegate)LoggerLog),
+                loggerIsLevelEnabled = CreateFunctionPointer((LoggerIsLevelEnabledDelegate)LoggerIsLevelEnabled)
             };
 
             _cbsPtr = Marshal.AllocHGlobal(UU.HandlersSize());
@@ -550,7 +566,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
         }
 
         /// <summary>
-        /// Get comptue job using it's GC handle pointer.
+        /// Get compute job using it's GC handle pointer.
         /// </summary>
         /// <param name="jobPtr">Job pointer.</param>
         /// <returns>Compute job.</returns>
@@ -883,7 +899,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
                         using (var inStream = IgniteManager.Memory.Get(arg1).GetStream())
                         using (var outStream = IgniteManager.Memory.Get(arg2).GetStream())
                         {
-                            Ignition.OnPrepare(inStream, outStream, _handleRegistry);
+                            Ignition.OnPrepare(inStream, outStream, _handleRegistry, _log);
 
                             return 0;
                         }
@@ -1131,6 +1147,40 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
             });
         }
 
+        private void LoggerLog(void* target, int level, sbyte* messageChars, int messageCharsLen, sbyte* categoryChars,
+            int categoryCharsLen, sbyte* errorInfoChars, int errorInfoCharsLen, long memPtr)
+        {
+            // When custom logger in .NET is not defined, Java should not call us.
+            Debug.Assert(!(_log is JavaLogger));
+
+            SafeCall(() =>
+            {
+                var message = IgniteUtils.Utf8UnmanagedToString(messageChars, messageCharsLen);
+                var category = IgniteUtils.Utf8UnmanagedToString(categoryChars, categoryCharsLen);
+                var nativeError = IgniteUtils.Utf8UnmanagedToString(errorInfoChars, errorInfoCharsLen);
+
+                Exception ex = null;
+
+                if (memPtr != 0 && _ignite != null)
+                {
+                    using (var stream = IgniteManager.Memory.Get(memPtr).GetStream())
+                    {
+                        ex = _ignite.Marshaller.Unmarshal<Exception>(stream);
+                    }
+                }
+
+                _log.Log((LogLevel) level, message, null, CultureInfo.InvariantCulture, category, nativeError, ex);
+            }, true);
+        }
+
+        private bool LoggerIsLevelEnabled(void* target, int level)
+        {
+            // When custom logger in .NET is not defined, Java should not call us.
+            Debug.Assert(!(_log is JavaLogger));
+
+            return SafeCall(() => _log.IsEnabled((LogLevel) level), true);
+        }
+
         private static void ConsoleWrite(sbyte* chars, int charsLen, bool isErr)
         {
             try
@@ -1246,6 +1296,8 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
             }
             catch (Exception e)
             {
+                _log.Error(e, "Failure in Java callback");
+
                 UU.ThrowToJava(_ctx.NativeContext, e);
             }
         }
@@ -1262,6 +1314,8 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
             }
             catch (Exception e)
             {
+                _log.Error(e, "Failure in Java callback");
+
                 UU.ThrowToJava(_ctx.NativeContext, e);
 
                 return default(T);
@@ -1287,6 +1341,14 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
         }
 
         /// <summary>
+        /// Gets the log.
+        /// </summary>
+        public ILogger Log
+        {
+            get { return _log; }
+        }
+
+        /// <summary>
         /// Create function pointer for the given function.
         /// </summary>
         private void* CreateFunctionPointer(Delegate del)
@@ -1323,6 +1385,8 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
             }
 
             _initEvent.Set();
+
+            ResourceProcessor.Inject(_log, grid);
         }
 
         /// <summary>

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedUtils.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedUtils.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedUtils.cs
index 0e9556d..f89caa8 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedUtils.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedUtils.cs
@@ -77,11 +77,12 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
         #region NATIVE METHODS: PROCESSOR
 
         internal static void IgnitionStart(UnmanagedContext ctx, string cfgPath, string gridName,
-            bool clientMode)
+            bool clientMode, bool userLogger)
         {
             using (var mem = IgniteManager.Memory.Allocate().GetStream())
             {
                 mem.WriteBool(clientMode);
+                mem.WriteBool(userLogger);
 
                 sbyte* cfgPath0 = IgniteUtils.StringToUtf8Unmanaged(cfgPath);
                 sbyte* gridName0 = IgniteUtils.StringToUtf8Unmanaged(gridName);
@@ -377,6 +378,30 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
             JNI.ProcessorGetCacheNames(target.Context, target.Target, memPtr);
         }
 
+        internal static bool ProcessorLoggerIsLevelEnabled(IUnmanagedTarget target, int level)
+        {
+            return JNI.ProcessorLoggerIsLevelEnabled(target.Context, target.Target, level);
+        }
+
+        internal static void ProcessorLoggerLog(IUnmanagedTarget target, int level, string message, string category, 
+            string errorInfo)
+        {
+            var message0 = IgniteUtils.StringToUtf8Unmanaged(message);
+            var category0 = IgniteUtils.StringToUtf8Unmanaged(category);
+            var errorInfo0 = IgniteUtils.StringToUtf8Unmanaged(errorInfo);
+
+            try
+            {
+                JNI.ProcessorLoggerLog(target.Context, target.Target, level, message0, category0, errorInfo0);
+            }
+            finally
+            {
+                Marshal.FreeHGlobal(new IntPtr(message0));
+                Marshal.FreeHGlobal(new IntPtr(category0));
+                Marshal.FreeHGlobal(new IntPtr(errorInfo0));
+            }
+        }
+
         #endregion
 
         #region NATIVE METHODS: TARGET

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core/Log/CategoryLogger.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Log/CategoryLogger.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Log/CategoryLogger.cs
new file mode 100644
index 0000000..2d7f876
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Log/CategoryLogger.cs
@@ -0,0 +1,82 @@
+\ufeff/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Log
+{
+    using System;
+    using Apache.Ignite.Core.Impl.Common;
+
+    /// <summary>
+    /// Wrapping logger with a predefined category.
+    /// <para />
+    /// When <see cref="Log"/> method is called, and <c>category</c> parameter is null, predefined category 
+    /// will be used.
+    /// </summary>
+    public class CategoryLogger : ILogger
+    {
+        /** Wrapped logger. */
+        private readonly ILogger _logger;
+
+        /** Category to use. */
+        private readonly string _category;
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="CategoryLogger"/> class.
+        /// </summary>
+        /// <param name="logger">The logger to wrap.</param>
+        /// <param name="category">The category.</param>
+        public CategoryLogger(ILogger logger, string category)
+        {
+            IgniteArgumentCheck.NotNull(logger, "log");
+
+            // If logger is already a CategoryLogger, get underlying logger instead to avoid unnecessary nesting.
+            var catLogger = logger as CategoryLogger;
+            _logger = catLogger != null ? catLogger._logger : logger;
+
+            _category = category;
+        }
+
+        /// <summary>
+        /// Logs the specified message.
+        /// </summary>
+        /// <param name="level">The level.</param>
+        /// <param name="message">The message.</param>
+        /// <param name="args">The arguments to format <paramref name="message" />.
+        /// Can be null (formatting will not occur).</param>
+        /// <param name="formatProvider">The format provider. Can be null if <paramref name="args" /> is null.</param>
+        /// <param name="category">The logging category name.</param>
+        /// <param name="nativeErrorInfo">The native error information.</param>
+        /// <param name="ex">The exception. Can be null.</param>
+        public void Log(LogLevel level, string message, object[] args, IFormatProvider formatProvider, string category,
+            string nativeErrorInfo, Exception ex)
+        {
+            _logger.Log(level, message, args, formatProvider, category ?? _category, nativeErrorInfo, ex);
+        }
+
+        /// <summary>
+        /// Determines whether the specified log level is enabled.
+        /// </summary>
+        /// <param name="level">The level.</param>
+        /// <returns>
+        /// Value indicating whether the specified log level is enabled
+        /// </returns>
+        public bool IsEnabled(LogLevel level)
+        {
+            return _logger.IsEnabled(level);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core/Log/ILogger.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Log/ILogger.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Log/ILogger.cs
new file mode 100644
index 0000000..a2f2f20
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Log/ILogger.cs
@@ -0,0 +1,51 @@
+\ufeff/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Log
+{
+    using System;
+
+    /// <summary>
+    /// Defines Ignite logging interface.
+    /// <para />
+    /// This interface only provides essential log methods.
+    /// All convenience overloads are in <see cref="LoggerExtensions"/>.
+    /// </summary>
+    public interface ILogger
+    {
+        /// <summary>
+        /// Logs the specified message.
+        /// </summary>
+        /// <param name="level">The level.</param>
+        /// <param name="message">The message.</param>
+        /// <param name="args">The arguments to format <paramref name="message" />.
+        /// Can be null (formatting will not occur).</param>
+        /// <param name="formatProvider">The format provider. Can be null if <paramref name="args" /> is null.</param>
+        /// <param name="category">The logging category name.</param>
+        /// <param name="nativeErrorInfo">The native error information.</param>
+        /// <param name="ex">The exception. Can be null.</param>
+        void Log(LogLevel level, string message, object[] args, IFormatProvider formatProvider, string category, 
+            string nativeErrorInfo, Exception ex);
+
+        /// <summary>
+        /// Determines whether the specified log level is enabled.
+        /// </summary>
+        /// <param name="level">The level.</param>
+        /// <returns>Value indicating whether the specified log level is enabled</returns>
+        bool IsEnabled(LogLevel level);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core/Log/LogLevel.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Log/LogLevel.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Log/LogLevel.cs
new file mode 100644
index 0000000..75694ab
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Log/LogLevel.cs
@@ -0,0 +1,53 @@
+\ufeff/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Log
+{
+    using System;
+
+    /// <summary>
+    /// Defines log levels.
+    /// </summary>
+    [Serializable]
+    public enum LogLevel
+    {
+        /// <summary>
+        /// Trace log level.
+        /// </summary>
+        Trace = 0,
+        
+        /// <summary>
+        /// Debug log level.
+        /// </summary>
+        Debug = 1,
+        
+        /// <summary>
+        /// Info log level.
+        /// </summary>
+        Info = 2,
+        
+        /// <summary>
+        /// Warning log level.
+        /// </summary>
+        Warn = 3,
+        
+        /// <summary>
+        /// Error log level.
+        /// </summary>
+        Error = 4
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/3c9e254e/modules/platforms/dotnet/Apache.Ignite.Core/Log/LoggerExtensions.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Log/LoggerExtensions.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Log/LoggerExtensions.cs
new file mode 100644
index 0000000..93748e3
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Log/LoggerExtensions.cs
@@ -0,0 +1,320 @@
+\ufeff/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Log
+{
+    using System;
+    using System.Globalization;
+    using Apache.Ignite.Core.Impl.Common;
+
+    /// <summary>
+    /// Extension methods for <see cref="ILogger" />
+    /// </summary>
+    public static class LoggerExtensions
+    {
+        // 4 overloads per level (message, message+args, ex+message, ex+message+args)
+
+        /// <summary>
+        /// Logs the message with <see cref="LogLevel.Trace"/> level.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="message">The message.</param>
+        public static void Trace(this ILogger logger, string message)
+        {
+            Log(logger, LogLevel.Trace, message);
+        }
+
+        /// <summary>
+        /// Logs the message with <see cref="LogLevel.Trace"/> level.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="message">The message.</param>
+        /// <param name="args">The arguments.</param>
+        public static void Trace(this ILogger logger, string message, params object[] args)
+        {
+            Log(logger, LogLevel.Trace, message, args);
+        }
+
+        /// <summary>
+        /// Logs the message with <see cref="LogLevel.Trace"/> level.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="ex">The exception.</param>
+        /// <param name="message">The message.</param>
+        public static void Trace(this ILogger logger, Exception ex, string message)
+        {
+            Log(logger, LogLevel.Trace, ex, message);
+        }
+
+        /// <summary>
+        /// Logs the message with <see cref="LogLevel.Trace"/> level.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="ex">The exception.</param>
+        /// <param name="message">The message.</param>
+        /// <param name="args">The arguments.</param>
+        public static void Trace(this ILogger logger, Exception ex, string message, params object[] args)
+        {
+            Log(logger, LogLevel.Trace, ex, message, args);
+        }
+
+        /// <summary>
+        /// Logs the message with <see cref="LogLevel.Debug"/> level.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="message">The message.</param>
+        public static void Debug(this ILogger logger, string message)
+        {
+            Log(logger, LogLevel.Debug, message);
+        }
+
+        /// <summary>
+        /// Logs the message with <see cref="LogLevel.Debug"/> level.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="message">The message.</param>
+        /// <param name="args">The arguments.</param>
+        public static void Debug(this ILogger logger, string message, params object[] args)
+        {
+            Log(logger, LogLevel.Debug, message, args);
+        }
+
+        /// <summary>
+        /// Logs the message with <see cref="LogLevel.Debug"/> level.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="ex">The exception.</param>
+        /// <param name="message">The message.</param>
+        public static void Debug(this ILogger logger, Exception ex, string message)
+        {
+            Log(logger, LogLevel.Debug, ex, message);
+        }
+
+        /// <summary>
+        /// Logs the message with <see cref="LogLevel.Debug"/> level.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="ex">The exception.</param>
+        /// <param name="message">The message.</param>
+        /// <param name="args">The arguments.</param>
+        public static void Debug(this ILogger logger, Exception ex, string message, params object[] args)
+        {
+            Log(logger, LogLevel.Debug, ex, message, args);
+        }
+
+        /// <summary>
+        /// Logs the message with <see cref="LogLevel.Info"/> level.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="message">The message.</param>
+        public static void Info(this ILogger logger, string message)
+        {
+            Log(logger, LogLevel.Info, message);
+        }
+
+        /// <summary>
+        /// Logs the message with <see cref="LogLevel.Info"/> level.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="message">The message.</param>
+        /// <param name="args">The arguments.</param>
+        public static void Info(this ILogger logger, string message, params object[] args)
+        {
+            Log(logger, LogLevel.Info, message, args);
+        }
+
+        /// <summary>
+        /// Logs the message with <see cref="LogLevel.Info"/> level.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="ex">The exception.</param>
+        /// <param name="message">The message.</param>
+        public static void Info(this ILogger logger, Exception ex, string message)
+        {
+            Log(logger, LogLevel.Info, ex, message);
+        }
+
+        /// <summary>
+        /// Logs the message with <see cref="LogLevel.Info"/> level.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="ex">The exception.</param>
+        /// <param name="message">The message.</param>
+        /// <param name="args">The arguments.</param>
+        public static void Info(this ILogger logger, Exception ex, string message, params object[] args)
+        {
+            Log(logger, LogLevel.Info, ex, message, args);
+        }
+
+        /// <summary>
+        /// Logs the message with <see cref="LogLevel.Warn"/> level.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="message">The message.</param>
+        public static void Warn(this ILogger logger, string message)
+        {
+            Log(logger, LogLevel.Warn, message);
+        }
+
+        /// <summary>
+        /// Logs the message with <see cref="LogLevel.Warn"/> level.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="message">The message.</param>
+        /// <param name="args">The arguments.</param>
+        public static void Warn(this ILogger logger, string message, params object[] args)
+        {
+            Log(logger, LogLevel.Warn, message, args);
+        }
+
+        /// <summary>
+        /// Logs the message with <see cref="LogLevel.Warn"/> level.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="ex">The exception.</param>
+        /// <param name="message">The message.</param>
+        public static void Warn(this ILogger logger, Exception ex, string message)
+        {
+            Log(logger, LogLevel.Warn, ex, message);
+        }
+
+        /// <summary>
+        /// Logs the message with <see cref="LogLevel.Warn"/> level.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="ex">The exception.</param>
+        /// <param name="message">The message.</param>
+        /// <param name="args">The arguments.</param>
+        public static void Warn(this ILogger logger, Exception ex, string message, params object[] args)
+        {
+            Log(logger, LogLevel.Warn, ex, message, args);
+        }
+
+        /// <summary>
+        /// Logs the message with <see cref="LogLevel.Error"/> level.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="message">The message.</param>
+        public static void Error(this ILogger logger, string message)
+        {
+            Log(logger, LogLevel.Error, message);
+        }
+
+        /// <summary>
+        /// Logs the message with <see cref="LogLevel.Error"/> level.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="message">The message.</param>
+        /// <param name="args">The arguments.</param>
+        public static void Error(this ILogger logger, string message, params object[] args)
+        {
+            Log(logger, LogLevel.Error, message, args);
+        }
+
+        /// <summary>
+        /// Logs the message with <see cref="LogLevel.Error"/> level.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="ex">The exception.</param>
+        /// <param name="message">The message.</param>
+        public static void Error(this ILogger logger, Exception ex, string message)
+        {
+            Log(logger, LogLevel.Error, ex, message);
+        }
+
+        /// <summary>
+        /// Logs the message with <see cref="LogLevel.Error"/> level.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="ex">The exception.</param>
+        /// <param name="message">The message.</param>
+        /// <param name="args">The arguments.</param>
+        public static void Error(this ILogger logger, Exception ex, string message, params object[] args)
+        {
+            Log(logger, LogLevel.Error, ex, message, args);
+        }
+
+        /// <summary>
+        /// Logs the message.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="level">The level.</param>
+        /// <param name="message">The message.</param>
+        public static void Log(this ILogger logger, LogLevel level, string message)
+        {
+            IgniteArgumentCheck.NotNull(logger, "logger");
+
+            logger.Log(level, message, null, null, null, null, null);
+        }
+
+        /// <summary>
+        /// Logs the message.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="level">The level.</param>
+        /// <param name="message">The message.</param>
+        /// <param name="args">The arguments.</param>
+        public static void Log(this ILogger logger, LogLevel level, string message, params object[] args)
+        {
+            IgniteArgumentCheck.NotNull(logger, "logger");
+
+            logger.Log(level, message, args, CultureInfo.InvariantCulture, null, null, null);
+        }
+
+        /// <summary>
+        /// Logs the message.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="level">The level.</param>
+        /// <param name="ex">The exception.</param>
+        /// <param name="message">The message.</param>
+        public static void Log(this ILogger logger, LogLevel level, Exception ex, string message)
+        {
+            IgniteArgumentCheck.NotNull(logger, "logger");
+
+            logger.Log(level, message, null, null, null, null, ex);
+        }
+
+        /// <summary>
+        /// Logs the message.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="level">The level.</param>
+        /// <param name="ex">The exception.</param>
+        /// <param name="message">The message.</param>
+        /// <param name="args">The arguments.</param>
+        public static void Log(this ILogger logger, LogLevel level, Exception ex, string message, params object[] args)
+        {
+            IgniteArgumentCheck.NotNull(logger, "logger");
+
+            logger.Log(level, message, args, CultureInfo.InvariantCulture, null, null, ex);
+        }
+
+        /// <summary>
+        /// Gets the <see cref="CategoryLogger"/> with a specified category that wraps provided logger.
+        /// </summary>
+        /// <param name="logger">The logger.</param>
+        /// <param name="category">The category.</param>
+        /// <returns>Logger that always uses specified category.</returns>
+        public static ILogger GetLogger(this ILogger logger, string category)
+        {
+            IgniteArgumentCheck.NotNull(logger, "logger");
+
+            return new CategoryLogger(logger, category);
+        }
+    }
+}
\ No newline at end of file


[13/50] [abbrv] ignite git commit: ignite-1.6.9 - Fixing tests

Posted by sh...@apache.org.
ignite-1.6.9 - Fixing tests


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

Branch: refs/heads/ignite-2788
Commit: f447559ecba55149452e4e48e2bf44ef1fa1b4d7
Parents: 22dc2c9
Author: Alexey Goncharuk <al...@gmail.com>
Authored: Thu Sep 29 17:10:14 2016 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Thu Sep 29 17:10:14 2016 +0300

----------------------------------------------------------------------
 .../cache/distributed/dht/GridDhtCacheAdapter.java      | 12 ------------
 .../cache/distributed/near/GridNearCacheAdapter.java    |  9 ++-------
 2 files changed, 2 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/f447559e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheAdapter.java
index 8ced02f..35e6267 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheAdapter.java
@@ -261,18 +261,6 @@ public abstract class GridDhtCacheAdapter<K, V> extends GridDistributedCacheAdap
      */
     public abstract GridNearCacheAdapter<K, V> near();
 
-    /** {@inheritDoc} */
-    @Override public void forceKeyCheck() {
-        if (!keyCheck) {
-            super.forceKeyCheck();
-
-            GridNearCacheAdapter near = near();
-
-            if (near != null)
-                near.forceKeyCheck();
-        }
-    }
-
     /**
      * @return Partition topology.
      */

http://git-wip-us.apache.org/repos/asf/ignite/blob/f447559e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheAdapter.java
index 6acf48e..4ddad74 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheAdapter.java
@@ -116,14 +116,9 @@ public abstract class GridNearCacheAdapter<K, V> extends GridDistributedCacheAda
 
     /** {@inheritDoc} */
     @Override public void forceKeyCheck() {
-        if (!keyCheck) {
-            super.forceKeyCheck();
+        super.forceKeyCheck();
 
-            GridDhtCacheAdapter dht = dht();
-
-            if (dht != null)
-                dht.forceKeyCheck();
-        }
+        dht().forceKeyCheck();
     }
 
     /** {@inheritDoc} */


[12/50] [abbrv] ignite git commit: ignite-3957: clear swap space when cache is destroyed

Posted by sh...@apache.org.
ignite-3957: clear swap space when cache is destroyed


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

Branch: refs/heads/ignite-2788
Commit: 106d496d7dd07f56940adc62b666e28974fe789d
Parents: 2489b8a
Author: Andrey Martianov <am...@gridgain.com>
Authored: Thu Sep 29 16:33:04 2016 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Sep 29 17:00:48 2016 +0300

----------------------------------------------------------------------
 .../processors/cache/GridCacheSwapManager.java  |  7 ++
 .../spi/swapspace/file/FileSwapSpaceSpi.java    | 53 +++++++----
 .../cache/GridCacheSwapCleanupTest.java         | 99 ++++++++++++++++++++
 .../ignite/testsuites/IgniteCacheTestSuite.java |  2 +
 4 files changed, 141 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/106d496d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java
index 8ba960a..5ada8dc 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java
@@ -143,6 +143,13 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
     @Override protected void stop0(boolean cancel) {
         if (offheapEnabled)
             offheap.destruct(spaceName);
+
+        try {
+            clearSwap();
+        }
+        catch (IgniteCheckedException e) {
+            U.error(log, "Failed to clear cache swap space", e);
+        }
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/106d496d/modules/core/src/main/java/org/apache/ignite/spi/swapspace/file/FileSwapSpaceSpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/swapspace/file/FileSwapSpaceSpi.java b/modules/core/src/main/java/org/apache/ignite/spi/swapspace/file/FileSwapSpaceSpi.java
index 9be5b93..1f6004d 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/swapspace/file/FileSwapSpaceSpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/swapspace/file/FileSwapSpaceSpi.java
@@ -333,12 +333,7 @@ public class FileSwapSpaceSpi extends IgniteSpiAdapter implements SwapSpaceSpi,
 
     /** {@inheritDoc} */
     @Override public void clear(@Nullable String spaceName) throws IgniteSpiException {
-        Space space = space(spaceName, false);
-
-        if (space == null)
-            return;
-
-        space.clear();
+        destruct(spaceName);
 
         notifyListener(EVT_SWAP_SPACE_CLEARED, spaceName);
     }
@@ -630,7 +625,7 @@ public class FileSwapSpaceSpi extends IgniteSpiAdapter implements SwapSpaceSpi,
      * @throws org.apache.ignite.spi.IgniteSpiException In case of error.
      */
     @Nullable private Space space(@Nullable String name, boolean create) throws IgniteSpiException {
-        String masked = name != null ? name : DFLT_SPACE_NAME;
+        String masked = maskNull(name);
 
         assert masked != null;
 
@@ -652,6 +647,36 @@ public class FileSwapSpaceSpi extends IgniteSpiAdapter implements SwapSpaceSpi,
     }
 
     /**
+     * Destructs space.
+     *
+     * @param spaceName space name.
+     * */
+    private void destruct(@Nullable String spaceName) {
+        String masked = maskNull(spaceName);
+
+        Space space = spaces.remove(masked);
+
+        if (space != null) {
+            try {
+                space.stop();
+            }
+            catch (IgniteInterruptedCheckedException e) {
+                U.error(log, "Interrupted.", e);
+            }
+        }
+    }
+
+    /**
+     * Masks null space name with default space name.
+     *
+     * @param spaceName Space name.
+     * @return Space name or default space name if space name is null.
+     * */
+    private static String maskNull(String spaceName) {
+        return spaceName != null ? spaceName : DFLT_SPACE_NAME;
+    }
+
+    /**
      * Validates space name.
      *
      * @param name Space name.
@@ -1623,18 +1648,6 @@ public class FileSwapSpaceSpi extends IgniteSpiAdapter implements SwapSpaceSpi,
         }
 
         /**
-         * Clears space.
-         *
-         * @throws org.apache.ignite.spi.IgniteSpiException If failed.
-         */
-        public void clear() throws IgniteSpiException {
-            Iterator<Map.Entry<SwapKey, byte[]>> iter = entriesIterator();
-
-            while (iter.hasNext())
-                remove(iter.next().getKey(), false);
-        }
-
-        /**
          * Stops space.
          *
          * @throws org.apache.ignite.internal.IgniteInterruptedCheckedException If interrupted.
@@ -1931,4 +1944,4 @@ public class FileSwapSpaceSpi extends IgniteSpiAdapter implements SwapSpaceSpi,
             };
         }
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/106d496d/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheSwapCleanupTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheSwapCleanupTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheSwapCleanupTest.java
new file mode 100644
index 0000000..5835ef0
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheSwapCleanupTest.java
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.cache;
+
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.cache.eviction.lru.LruEvictionPolicy;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.IgniteEx;
+import org.apache.ignite.internal.managers.swapspace.GridSwapSpaceManager;
+import org.apache.ignite.internal.util.typedef.internal.CU;
+import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
+import org.apache.ignite.spi.swapspace.file.FileSwapSpaceSpi;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+
+/**
+ * Check swap is cleaned after cache destroy.
+ */
+public class GridCacheSwapCleanupTest extends GridCommonAbstractTest {
+    /** IP finder. */
+    private static final TcpDiscoveryIpFinder IP_FINDER = new TcpDiscoveryVmIpFinder(true);
+
+    /** Cache name. */
+    private static final String CACHE_NAME = "swapCleanupCache";
+
+    /** {@inheritDoc} */
+    @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
+        IgniteConfiguration cfg = super.getConfiguration(gridName);
+
+        ((TcpDiscoverySpi)cfg.getDiscoverySpi()).setIpFinder(IP_FINDER);
+
+        cfg.setSwapSpaceSpi(new FileSwapSpaceSpi());
+
+        return cfg;
+    }
+
+    /**
+     * Creates cache configuration.
+     *
+     * @return Cache configuration.
+     * */
+    private CacheConfiguration createCacheConfiguration() {
+        CacheConfiguration ccfg = new CacheConfiguration();
+
+        ccfg.setName(CACHE_NAME);
+        ccfg.setEvictionPolicy(new LruEvictionPolicy(10));
+        ccfg.setSwapEnabled(true);
+
+        return ccfg;
+    }
+
+    /**
+     * Checks swap is cleaned after cache destroy.
+     *
+     * @throws Exception If failed.
+     * */
+    public void testSwapCleanupAfterCacheDestroy() throws Exception {
+        try (Ignite g = startGrid()) {
+            for (int iter = 0; iter < 3; iter++) {
+                IgniteCache cache = g.getOrCreateCache(createCacheConfiguration());
+
+                for (int i = 0; i < 20; i++) {
+                    assertNull(cache.get(i));
+
+                    cache.put(i, i);
+                }
+
+                String spaceName = CU.swapSpaceName(internalCache(cache).context());
+
+                GridSwapSpaceManager swapSpaceMgr = ((IgniteEx)g).context().swap();
+
+                assertEquals(10, swapSpaceMgr.swapKeys(spaceName));
+
+                g.destroyCache(cache.getName());
+
+                assertEquals(0, swapSpaceMgr.swapKeys(spaceName));
+                assertEquals(0, swapSpaceMgr.swapSize(spaceName));
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/106d496d/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java
index 5ad4cb8..711453c 100755
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java
@@ -81,6 +81,7 @@ import org.apache.ignite.internal.processors.cache.GridCacheReplicatedTxStoreExc
 import org.apache.ignite.internal.processors.cache.GridCacheStopSelfTest;
 import org.apache.ignite.internal.processors.cache.GridCacheStorePutxSelfTest;
 import org.apache.ignite.internal.processors.cache.GridCacheStoreValueBytesSelfTest;
+import org.apache.ignite.internal.processors.cache.GridCacheSwapCleanupTest;
 import org.apache.ignite.internal.processors.cache.GridCacheSwapPreloadSelfTest;
 import org.apache.ignite.internal.processors.cache.GridCacheSwapReloadSelfTest;
 import org.apache.ignite.internal.processors.cache.GridCacheTtlManagerSelfTest;
@@ -227,6 +228,7 @@ public class IgniteCacheTestSuite extends TestSuite {
         // Swap tests.
         suite.addTestSuite(GridCacheSwapPreloadSelfTest.class);
         suite.addTestSuite(GridCacheSwapReloadSelfTest.class);
+        suite.addTestSuite(GridCacheSwapCleanupTest.class);
 
         // Common tests.
         suite.addTestSuite(CacheNamesSelfTest.class);


[04/50] [abbrv] ignite git commit: IGNITE-3995 .NET: Introduced default non-null ASP.NET Session-State Store Provider cache name. This closes #1128.

Posted by sh...@apache.org.
IGNITE-3995 .NET: Introduced default non-null ASP.NET Session-State Store Provider cache name. This closes #1128.


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

Branch: refs/heads/ignite-2788
Commit: 53229e290f7d6aab9b504693bd2b93155ecd2bad
Parents: bfe4458
Author: Pavel Tupitsyn <pt...@gridgain.com>
Authored: Wed Sep 28 17:07:47 2016 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Wed Sep 28 17:07:47 2016 +0300

----------------------------------------------------------------------
 .../IgniteSessionStateStoreProviderTest.cs             | 13 +++++++++++++
 .../Apache.Ignite.AspNet/IgniteOutputCacheProvider.cs  |  2 +-
 .../IgniteSessionStateStoreProvider.cs                 |  8 +++++++-
 .../dotnet/Apache.Ignite.AspNet/Impl/ConfigUtil.cs     | 13 +++++++------
 4 files changed, 28 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/53229e29/modules/platforms/dotnet/Apache.Ignite.AspNet.Tests/IgniteSessionStateStoreProviderTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.AspNet.Tests/IgniteSessionStateStoreProviderTest.cs b/modules/platforms/dotnet/Apache.Ignite.AspNet.Tests/IgniteSessionStateStoreProviderTest.cs
index fc239ad..2c73359 100644
--- a/modules/platforms/dotnet/Apache.Ignite.AspNet.Tests/IgniteSessionStateStoreProviderTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.AspNet.Tests/IgniteSessionStateStoreProviderTest.cs
@@ -133,6 +133,19 @@ namespace Apache.Ignite.AspNet.Tests
             stateProvider = GetProvider();
 
             CheckProvider(stateProvider);
+
+            // Omitted cache name results in default cache name (not null).
+            stateProvider = new IgniteSessionStateStoreProvider();
+
+            stateProvider.Initialize("testName", new NameValueCollection
+            {
+                {GridNameAttr, GridName}
+            });
+
+            var cacheNames = Ignition.GetIgnite(GridName).GetCacheNames();
+
+            Assert.IsFalse(cacheNames.Contains(null));
+            Assert.IsTrue(cacheNames.Contains(IgniteSessionStateStoreProvider.DefaultCacheName));
         }
 
         /// <summary>

http://git-wip-us.apache.org/repos/asf/ignite/blob/53229e29/modules/platforms/dotnet/Apache.Ignite.AspNet/IgniteOutputCacheProvider.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.AspNet/IgniteOutputCacheProvider.cs b/modules/platforms/dotnet/Apache.Ignite.AspNet/IgniteOutputCacheProvider.cs
index d232726..2790493 100644
--- a/modules/platforms/dotnet/Apache.Ignite.AspNet/IgniteOutputCacheProvider.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.AspNet/IgniteOutputCacheProvider.cs
@@ -99,7 +99,7 @@ namespace Apache.Ignite.AspNet
         {
             base.Initialize(name, config);
 
-            var cache = ConfigUtil.InitializeCache<string, object>(config, GetType());
+            var cache = ConfigUtil.InitializeCache<string, object>(config, GetType(), null);
 
             _expiryCacheHolder = new ExpiryCacheHolder<string, object>(cache);
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/53229e29/modules/platforms/dotnet/Apache.Ignite.AspNet/IgniteSessionStateStoreProvider.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.AspNet/IgniteSessionStateStoreProvider.cs b/modules/platforms/dotnet/Apache.Ignite.AspNet/IgniteSessionStateStoreProvider.cs
index 1ee6d92..86035dd 100644
--- a/modules/platforms/dotnet/Apache.Ignite.AspNet/IgniteSessionStateStoreProvider.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.AspNet/IgniteSessionStateStoreProvider.cs
@@ -47,6 +47,11 @@ namespace Apache.Ignite.AspNet
     /// </summary>
     public class IgniteSessionStateStoreProvider : SessionStateStoreProviderBase
     {
+        /// <summary>
+        /// The default cache name to be used when <c>cacheName</c> attribute is not specified.
+        /// </summary>
+        public const string DefaultCacheName = "ASPNET_SESSION_STATE";
+
         /** Extension id  */
         private const int ExtensionId = 0;
 
@@ -94,7 +99,8 @@ namespace Apache.Ignite.AspNet
         {
             base.Initialize(name, config);
 
-            var cache = ConfigUtil.InitializeCache<string, IgniteSessionStateStoreData>(config, GetType());
+            var cache = ConfigUtil.InitializeCache<string, IgniteSessionStateStoreData>(config, GetType(), 
+                DefaultCacheName);
 
             _expiryCacheHolder = new ExpiryCacheHolder<string, IgniteSessionStateStoreData>(cache);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/53229e29/modules/platforms/dotnet/Apache.Ignite.AspNet/Impl/ConfigUtil.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.AspNet/Impl/ConfigUtil.cs b/modules/platforms/dotnet/Apache.Ignite.AspNet/Impl/ConfigUtil.cs
index 3eb3d90..a162d81 100644
--- a/modules/platforms/dotnet/Apache.Ignite.AspNet/Impl/ConfigUtil.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.AspNet/Impl/ConfigUtil.cs
@@ -22,6 +22,7 @@ namespace Apache.Ignite.AspNet.Impl
     using System.Configuration;
     using System.Diagnostics;
     using System.Globalization;
+    using System.Linq;
     using Apache.Ignite.Core;
     using Apache.Ignite.Core.Cache;
     using Apache.Ignite.Core.Cache.Configuration;
@@ -33,24 +34,25 @@ namespace Apache.Ignite.AspNet.Impl
     internal static class ConfigUtil
     {
         /** */
-        public const string GridName = "gridName";
+        private const string GridName = "gridName";
 
         /** */
-        public const string CacheName = "cacheName";
+        private const string CacheName = "cacheName";
 
         /** */
-        public const string IgniteConfigurationSectionName = "igniteConfigurationSectionName";
+        private const string IgniteConfigurationSectionName = "igniteConfigurationSectionName";
 
         /// <summary>
         /// Initializes the cache from configuration.
         /// </summary>
-        public static ICache<TK, TV> InitializeCache<TK, TV>(NameValueCollection config, Type callerType)
+        public static ICache<TK, TV> InitializeCache<TK, TV>(NameValueCollection config, Type callerType, 
+            string defaultCacheName)
         {
             Debug.Assert(config != null);
             Debug.Assert(callerType != null);
 
             var gridName = config[GridName];
-            var cacheName = config[CacheName];
+            var cacheName = config.AllKeys.Contains(CacheName) ? config[CacheName] : defaultCacheName;
             var cfgSection = config[IgniteConfigurationSectionName];
 
             try
@@ -66,7 +68,6 @@ namespace Apache.Ignite.AspNet.Impl
                 throw new IgniteException(string.Format(CultureInfo.InvariantCulture,
                     "Failed to initialize {0}: {1}", callerType, ex), ex);
             }
-
         }
 
         /// <summary>


[38/50] [abbrv] ignite git commit: Merge branch 'ignite-1.7.3' into UPSTREAM_master

Posted by sh...@apache.org.
Merge branch 'ignite-1.7.3' into UPSTREAM_master

# Conflicts:
#	modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
#	modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeFunc.cs
#	modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeJob.cs
#	modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeOutFunc.cs


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

Branch: refs/heads/ignite-2788
Commit: a370bad1463deade9a6fb975fd0b7297df2deaa9
Parents: a01927a d45383b
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Tue Oct 4 18:55:19 2016 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Tue Oct 4 18:55:19 2016 +0300

----------------------------------------------------------------------
 .../dotnet/Apache.Ignite.Core/IgniteConfiguration.cs      |  2 +-
 .../dotnet/Apache.Ignite.Core/Impl/Compute/ComputeFunc.cs |  5 ++++-
 .../dotnet/Apache.Ignite.Core/Impl/Compute/ComputeJob.cs  | 10 ++++++++--
 .../Apache.Ignite.Core/Impl/Compute/ComputeOutFunc.cs     |  5 ++++-
 4 files changed, 17 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/a370bad1/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/a370bad1/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeFunc.cs
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/a370bad1/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeJob.cs
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/a370bad1/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeOutFunc.cs
----------------------------------------------------------------------


[28/50] [abbrv] ignite git commit: Merge branch community/ignite-1.7.3

Posted by sh...@apache.org.
Merge branch community/ignite-1.7.3


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

Branch: refs/heads/ignite-2788
Commit: 443b4d4b9fa2daf0d68d54cb227a2e3d84de9fc2
Parents: afc8923
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Mon Oct 3 13:03:36 2016 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Mon Oct 3 13:03:36 2016 +0300

----------------------------------------------------------------------
 .../internal/processors/platform/PlatformConfigurationEx.java   | 5 -----
 .../processors/platform/cpp/PlatformCppConfigurationEx.java     | 5 -----
 .../platform/dotnet/PlatformDotNetConfigurationEx.java          | 5 -----
 3 files changed, 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/443b4d4b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformConfigurationEx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformConfigurationEx.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformConfigurationEx.java
index a5f9e13..8f7c93b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformConfigurationEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformConfigurationEx.java
@@ -59,9 +59,4 @@ public interface PlatformConfigurationEx {
      * @return Available cache extensions.
      */
     @Nullable public Collection<PlatformCacheExtension> cacheExtensions();
-
-    /**
-     * @return Platform logger.
-     */
-    public PlatformLogger logger();
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/443b4d4b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppConfigurationEx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppConfigurationEx.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppConfigurationEx.java
index 2d5adbf..4f6bb2d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppConfigurationEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppConfigurationEx.java
@@ -86,11 +86,6 @@ public class PlatformCppConfigurationEx extends PlatformCppConfiguration impleme
         return null;
     }
 
-    /** {@inheritDoc} */
-    @Override public PlatformLogger logger() {
-        return null;
-    }
-
     /**
      * @param warnings Warnings.
      */

http://git-wip-us.apache.org/repos/asf/ignite/blob/443b4d4b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationEx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationEx.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationEx.java
index 2fdd735..34e7ce2 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationEx.java
@@ -92,11 +92,6 @@ public class PlatformDotNetConfigurationEx extends PlatformDotNetConfiguration i
         return Collections.<PlatformCacheExtension>singleton(new PlatformDotNetSessionCacheExtension());
     }
 
-    /** {@inheritDoc} */
-    @Override public PlatformLogger logger() {
-        return logger;
-    }
-
     /**
      * @param warnings Warnings.
      */


[49/50] [abbrv] ignite git commit: Merge branch 'master' into ignite-2788

Posted by sh...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/0cd6723d/modules/clients/pom.xml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/0cd6723d/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
index 3130e6d,6d35d21..949235d
--- a/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
@@@ -943,13 -988,13 +988,12 @@@ public class IgniteConfiguration 
      /**
       * Sets Ignite installation folder.
       *
-      * @param ggHome {@code Ignition} installation folder.
-      * @return {@code this} for chaining.
+      * @param igniteHome {@code Ignition} installation folder.
       * @see IgniteConfiguration#getIgniteHome()
       * @see IgniteSystemProperties#IGNITE_HOME
 -     * @return {@code this} for chaining.
       */
-     public IgniteConfiguration setIgniteHome(String ggHome) {
-         this.ggHome = ggHome;
+     public IgniteConfiguration setIgniteHome(String igniteHome) {
+         this.igniteHome = igniteHome;
  
          return this;
      }
@@@ -972,12 -1017,12 +1016,13 @@@
      /**
       * Sets Ignite work folder.
       *
-      * @param ggWork {@code Ignite} work folder.
+      * @param igniteWorkDir {@code Ignite} work directory.
+      * @see IgniteConfiguration#getWorkDirectory()
       * @return {@code this} for chaining.
 +     * @see IgniteConfiguration#getWorkDirectory()
       */
-     public IgniteConfiguration setWorkDirectory(String ggWork) {
-         this.ggWork = ggWork;
+     public IgniteConfiguration setWorkDirectory(String igniteWorkDir) {
+         this.igniteWorkDir = igniteWorkDir;
  
          return this;
      }

http://git-wip-us.apache.org/repos/asf/ignite/blob/0cd6723d/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContext.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/0cd6723d/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/0cd6723d/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/GridTcpRestNioListener.java
----------------------------------------------------------------------


[08/50] [abbrv] ignite git commit: IGNITE-3633 - Enforce key validation for tests.

Posted by sh...@apache.org.
IGNITE-3633 - Enforce key validation for tests.


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

Branch: refs/heads/ignite-2788
Commit: 062b9b69aa851d5253dfb7f44066b7d749f1ca12
Parents: 3e8a1c6
Author: Alexey Goncharuk <al...@gmail.com>
Authored: Thu Sep 29 11:26:50 2016 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Thu Sep 29 11:27:43 2016 +0300

----------------------------------------------------------------------
 .../ignite/internal/processors/cache/GridCacheAdapter.java    | 7 +++++++
 .../cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java  | 6 ++++++
 2 files changed, 13 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/062b9b69/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
index fe6bb1b..55400ab 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
@@ -4891,6 +4891,13 @@ public abstract class GridCacheAdapter<K, V> implements IgniteInternalCache<K, V
     }
 
     /**
+     * For tests only.
+     */
+    public void forceKeyCheck() {
+        keyCheck = true;
+    }
+
+    /**
      * Validates that given cache key has overridden equals and hashCode methods and
      * implements {@link Externalizable}.
      *

http://git-wip-us.apache.org/repos/asf/ignite/blob/062b9b69/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java
index 7936ea4..150c245 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java
@@ -894,6 +894,10 @@ public abstract class GridCacheBinaryObjectsAbstractSelfTest extends GridCommonA
     public void testPutWithoutHashCode() throws Exception {
         final IgniteCache c = jcache(0);
 
+        GridCacheAdapter<Object, Object> cache0 = grid(0).context().cache().internalCache(null);
+
+        cache0.forceKeyCheck();
+
         GridTestUtils.assertThrows(log, new Callable<Object>() {
             /** {@inheritDoc} */
             @Override public Object call() throws Exception {
@@ -907,6 +911,8 @@ public abstract class GridCacheBinaryObjectsAbstractSelfTest extends GridCommonA
 
         final BinaryObject binKey = bldr.build();
 
+        cache0.forceKeyCheck();
+
         GridTestUtils.assertThrows(log, new Callable<Object>() {
             /** {@inheritDoc} */
             @Override public Object call() throws Exception {


[31/50] [abbrv] ignite git commit: IGNITE-3279 .NET: NLog logger

Posted by sh...@apache.org.
IGNITE-3279 .NET: NLog logger


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

Branch: refs/heads/ignite-2788
Commit: 48b293db4d443b4d8739f709ff12f19aad008b84
Parents: 1c82cd0
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Mon Oct 3 14:08:07 2016 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Mon Oct 3 14:08:07 2016 +0300

----------------------------------------------------------------------
 .../dotnet/Apache.Ignite.NLog/Properties/AssemblyInfo.cs         | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/48b293db/modules/platforms/dotnet/Apache.Ignite.NLog/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.NLog/Properties/AssemblyInfo.cs b/modules/platforms/dotnet/Apache.Ignite.NLog/Properties/AssemblyInfo.cs
index 6603836..baaa60d 100644
--- a/modules/platforms/dotnet/Apache.Ignite.NLog/Properties/AssemblyInfo.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.NLog/Properties/AssemblyInfo.cs
@@ -33,8 +33,8 @@ using System.Runtime.InteropServices;
 // The following GUID is for the ID of the typelib if this project is exposed to COM
 [assembly: Guid("c6b58e4a-a2e9-4554-ad02-68ce6da5cfb7")]
 
-[assembly: AssemblyVersion("1.8.0.13244")]
-[assembly: AssemblyFileVersion("1.8.0.13244")]
+[assembly: AssemblyVersion("1.8.0.14218")]
+[assembly: AssemblyFileVersion("1.8.0.14218")]
 [assembly: AssemblyInformationalVersion("1.8.0")]
 
 [assembly: CLSCompliant(true)]


[37/50] [abbrv] ignite git commit: .NET: Fix code analysis warnings

Posted by sh...@apache.org.
.NET: Fix code analysis warnings


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

Branch: refs/heads/ignite-2788
Commit: d45383b69cc68c0ec967ebd673b197e437720214
Parents: bfdb5c3
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Tue Oct 4 18:48:25 2016 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Tue Oct 4 18:48:25 2016 +0300

----------------------------------------------------------------------
 .../dotnet/Apache.Ignite.Core/Common/JavaException.cs     |  1 +
 .../dotnet/Apache.Ignite.Core/IgniteConfiguration.cs      |  1 +
 .../dotnet/Apache.Ignite.Core/Impl/Compute/ComputeFunc.cs |  5 ++++-
 .../dotnet/Apache.Ignite.Core/Impl/Compute/ComputeJob.cs  | 10 ++++++++--
 .../Apache.Ignite.Core/Impl/Compute/ComputeOutFunc.cs     |  5 ++++-
 .../Impl/Unmanaged/UnmanagedCallbacks.cs                  |  1 +
 6 files changed, 19 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/d45383b6/modules/platforms/dotnet/Apache.Ignite.Core/Common/JavaException.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Common/JavaException.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Common/JavaException.cs
index a634010..5f7ba66 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Common/JavaException.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Common/JavaException.cs
@@ -23,6 +23,7 @@ namespace Apache.Ignite.Core.Common
     /// <summary>
     /// Indicates an error on Java side and contains full Java stack trace.
     /// </summary>
+    [Serializable]
     public class JavaException : IgniteException
     {
         /// <summary>

http://git-wip-us.apache.org/repos/asf/ignite/blob/d45383b6/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
index 7652092..b045c5a 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
@@ -748,6 +748,7 @@
         /// </summary>
         /// <param name="xml">Xml string.</param>
         /// <returns>Deserialized instance.</returns>
+        [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")]
         public static IgniteConfiguration FromXml(string xml)
         {
             IgniteArgumentCheck.NotNullOrEmpty(xml, "xml");

http://git-wip-us.apache.org/repos/asf/ignite/blob/d45383b6/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeFunc.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeFunc.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeFunc.cs
index 454f7bb..1f5523c 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeFunc.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeFunc.cs
@@ -66,7 +66,10 @@ namespace Apache.Ignite.Core.Impl.Compute
             }
             catch (TargetInvocationException ex)
             {
-                throw ex.InnerException;
+                if (ex.InnerException != null)
+                    throw ex.InnerException;
+
+                throw;
             }
         }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/d45383b6/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeJob.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeJob.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeJob.cs
index 526c445..9fa1377 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeJob.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeJob.cs
@@ -82,7 +82,10 @@ namespace Apache.Ignite.Core.Impl.Compute
             }
             catch (TargetInvocationException ex)
             {
-                throw ex.InnerException;
+                if (ex.InnerException != null)
+                    throw ex.InnerException;
+
+                throw;
             }
         }
 
@@ -95,7 +98,10 @@ namespace Apache.Ignite.Core.Impl.Compute
             }
             catch (TargetInvocationException ex)
             {
-                throw ex.InnerException;
+                if (ex.InnerException != null)
+                    throw ex.InnerException;
+
+                throw;
             }
         }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/d45383b6/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeOutFunc.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeOutFunc.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeOutFunc.cs
index 1867f8c..974ada2 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeOutFunc.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Compute/ComputeOutFunc.cs
@@ -70,7 +70,10 @@ namespace Apache.Ignite.Core.Impl.Compute
             }
             catch (TargetInvocationException ex)
             {
-                throw ex.InnerException;
+                if (ex.InnerException != null)
+                    throw ex.InnerException;
+
+                throw;
             }
         }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/d45383b6/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
index 493e061..a9de66e 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
@@ -1181,6 +1181,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
             return SafeCall(() => _log.IsEnabled((LogLevel) level), true);
         }
 
+        [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")]
         private static void ConsoleWrite(sbyte* chars, int charsLen, bool isErr)
         {
             try


[25/50] [abbrv] ignite git commit: IGNITE-1629 .NET: Introduced native logging facility - fix merge

Posted by sh...@apache.org.
IGNITE-1629 .NET: Introduced native logging facility - fix merge


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

Branch: refs/heads/ignite-2788
Commit: ae4ae71f0481662a5fb13eb8ee63a17e6c4c3802
Parents: 3c9e254
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Mon Oct 3 12:16:34 2016 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Mon Oct 3 12:16:34 2016 +0300

----------------------------------------------------------------------
 modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/ae4ae71f/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
index 8e16fb5..7652092 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
@@ -24,6 +24,8 @@
     using System.Diagnostics.CodeAnalysis;
     using System.IO;
     using System.Linq;
+    using System.Text;
+    using System.Xml;
     using Apache.Ignite.Core.Binary;
     using Apache.Ignite.Core.Cache;
     using Apache.Ignite.Core.Cache.Configuration;


[26/50] [abbrv] ignite git commit: Merge branch community/ignite-1.7.3

Posted by sh...@apache.org.
Merge branch community/ignite-1.7.3


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

Branch: refs/heads/ignite-2788
Commit: e7b13cc5c4111be990e51e7633a8fb10f6795489
Parents: e7f3532 ae4ae71
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Mon Oct 3 12:55:06 2016 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Mon Oct 3 12:55:06 2016 +0300

----------------------------------------------------------------------
 .../client/ClientReconnectionSelfTest.java      |   4 +-
 .../client/router/TcpSslRouterSelfTest.java     |   7 +-
 .../client/suite/IgniteClientTestSuite.java     |  71 +++----
 .../processors/cache/GridCacheAdapter.java      |   7 +
 .../distributed/near/GridNearCacheAdapter.java  |   7 +
 .../query/GridCacheQueryMetricsAdapter.java     |  12 +-
 .../platform/PlatformConfigurationEx.java       |   6 +
 .../cpp/PlatformCppConfigurationEx.java         |   5 +
 .../dotnet/PlatformDotNetConfigurationEx.java   |   5 +
 .../cache/VisorCacheResetQueryMetricsTask.java  |  69 +++++++
 .../cache/GridCacheAbstractFullApiSelfTest.java |  11 +-
 .../IgniteCacheConfigVariationsFullApiTest.java |   7 +-
 ...niteCacheExpireAndUpdateConsistencyTest.java |   7 +
 .../GridCacheBinaryObjectsAbstractSelfTest.java |   6 +
 ...tomicClientOnlyMultiNodeFullApiSelfTest.java |  17 +-
 ...eAtomicNearOnlyMultiNodeFullApiSelfTest.java |  17 +-
 .../ignite/testframework/IgniteTestSuite.java   | 203 ++++++++++++++++---
 .../testframework/junits/GridAbstractTest.java  |  31 ++-
 .../apache/ignite/testsuites/IgniteIgnore.java  |   2 +-
 modules/ignored-tests/pom.xml                   | 128 +++++++++++-
 .../testsuites/IgniteIgnoredTestSuite.java      |   9 +
 .../CacheAbstractQueryMetricsSelfTest.java      |   6 +-
 ...titionedCacheJtaLookupClassNameSelfTest.java |   4 +-
 .../ignite/testsuites/IgniteJtaTestSuite.java   |   3 +-
 .../IgniteSessionStateStoreProviderTest.cs      |  13 ++
 .../IgniteOutputCacheProvider.cs                |   2 +-
 .../IgniteSessionStateStoreProvider.cs          |   8 +-
 .../Apache.Ignite.AspNet/Impl/ConfigUtil.cs     |  13 +-
 .../Apache.Ignite.Core.Tests.csproj             |   6 +
 .../IgniteConfigurationSection.xsd              |  12 ++
 .../Impl/Unmanaged/UnmanagedCallbacks.cs        |   1 +
 .../p2p/GridP2PUserVersionChangeSelfTest.java   |   7 +-
 .../testsuites/IgniteResourceSelfTestSuite.java |  11 +-
 .../testsuites/IgniteSpringTestSuite.java       |  15 +-
 34 files changed, 601 insertions(+), 131 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/e7b13cc5/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformConfigurationEx.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformConfigurationEx.java
index a58510d,97f0866..a5f9e13
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformConfigurationEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformConfigurationEx.java
@@@ -17,8 -17,8 +17,9 @@@
  
  package org.apache.ignite.internal.processors.platform;
  
 +import org.apache.ignite.internal.logger.platform.PlatformLogger;
  import org.apache.ignite.internal.processors.platform.cache.PlatformCacheExtension;
+ import org.apache.ignite.internal.logger.platform.PlatformLogger;
  import org.apache.ignite.internal.processors.platform.callback.PlatformCallbackGateway;
  import org.apache.ignite.internal.processors.platform.memory.PlatformMemoryManagerImpl;
  import org.jetbrains.annotations.Nullable;

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7b13cc5/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppConfigurationEx.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7b13cc5/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationEx.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7b13cc5/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7b13cc5/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
----------------------------------------------------------------------
diff --cc modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
index aa74939,2c6150c..c1c4953
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
@@@ -270,6 -249,6 +270,12 @@@
      <Content Include="Config\Log\custom-log.xml">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Content>
++    <Content Include="Config\Log\dotnet-log4j.xml">
++      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
++    </Content>
++    <Content Include="Config\Log\custom-log.xml">
++      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
++    </Content>
      <Content Include="Config\spring-test.xml">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Content>

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7b13cc5/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
----------------------------------------------------------------------
diff --cc modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
index 40e3055,916fd20..f17c896
--- a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
@@@ -1060,42 -349,15 +1060,54 @@@
                      </xs:complexType>
                  </xs:element>
                  <xs:element name="transactionConfiguration" minOccurs="0">
 +                    <xs:annotation>
 +                        <xs:documentation>Transaction configuration.</xs:documentation>
 +                    </xs:annotation>
 +                    <xs:complexType>
 +                        <xs:attribute name="defaultTransactionConcurrency" type="transactionConcurrency">
 +                            <xs:annotation>
 +                                <xs:documentation>Cache transaction concurrency to use when one is not explicitly specified.</xs:documentation>
 +                            </xs:annotation>
 +                        </xs:attribute>
 +                        <xs:attribute name="defaultTransactionIsolation" type="transactionIsolation">
 +                            <xs:annotation>
 +                                <xs:documentation>Cache transaction isolation to use when one is not explicitly specified.</xs:documentation>
 +                            </xs:annotation>
 +                        </xs:attribute>
 +                        <xs:attribute name="defaultTimeout" type="xs:string">
 +                            <xs:annotation>
 +                                <xs:documentation>
 +                                    Cache transaction timeout to use when one is not explicitly specified. TimeSpan.Zero for infinite timeout.
 +                                </xs:documentation>
 +                            </xs:annotation>
 +                        </xs:attribute>
 +                        <xs:attribute name="pessimisticTransactionLogSize" type="xs:int">
 +                            <xs:annotation>
 +                                <xs:documentation>
 +                                    Size of pessimistic transactions log stored on node in order to recover transaction commit if originating node has left grid before it has sent all messages to transaction nodes. 0 for unlimited.
 +                                </xs:documentation>
 +                            </xs:annotation>
 +                        </xs:attribute>
 +                        <xs:attribute name="pessimisticTransactionLogLinger" type="xs:string">
 +                            <xs:annotation>
 +                                <xs:documentation>Delay after which pessimistic recovery entries will be cleaned up for failed node.</xs:documentation>
 +                            </xs:annotation>
 +                        </xs:attribute>
 +                    </xs:complexType>
 +                </xs:element>
 +                <xs:element name="logger" minOccurs="0">
++                    <xs:annotation>
++                        <xs:documentation>The logger. If no logger is set, logging is delegated to Java, which uses the logger defined in Spring XML (if present) or logs to console otherwise.</xs:documentation>
++                    </xs:annotation>
+                     <xs:complexType>
 -                        <xs:attribute name="defaultTransactionConcurrency" type="xs:string" />
 -                        <xs:attribute name="defaultTransactionIsolation" type="xs:string" />
 -                        <xs:attribute name="defaultTimeout" type="xs:string" />
 -                        <xs:attribute name="pessimisticTransactionLogSize" type="xs:int" />
 -                        <xs:attribute name="pessimisticTransactionLogLinger" type="xs:string" />
++                        <xs:attribute name="type" type="xs:string" use="required">
++                            <xs:annotation>
++                                <xs:documentation>Assembly-qualified type name.</xs:documentation>
++                            </xs:annotation>
++                        </xs:attribute>
+                     </xs:complexType>
+                 </xs:element>
+                 <xs:element name="logger" minOccurs="0">
                      <xs:annotation>
                          <xs:documentation>The logger. If no logger is set, logging is delegated to Java, which uses the logger defined in Spring XML (if present) or logs to console otherwise.</xs:documentation>
                      </xs:annotation>

http://git-wip-us.apache.org/repos/asf/ignite/blob/e7b13cc5/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
----------------------------------------------------------------------
diff --cc modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
index e623969,493e061..1b58d17
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
@@@ -21,8 -21,8 +21,9 @@@ namespace Apache.Ignite.Core.Impl.Unman
      using System.Collections.Generic;
      using System.Diagnostics;
      using System.Diagnostics.CodeAnalysis;
 +    using System.Globalization;
      using System.IO;
+     using System.Globalization;
      using System.Runtime.InteropServices;
      using System.Threading;
      using Apache.Ignite.Core.Cache.Affinity;