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

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


The following commit(s) were added to refs/heads/master by this push:
     new 40bba0126d HDDS-8693. Generate linear keys for freon ockrw (#4772)
40bba0126d is described below

commit 40bba0126d9e01b2b10e229ea426be6a78a5b8ba
Author: Ritesh H Shukla <[email protected]>
AuthorDate: Mon Sep 18 14:53:42 2023 -0700

    HDDS-8693. Generate linear keys for freon ockrw (#4772)
---
 .../src/main/smoketest/freon/read-write-key.robot  | 10 +++++++--
 .../hadoop/ozone/freon/KeyGeneratorUtil.java       |  2 +-
 .../freon/OzoneClientKeyReadWriteListOps.java      | 25 ++++++++++++++++------
 3 files changed, 27 insertions(+), 10 deletions(-)

diff --git a/hadoop-ozone/dist/src/main/smoketest/freon/read-write-key.robot 
b/hadoop-ozone/dist/src/main/smoketest/freon/read-write-key.robot
index b3487ddb70..f98fdc1950 100644
--- a/hadoop-ozone/dist/src/main/smoketest/freon/read-write-key.robot
+++ b/hadoop-ozone/dist/src/main/smoketest/freon/read-write-key.robot
@@ -31,15 +31,21 @@ Read 10 keys from pre-generated keys
     ${result} =        Execute          ozone freon ockrw -n ${keysCount} -t 
10 -r 100 -v voltest -b buckettest -p performanceTest --percentage-read 100 
--percentage-list 0
                        Should contain   ${result}   Successful executions: 
${keysCount}
 
-Read 10 keys' metadata from pre-generated keys
+Read 10 keys metadata from pre-generated keys
     ${keysCount} =     BuiltIn.Set Variable   10
     ${result} =        Execute          ozone freon ockrw -n ${keysCount} -t 
10 -m -r 100 -v voltest -b buckettest -p performanceTest --percentage-read 100 
--percentage-list 0
                        Should contain   ${result}   Successful executions: 
${keysCount}
 
+Read 10 keys when generate in linear manner
+    ${keysCount} =     BuiltIn.Set Variable   10
+    ${result} =        Execute          ozone freon ockrw -n ${keysCount} -t 1 
-r 100 --size 0 -v voltest -b buckettest -p performanceTest --linear 
--percentage-read=0 --percentage-list=0
+    ${result} =        Execute          ozone freon ockrw -n ${keysCount} -t 1 
-m -r 100 -v voltest -b buckettest -p performanceTest --linear 
--percentage-read=100 --percentage-list=0
+                       Should contain   ${result}   Successful executions: 
${keysCount}
+
 Write 10 keys of size 1 byte each from key index 0 to 99
     ${keysCount} =     BuiltIn.Set Variable   10
     ${size} =          BuiltIn.Set Variable   1
-    ${result} =        Execute          ozone freon ockrw -n ${keysCount} -t 
10 --percentage-read 0 --percentage-list 0 --size ${size} -r 100 -v voltest -b 
buckettest -p performanceTest
+    ${result} =        Execute          ozone freon ockrw -n ${keysCount} -t 
10 --percentage-read 0 --percentage-list 0 --size ${size} -r 100 -v voltest -b 
buckettest -p performanceTest --linear
                        Should contain   ${result}   Successful executions: 
${keysCount}
     ${keyName} =       Execute          echo -n '1' | md5sum | head -c 7
     ${result} =        Execute          ozone sh key info 
/voltest/buckettest/performanceTest/${keyName}
diff --git 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/KeyGeneratorUtil.java
 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/KeyGeneratorUtil.java
index 9773caa440..07ac346457 100644
--- 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/KeyGeneratorUtil.java
+++ 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/KeyGeneratorUtil.java
@@ -38,7 +38,7 @@ public class KeyGeneratorUtil {
     return number -> String.valueOf(number);
   }
 
-  public String generateMd5KeyName(int number) {
+  public String generateMd5KeyName(long number) {
     String encodedStr = DigestUtils.md5Hex(String.valueOf(number));
     return encodedStr.substring(0, 7);
   }
diff --git 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OzoneClientKeyReadWriteListOps.java
 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OzoneClientKeyReadWriteListOps.java
index aca91e12a3..d8540a0540 100644
--- 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OzoneClientKeyReadWriteListOps.java
+++ 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OzoneClientKeyReadWriteListOps.java
@@ -34,6 +34,7 @@ import java.io.IOException;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ThreadLocalRandom;
 import java.util.HashMap;
+import java.util.concurrent.atomic.AtomicLong;
 
 import static 
org.apache.hadoop.ozone.freon.KeyGeneratorUtil.FILE_DIR_SEPARATOR;
 
@@ -73,14 +74,14 @@ public class OzoneClientKeyReadWriteListOps extends 
BaseFreonGenerator
           + " clients. Example: Write keys 0-1000000 followed by "
           + "keys 1000001-2000000.",
           defaultValue = "0")
-  private int startIndex;
+  private long startIndex;
 
   @CommandLine.Option(names = {"-r", "--range"},
           description = "Range of read/write operations. This in co-ordination"
           + " with --start-index can specify the range to read. "
           + "Example: Read from --start-index 1000 and read --range 1000 
keys.",
           defaultValue = "1")
-  private int range;
+  private long range;
 
   @CommandLine.Option(names = {"--size"},
           description = "Object size (in bytes) " +
@@ -96,6 +97,11 @@ public class OzoneClientKeyReadWriteListOps extends 
BaseFreonGenerator
           defaultValue = "false")
   private boolean keySorted;
 
+  @CommandLine.Option(names = {"--linear"},
+      description = "Generate key names in a linear manner, there is no random"
+      + "selection of keys", defaultValue = "false")
+  private boolean linear;
+
   @CommandLine.Option(names = {"--percentage-read"},
           description = "Percentage of read tasks in mix workload."
           + " The remainder of the percentage will be divided between write"
@@ -133,6 +139,7 @@ public class OzoneClientKeyReadWriteListOps extends 
BaseFreonGenerator
   private static final Logger LOG =
           LoggerFactory.getLogger(OzoneClientKeyReadWriteListOps.class);
 
+  private static AtomicLong nextNumber = new AtomicLong();
   /**
    * Task type of read task, or write task.
    */
@@ -253,17 +260,21 @@ public class OzoneClientKeyReadWriteListOps extends 
BaseFreonGenerator
 
   public String getKeyName() {
     StringBuilder keyNameSb = new StringBuilder();
-    int randomIdxWithinRange = ThreadLocalRandom.current().
-            nextInt(startIndex, startIndex + range);
+    long next;
+    if (linear) {
+      next = startIndex + nextNumber.getAndUpdate(x -> (x + 1) % range);
+    }  else {
+      next = ThreadLocalRandom.current().
+          nextLong(startIndex, startIndex + range);
+    }
 
     if (keySorted) {
       keyNameSb.append(getPrefix()).append(FILE_DIR_SEPARATOR).
-              append(randomIdxWithinRange);
+              append(next);
     } else {
       keyNameSb.append(getPrefix()).append(FILE_DIR_SEPARATOR).
-              append(kg.generateMd5KeyName(randomIdxWithinRange));
+              append(kg.generateMd5KeyName(next));
     }
     return keyNameSb.toString();
   }
-
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to