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

[ignite] branch master updated: IGNITE-15714 Yardstick benchmark for multi cache transaction operations - Fixes #9481.

This is an automated email from the ASF dual-hosted git repository.

zstan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new 32c8a57  IGNITE-15714 Yardstick benchmark for multi cache transaction operations - Fixes #9481.
32c8a57 is described below

commit 32c8a57d29849773fda40445dcb90413e8b73cb5
Author: zstan <st...@gmail.com>
AuthorDate: Tue Oct 12 10:05:57 2021 +0300

    IGNITE-15714 Yardstick benchmark for multi cache transaction operations - Fixes #9481.
    
    Signed-off-by: zstan <st...@gmail.com>
---
 .../benchmark-multicache-putall-tx.properties      | 81 +++++++++++++++++++++
 .../config/benchmark-multicache-tx.properties      | 84 ++++++++++++++++++++++
 .../ignite/yardstick/IgniteBenchmarkArguments.java | 11 +++
 .../cache/IgniteCacheAbstractBenchmark.java        | 14 +++-
 .../yardstick/cache/IgnitePutAllBenchmark.java     |  9 ++-
 ...java => IgnitePutAllMultiCacheTxBenchmark.java} | 53 +++++++-------
 ...rk.java => IgnitePutMultiCacheTxBenchmark.java} | 62 +++++++++++++---
 .../yardstick/cache/IgnitePutTxBenchmark.java      |  2 +-
 .../load/IgniteCacheRandomOperationBenchmark.java  |  2 +-
 .../ignite/yardstick/cache/model/SampleValue.java  |  2 +-
 10 files changed, 274 insertions(+), 46 deletions(-)

