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

adoroszlai 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 c119557241 HDDS-7588. Intermittent failure in 
TestObjectStoreWithLegacyFS#testFlatKeyStructureWithOBS (#4040)
c119557241 is described below

commit c119557241967679b1f8754e65cbe54a5d71fb6f
Author: Kaijie Chen <[email protected]>
AuthorDate: Tue Jan 3 22:59:20 2023 +0800

    HDDS-7588. Intermittent failure in 
TestObjectStoreWithLegacyFS#testFlatKeyStructureWithOBS (#4040)
---
 .../ozone/om/TestObjectStoreWithLegacyFS.java      | 52 +++++++++-------------
 1 file changed, 21 insertions(+), 31 deletions(-)

diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestObjectStoreWithLegacyFS.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestObjectStoreWithLegacyFS.java
index fb10a346e9..05570549a6 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestObjectStoreWithLegacyFS.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestObjectStoreWithLegacyFS.java
@@ -127,46 +127,36 @@ public class TestObjectStoreWithLegacyFS {
         cluster.getOzoneManager().getMetadataManager()
             .getKeyTable(BucketLayout.OBJECT_STORE);
 
-    String seekKey = "dir";
-    String dbKey = cluster.getOzoneManager().getMetadataManager()
-        .getOzoneKey(volumeName, bucketName, seekKey);
-
-    GenericTestUtils
-        .waitFor(() -> assertKeyCount(keyTable, dbKey, 1, keyName), 500,
-            60000);
+    GenericTestUtils.waitFor(() -> isKeyExist(keyTable, keyName),
+        500, 60000);
 
     ozoneBucket.renameKey(keyName, "dir1/NewKey-1");
 
-    GenericTestUtils
-        .waitFor(() -> assertKeyCount(keyTable, dbKey, 1, "dir1/NewKey-1"), 
500,
-            60000);
+    // RenameKey changes keyTable cache, so we need to
+    // wait for the transaction to be flushed to db
+    GenericTestUtils.waitFor(() -> !isKeyExist(keyTable, keyName),
+        500, 60000);
+    // When the old key is removed, new key should exist
+    Assert.assertTrue(isKeyExist(keyTable, "dir1/NewKey-1"));
   }
 
-  private boolean assertKeyCount(
-      Table<String, OmKeyInfo> keyTable,
-      String dbKey, int expectedCnt, String keyName) {
-    int countKeys = 0;
-    try {
-      TableIterator<String, ? extends Table.KeyValue<String, OmKeyInfo>>
-          itr = keyTable.iterator();
-      itr.seek(dbKey);
-      while (itr.hasNext()) {
-
-        Table.KeyValue<String, OmKeyInfo> keyValue = itr.next();
-        if (!keyValue.getKey().startsWith(dbKey)) {
-          break;
+  private boolean isKeyExist(Table<String, OmKeyInfo> keyTable,
+      String keyName) {
+    String dbKey = cluster.getOzoneManager().getMetadataManager()
+        .getOzoneKey(volumeName, bucketName, keyName);
+    try (TableIterator<String, ? extends Table.KeyValue<String, OmKeyInfo>>
+             iterator = keyTable.iterator()) {
+      iterator.seek(dbKey);
+      if (iterator.hasNext()) {
+        Table.KeyValue<String, OmKeyInfo> kv = iterator.next();
+        if (kv.getKey().equals(dbKey)) {
+          return true;
         }
-        countKeys++;
-        Assert.assertTrue(keyValue.getKey().endsWith(keyName));
       }
     } catch (IOException ex) {
-      LOG.info("Test failed with: " + ex.getMessage(), ex);
-      Assert.fail("Test failed with: " + ex.getMessage());
-    }
-    if (countKeys != expectedCnt) {
-      LOG.info("Couldn't find KeyName:{} in KeyTable, retrying...", keyName);
+      LOG.error("Error while iterating key table", ex);
     }
-    return countKeys == expectedCnt;
+    return false;
   }
 
   @Test


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

Reply via email to