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

prashantpogde 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 36901d4d4f HDDS-8497. Add leading zeroes on to report table to 
optimize get Pagecall of Snapdiff (#4722)
36901d4d4f is described below

commit 36901d4d4f1d88e3b3de636ad4c379eee67f5221
Author: Swaminathan Balachandran <[email protected]>
AuthorDate: Wed Jun 21 23:06:51 2023 -0700

    HDDS-8497. Add leading zeroes on to report table to optimize get Pagecall 
of Snapdiff (#4722)
---
 .../hadoop/ozone/om/snapshot/PersistentMap.java    |   9 +-
 .../ozone/om/snapshot/RocksDbPersistentMap.java    |  55 ++++++++--
 .../ozone/om/snapshot/SnapshotDiffManager.java     |  50 ++++++---
 .../ozone/om/snapshot/SnapshotTestUtils.java       |  16 ++-
 .../om/snapshot/TestRocksDbPersistentMap.java      | 113 ++++++++++++++++++++-
 .../ozone/om/snapshot/TestSnapshotDiffManager.java |  32 ++++--
 6 files changed, 235 insertions(+), 40 deletions(-)

diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/PersistentMap.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/PersistentMap.java
index 12b1cbb3a0..1a0bc76794 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/PersistentMap.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/PersistentMap.java
@@ -19,6 +19,8 @@
 package org.apache.hadoop.ozone.om.snapshot;
 
 import java.util.Map;
+import java.util.Optional;
+
 import org.apache.hadoop.util.ClosableIterator;
 
 /**
@@ -32,5 +34,10 @@ public interface PersistentMap<K, V> {
 
   void remove(K key);
 
-  ClosableIterator<Map.Entry<K, V>> iterator();
+  default ClosableIterator<Map.Entry<K, V>> iterator() {
+    return this.iterator(Optional.empty(), Optional.empty());
+  }
+
+  ClosableIterator<Map.Entry<K, V>> iterator(Optional<K> lowerBoundKey,
+                                             Optional<K> upperBoundKey);
 }
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/RocksDbPersistentMap.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/RocksDbPersistentMap.java
index 9cf8a59eed..4387baa521 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/RocksDbPersistentMap.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/RocksDbPersistentMap.java
@@ -20,11 +20,16 @@ package org.apache.hadoop.ozone.om.snapshot;
 
 import java.io.IOException;
 import java.util.Map;
+import java.util.Optional;
+import javax.annotation.Nonnull;
+
 import java.util.NoSuchElementException;
 
 import org.apache.hadoop.hdds.utils.db.CodecRegistry;
+import org.apache.hadoop.hdds.utils.db.managed.ManagedReadOptions;
 import org.apache.hadoop.hdds.utils.db.managed.ManagedRocksDB;
 import org.apache.hadoop.hdds.utils.db.managed.ManagedRocksIterator;
+import org.apache.hadoop.hdds.utils.db.managed.ManagedSlice;
 import org.apache.hadoop.util.ClosableIterator;
 import org.rocksdb.ColumnFamilyHandle;
 import org.rocksdb.RocksDBException;
@@ -39,11 +44,11 @@ public class RocksDbPersistentMap<K, V> implements 
PersistentMap<K, V> {
   private final Class<K> keyType;
   private final Class<V> valueType;
 
-  public RocksDbPersistentMap(ManagedRocksDB db,
-                              ColumnFamilyHandle columnFamilyHandle,
-                              CodecRegistry codecRegistry,
-                              Class<K> keyType,
-                              Class<V> valueType) {
+  public RocksDbPersistentMap(@Nonnull ManagedRocksDB db,
+                              @Nonnull ColumnFamilyHandle columnFamilyHandle,
+                              @Nonnull CodecRegistry codecRegistry,
+                              @Nonnull Class<K> keyType,
+                              @Nonnull Class<V> valueType) {
     this.db = db;
     this.columnFamilyHandle = columnFamilyHandle;
     this.codecRegistry = codecRegistry;
@@ -87,9 +92,36 @@ public class RocksDbPersistentMap<K, V> implements 
PersistentMap<K, V> {
   }
 
   @Override
-  public ClosableIterator<Map.Entry<K, V>> iterator() {
-    ManagedRocksIterator iterator =
-        new ManagedRocksIterator(db.get().newIterator(columnFamilyHandle));
+  public ClosableIterator<Map.Entry<K, V>> iterator(Optional<K> lowerBound,
+                                                    Optional<K> upperBound) {
+    final ManagedReadOptions readOptions = new ManagedReadOptions();
+    ManagedRocksIterator iterator;
+    final ManagedSlice lowerBoundSlice;
+    final ManagedSlice upperBoundSlice;
+    try {
+      if (lowerBound.isPresent()) {
+        lowerBoundSlice = new ManagedSlice(
+            codecRegistry.asRawData(lowerBound.get()));
+        readOptions.setIterateLowerBound(lowerBoundSlice);
+      } else {
+        lowerBoundSlice = null;
+      }
+
+      if (upperBound.isPresent()) {
+        upperBoundSlice = new ManagedSlice(
+            codecRegistry.asRawData(upperBound.get()));
+        readOptions.setIterateUpperBound(upperBoundSlice);
+      } else {
+        upperBoundSlice = null;
+      }
+    } catch (IOException exception) {
+      // TODO: [SNAPSHOT] Fail gracefully.
+      throw new RuntimeException(exception);
+    }
+
+    iterator = ManagedRocksIterator.managed(
+        db.get().newIterator(columnFamilyHandle, readOptions));
+
     iterator.get().seekToFirst();
 
     return new ClosableIterator<Map.Entry<K, V>>() {
@@ -138,6 +170,13 @@ public class RocksDbPersistentMap<K, V> implements 
PersistentMap<K, V> {
       @Override
       public void close() {
         iterator.close();
+        readOptions.close();
+        if (upperBoundSlice != null) {
+          upperBoundSlice.close();
+        }
+        if (lowerBoundSlice != null) {
+          lowerBoundSlice.close();
+        }
       }
     };
   }
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/SnapshotDiffManager.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/SnapshotDiffManager.java
index da6bf5e458..9ad256a016 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/SnapshotDiffManager.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/SnapshotDiffManager.java
@@ -378,6 +378,20 @@ public class SnapshotDiffManager implements AutoCloseable {
         .getPath(), tablesToLookUp);
   }
 
+  /**
+   * Gets the report key for a particular index of snapshot diff job.
+   * @param jobId Snapshot diff jobId
+   * @param index
+   * @return report Key of the snapshot diff job
+   */
+
+  static String getReportKeyForIndex(String jobId, long index) {
+    return new StringBuilder(jobId.length() + 21)
+        .append(jobId).append(DELIMITER)
+        .append(org.apache.commons.lang3.StringUtils.leftPad(
+        String.valueOf(index), 20, '0')).toString();
+  }
+
   public SnapshotDiffResponse cancelSnapshotDiff(
       final String volumeName,
       final String bucketName,
@@ -553,24 +567,34 @@ public class SnapshotDiffManager implements AutoCloseable 
{
 
     boolean hasMoreEntries = true;
 
-    int idx;
-    for (idx = index; idx - index < pageSize; idx++) {
-      byte[] rawKey =
-          codecRegistry.asRawData(snapDiffJob.getJobId() + DELIMITER + idx);
-      byte[] bytes = snapDiffReportTable.get(rawKey);
-      if (bytes == null) {
+    byte[] lowerIndex = codecRegistry.asRawData(getReportKeyForIndex(
+        snapDiffJob.getJobId(), index));
+    byte[] upperIndex = codecRegistry.asRawData(getReportKeyForIndex(
+        snapDiffJob.getJobId(), index + pageSize));
+    int idx = index;
+    try (ClosableIterator<Map.Entry<byte[], byte[]>> iterator =
+             snapDiffReportTable.iterator(Optional.of(lowerIndex),
+                 Optional.of(upperIndex))) {
+      int itemsFetched = 0;
+      while (iterator.hasNext() && itemsFetched < pageSize) {
+        Map.Entry<byte[], byte[]> entry = iterator.next();
+        byte[] bytes = entry.getValue();
+        diffReportList.add(codecRegistry.asObject(bytes,
+            DiffReportEntry.class));
+        idx += 1;
+        itemsFetched += 1;
+      }
+      if (diffReportList.size() < pageSize) {
         hasMoreEntries = false;
-        break;
       }
-      diffReportList.add(codecRegistry.asObject(bytes, DiffReportEntry.class));
     }
 
-    String tokenString = hasMoreEntries ? String.valueOf(idx) : null;
+    String nextTokenString = hasMoreEntries ? String.valueOf(idx) : null;
 
     checkReportsIntegrity(snapDiffJob, index, diffReportList.size());
 
     return new SnapshotDiffReportOzone(path.toString(), volumeName, bucketName,
-        fromSnapshotName, toSnapshotName, diffReportList, tokenString);
+        fromSnapshotName, toSnapshotName, diffReportList, nextTokenString);
   }
 
   /**
@@ -1349,10 +1373,8 @@ public class SnapshotDiffManager implements 
AutoCloseable {
     try (ClosableIterator<byte[]>
              diffReportIterator = diffReportEntries.iterator()) {
       while (diffReportIterator.hasNext()) {
-
-        snapDiffReportTable.put(
-            codecRegistry.asRawData(jobId + DELIMITER + index),
-            diffReportIterator.next());
+        snapDiffReportTable.put(codecRegistry.asRawData(
+            getReportKeyForIndex(jobId, index)), diffReportIterator.next());
         index++;
       }
     }
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/snapshot/SnapshotTestUtils.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/snapshot/SnapshotTestUtils.java
index ed368dc388..42b3cdf018 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/snapshot/SnapshotTestUtils.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/snapshot/SnapshotTestUtils.java
@@ -24,6 +24,7 @@ import java.util.Arrays;
 import java.util.Comparator;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.TreeSet;
@@ -88,7 +89,7 @@ public class SnapshotTestUtils {
   public static class StubbedPersistentMap<K, V> implements
       PersistentMap<K, V>  {
 
-    private final Map<K, V> map;
+    private final TreeMap<K, V> map;
 
     public StubbedPersistentMap(Map<K, V> map) {
       this();
@@ -117,9 +118,16 @@ public class SnapshotTestUtils {
     }
 
     @Override
-    public ClosableIterator<Map.Entry<K, V>> iterator() {
-      return new StubbedCloseableIterator<>(
-          this.map.entrySet().stream().iterator());
+    public ClosableIterator<Map.Entry<K, V>> iterator(
+        Optional<K> lowerBoundKey, Optional<K> upperBoundKey) {
+      return new 
StubbedCloseableIterator<>(this.map.entrySet().stream().filter(
+          kvEntry ->
+              lowerBoundKey.map(k -> this.map.comparator()
+                      .compare(kvEntry.getKey(), k) >= 0).orElse(Boolean.TRUE)
+                  &&
+              upperBoundKey.map(k -> this.map.comparator()
+                  .compare(kvEntry.getKey(), k) < 0).orElse(true))
+          .iterator());
     }
   }
 
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestRocksDbPersistentMap.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestRocksDbPersistentMap.java
index 45f71e1d60..6c8b671405 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestRocksDbPersistentMap.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestRocksDbPersistentMap.java
@@ -25,15 +25,27 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+import java.util.stream.Stream;
+
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.hadoop.hdds.StringUtils;
 import org.apache.hadoop.hdds.utils.db.CodecRegistry;
 import org.apache.hadoop.hdds.utils.db.managed.ManagedColumnFamilyOptions;
 import org.apache.hadoop.hdds.utils.db.managed.ManagedDBOptions;
 import org.apache.hadoop.hdds.utils.db.managed.ManagedRocksDB;
+import org.apache.hadoop.util.ClosableIterator;
 import org.apache.ozone.test.GenericTestUtils;
-import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 import org.rocksdb.ColumnFamilyDescriptor;
 import org.rocksdb.ColumnFamilyHandle;
 import org.rocksdb.RocksDBException;
@@ -50,6 +62,8 @@ public class TestRocksDbPersistentMap {
   private static ManagedDBOptions dbOptions;
   private static ManagedColumnFamilyOptions columnFamilyOptions;
 
+  private static AtomicInteger id;
+
   @BeforeAll
   public static void staticInit() throws RocksDBException {
     dbOptions = new ManagedDBOptions();
@@ -74,10 +88,11 @@ public class TestRocksDbPersistentMap {
 
     db = ManagedRocksDB.open(dbOptions, absolutePath, columnFamilyDescriptors,
         columnFamilyHandles);
+    id = new AtomicInteger(0);
   }
 
-  @AfterEach
-  public void teardown() throws RocksDBException {
+  @AfterAll
+  public static void teardown() throws RocksDBException {
     if (dbOptions != null) {
       dbOptions.close();
     }
@@ -97,7 +112,8 @@ public class TestRocksDbPersistentMap {
     try {
       final CodecRegistry codecRegistry = CodecRegistry.newBuilder().build();
       columnFamily = db.get().createColumnFamily(new ColumnFamilyDescriptor(
-          codecRegistry.asRawData("testMap"), columnFamilyOptions));
+          codecRegistry.asRawData("testMap" + id.incrementAndGet()),
+          columnFamilyOptions));
 
       PersistentMap<String, String> persistentMap = new RocksDbPersistentMap<>(
           db,
@@ -131,4 +147,93 @@ public class TestRocksDbPersistentMap {
       }
     }
   }
+
+  /**
+   * Test cases for testRocksDBPersistentMapIterator.
+   */
+  private static Stream<Arguments> rocksDBPersistentMapIteratorCases() {
+    return Stream.of(
+        Arguments.of(
+            Optional.empty(),
+            Optional.of("key202"),
+            Stream.concat(IntStream.range(0, 100).boxed(),
+                    IntStream.range(200, 300).boxed())
+                .map(i -> Pair.of(String.format("key%03d", i),
+                    String.format("value%03d", i)))
+                .collect(Collectors.toList()),
+            Stream.concat(IntStream.range(0, 100).boxed(),
+                    IntStream.range(200, 202).boxed())
+                .map(i -> Pair.of(String.format("key%03d", i),
+                    String.format("value%03d", i)))
+                .collect(Collectors.toList())),
+        Arguments.of(Optional.of("key050"),
+            Optional.empty(), Stream.concat(IntStream.range(50, 100).boxed(),
+                    IntStream.range(200, 300).boxed())
+                .map(i -> Pair.of(String.format("key%03d", i),
+                    String.format("value%03d", i)))
+                .collect(Collectors.toList()),
+            Stream.concat(IntStream.range(50, 100).boxed(),
+                    IntStream.range(200, 300).boxed())
+                .map(i -> Pair.of(String.format("key%03d", i),
+                    String.format("value%03d", i)))
+                .collect(Collectors.toList())
+            ),
+        Arguments.of(Optional.of("key050"),
+            Optional.of("key210"),
+            Stream.concat(IntStream.range(50, 100).boxed(),
+                    IntStream.range(200, 300).boxed())
+                .map(i -> Pair.of(String.format("key%03d", i),
+                    String.format("value%03d", i)))
+                .collect(Collectors.toList()),
+            Stream.concat(IntStream.range(50, 100).boxed(),
+                    IntStream.range(200, 210).boxed())
+                .map(i -> Pair.of(String.format("key%03d", i),
+                    String.format("value%03d", i)))
+                .collect(Collectors.toList())
+        ));
+  }
+
+  @ParameterizedTest
+  @MethodSource("rocksDBPersistentMapIteratorCases")
+  public void testRocksDBPersistentMapIterator(Optional<String> lowerBound,
+              Optional<String> upperBound, List<Pair<String, String>> keys,
+              List<Pair<String, String>> expectedKeys)
+      throws IOException, RocksDBException {
+    ColumnFamilyHandle columnFamily = null;
+    try {
+      final CodecRegistry codecRegistry = CodecRegistry.newBuilder().build();
+      columnFamily = db.get().createColumnFamily(new ColumnFamilyDescriptor(
+          codecRegistry.asRawData("testMap" + id.incrementAndGet()),
+          columnFamilyOptions));
+
+      PersistentMap<String, String> persistentMap = new RocksDbPersistentMap<>(
+          db,
+          columnFamily,
+          codecRegistry,
+          String.class,
+          String.class
+      );
+
+      for (int i = 0; i < keys.size(); i++) {
+        String key = keys.get(i).getKey();
+        String value = keys.get(i).getValue();
+        persistentMap.put(key, value);
+      }
+      ClosableIterator<Map.Entry<String, String>> iterator =
+          persistentMap.iterator(lowerBound, upperBound);
+      int idx = 0;
+      while (iterator.hasNext()) {
+        Map.Entry<String, String> e = iterator.next();
+        Assertions.assertEquals(Pair.of(e.getKey(), e.getValue()),
+            expectedKeys.get(idx));
+        idx += 1;
+      }
+
+    } finally {
+      if (columnFamily != null) {
+        db.get().dropColumnFamily(columnFamily);
+        columnFamily.close();
+      }
+    }
+  }
 }
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestSnapshotDiffManager.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestSnapshotDiffManager.java
index bc7c00fbe2..355cce7774 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestSnapshotDiffManager.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestSnapshotDiffManager.java
@@ -80,6 +80,7 @@ import org.mockito.junit.jupiter.MockitoSettings;
 import org.mockito.quality.Strictness;
 import org.mockito.stubbing.Answer;
 import org.rocksdb.ColumnFamilyHandle;
+import org.rocksdb.ReadOptions;
 import org.rocksdb.RocksDB;
 import org.rocksdb.RocksDBException;
 import org.rocksdb.RocksIterator;
@@ -96,6 +97,7 @@ import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.UUID;
@@ -104,11 +106,11 @@ import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 import java.util.stream.LongStream;
 import java.util.stream.Stream;
-
 import static org.apache.hadoop.ozone.om.OmSnapshotManager.DELIMITER;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.any;
 
 /**
  * Test class for SnapshotDiffManager Class.
@@ -156,7 +158,7 @@ public class TestSnapshotDiffManager {
 
   private DBStore getMockedDBStore(String dbStorePath) {
     DBStore dbStore = mock(DBStore.class);
-    Mockito.when(dbStore.getDbLocation()).thenReturn(new File(dbStorePath));
+    when(dbStore.getDbLocation()).thenReturn(new File(dbStorePath));
     return dbStore;
   }
 
@@ -172,8 +174,11 @@ public class TestSnapshotDiffManager {
 
   private SnapshotDiffManager getMockedSnapshotDiffManager(int cacheSize)
       throws IOException {
-    Mockito.when(snapdiffDB.get()).thenReturn(rocksDB);
-    Mockito.when(rocksDB.newIterator(snapdiffJobCFH))
+    when(snapdiffDB.get()).thenReturn(rocksDB);
+    when(rocksDB.newIterator(snapdiffJobCFH))
+        .thenReturn(jobTableIterator);
+    when(rocksDB.newIterator(Mockito.eq(snapdiffJobCFH),
+            Mockito.any(ReadOptions.class)))
         .thenReturn(jobTableIterator);
     CacheLoader<String, OmSnapshot> loader =
         new CacheLoader<String, OmSnapshot>() {
@@ -460,8 +465,12 @@ public class TestSnapshotDiffManager {
                 (mock, context) -> {
                   PersistentMap obj =
                       new SnapshotTestUtils.StubbedPersistentMap<>();
-                  Mockito.when(mock.iterator()).thenReturn(obj.iterator());
-                  Mockito.when(mock.get(Matchers.any()))
+                  when(mock.iterator()).thenReturn(obj.iterator());
+                  when(mock.iterator(Mockito.any(Optional.class),
+                      Mockito.any(Optional.class)))
+                      .thenAnswer(i -> obj.iterator(i.getArgument(0),
+                          i.getArgument(1)));
+                  when(mock.get(Matchers.any()))
                       .thenAnswer(i -> obj.get(i.getArgument(0)));
                   Mockito.doAnswer((Answer<Void>) i -> {
                     obj.put(i.getArgument(0), i.getArgument(1));
@@ -624,7 +633,10 @@ public class TestSnapshotDiffManager {
                   cfHandleRocksDbPersistentMap.put(cf, mock);
                   PersistentMap obj =
                       new SnapshotTestUtils.StubbedPersistentMap<>();
-                  Mockito.when(mock.iterator()).thenReturn(obj.iterator());
+                  when(mock.iterator()).thenReturn(obj.iterator());
+                  when(mock.iterator(any(Optional.class),
+                      any(Optional.class))).thenAnswer(i ->
+                      obj.iterator(i.getArgument(0), i.getArgument(1)));
                   Mockito.when(mock.get(Matchers.any()))
                       .thenAnswer(i -> obj.get(i.getArgument(0)));
                   Mockito.doAnswer((Answer<Void>) i -> {
@@ -639,10 +651,12 @@ public class TestSnapshotDiffManager {
       IntStream.range(0, totalNumberOfRecords).boxed().forEach(idx -> {
         try {
           cfHandleRocksDbPersistentMap.get(snapdiffReportCFH)
-              .put(codecRegistry.asRawData(testJobId + DELIMITER + idx),
+              .put(codecRegistry.asRawData(SnapshotDiffManager
+                      .getReportKeyForIndex(testJobId, idx)),
                   codecRegistry.asRawData(getTestDiffEntry(testJobId, idx)));
           cfHandleRocksDbPersistentMap.get(snapdiffReportCFH)
-              .put(codecRegistry.asRawData(testJobId2 + DELIMITER + idx),
+              .put(codecRegistry.asRawData(SnapshotDiffManager
+                      .getReportKeyForIndex(testJobId2, idx)),
                   codecRegistry.asRawData(getTestDiffEntry(testJobId2, idx)));
         } catch (IOException e) {
           throw new RuntimeException(e);


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

Reply via email to