diff --git a/modules/yardstick/config/benchmark-multicache-putall-tx.properties b/modules/yardstick/config/benchmark-multicache-putall-tx.properties
new file mode 100644
index 0000000..0c6b337
--- /dev/null
+++ b/modules/yardstick/config/benchmark-multicache-putall-tx.properties
@@ -0,0 +1,81 @@
+# 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 benchmarks for TRANSACTIONAL cache.
+#
+
+# JVM options.
+JVM_OPTS=${JVM_OPTS}" -DIGNITE_QUIET=false"
+
+# Uncomment to enable concurrent garbage collection (GC) if you encounter long GC pauses.
+# JVM_OPTS=${JVM_OPTS}" \
+# -Xms6g \
+# -Xmx6g \
+# -Xloggc:./gc${now0}.log \
+# -XX:+PrintGCDetails \
+# -verbose:gc \
+# -XX:+UseParNewGC \
+# -XX:+UseConcMarkSweepGC \
+# "
+
+#Ignite version
+ver="RELEASE-"
+
+# List of default probes, comma separated.
+# Add DStatProbe or VmStatProbe if your OS supports it (e.g. if running on Linux).
+BENCHMARK_DEFAULT_PROBES=ThroughputLatencyProbe,PercentileProbe
+
+# Packages where the specified benchmark is searched by reflection mechanism, comma separated.
+BENCHMARK_PACKAGES=org.yardstickframework,org.apache.ignite.yardstick
+
+# Probe point writer class name.
+# BENCHMARK_WRITER=
+
+# Comma-separated list of the hosts to run BenchmarkServers on. 2 nodes on local host are enabled by default.
+SERVER_HOSTS=localhost,localhost
+
+# Comma-separated list of the hosts to run BenchmarkDrivers on. 1 node on local host is enabled by default.
+DRIVER_HOSTS=localhost
+
+# Remote username.
+# REMOTE_USER=
+
+# Number of nodes, used to wait for the specified number of nodes to start.
+nodesNum=$((`echo ${SERVER_HOSTS} | tr ',' '\n' | wc -l` + `echo ${DRIVER_HOSTS} | tr ',' '\n' | wc -l`))
+
+# Backups count.
+b=1
+
+# Warmup.
+w=10
+
+# Duration.
+d=30
+
+# Threads count.
+t=64
+
+# Sync mode.
+sm=PRIMARY_SYNC
+
+# Cache count.
+caches=3
+
+# Run configuration.
+# Note that each benchmark is set to run for 300 seconds (5 min) with warm-up set to 60 seconds (1 minute).
+CONFIGS="\
+-cfg ${SCRIPT_DIR}/../config/ignite-localhost-config.xml -nn ${nodesNum} -b ${b} -w ${w} -d ${d} -t ${t} -sm ${sm} -txc PESSIMISTIC -txi READ_COMMITTED -dn IgnitePutAllMultiCacheTxBenchmark -cc ${caches} -sn IgniteNode -ds ${ver}tx-putall-multicache${b}-backup,\
+"
diff --git a/modules/yardstick/config/benchmark-multicache-tx.properties b/modules/yardstick/config/benchmark-multicache-tx.properties
new file mode 100644
index 0000000..09286f8
--- /dev/null
+++ b/modules/yardstick/config/benchmark-multicache-tx.properties
@@ -0,0 +1,84 @@
+# 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 benchmarks for TRANSACTIONAL cache.
+#
+
+# JVM options.
+JVM_OPTS=${JVM_OPTS}" -DIGNITE_QUIET=false"
+
+# Uncomment to enable concurrent garbage collection (GC) if you encounter long GC pauses.
+# JVM_OPTS=${JVM_OPTS}" \
+# -Xms6g \
+# -Xmx6g \
+# -Xloggc:./gc${now0}.log \
+# -XX:+PrintGCDetails \
+# -verbose:gc \
+# -XX:+UseParNewGC \
+# -XX:+UseConcMarkSweepGC \
+# "
+
+#Ignite version
+ver="RELEASE-"
+
+# List of default probes, comma separated.
+# Add DStatProbe or VmStatProbe if your OS supports it (e.g. if running on Linux).
+BENCHMARK_DEFAULT_PROBES=ThroughputLatencyProbe,PercentileProbe
+
+# Packages where the specified benchmark is searched by reflection mechanism, comma separated.
+BENCHMARK_PACKAGES=org.yardstickframework,org.apache.ignite.yardstick
+
+# Probe point writer class name.
+# BENCHMARK_WRITER=
+
+# Comma-separated list of the hosts to run BenchmarkServers on. 2 nodes on local host are enabled by default.
+SERVER_HOSTS=localhost,localhost
+
+# Comma-separated list of the hosts to run BenchmarkDrivers on. 1 node on local host is enabled by default.
+DRIVER_HOSTS=localhost
+
+# Remote username.
+# REMOTE_USER=
+
+# Number of nodes, used to wait for the specified number of nodes to start.
+nodesNum=$((`echo ${SERVER_HOSTS} | tr ',' '\n' | wc -l` + `echo ${DRIVER_HOSTS} | tr ',' '\n' | wc -l`))
+
+# Backups count.
+b=1
+
+# Warmup.
+w=10
+
+# Duration.
+d=30
+
+# Threads count.
+t=64
+
+# Sync mode.
+sm=PRIMARY_SYNC
+
+# Cache count.
+caches=3
+
+# Operations per cache.
+opPerCache=2
+
+# Run configuration.
+# Note that each benchmark is set to run for 300 seconds (5 min) with warm-up set to 60 seconds (1 minute).
+CONFIGS="\
+-cfg ${SCRIPT_DIR}/../config/ignite-localhost-config.xml -nn ${nodesNum} -b ${b} -w ${w} -d ${d} -t ${t} -sm ${sm} -dn IgnitePutMultiCacheTxBenchmark -cc ${caches} -opc ${opPerCache} -sn IgniteNode -ds ${ver}tx-put-multicache${b}-backup,\
+"
diff --git a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/IgniteBenchmarkArguments.java b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/IgniteBenchmarkArguments.java
index ea9a84a..5f247ab 100644
--- a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/IgniteBenchmarkArguments.java
+++ b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/IgniteBenchmarkArguments.java
@@ -254,6 +254,10 @@ public class IgniteBenchmarkArguments {
     private int cachesCnt = 1;
 
     /** */
+    @Parameter(names = {"-opc", "--operationsPerCache"}, description = "Number of cache operations")
+    private int opsPerCache = 1;
+
+    /** */
     @Parameter(names = {"-pds", "--persistentStore"}, description = "Persistent store flag")
     private boolean persistentStoreEnabled;
 
@@ -818,6 +822,13 @@ public class IgniteBenchmarkArguments {
         return sysProps;
     }
 
+    /**
+     * @return Operations per cache.
+     */
+    public int opsPerCache() {
+        return opsPerCache;
+    }
+
     /** {@inheritDoc} */
     @Override public String toString() {
         return GridToStringBuilder.toString(IgniteBenchmarkArguments.class, this);
diff --git a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgniteCacheAbstractBenchmark.java b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgniteCacheAbstractBenchmark.java
index a3720e1..5880822 100644
--- a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgniteCacheAbstractBenchmark.java
+++ b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgniteCacheAbstractBenchmark.java
@@ -34,6 +34,7 @@ import org.apache.ignite.IgniteDataStreamer;
 import org.apache.ignite.IgniteSemaphore;
 import org.apache.ignite.cache.affinity.Affinity;
 import org.apache.ignite.cluster.ClusterNode;
+import org.apache.ignite.cluster.ClusterState;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.internal.util.typedef.T2;
 import org.apache.ignite.internal.util.typedef.internal.U;
@@ -107,7 +108,7 @@ public abstract class IgniteCacheAbstractBenchmark<K, V> extends IgniteAbstractB
     @Override public void setUp(BenchmarkConfiguration cfg) throws Exception {
         super.setUp(cfg);
 
-        ignite().cluster().active(true);
+        ignite().cluster().state(ClusterState.ACTIVE);
 
         cache = cache();
 
@@ -150,7 +151,7 @@ public abstract class IgniteCacheAbstractBenchmark<K, V> extends IgniteAbstractB
 
             for (ClusterNode node : ignite().cluster().nodes())
                 parts.put(node,
-                    new T2<List<Integer>, List<Integer>>(new ArrayList<Integer>(), new ArrayList<Integer>()));
+                    new T2<>(new ArrayList<>(), new ArrayList<>()));
 
             U.sleep(5000);
 
@@ -237,7 +238,7 @@ public abstract class IgniteCacheAbstractBenchmark<K, V> extends IgniteAbstractB
      * @throws Exception If failed.
      */
     protected final void loadCachesData() throws Exception {
-        List<IgniteCache> caches = testCaches != null ? testCaches : Collections.<IgniteCache>singletonList(cache);
+        List<IgniteCache> caches = testCaches != null ? testCaches : Collections.singletonList(cache);
 
         if (caches.size() > 1) {
             ExecutorService executor = Executors.newFixedThreadPool(10);
@@ -373,4 +374,11 @@ public abstract class IgniteCacheAbstractBenchmark<K, V> extends IgniteAbstractB
             return rnd.nextInt(min, max);
         }
     }
+
+    /**
+     * @return Caches.
+     */
+    protected int cachesCnt() {
+        return caches;
+    }
 }
diff --git a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutAllBenchmark.java b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutAllBenchmark.java
index dc21029..707e56c 100644
--- a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutAllBenchmark.java
+++ b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutAllBenchmark.java
@@ -131,11 +131,16 @@ public class IgnitePutAllBenchmark extends IgniteCacheAbstractBenchmark<Integer,
             }
         }
 
