diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataManagerImpl.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataManagerImpl.java index d1095ad1b20c..81e1e09e6068 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataManagerImpl.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataManagerImpl.java @@ -891,7 +891,6 @@ public List listKeys(String volumeName, String bucketName, TreeMap cacheKeyMap = new TreeMap<>(); - Set deletedKeySet = new TreeSet<>(); Iterator, CacheValue>> iterator = keyTable.cacheIterator(); @@ -911,12 +910,10 @@ public List listKeys(String volumeName, String bucketName, OmKeyInfo omKeyInfo = entry.getValue().getCacheValue(); // Making sure that entry in cache is not for delete key request. - if (omKeyInfo != null) { - if (key.startsWith(seekPrefix) && key.compareTo(seekKey) >= 0) { - cacheKeyMap.put(key, omKeyInfo); - } - } else { - deletedKeySet.add(key); + if (omKeyInfo != null + && key.startsWith(seekPrefix) + && key.compareTo(seekKey) >= 0) { + cacheKeyMap.put(key, omKeyInfo); } } @@ -934,7 +931,9 @@ public List listKeys(String volumeName, String bucketName, // Entry should not be marked for delete, consider only those // entries. - if(!deletedKeySet.contains(kv.getKey())) { + CacheValue cacheValue = + keyTable.getCacheValue(new CacheKey<>(kv.getKey())); + if(cacheValue == null || cacheValue.getCacheValue() != null) { cacheKeyMap.put(kv.getKey(), kv.getValue()); currentCount++; } @@ -965,7 +964,6 @@ public List listKeys(String volumeName, String bucketName, // Clear map and set. cacheKeyMap.clear(); - deletedKeySet.clear(); return result; }