IGNITE-141 - Marshallers refactoring
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/4fe82707 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/4fe82707 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/4fe82707 Branch: refs/heads/sprint-2 Commit: 4fe827074727e2f27980dce547070251134dc2ff Parents: b98e7e6 Author: Valentin Kulichenko <vkuliche...@gridgain.com> Authored: Fri Mar 6 21:22:58 2015 -0800 Committer: Valentin Kulichenko <vkuliche...@gridgain.com> Committed: Fri Mar 6 21:22:58 2015 -0800 ---------------------------------------------------------------------- .../internal/MarshallerContextAdapter.java | 50 +++++++++++++++-- .../ignite/internal/MarshallerContextImpl.java | 57 +++++++------------- .../GridClientOptimizedMarshaller.java | 12 ++--- .../ignite/internal/util/IgniteUtils.java | 53 ++++++++++++++++++ .../ignite/marshaller/MarshallerContext.java | 2 +- .../optimized/OptimizedMarshallerUtils.java | 2 +- .../cache/GridCacheEntryMemorySizeSelfTest.java | 2 +- .../marshaller/MarshallerContextTestImpl.java | 36 ++----------- .../config/benchmark-multicast.properties | 24 ++++++++- 9 files changed, 154 insertions(+), 84 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4fe82707/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java index 5e71a17..5b184e8 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java @@ -17,6 +17,7 @@ package org.apache.ignite.internal; +import org.apache.ignite.internal.util.typedef.internal.*; import org.apache.ignite.marshaller.*; import org.jdk8.backport.*; @@ -36,14 +37,14 @@ public abstract class MarshallerContextAdapter implements MarshallerContext { private static final String JDK_CLS_NAMES_FILE = "META-INF/classnames-jdk.properties"; /** */ - protected final ConcurrentMap<Integer, String> clsNameById = new ConcurrentHashMap8<>(); + private final ConcurrentMap<Integer, String> map = new ConcurrentHashMap8<>(); /** * Initializes context. */ public MarshallerContextAdapter() { try { - ClassLoader ldr = getClass().getClassLoader(); + ClassLoader ldr = U.gridClassLoader(); Enumeration<URL> urls = ldr.getResources(CLS_NAMES_FILE); @@ -73,8 +74,51 @@ public abstract class MarshallerContextAdapter implements MarshallerContext { String clsName = line.trim(); - clsNameById.put(clsName.hashCode(), clsName); + map.put(clsName.hashCode(), clsName); } } } + + /** {@inheritDoc} */ + @Override public void registerClass(int id, Class cls) { + if (!map.containsKey(id)) { + registerClassName(id, cls.getName()); + + map.putIfAbsent(id, cls.getName()); + } + } + + /** {@inheritDoc} */ + @Override public Class getClass(int id, ClassLoader ldr) throws ClassNotFoundException { + String clsName = map.get(id); + + if (clsName == null) { + clsName = className(id); + + assert clsName != null : id; + + String old = map.putIfAbsent(id, clsName); + + if (old != null) + clsName = old; + } + + return U.forName(clsName, ldr); + } + + /** + * Registers class name. + * + * @param id Type ID. + * @param clsName Class name. + */ + protected abstract void registerClassName(int id, String clsName); + + /** + * Gets class name by type ID. + * + * @param id Type ID. + * @return Class name. + */ + protected abstract String className(int id); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4fe82707/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 6ec2faf..ec61707 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 @@ -45,50 +45,33 @@ public class MarshallerContextImpl extends MarshallerContextAdapter { } /** {@inheritDoc} */ - @Override public void registerClass(int id, Class cls) { - if (!clsNameById.containsKey(id)) { - try { - if (cache == null) - U.awaitQuiet(latch); + @Override protected void registerClassName(int id, String clsName) { + try { + if (cache == null) + U.awaitQuiet(latch); - String old = cache.putIfAbsent(id, cls.getName()); + String old = cache.putIfAbsent(id, clsName); - if (old != null && !old.equals(cls.getName())) - throw new IgniteException("Type ID collision occurred in OptimizedMarshaller. Use " + - "OptimizedMarshallerIdMapper to resolve it [id=" + id + ", clsName1=" + cls.getName() + - "clsName2=" + old + ']'); - - clsNameById.putIfAbsent(id, cls.getName()); - } - catch (IgniteCheckedException e) { - throw U.convertException(e); - } + if (old != null && !old.equals(clsName)) + throw new IgniteException("Type ID collision occurred in OptimizedMarshaller. Use " + + "OptimizedMarshallerIdMapper to resolve it [id=" + id + ", clsName1=" + clsName + + "clsName2=" + old + ']'); + } + catch (IgniteCheckedException e) { + throw U.convertException(e); } } /** {@inheritDoc} */ - @Override public Class className(int id, ClassLoader ldr) throws ClassNotFoundException { - String clsName = clsNameById.get(id); - - if (clsName == null) { - try { - if (cache == null) - U.awaitQuiet(latch); - - clsName = cache.get(id); + @Override protected String className(int id) { + try { + if (cache == null) + U.awaitQuiet(latch); - assert clsName != null : id; - - String old = clsNameById.putIfAbsent(id, clsName); - - if (old != null) - clsName = old; - } - catch (IgniteCheckedException e) { - throw U.convertException(e); - } + return cache.get(id); + } + catch (IgniteCheckedException e) { + throw U.convertException(e); } - - return Class.forName(clsName, false, ldr); } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4fe82707/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java b/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java index 7ca47d8..c5e415f 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java @@ -101,17 +101,13 @@ public class GridClientOptimizedMarshaller implements GridClientMarshaller { */ private static class ClientMarshallerContext extends MarshallerContextAdapter { /** {@inheritDoc} */ - @Override public void registerClass(int id, Class cls) { - // No-op. + @Override protected void registerClassName(int id, String clsName) { + throw new UnsupportedOperationException(); } /** {@inheritDoc} */ - @Override public Class className(int id, ClassLoader ldr) throws ClassNotFoundException { - String clsName = clsNameById.get(id); - - assert clsName != null : id; - - return Class.forName(clsName, false, ldr); + @Override protected String className(int id) { + throw new UnsupportedOperationException(); } } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4fe82707/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 d6e3339..fa82674 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 @@ -266,6 +266,9 @@ public abstract class IgniteUtils { /** */ static volatile long curTimeMillis = System.currentTimeMillis(); + /** Primitive class map. */ + private static final Map<String, Class<?>> primitiveMap = new HashMap<>(16, .5f); + /** Boxed class map. */ private static final Map<Class<?>, Class<?>> boxedClsMap = new HashMap<>(16, .5f); @@ -298,6 +301,10 @@ public abstract class IgniteUtils { /** */ private static volatile IgniteBiTuple<Collection<String>, Collection<String>> cachedLocalAddr; + /** */ + private static final ConcurrentMap<ClassLoader, ConcurrentMap<String, Class>> classCache = + new ConcurrentHashMap8<>(); + /** * Initializes enterprise check. */ @@ -395,6 +402,15 @@ public abstract class IgniteUtils { IgniteUtils.javaRtName = javaRtName; IgniteUtils.javaRtVer = javaRtVer; + primitiveMap.put("byte", byte.class); + primitiveMap.put("short", short.class); + primitiveMap.put("int", int.class); + primitiveMap.put("long", long.class); + primitiveMap.put("float", float.class); + primitiveMap.put("double", double.class); + primitiveMap.put("char", char.class); + primitiveMap.put("boolean", boolean.class); + boxedClsMap.put(byte.class, Byte.class); boxedClsMap.put(short.class, Short.class); boxedClsMap.put(int.class, Integer.class); @@ -7886,6 +7902,43 @@ public abstract class IgniteUtils { } /** + * Gets class for provided name. Accepts primitive types names. + * + * @param clsName Class name. + * @param ldr Class loader. + * @return Class. + * @throws ClassNotFoundException If class not found. + */ + public static Class<?> forName(String clsName, @Nullable ClassLoader ldr) throws ClassNotFoundException { + assert clsName != null; + + Class<?> cls = primitiveMap.get(clsName); + + if (cls != null) + return cls; + + ConcurrentMap<String, Class> ldrMap = classCache.get(ldr); + + if (ldrMap == null) { + ConcurrentMap<String, Class> old = classCache.putIfAbsent(ldr, ldrMap = new ConcurrentHashMap8<>()); + + if (old != null) + ldrMap = old; + } + + cls = ldrMap.get(clsName); + + if (cls == null) { + Class old = ldrMap.putIfAbsent(clsName, cls = Class.forName(clsName, true, ldr)); + + if (old != null) + cls = old; + } + + return cls; + } + + /** * Applies a supplemental hash function to a given hashCode, which * defends against poor quality hash functions. This is critical * because ConcurrentHashMap uses power-of-two length hash tables, http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4fe82707/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerContext.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerContext.java b/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerContext.java index 6c6e398..0d27a58 100644 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerContext.java +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerContext.java @@ -37,5 +37,5 @@ public interface MarshallerContext { * @return Class. * @throws ClassNotFoundException If class was not found. */ - public Class className(int id, ClassLoader ldr) throws ClassNotFoundException; + public Class getClass(int id, ClassLoader ldr) throws ClassNotFoundException; } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4fe82707/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java index ff1967c..7f65d54 100644 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java @@ -208,7 +208,7 @@ class OptimizedMarshallerUtils { */ static OptimizedClassDescriptor classDescriptor(int id, ClassLoader ldr, MarshallerContext ctx, OptimizedMarshallerIdMapper mapper) throws IOException, ClassNotFoundException { - return classDescriptor(ctx.className(id, ldr), ctx, mapper); + return classDescriptor(ctx.getClass(id, ldr), ctx, mapper); } /** http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4fe82707/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java index 6eb9086..9966777 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java @@ -89,7 +89,7 @@ public class GridCacheEntryMemorySizeSelfTest extends GridCommonAbstractTest { // No-op. } - @Override public Class className(int id, ClassLoader ldr) { + @Override public Class getClass(int id, ClassLoader ldr) { throw new UnsupportedOperationException(); } }); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4fe82707/modules/core/src/test/java/org/apache/ignite/marshaller/MarshallerContextTestImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/marshaller/MarshallerContextTestImpl.java b/modules/core/src/test/java/org/apache/ignite/marshaller/MarshallerContextTestImpl.java index 2122832..dda8fd5 100644 --- a/modules/core/src/test/java/org/apache/ignite/marshaller/MarshallerContextTestImpl.java +++ b/modules/core/src/test/java/org/apache/ignite/marshaller/MarshallerContextTestImpl.java @@ -20,7 +20,6 @@ package org.apache.ignite.marshaller; import org.apache.ignite.internal.*; import org.jdk8.backport.*; -import java.util.*; import java.util.concurrent.*; /** @@ -28,40 +27,15 @@ import java.util.concurrent.*; */ public class MarshallerContextTestImpl extends MarshallerContextAdapter { /** */ - private final ConcurrentMap<Integer, Class> map = new ConcurrentHashMap8<>(); - - /** - */ - public MarshallerContextTestImpl() { - super(); - - ClassLoader ldr = getClass().getClassLoader(); - - for (Map.Entry<Integer, String> e : clsNameById.entrySet()) { - try { - map.put(e.getKey(), Class.forName(e.getValue(), true, ldr)); - } - catch (ClassNotFoundException | NoClassDefFoundError ignored) { - // No-op. - } - } - } + private final ConcurrentMap<Integer, String> map = new ConcurrentHashMap8<>(); /** {@inheritDoc} */ - @Override public void registerClass(int id, Class cls) { - Class old = map.putIfAbsent(id, cls); - - if (old != null && !cls.getName().equals(old.getName())) - throw new IllegalStateException("Collision [id=" + id + ", cls1=" + cls.getName() + - ", cls2=" + old.getName() + ']'); + @Override protected void registerClassName(int id, String clsName) { + map.putIfAbsent(id, clsName); } /** {@inheritDoc} */ - @Override public Class className(int id, ClassLoader ldr) throws ClassNotFoundException { - Class cls = map.get(id); - - assert cls != null : id; - - return cls; + @Override protected String className(int id) { + return map.get(id); } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4fe82707/modules/yardstick/config/benchmark-multicast.properties ---------------------------------------------------------------------- diff --git a/modules/yardstick/config/benchmark-multicast.properties b/modules/yardstick/config/benchmark-multicast.properties index 9d7087b..f0fe47f 100644 --- a/modules/yardstick/config/benchmark-multicast.properties +++ b/modules/yardstick/config/benchmark-multicast.properties @@ -36,7 +36,7 @@ JVM_OPTS=${JVM_OPTS}" \ -XX:CMSInitiatingOccupancyFraction=60 \ " #Ignite version -ver="141-" +ver="RELEASE-" # List of default probes. # Add DStatProbe or VmStatProbe if your OS supports it (e.g. if running on Linux). @@ -65,5 +65,25 @@ nodesNum=$((`echo ${SERVER_HOSTS} | tr ',' '\n' | wc -l` + `echo ${DRIVER_HOSTS} # Run configuration which contains all benchmarks. # Note that each benchmark is set to run for 300 seconds (5 mins) with warm-up set to 60 seconds (1 minute). CONFIGS="\ --cfg ${SCRIPT_DIR}/../config/ignite-multicast-config.xml -nn ${nodesNum} -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -dn IgnitePutGetBenchmark -sn IgniteNode -ds ${ver}atomic-put-get-1-backup\ +-cfg ${SCRIPT_DIR}/../config/ignite-multicast-config.xml -nn ${nodesNum} -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -dn IgnitePutBenchmark -sn IgniteNode -ds ${ver}atomic-put-1-backup,\ +-cfg ${SCRIPT_DIR}/../config/ignite-multicast-config.xml -nn ${nodesNum} -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -dn IgnitePutGetBenchmark -sn IgniteNode -ds ${ver}atomic-put-get-1-backup,\ +-cfg ${SCRIPT_DIR}/../config/ignite-multicast-config.xml -nn ${nodesNum} -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -dn IgnitePutTxBenchmark -sn IgniteNode -ds ${ver}tx-put-1-backup,\ +-cfg ${SCRIPT_DIR}/../config/ignite-multicast-config.xml -nn ${nodesNum} -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -dn IgnitePutGetTxBenchmark -sn IgniteNode -ds ${ver}tx-put-get-1-backup,\ +-cfg ${SCRIPT_DIR}/../config/ignite-multicast-config.xml -nn ${nodesNum} -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -dn IgniteSqlQueryBenchmark -sn IgniteNode -ds ${ver}sql-query-1-backup,\ +-cfg ${SCRIPT_DIR}/../config/ignite-multicast-config.xml -nn ${nodesNum} -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -dn IgniteSqlQueryJoinBenchmark -sn IgniteNode -ds ${ver}sql-query-join-1-backup,\ +-cfg ${SCRIPT_DIR}/../config/ignite-multicast-config.xml -nn ${nodesNum} -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -dn IgniteSqlQueryPutBenchmark -sn IgniteNode -ds ${ver}sql-query-put-1-backup,\ +-cfg ${SCRIPT_DIR}/../config/ignite-multicast-config.xml -nn ${nodesNum} -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -j 10 -dn IgniteAffinityCallBenchmark -sn IgniteNode -ds ${ver}affcall-compute-1-backup,\ +-cfg ${SCRIPT_DIR}/../config/ignite-multicast-config.xml -nn ${nodesNum} -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -j 10 -dn IgniteApplyBenchmark -sn IgniteNode -ds ${ver}apply-compute-1-backup,\ +-cfg ${SCRIPT_DIR}/../config/ignite-multicast-config.xml -nn ${nodesNum} -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -j 10 -dn IgniteBroadcastBenchmark -sn IgniteNode -ds ${ver}broad-compute-1-backup,\ +-cfg ${SCRIPT_DIR}/../config/ignite-multicast-config.xml -nn ${nodesNum} -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -j 10 -dn IgniteExecuteBenchmark -sn IgniteNode -ds ${ver}exec-compute-1-backup,\ +-cfg ${SCRIPT_DIR}/../config/ignite-multicast-config.xml -nn ${nodesNum} -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -j 10 -dn IgniteRunBenchmark -sn IgniteNode -ds ${ver}run-compute-1-backup,\ +-cfg ${SCRIPT_DIR}/../config/ignite-multicast-config.xml -nn ${nodesNum} -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -dn IgnitePutGetOffHeapBenchmark -sn IgniteNode -ds ${ver}atomic-put-get-offheap-1-backup,\ +-cfg ${SCRIPT_DIR}/../config/ignite-multicast-config.xml -nn ${nodesNum} -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -dn IgnitePutGetOffHeapValuesBenchmark -sn IgniteNode -ds ${ver}atomic-put-get-offheap-val-1-backup,\ +-cfg ${SCRIPT_DIR}/../config/ignite-multicast-config.xml -nn ${nodesNum} -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -dn IgnitePutOffHeapBenchmark -sn IgniteNode -ds ${ver}atomic-put-offheap-1-backup,\ +-cfg ${SCRIPT_DIR}/../config/ignite-multicast-config.xml -nn ${nodesNum} -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -dn IgnitePutOffHeapValuesBenchmark -sn IgniteNode -ds ${ver}atomic-put-offheap-val-1-backup,\ +-cfg ${SCRIPT_DIR}/../config/ignite-multicast-config.xml -nn ${nodesNum} -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -dn IgnitePutTxOffHeapBenchmark -sn IgniteNode -ds ${ver}tx-put-offheap-1-backup,\ +-cfg ${SCRIPT_DIR}/../config/ignite-multicast-config.xml -nn ${nodesNum} -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -dn IgnitePutTxOffHeapValuesBenchmark -sn IgniteNode -ds ${ver}tx-put-offheap-val-1-backup,\ +-cfg ${SCRIPT_DIR}/../config/ignite-multicast-config.xml -nn ${nodesNum} -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -dn IgniteSqlQueryOffHeapBenchmark -sn IgniteNode -ds ${ver}sql-query-offheap-1-backup,\ +-cfg ${SCRIPT_DIR}/../config/ignite-multicast-config.xml -nn ${nodesNum} -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -dn IgniteSqlQueryJoinOffHeapBenchmark -sn IgniteNode -ds ${ver}sql-query-join-offheap-1-backup,\ +-cfg ${SCRIPT_DIR}/../config/ignite-multicast-config.xml -nn ${nodesNum} -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -dn IgniteSqlQueryPutOffHeapBenchmark -sn IgniteNode -ds ${ver}sql-query-put-offheap-1-backup\ "