+        putData(vals);
+
+        return true;
+    }
+
+    /** Put operations.*/
+    protected void putData(Map<Integer, Integer> vals) throws Exception {
         IgniteCache<Integer, Object> cache = cacheForOperation();
 
         cache.putAll(vals);
-
-        return true;
     }
 
     /** {@inheritDoc} */
diff --git a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutTxBenchmark.java b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutAllMultiCacheTxBenchmark.java
similarity index 53%
copy from modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutTxBenchmark.java
copy to modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutAllMultiCacheTxBenchmark.java
index 0a8a470..812fb93 100644
--- a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutTxBenchmark.java
+++ b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutAllMultiCacheTxBenchmark.java
@@ -2,11 +2,11 @@
  * 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 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
+ * 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,
@@ -18,51 +18,50 @@
 package org.apache.ignite.yardstick.cache;
 
 import java.util.Map;
-import java.util.concurrent.Callable;
+import java.util.function.Consumer;
 import org.apache.ignite.IgniteCache;
-import org.apache.ignite.IgniteSystemProperties;
 import org.apache.ignite.IgniteTransactions;
+import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.yardstick.IgniteBenchmarkUtils;
-import org.apache.ignite.yardstick.cache.model.SampleValue;
 import org.yardstickframework.BenchmarkConfiguration;
