You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2017/07/17 08:22:43 UTC

[06/21] ignite git commit: IGNITE-5740 - Added transaction load timing benchmark

IGNITE-5740 - Added transaction load timing benchmark


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

Branch: refs/heads/ignite-5578-locJoin
Commit: 0cb6ac06adddd43ac72c707b29d7216bd4cb711a
Parents: c6ee085
Author: Oleg Ostanin <oo...@gridgain.com>
Authored: Wed Jul 12 15:57:40 2017 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Wed Jul 12 15:57:40 2017 +0300

----------------------------------------------------------------------
 .../yardstick/IgniteBenchmarkArguments.java     |  33 +++++
 .../cache/IgnitePutTxLoadBenchmark.java         | 119 +++++++++++++++++++
 2 files changed, 152 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/0cb6ac06/modules/yardstick/src/main/java/org/apache/ignite/yardstick/IgniteBenchmarkArguments.java
----------------------------------------------------------------------
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 5ec6c54..594fa1f 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
@@ -209,6 +209,18 @@ public class IgniteBenchmarkArguments {
     private int pageSize = MemoryConfiguration.DFLT_PAGE_SIZE;
 
     /** */
+    @Parameter(names = {"-sl", "--stringLength"}, description = "Test string length")
+    private int stringLength = 500;
+
+    /** */
+    @Parameter(names = {"-wt", "--warningTime"}, description = "Warning time interval for printing log")
+    private long warningTime = 500;
+
+    /** */
+    @Parameter(names = {"-prb", "--printRollBacks"}, description = "Print rollBacks")
+    private boolean printRollBacks;
+
+    /** */
     @Parameter(names = {"-prt", "--partitions"}, description = "Number of cache partitions")
     private int partitions = 10;
 
@@ -507,6 +519,27 @@ public class IgniteBenchmarkArguments {
     }
 
     /**
+     * @return Test string length.
+     */
+    public int getStringLength() {
+        return stringLength;
+    }
+
+    /**
+     * @return Warning time interval.
+     */
+    public long getWarningTime() {
+        return warningTime;
+    }
+
+    /**
+     * @return Flag for printing rollbacks.
+     */
+    public boolean printRollBacks() {
+        return printRollBacks;
+    }
+
+    /**
      * @return Number of partitioned caches.
      */
     public int partitionedCachesNumber() {

http://git-wip-us.apache.org/repos/asf/ignite/blob/0cb6ac06/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutTxLoadBenchmark.java
----------------------------------------------------------------------
diff --git a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutTxLoadBenchmark.java b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutTxLoadBenchmark.java
new file mode 100644
index 0000000..7ac7c3a
--- /dev/null
+++ b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutTxLoadBenchmark.java
@@ -0,0 +1,119 @@
+/*
+ * 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.yardstick.cache;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Random;
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.IgniteSystemProperties;
+import org.apache.ignite.IgniteTransactions;
+import org.apache.ignite.transactions.Transaction;
+import org.apache.ignite.transactions.TransactionMetrics;
+import org.yardstickframework.BenchmarkConfiguration;
+import org.yardstickframework.BenchmarkUtils;
+
+/**
+ * Ignite benchmark that performs transactional load put operations.
+ */
+public class IgnitePutTxLoadBenchmark extends IgniteCacheAbstractBenchmark<Integer, Object> {
+    /** */
+    private ArrayList<IgniteCache<Object, Object>> cacheList;
+
+    /** */
+    private String val;
+
+    /** */
+    private Random random;
+
+    /** {@inheritDoc} */
+    @Override public void setUp(BenchmarkConfiguration cfg) throws Exception {
+        super.setUp(cfg);
+
+        if (!IgniteSystemProperties.getBoolean("SKIP_MAP_CHECK"))
+            ignite().compute().broadcast(new WaitMapExchangeFinishCallable());
+
+        cacheList = new ArrayList<>(args.cachesCount());
+
+        for (int i = 0; i < args.cachesCount(); i++)
+            cacheList.add(ignite().cache("tx-" + i));
+
+        val = createVal(args.getStringLength());
+
+        random = new Random();
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean test(Map<Object, Object> ctx) throws Exception {
+        IgniteTransactions transactions = ignite().transactions();
+
+        long startTime;
+        long endTime;
+
+        try (Transaction tx = transactions.txStart(args.txConcurrency(), args.txIsolation())) {
+            ArrayList<Long> keyList = new ArrayList<>(args.scaleFactor());
+
+            for (int i = 0; i < args.scaleFactor(); i++)
+                keyList.add(random.nextLong());
+
+            Collections.sort(keyList);
+
+            for (int i = 0; i < args.scaleFactor(); i++){
+                IgniteCache<Object, Object> curCache = cacheList.get(random.nextInt(cacheList.size()));
+                curCache.put(keyList.get(i), val);
+            }
+
+            startTime = System.currentTimeMillis();
+
+            tx.commit();
+
+            endTime = System.currentTimeMillis();
+
+        }
+
+        TransactionMetrics tm = transactions.metrics();
+
+        if (endTime - startTime > args.getWarningTime())
+            BenchmarkUtils.println("Transaction commit time = " + (tm.commitTime() - startTime));
+
+        if (tm.txRollbacks() > 0 && args.printRollBacks())
+            BenchmarkUtils.println("Transaction rollbacks = " + tm.txRollbacks());
+
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected IgniteCache<Integer, Object> cache() {
+        return ignite().cache("tx");
+    }
+
+    /**
+     * Creates String val
+     * @param lgth String length
+     * @return String for inserting in cache
+     */
+    private String createVal(int lgth){
+        StringBuilder sb = new StringBuilder(lgth);
+
+        for(int i = 0; i < lgth; i++)
+            sb.append('x');
+
+        return sb.toString();
+    }
+}