+import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
 
-/**
- * Ignite benchmark that performs transactional put operations.
- */
-public class IgnitePutTxBenchmark extends IgniteCacheAbstractBenchmark<Integer, Object> {
+/** Ignite benchmark that performs transactional putAll multi cache operations.*/
+public class IgnitePutAllMultiCacheTxBenchmark extends IgnitePutAllBenchmark {
     /** */
-    private IgniteTransactions txs;
+    private Consumer<Map<Integer, Integer>> cons;
 
     /** */
-    private Callable<Void> clo;
+    private IgniteTransactions txs;
 
     /** {@inheritDoc} */
     @Override public void setUp(BenchmarkConfiguration cfg) throws Exception {
         super.setUp(cfg);
 
-        if (!IgniteSystemProperties.getBoolean("SKIP_MAP_CHECK"))
-            ignite().compute().broadcast(new WaitMapExchangeFinishCallable());
-
         txs = ignite().transactions();
 
-        clo = new Callable<Void>() {
-            @Override public Void call() throws Exception {
-                IgniteCache<Integer, Object> cache = cacheForOperation();
-
-                int key = nextRandom(args.range());
+        if (cachesCnt() <= 1)
+            throw new IllegalArgumentException("Please configure --cachesCnt" +
+                " param, need to be more that 1.");
 
-                cache.put(key, new SampleValue(key));
+        for (IgniteCache<?, ?> cache : testCaches) {
+            if (cache.getConfiguration(CacheConfiguration.class).getAtomicityMode() != TRANSACTIONAL)
+                throw new IllegalArgumentException("Only transactional caches need to be present.");
+        }
 
-                return null;
-            }
+        cons = (vals) -> {
+            for (IgniteCache cache : testCaches)
+                cache.putAll(vals);
         };
     }
 
-    /** {@inheritDoc} */
-    @Override public boolean test(Map<Object, Object> ctx) throws Exception {
-        IgniteBenchmarkUtils.doInTransaction(txs, args.txConcurrency(), args.txIsolation(), clo);
-
-        return true;
+    /** Put operations.*/
+    @Override protected void putData(Map<Integer, Integer> vals) throws Exception {
+        IgniteBenchmarkUtils.doInTransaction(txs, args.txConcurrency(), args.txIsolation(),
+            () -> {
+                cons.accept(vals);
+                return null;
+            });
     }
 
     /** {@inheritDoc} */
diff --git a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutTxBenchmark.java b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutMultiCacheTxBenchmark.java
similarity index 54%
copy from modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutTxBenchmark.java
copy to modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutMultiCacheTxBenchmark.java
index 0a8a470..ef24b79 100644
--- a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutTxBenchmark.java
+++ b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutMultiCacheTxBenchmark.java
@@ -18,43 +18,61 @@
 package org.apache.ignite.yardstick.cache;
 
 import java.util.Map;
+import java.util.UUID;
 import java.util.concurrent.Callable;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.IgniteSystemProperties;
 import org.apache.ignite.IgniteTransactions;
+import org.apache.ignite.cache.query.annotations.QuerySqlField;
+import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.yardstick.IgniteBenchmarkUtils;
-import org.apache.ignite.yardstick.cache.model.SampleValue;
 import org.yardstickframework.BenchmarkConfiguration;
+import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
 
-/**
- * Ignite benchmark that performs transactional put operations.
- */
-public class IgnitePutTxBenchmark extends IgniteCacheAbstractBenchmark<Integer, Object> {
+/** Multi cache transactional put benchmark. */
+public class IgnitePutMultiCacheTxBenchmark extends IgniteCacheAbstractBenchmark<Integer, Object> {
     /** */
     private IgniteTransactions txs;
 
     /** */
     private Callable<Void> clo;
 
+    /** Num of cache operations.*/
+    private int cacheOperations;
+
     /** {@inheritDoc} */
     @Override public void setUp(BenchmarkConfiguration cfg) throws Exception {
         super.setUp(cfg);
 
+        if (cachesCnt() <= 1)
+            throw new IllegalArgumentException("Please configure --cachesCnt" +
+                " param, need to be more that 1.");
+
         if (!IgniteSystemProperties.getBoolean("SKIP_MAP_CHECK"))
             ignite().compute().broadcast(new WaitMapExchangeFinishCallable());
 
         txs = ignite().transactions();
 
-        clo = new Callable<Void>() {
-            @Override public Void call() throws Exception {
-                IgniteCache<Integer, Object> cache = cacheForOperation();
+        cacheOperations = args.opsPerCache();
 
-                int key = nextRandom(args.range());
+        for (IgniteCache<?, ?> cache : testCaches) {
+            if (cache.getConfiguration(CacheConfiguration.class).getAtomicityMode() != TRANSACTIONAL)
+                throw new IllegalArgumentException("Only transactional caches need to be present.");
+        }
 
-                cache.put(key, new SampleValue(key));
+        clo = () -> {
+            int key = nextRandom(args.range());
 
-                return null;
+            int shift = 0;
+
+            for (int i = 0; i < cacheOperations; ++i) {
+                for (IgniteCache cache : testCaches) {
+                    cache.put(key, new SampleValue(key + shift, UUID.randomUUID()));
+                    ++shift;
+                }
             }
+
+            return null;
         };
     }
 
@@ -69,4 +87,26 @@ public class IgnitePutTxBenchmark extends IgniteCacheAbstractBenchmark<Integer,
     @Override protected IgniteCache<Integer, Object> cache() {
         return ignite().cache("tx");
     }
+
+    /** */
+    private static class SampleValue {
+        /** */
+        @QuerySqlField
+        private int id;
+
+        /** */
+        @QuerySqlField
+        private UUID uid;
+
+        /** */
+        private SampleValue() {
+            // No-op.
+        }
+
+        /** */
+        public SampleValue(int id, UUID uid) {
+            this.id = id;
+            this.uid = uid;
+        }
+    }
 }
diff --git a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutTxBenchmark.java b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutTxBenchmark.java
index 0a8a470..aed9c5c 100644
--- a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutTxBenchmark.java
+++ b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutTxBenchmark.java
@@ -46,7 +46,7 @@ public class IgnitePutTxBenchmark extends IgniteCacheAbstractBenchmark<Integer,
         txs = ignite().transactions();
 
         clo = new Callable<Void>() {
-            @Override public Void call() throws Exception {
+            @Override public Void call() {
                 IgniteCache<Integer, Object> cache = cacheForOperation();
 
                 int key = nextRandom(args.range());
diff --git a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/load/IgniteCacheRandomOperationBenchmark.java b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/load/IgniteCacheRandomOperationBenchmark.java
index c4bd60f..acff2d3 100644
--- a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/load/IgniteCacheRandomOperationBenchmark.java
+++ b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/load/IgniteCacheRandomOperationBenchmark.java
@@ -954,7 +954,7 @@ public class IgniteCacheRandomOperationBenchmark extends IgniteAbstractBenchmark
      * @param cache Ignite cache.
      * @throws Exception If failed.
      */
-    private void doSqlQuery(IgniteCache<Object, Object> cache) throws Exception {
+    private void doSqlQuery(IgniteCache<Object, Object> cache) {
         List<SqlCacheDescriptor> descriptors = cacheSqlDescriptors.get(cache.getName());
 
         if (descriptors != null) {
diff --git a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/model/SampleValue.java b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/model/SampleValue.java
index d48c281..d77384d 100644
--- a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/model/SampleValue.java
+++ b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/model/SampleValue.java
@@ -62,7 +62,7 @@ public class SampleValue implements Externalizable, Binarylizable {
     }
 
     /** {@inheritDoc} */
-    @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+    @Override public void readExternal(ObjectInput in) throws IOException {
         id = in.readInt();
     }