diff --git a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmKeyRenameInfo.java b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmKeyRenameInfo.java
deleted file mode 100644
index bb6001d20ca5..000000000000
--- a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmKeyRenameInfo.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- * 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.hadoop.ozone.om.helpers;
-
-
-import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.KeyRenameInfo;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Argument for renamedKeyTable. Helps to store List which represents
- * all the renames that happened to particular key in between snapshots.
- */
-public class OmKeyRenameInfo {
- private List keyNamesList;
-
- public OmKeyRenameInfo(List keyNamesList) {
- this.keyNamesList = keyNamesList;
- }
-
- public OmKeyRenameInfo(String keyRenameInfo) {
- this.keyNamesList = new ArrayList<>();
- this.keyNamesList.add(keyRenameInfo);
- }
-
- public void addOmKeyRenameInfo(String keyRenameInfo) {
- this.keyNamesList.add(keyRenameInfo);
- }
-
- public List getOmKeyRenameInfoList() {
- return keyNamesList;
- }
-
- public List cloneOmKeyRenameInfoList() {
- return new ArrayList<>(keyNamesList);
- }
-
-
- public static OmKeyRenameInfo getFromProto(KeyRenameInfo
- keyRenameInfo) throws IOException {
- List list = new ArrayList<>(keyRenameInfo.getKeyNamesList());
- return new OmKeyRenameInfo.Builder().setOmKeyRenameList(list).build();
- }
-
- public KeyRenameInfo getProto() {
- List list = new ArrayList<>(cloneOmKeyRenameInfoList());
-
- KeyRenameInfo.Builder builder = KeyRenameInfo.newBuilder()
- .addAllKeyNames(list);
- return builder.build();
- }
-
- public OmKeyRenameInfo copyObject() {
- return new OmKeyRenameInfo(new ArrayList<>(keyNamesList));
- }
-
- /**
- * Builder of OmKeyRenameInfo.
- */
- public static class Builder {
- private List keyNamesList;
-
- public Builder() { }
-
- public OmKeyRenameInfo.Builder setOmKeyRenameList(List stringList) {
- this.keyNamesList = stringList;
- return this;
- }
-
- public OmKeyRenameInfo build() {
- return new OmKeyRenameInfo(keyNamesList);
- }
- }
-
-}
diff --git a/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto b/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
index 295065abfdd7..faa430ca1d7f 100644
--- a/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
+++ b/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
@@ -1034,10 +1034,6 @@ message RepeatedKeyInfo {
repeated KeyInfo keyInfo = 1;
}
-message KeyRenameInfo {
- repeated string keyNames = 1;
-}
-
message OzoneFileStatusProto {
optional KeyInfo keyInfo = 2;
optional uint64 blockSize = 3;
diff --git a/hadoop-ozone/interface-storage/src/main/java/org/apache/hadoop/ozone/om/OMMetadataManager.java b/hadoop-ozone/interface-storage/src/main/java/org/apache/hadoop/ozone/om/OMMetadataManager.java
index 7e0f3511efbb..5d9bbf44202b 100644
--- a/hadoop-ozone/interface-storage/src/main/java/org/apache/hadoop/ozone/om/OMMetadataManager.java
+++ b/hadoop-ozone/interface-storage/src/main/java/org/apache/hadoop/ozone/om/OMMetadataManager.java
@@ -40,7 +40,6 @@
import org.apache.hadoop.ozone.om.helpers.OmDBTenantState;
import org.apache.hadoop.ozone.om.helpers.OmVolumeArgs;
import org.apache.hadoop.ozone.om.helpers.RepeatedOmKeyInfo;
-import org.apache.hadoop.ozone.om.helpers.OmKeyRenameInfo;
import org.apache.hadoop.ozone.om.helpers.SnapshotInfo;
import org.apache.hadoop.ozone.om.helpers.BucketLayout;
import org.apache.hadoop.ozone.om.lock.IOzoneManagerLock;
@@ -383,7 +382,7 @@ String getMultipartKey(String volume, String bucket, String key, String
Table getSnapshotInfoTable();
- Table getRenamedKeyTable();
+ Table getSnapshotRenamedKeyTable();
/**
* Gets the OM Meta table.
@@ -496,7 +495,7 @@ String getOpenFileName(long volumeId, long bucketId,
/**
* Given a volume, bucket and a objectID, return the DB key name in
- * renamedKeyTable.
+ * snapshotRenamedKeyTable.
*
* @param volume - volume name
* @param bucket - bucket name
diff --git a/hadoop-ozone/interface-storage/src/main/java/org/apache/hadoop/ozone/om/codec/OmKeyRenameInfoCodec.java b/hadoop-ozone/interface-storage/src/main/java/org/apache/hadoop/ozone/om/codec/OmKeyRenameInfoCodec.java
deleted file mode 100644
index dbd3b6f29445..000000000000
--- a/hadoop-ozone/interface-storage/src/main/java/org/apache/hadoop/ozone/om/codec/OmKeyRenameInfoCodec.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * 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.hadoop.ozone.om.codec;
-
-import com.google.common.base.Preconditions;
-import com.google.protobuf.InvalidProtocolBufferException;
-import org.apache.hadoop.hdds.utils.db.Codec;
-import org.apache.hadoop.ozone.om.helpers.OmKeyRenameInfo;
-import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.KeyRenameInfo;
-
-import java.io.IOException;
-
-/**
- * Codec to encode OmKeyRenameInfo as byte array.
- */
-public class OmKeyRenameInfoCodec implements Codec {
- @Override
- public byte[] toPersistedFormat(OmKeyRenameInfo object) throws IOException {
- Preconditions
- .checkNotNull(object, "Null object can't be converted to byte array.");
- return object.getProto().toByteArray();
- }
-
- @Override
- public OmKeyRenameInfo fromPersistedFormat(byte[] rawData)
- throws IOException {
- Preconditions.checkNotNull(rawData,
- "Null byte array can't converted to real object.");
- try {
- return OmKeyRenameInfo.getFromProto(KeyRenameInfo.parseFrom(rawData));
- } catch (InvalidProtocolBufferException ex) {
- throw new IllegalArgumentException(
- "Can't encode the the raw data from the byte array", ex);
- }
- }
-
- @Override
- public OmKeyRenameInfo copyObject(OmKeyRenameInfo object) {
- return object.copyObject();
- }
-}
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 719641c42d08..6c46a67396ac 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
@@ -65,7 +65,6 @@
import org.apache.hadoop.ozone.om.codec.OmDBTenantStateCodec;
import org.apache.hadoop.ozone.om.codec.OmVolumeArgsCodec;
import org.apache.hadoop.ozone.om.codec.RepeatedOmKeyInfoCodec;
-import org.apache.hadoop.ozone.om.codec.OmKeyRenameInfoCodec;
import org.apache.hadoop.ozone.om.codec.S3SecretValueCodec;
import org.apache.hadoop.ozone.om.codec.OmDBSnapshotInfoCodec;
import org.apache.hadoop.ozone.om.codec.TokenIdentifierCodec;
@@ -85,7 +84,6 @@
import org.apache.hadoop.ozone.om.helpers.OmVolumeArgs;
import org.apache.hadoop.ozone.om.helpers.OzoneFSUtils;
import org.apache.hadoop.ozone.om.helpers.RepeatedOmKeyInfo;
-import org.apache.hadoop.ozone.om.helpers.OmKeyRenameInfo;
import org.apache.hadoop.ozone.om.helpers.S3SecretValue;
import org.apache.hadoop.ozone.om.helpers.SnapshotInfo;
import org.apache.hadoop.ozone.om.helpers.BucketLayout;
@@ -191,13 +189,13 @@ public class OmMetadataManagerImpl implements OMMetadataManager,
* |----------------------------------------------------------------------|
*
* Snapshot Tables:
- * |----------------------------------------------------------------------|
- * | Column Family | VALUE |
- * |----------------------------------------------------------------------|
- * | snapshotInfoTable | /volume/bucket/snapshotName -> SnapshotInfo |
- * |----------------------------------------------------------------------|
- * | renamedKeyTable | /volumeName/bucketName/objectID -> OmKeyRenameInfo|
- * |----------------------------------------------------------------------|
+ * |-------------------------------------------------------------------------|
+ * | Column Family | VALUE |
+ * |-------------------------------------------------------------------------|
+ * | snapshotInfoTable | /volume/bucket/snapshotName -> SnapshotInfo |
+ * |-------------------------------------------------------------------------|
+ * |snapshotRenamedKeyTable| /volumeName/bucketName/objectID -> /v/b/origKey |
+ * |-------------------------------------------------------------------------|
*/
public static final String USER_TABLE = "userTable";
@@ -224,7 +222,8 @@ public class OmMetadataManagerImpl implements OMMetadataManager,
"principalToAccessIdsTable";
public static final String TENANT_STATE_TABLE = "tenantStateTable";
public static final String SNAPSHOT_INFO_TABLE = "snapshotInfoTable";
- public static final String RENAMED_KEY_TABLE = "renamedKeyTable";
+ public static final String SNAPSHOT_RENAMED_KEY_TABLE =
+ "snapshotRenamedKeyTable";
static final String[] ALL_TABLES = new String[] {
USER_TABLE,
@@ -247,7 +246,7 @@ public class OmMetadataManagerImpl implements OMMetadataManager,
PRINCIPAL_TO_ACCESS_IDS_TABLE,
TENANT_STATE_TABLE,
SNAPSHOT_INFO_TABLE,
- RENAMED_KEY_TABLE
+ SNAPSHOT_RENAMED_KEY_TABLE
};
private DBStore store;
@@ -276,7 +275,7 @@ public class OmMetadataManagerImpl implements OMMetadataManager,
private Table tenantStateTable;
private Table snapshotInfoTable;
- private Table renamedKeyTable;
+ private Table snapshotRenamedKeyTable;
private boolean isRatisEnabled;
private boolean ignorePipelineinKey;
@@ -529,7 +528,7 @@ public static DBStoreBuilder addOMTablesAndCodecs(DBStoreBuilder builder) {
.addTable(PRINCIPAL_TO_ACCESS_IDS_TABLE)
.addTable(TENANT_STATE_TABLE)
.addTable(SNAPSHOT_INFO_TABLE)
- .addTable(RENAMED_KEY_TABLE)
+ .addTable(SNAPSHOT_RENAMED_KEY_TABLE)
.addCodec(OzoneTokenIdentifier.class, new TokenIdentifierCodec())
.addCodec(OmKeyInfo.class, new OmKeyInfoCodec(true))
.addCodec(RepeatedOmKeyInfo.class,
@@ -545,8 +544,7 @@ public static DBStoreBuilder addOMTablesAndCodecs(DBStoreBuilder builder) {
.addCodec(OmDBTenantState.class, new OmDBTenantStateCodec())
.addCodec(OmDBAccessIdInfo.class, new OmDBAccessIdInfoCodec())
.addCodec(OmDBUserPrincipalInfo.class, new OmDBUserPrincipalInfoCodec())
- .addCodec(SnapshotInfo.class, new OmDBSnapshotInfoCodec())
- .addCodec(OmKeyRenameInfo.class, new OmKeyRenameInfoCodec());
+ .addCodec(SnapshotInfo.class, new OmDBSnapshotInfoCodec());
}
/**
@@ -651,11 +649,12 @@ protected void initializeOmTables(boolean addCacheMetrics)
String.class, SnapshotInfo.class);
checkTableStatus(snapshotInfoTable, SNAPSHOT_INFO_TABLE, addCacheMetrics);
- // objectID -> renamedKeys (renamed keys for key table)
- renamedKeyTable = this.store.getTable(RENAMED_KEY_TABLE,
- String.class, OmKeyRenameInfo.class);
- checkTableStatus(renamedKeyTable, RENAMED_KEY_TABLE, addCacheMetrics);
- // TODO: [SNAPSHOT] Initialize table lock for renamedKeyTable.
+ // volumeName/bucketName/objectID -> renamedKey (renamed key for key table)
+ snapshotRenamedKeyTable = this.store.getTable(SNAPSHOT_RENAMED_KEY_TABLE,
+ String.class, String.class);
+ checkTableStatus(snapshotRenamedKeyTable, SNAPSHOT_RENAMED_KEY_TABLE,
+ addCacheMetrics);
+ // TODO: [SNAPSHOT] Initialize table lock for snapshotRenamedKeyTable.
}
/**
@@ -1665,8 +1664,8 @@ public Table getSnapshotInfoTable() {
}
@Override
- public Table getRenamedKeyTable() {
- return renamedKeyTable;
+ public Table getSnapshotRenamedKeyTable() {
+ return snapshotRenamedKeyTable;
}
/**
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/codec/OMDBDefinition.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/codec/OMDBDefinition.java
index ae888594b5e5..0b5885e4bf28 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/codec/OMDBDefinition.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/codec/OMDBDefinition.java
@@ -35,12 +35,12 @@
import org.apache.hadoop.ozone.om.helpers.RepeatedOmKeyInfo;
import org.apache.hadoop.ozone.om.helpers.OmMultipartKeyInfo;
import org.apache.hadoop.ozone.om.helpers.OmPrefixInfo;
-import org.apache.hadoop.ozone.om.helpers.OmKeyRenameInfo;
import org.apache.hadoop.ozone.om.helpers.S3SecretValue;
import org.apache.hadoop.ozone.om.helpers.SnapshotInfo;
import org.apache.hadoop.ozone.om.helpers.OmDirectoryInfo;
import org.apache.hadoop.hdds.utils.TransactionInfo;
+import org.apache.hadoop.ozone.om.service.SnapshotDeletingService;
import org.apache.hadoop.ozone.security.OzoneTokenIdentifier;
import org.apache.hadoop.ozone.storage.proto.OzoneManagerStorageProtos;
@@ -230,14 +230,24 @@ String.class, new StringCodec(), OmKeyInfo.class,
SnapshotInfo.class,
new OmDBSnapshotInfoCodec());
- public static final DBColumnFamilyDefinition
- RENAMED_KEY_TABLE =
+ /**
+ * SnapshotRenamedKeyTable that complements the keyTable (or fileTable)
+ * entries of the immediately previous snapshot in the same snapshot
+ * scope (bucket or volume).
+ *
+ * Key renames between the two subsequent snapshots are captured, this
+ * information is used in {@link SnapshotDeletingService} to check if the
+ * renamedKey is present in the previous snapshot's keyTable
+ * (or fileTable).
+ */
+ public static final DBColumnFamilyDefinition
+ SNAPSHOT_RENAMED_KEY_TABLE =
new DBColumnFamilyDefinition<>(
- OmMetadataManagerImpl.RENAMED_KEY_TABLE,
+ OmMetadataManagerImpl.SNAPSHOT_RENAMED_KEY_TABLE,
String.class, // /volumeName/bucketName/objectID
new StringCodec(),
- OmKeyRenameInfo.class, // list of key renames
- new OmKeyRenameInfoCodec());
+ String.class, // path to the key in previous snapshot's key(file)Table
+ new StringCodec());
@Override
public String getName() {
@@ -258,7 +268,7 @@ public DBColumnFamilyDefinition[] getColumnFamilies() {
FILE_TABLE, OPEN_FILE_TABLE, DELETED_DIR_TABLE, META_TABLE,
TENANT_ACCESS_ID_TABLE,
PRINCIPAL_TO_ACCESS_IDS_TABLE, TENANT_STATE_TABLE,
- SNAPSHOT_INFO_TABLE, RENAMED_KEY_TABLE};
+ SNAPSHOT_INFO_TABLE, SNAPSHOT_RENAMED_KEY_TABLE};
}
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequestUtils.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequestUtils.java
index c791aed02005..26487935a65b 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequestUtils.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequestUtils.java
@@ -17,11 +17,24 @@
package org.apache.hadoop.ozone.om.request;
+import org.apache.hadoop.hdds.utils.db.Table;
+import org.apache.hadoop.hdds.utils.db.TableIterator;
+import org.apache.hadoop.hdds.utils.db.cache.CacheKey;
+import org.apache.hadoop.hdds.utils.db.cache.CacheValue;
+import org.apache.hadoop.ozone.om.OMMetadataManager;
import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.helpers.BucketLayout;
+import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
+import org.apache.hadoop.ozone.om.helpers.SnapshotInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Map;
+
+import static org.apache.hadoop.ozone.OzoneConsts.OM_KEY_PREFIX;
+
/**
* Utility class for OMClientRequest. Validates that the bucket layout expected
* by the Request class is the same as the layout of the bucket being worked on.
@@ -47,4 +60,43 @@ public static void checkClientRequestPrecondition(
OMException.ResultCodes.INTERNAL_ERROR);
}
}
+
+ public static boolean isSnapshotBucket(OMMetadataManager omMetadataManager,
+ OmKeyInfo keyInfo) throws IOException {
+
+ String dbSnapshotBucketKey = omMetadataManager.getBucketKey(
+ keyInfo.getVolumeName(), keyInfo.getBucketName())
+ + OM_KEY_PREFIX;
+
+ return checkInSnapshotCache(omMetadataManager, dbSnapshotBucketKey) ||
+ checkInSnapshotDB(omMetadataManager, dbSnapshotBucketKey);
+ }
+
+ private static boolean checkInSnapshotDB(OMMetadataManager omMetadataManager,
+ String dbSnapshotBucketKey) throws IOException {
+ try (TableIterator>
+ iterator = omMetadataManager.getSnapshotInfoTable().iterator()) {
+ iterator.seek(dbSnapshotBucketKey);
+ return iterator.hasNext() && iterator.next().getKey()
+ .startsWith(dbSnapshotBucketKey);
+ }
+ }
+
+ private static boolean checkInSnapshotCache(
+ OMMetadataManager omMetadataManager,
+ String dbSnapshotBucketKey) {
+ Iterator, CacheValue>> cacheIter =
+ omMetadataManager.getSnapshotInfoTable().cacheIterator();
+
+ while (cacheIter.hasNext()) {
+ Map.Entry, CacheValue> cacheKeyValue =
+ cacheIter.next();
+ String cacheKey = cacheKeyValue.getKey().getCacheKey();
+ SnapshotInfo cacheValue = cacheKeyValue.getValue().getCacheValue();
+ if (cacheKey.startsWith(dbSnapshotBucketKey) && cacheValue != null) {
+ return true;
+ }
+ }
+ return false;
+ }
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketDeleteRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketDeleteRequest.java
index ec6cb3b86aff..418b32cdf4e4 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketDeleteRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketDeleteRequest.java
@@ -245,7 +245,7 @@ private boolean bucketContainsSnapshotInCache(
Map.Entry, CacheValue> cacheKeyValue =
cacheIter.next();
String key = cacheKeyValue.getKey().getCacheKey();
- // TODO: Revisit when delete snapshot gets implemented as entry
+ // TODO: [SNAPSHOT] Revisit when delete snapshot gets implemented as entry
// in cache/table could be null.
if (key.startsWith(snapshotBucketKey)) {
return true;
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMKeyRenameResponse.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMKeyRenameResponse.java
index e755e75d62be..a890ab5c670c 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMKeyRenameResponse.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMKeyRenameResponse.java
@@ -21,7 +21,7 @@
import org.apache.hadoop.ozone.om.OMMetadataManager;
import org.apache.hadoop.ozone.om.helpers.BucketLayout;
import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
-import org.apache.hadoop.ozone.om.helpers.OmKeyRenameInfo;
+import org.apache.hadoop.ozone.om.request.OMClientRequestUtils;
import org.apache.hadoop.ozone.om.response.CleanupTableInfo;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
.OMResponse;
@@ -31,12 +31,12 @@
import javax.annotation.Nonnull;
import static org.apache.hadoop.ozone.om.OmMetadataManagerImpl.KEY_TABLE;
-import static org.apache.hadoop.ozone.om.OmMetadataManagerImpl.RENAMED_KEY_TABLE;
+import static org.apache.hadoop.ozone.om.OmMetadataManagerImpl.SNAPSHOT_RENAMED_KEY_TABLE;
/**
* Response for RenameKey request.
*/
-@CleanupTableInfo(cleanupTables = {KEY_TABLE, RENAMED_KEY_TABLE})
+@CleanupTableInfo(cleanupTables = {KEY_TABLE, SNAPSHOT_RENAMED_KEY_TABLE})
public class OMKeyRenameResponse extends OmKeyResponse {
private String fromKeyName;
@@ -84,17 +84,19 @@ public void addToDBBatch(OMMetadataManager omMetadataManager,
omMetadataManager.getOzoneKey(volumeName, bucketName, toKeyName),
renameKeyInfo);
+ // Check if the bucket is in snapshot scope, if yes
+ // add the key to snapshotRenamedKeyTable.
+ boolean isSnapshotBucket = OMClientRequestUtils.
+ isSnapshotBucket(omMetadataManager, renameKeyInfo);
String renameDbKey = omMetadataManager.getRenameKey(
renameKeyInfo.getVolumeName(), renameKeyInfo.getBucketName(),
renameKeyInfo.getObjectID());
- OmKeyRenameInfo omKeyRenameInfo = omMetadataManager.getRenamedKeyTable()
+ String renamedKey = omMetadataManager.getSnapshotRenamedKeyTable()
.get(renameDbKey);
- if (omKeyRenameInfo == null) {
- omKeyRenameInfo = new OmKeyRenameInfo(fromDbKey);
- omMetadataManager.getRenamedKeyTable().putWithBatch(
- batchOperation, renameDbKey, omKeyRenameInfo);
+ if (isSnapshotBucket && renamedKey == null) {
+ omMetadataManager.getSnapshotRenamedKeyTable().putWithBatch(
+ batchOperation, renameDbKey, fromDbKey);
}
-
}
public OmKeyInfo getRenameKeyInfo() {
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMKeyRenameResponseWithFSO.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMKeyRenameResponseWithFSO.java
index eb8f4a2b6cc2..3e3efbd4d19d 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMKeyRenameResponseWithFSO.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMKeyRenameResponseWithFSO.java
@@ -24,7 +24,7 @@
import org.apache.hadoop.ozone.om.helpers.OmBucketInfo;
import org.apache.hadoop.ozone.om.helpers.OmDirectoryInfo;
import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
-import org.apache.hadoop.ozone.om.helpers.OmKeyRenameInfo;
+import org.apache.hadoop.ozone.om.request.OMClientRequestUtils;
import org.apache.hadoop.ozone.om.request.file.OMFileRequest;
import org.apache.hadoop.ozone.om.response.CleanupTableInfo;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMResponse;
@@ -34,13 +34,13 @@
import static org.apache.hadoop.ozone.om.OmMetadataManagerImpl.DIRECTORY_TABLE;
import static org.apache.hadoop.ozone.om.OmMetadataManagerImpl.FILE_TABLE;
-import static org.apache.hadoop.ozone.om.OmMetadataManagerImpl.RENAMED_KEY_TABLE;
+import static org.apache.hadoop.ozone.om.OmMetadataManagerImpl.SNAPSHOT_RENAMED_KEY_TABLE;
/**
* Response for RenameKey request - prefix layout.
*/
@CleanupTableInfo(cleanupTables = {FILE_TABLE, DIRECTORY_TABLE,
- RENAMED_KEY_TABLE})
+ SNAPSHOT_RENAMED_KEY_TABLE})
public class OMKeyRenameResponseWithFSO extends OMKeyRenameResponse {
private boolean isRenameDirectory;
@@ -92,17 +92,18 @@ public void addToDBBatch(OMMetadataManager omMetadataManager,
omMetadataManager.getKeyTable(getBucketLayout())
.putWithBatch(batchOperation, getToKeyName(), getRenameKeyInfo());
+ boolean isSnapshotBucket = OMClientRequestUtils.
+ isSnapshotBucket(omMetadataManager, getRenameKeyInfo());
String renameDbKey = omMetadataManager.getRenameKey(
getRenameKeyInfo().getVolumeName(),
getRenameKeyInfo().getBucketName(),
getRenameKeyInfo().getObjectID());
- OmKeyRenameInfo omKeyRenameInfo = omMetadataManager.getRenamedKeyTable()
+ String renamedKey = omMetadataManager.getSnapshotRenamedKeyTable()
.get(renameDbKey);
- if (omKeyRenameInfo == null) {
- omKeyRenameInfo = new OmKeyRenameInfo(getFromKeyName());
- omMetadataManager.getRenamedKeyTable().putWithBatch(
- batchOperation, renameDbKey, omKeyRenameInfo);
+ if (isSnapshotBucket && renamedKey == null) {
+ omMetadataManager.getSnapshotRenamedKeyTable().putWithBatch(
+ batchOperation, renameDbKey, getFromKeyName());
}
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMKeysRenameResponse.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMKeysRenameResponse.java
index dd69092e524b..7625410bb6ce 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMKeysRenameResponse.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMKeysRenameResponse.java
@@ -22,7 +22,7 @@
import org.apache.hadoop.ozone.om.OMMetadataManager;
import org.apache.hadoop.ozone.om.helpers.OmRenameKeys;
import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
-import org.apache.hadoop.ozone.om.helpers.OmKeyRenameInfo;
+import org.apache.hadoop.ozone.om.request.OMClientRequestUtils;
import org.apache.hadoop.ozone.om.response.CleanupTableInfo;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMResponse;
@@ -32,14 +32,14 @@
import java.util.Map;
import static org.apache.hadoop.ozone.om.OmMetadataManagerImpl.KEY_TABLE;
-import static org.apache.hadoop.ozone.om.OmMetadataManagerImpl.RENAMED_KEY_TABLE;
+import static org.apache.hadoop.ozone.om.OmMetadataManagerImpl.SNAPSHOT_RENAMED_KEY_TABLE;
import static org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Status.OK;
import static org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Status.PARTIAL_RENAME;
/**
* Response for RenameKeys request.
*/
-@CleanupTableInfo(cleanupTables = {KEY_TABLE, RENAMED_KEY_TABLE})
+@CleanupTableInfo(cleanupTables = {KEY_TABLE, SNAPSHOT_RENAMED_KEY_TABLE})
public class OMKeysRenameResponse extends OMClientResponse {
private OmRenameKeys omRenameKeys;
@@ -90,16 +90,17 @@ public void addToDBBatch(OMMetadataManager omMetadataManager,
newKeyInfo);
+ boolean isSnapshotBucket = OMClientRequestUtils.
+ isSnapshotBucket(omMetadataManager, newKeyInfo);
String renameDbKey = omMetadataManager.getRenameKey(
newKeyInfo.getVolumeName(), newKeyInfo.getBucketName(),
newKeyInfo.getObjectID());
- OmKeyRenameInfo omKeyRenameInfo = omMetadataManager.getRenamedKeyTable()
+ String renamedKey = omMetadataManager.getSnapshotRenamedKeyTable()
.get(renameDbKey);
- if (omKeyRenameInfo == null) {
- omKeyRenameInfo = new OmKeyRenameInfo(fromDbKey);
- omMetadataManager.getRenamedKeyTable().putWithBatch(
- batchOperation, renameDbKey, omKeyRenameInfo);
+ if (isSnapshotBucket && renamedKey == null) {
+ omMetadataManager.getSnapshotRenamedKeyTable().putWithBatch(
+ batchOperation, renameDbKey, fromDbKey);
}
}
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/snapshot/OMSnapshotCreateResponse.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/snapshot/OMSnapshotCreateResponse.java
index f970870e6a67..03230529e1ea 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/snapshot/OMSnapshotCreateResponse.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/snapshot/OMSnapshotCreateResponse.java
@@ -23,7 +23,6 @@
import org.apache.hadoop.hdds.utils.db.TableIterator;
import org.apache.hadoop.ozone.om.OMMetadataManager;
import org.apache.hadoop.ozone.om.OmSnapshotManager;
-import org.apache.hadoop.ozone.om.helpers.OmKeyRenameInfo;
import org.apache.hadoop.ozone.om.helpers.SnapshotInfo;
import org.apache.hadoop.ozone.om.response.CleanupTableInfo;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
@@ -34,14 +33,14 @@
import static org.apache.hadoop.ozone.OzoneConsts.OM_KEY_PREFIX;
import static org.apache.hadoop.ozone.om.OmMetadataManagerImpl.DELETED_TABLE;
-import static org.apache.hadoop.ozone.om.OmMetadataManagerImpl.RENAMED_KEY_TABLE;
+import static org.apache.hadoop.ozone.om.OmMetadataManagerImpl.SNAPSHOT_RENAMED_KEY_TABLE;
import static org.apache.hadoop.ozone.om.OmMetadataManagerImpl.SNAPSHOT_INFO_TABLE;
/**
* Response for OMSnapshotCreateRequest.
*/
@CleanupTableInfo(cleanupTables = {
- DELETED_TABLE, RENAMED_KEY_TABLE, SNAPSHOT_INFO_TABLE})
+ DELETED_TABLE, SNAPSHOT_RENAMED_KEY_TABLE, SNAPSHOT_INFO_TABLE})
public class OMSnapshotCreateResponse extends OMClientResponse {
private SnapshotInfo snapshotInfo;
@@ -77,23 +76,23 @@ public void addToDBBatch(OMMetadataManager omMetadataManager,
key, snapshotInfo);
// TODO: [SNAPSHOT] Move to createOmSnapshotCheckpoint and add table lock
- // Remove all entries from renamedKeyTable
- TableIterator>
- iterator = omMetadataManager.getRenamedKeyTable().iterator();
+ // Remove all entries from snapshotRenamedKeyTable
+ try (TableIterator>
+ iterator = omMetadataManager.getSnapshotRenamedKeyTable().iterator()) {
- String dbSnapshotBucketKey = omMetadataManager.getBucketKey(
- snapshotInfo.getVolumeName(), snapshotInfo.getBucketName())
- + OM_KEY_PREFIX;
- iterator.seek(dbSnapshotBucketKey);
+ String dbSnapshotBucketKey = omMetadataManager.getBucketKey(
+ snapshotInfo.getVolumeName(), snapshotInfo.getBucketName())
+ + OM_KEY_PREFIX;
+ iterator.seek(dbSnapshotBucketKey);
- while (iterator.hasNext()) {
- String renameDbKey = iterator.next().getKey();
- if (!renameDbKey.startsWith(dbSnapshotBucketKey)) {
- break;
+ while (iterator.hasNext()) {
+ String renameDbKey = iterator.next().getKey();
+ if (!renameDbKey.startsWith(dbSnapshotBucketKey)) {
+ break;
+ }
+ omMetadataManager.getSnapshotRenamedKeyTable()
+ .deleteWithBatch(batchOperation, renameDbKey);
}
- omMetadataManager.getRenamedKeyTable()
- .deleteWithBatch(batchOperation, renameDbKey);
}
-
}
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/SnapshotDeletingService.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/SnapshotDeletingService.java
index 8d01ff89521e..24b10c20edd5 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/SnapshotDeletingService.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/SnapshotDeletingService.java
@@ -38,7 +38,6 @@
import org.apache.hadoop.ozone.om.helpers.OMRatisHelper;
import org.apache.hadoop.ozone.om.helpers.OmBucketInfo;
import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
-import org.apache.hadoop.ozone.om.helpers.OmKeyRenameInfo;
import org.apache.hadoop.ozone.om.helpers.RepeatedOmKeyInfo;
import org.apache.hadoop.ozone.om.helpers.SnapshotInfo;
import org.apache.hadoop.ozone.om.ratis.OzoneManagerRatisServer;
@@ -154,8 +153,8 @@ public BackgroundTaskResult call() throws Exception {
continue;
}
- Table renamedKeyTable =
- omSnapshot.getMetadataManager().getRenamedKeyTable();
+ Table renamedKeyTable =
+ omSnapshot.getMetadataManager().getSnapshotRenamedKeyTable();
long volumeId = ozoneManager.getMetadataManager()
.getVolumeId(snapInfo.getVolumeName());
@@ -279,7 +278,7 @@ private void submitSnapshotPurgeRequest(List purgeSnapshotKeys) {
private void splitRepeatedOmKeyInfo(SnapshotMoveKeyInfos.Builder toReclaim,
SnapshotMoveKeyInfos.Builder toNextDb, OmKeyInfo keyInfo,
Table previousKeyTable,
- Table renamedKeyTable,
+ Table renamedKeyTable,
OmBucketInfo bucketInfo, long volumeId) throws IOException {
if (checkKeyReclaimable(previousKeyTable, renamedKeyTable,
keyInfo, bucketInfo, volumeId)) {
@@ -317,7 +316,7 @@ private void submitSnapshotMoveDeletedKeys(SnapshotInfo snapInfo,
private boolean checkKeyReclaimable(
Table previousKeyTable,
- Table renamedKeyTable,
+ Table renamedKeyTable,
OmKeyInfo deletedKeyInfo, OmBucketInfo bucketInfo,
long volumeId) throws IOException {
@@ -351,23 +350,15 @@ private boolean checkKeyReclaimable(
deletedKeyInfo.getVolumeName(), deletedKeyInfo.getBucketName(),
deletedKeyInfo.getObjectID());
- OmKeyRenameInfo renamedKeyInfo = renamedKeyTable.getIfExist(dbRenameKey);
-
- boolean isKeyRenamed = false;
- String dbOriginalKey = null;
- // Condition: key should not exist in renamedKeyTable of the current
- // snapshot and keyTable of the previous snapshot.
+ // Condition: key should not exist in snapshotRenamedKeyTable
+ // of the current snapshot and keyTable of the previous snapshot.
// Check key exists in renamedKeyTable of the Snapshot
- if (renamedKeyInfo != null && !renamedKeyInfo
- .getOmKeyRenameInfoList().isEmpty()) {
- isKeyRenamed = true;
- dbOriginalKey = renamedKeyInfo.getOmKeyRenameInfoList().get(0);
- }
+ String renamedKey = renamedKeyTable.getIfExist(dbRenameKey);
// previousKeyTable is fileTable if the bucket is FSO,
// otherwise it is the keyTable.
- OmKeyInfo prevKeyInfo = isKeyRenamed ? previousKeyTable
- .get(dbOriginalKey) : previousKeyTable.get(dbKey);
+ OmKeyInfo prevKeyInfo = renamedKey != null ? previousKeyTable
+ .get(renamedKey) : previousKeyTable.get(dbKey);
if (prevKeyInfo == null) {
return false;
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotCreateRequest.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotCreateRequest.java
index eb66a6d3256b..2d6cb2813b44 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotCreateRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotCreateRequest.java
@@ -20,6 +20,7 @@
package org.apache.hadoop.ozone.om.request.snapshot;
+import java.io.IOException;
import java.util.UUID;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
@@ -74,7 +75,8 @@ public class TestOMSnapshotCreateRequest {
private String volumeName;
private String bucketName;
- private String snapshotName;
+ private String snapshotName1;
+ private String snapshotName2;
// Just setting ozoneManagerDoubleBuffer which does nothing.
private final OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper =
@@ -106,7 +108,8 @@ public void setup() throws Exception {
volumeName = UUID.randomUUID().toString();
bucketName = UUID.randomUUID().toString();
- snapshotName = UUID.randomUUID().toString();
+ snapshotName1 = UUID.randomUUID().toString();
+ snapshotName2 = UUID.randomUUID().toString();
OMRequestTestUtils.addVolumeAndBucketToDB(
volumeName, bucketName, omMetadataManager);
@@ -127,7 +130,7 @@ public void testPreExecute() throws Exception {
when(ozoneManager.isOwner(any(), any())).thenReturn(true);
OMRequest omRequest =
OMRequestTestUtils.createSnapshotRequest(
- volumeName, bucketName, snapshotName);
+ volumeName, bucketName, snapshotName1);
// should not throw
doPreExecute(omRequest);
}
@@ -137,7 +140,7 @@ public void testPreExecuteBadOwner() throws Exception {
// owner not set
OMRequest omRequest =
OMRequestTestUtils.createSnapshotRequest(
- volumeName, bucketName, snapshotName);
+ volumeName, bucketName, snapshotName1);
// Check bad owner
LambdaTestUtils.intercept(OMException.class,
"Only bucket owners and Ozone admins can create snapshots",
@@ -212,11 +215,11 @@ public void testValidateAndUpdateCache() throws Exception {
when(ozoneManager.isAdmin(any())).thenReturn(true);
OMRequest omRequest =
OMRequestTestUtils.createSnapshotRequest(
- volumeName, bucketName, snapshotName);
+ volumeName, bucketName, snapshotName1);
OMSnapshotCreateRequest omSnapshotCreateRequest =
doPreExecute(omRequest);
String key = SnapshotInfo.getTableKey(volumeName,
- bucketName, snapshotName);
+ bucketName, snapshotName1);
// As we have not still called validateAndUpdateCache, get() should
// return null.
@@ -247,46 +250,30 @@ public void testValidateAndUpdateCache() throws Exception {
}
@Test
- public void testEmptyRenamedKeyTable() throws Exception {
+ public void testEmptySnapshotRenamedKeyTable() throws Exception {
when(ozoneManager.isAdmin(any())).thenReturn(true);
- OmKeyInfo toKeyInfo = addKey("key1");
- OmKeyInfo fromKeyInfo = addKey("key2");
- OMResponse omResponse =
- OMResponse.newBuilder().setRenameKeyResponse(
- OzoneManagerProtocolProtos.RenameKeyResponse.getDefaultInstance())
- .setStatus(OzoneManagerProtocolProtos.Status.OK)
- .setCmdType(OzoneManagerProtocolProtos.Type.RenameKey)
- .build();
- OMKeyRenameResponse omKeyRenameResponse =
- new OMKeyRenameResponse(omResponse, fromKeyInfo.getKeyName(),
- toKeyInfo.getKeyName(), toKeyInfo);
-
- Assert.assertTrue(omMetadataManager.getRenamedKeyTable().isEmpty());
- omKeyRenameResponse.addToDBBatch(omMetadataManager, batchOperation);
- omMetadataManager.getStore().commitBatchOperation(batchOperation);
- Assert.assertFalse(omMetadataManager.getRenamedKeyTable().isEmpty());
-
- OMRequest omRequest =
- OMRequestTestUtils.createSnapshotRequest(
- volumeName, bucketName, snapshotName);
- OMSnapshotCreateRequest omSnapshotCreateRequest = doPreExecute(omRequest);
- String key = SnapshotInfo.getTableKey(volumeName,
- bucketName, snapshotName);
-
- Assert.assertNull(omMetadataManager.getSnapshotInfoTable().get(key));
-
- //create entry
- OMClientResponse omClientResponse =
- omSnapshotCreateRequest.validateAndUpdateCache(ozoneManager, 1,
- ozoneManagerDoubleBufferHelper);
- omClientResponse.checkAndUpdateDB(omMetadataManager, batchOperation);
- omMetadataManager.getStore().commitBatchOperation(batchOperation);
+ renameKey("key1", "key2");
+ // Rename table should be empty as there is no rename happening in
+ // the snapshot scope.
+ Assert.assertTrue(omMetadataManager.getSnapshotRenamedKeyTable().isEmpty());
+ // Create snapshot
+ createSnapshot(snapshotName1);
+ String snapKey = SnapshotInfo.getTableKey(volumeName,
+ bucketName, snapshotName1);
SnapshotInfo snapshotInfo =
- omMetadataManager.getSnapshotInfoTable().get(key);
+ omMetadataManager.getSnapshotInfoTable().get(snapKey);
Assert.assertNotNull(snapshotInfo);
- Assert.assertTrue(omMetadataManager.getRenamedKeyTable().isEmpty());
+
+ renameKey("key3", "key4");
+ // Rename table should have one entry as rename is within snapshot scope.
+ Assert.assertFalse(omMetadataManager.getSnapshotRenamedKeyTable()
+ .isEmpty());
+
+ // Create snapshot to clear snapshotRenamedKeyTable
+ createSnapshot(snapshotName2);
+ Assert.assertTrue(omMetadataManager.getSnapshotRenamedKeyTable().isEmpty());
}
@@ -295,10 +282,10 @@ public void testEntryExists() throws Exception {
when(ozoneManager.isAdmin(any())).thenReturn(true);
OMRequest omRequest =
OMRequestTestUtils.createSnapshotRequest(
- volumeName, bucketName, snapshotName);
+ volumeName, bucketName, snapshotName1);
OMSnapshotCreateRequest omSnapshotCreateRequest = doPreExecute(omRequest);
String key = SnapshotInfo.getTableKey(volumeName,
- bucketName, snapshotName);
+ bucketName, snapshotName1);
Assert.assertNull(omMetadataManager.getSnapshotInfoTable().get(key));
@@ -312,7 +299,7 @@ public void testEntryExists() throws Exception {
// Now try to create again to verify error
omRequest =
OMRequestTestUtils.createSnapshotRequest(
- volumeName, bucketName, snapshotName);
+ volumeName, bucketName, snapshotName1);
omSnapshotCreateRequest = doPreExecute(omRequest);
OMClientResponse omClientResponse =
omSnapshotCreateRequest.validateAndUpdateCache(ozoneManager, 2,
@@ -324,6 +311,39 @@ public void testEntryExists() throws Exception {
omResponse.getStatus());
}
+ private void renameKey(String fromKey, String toKey) throws IOException {
+ OmKeyInfo toKeyInfo = addKey(fromKey);
+ OmKeyInfo fromKeyInfo = addKey(toKey);
+
+ OMResponse omResponse = OMResponse
+ .newBuilder()
+ .setRenameKeyResponse(
+ OzoneManagerProtocolProtos.RenameKeyResponse.getDefaultInstance())
+ .setStatus(OzoneManagerProtocolProtos.Status.OK)
+ .setCmdType(OzoneManagerProtocolProtos.Type.RenameKey)
+ .build();
+ OMKeyRenameResponse omKeyRenameResponse =
+ new OMKeyRenameResponse(omResponse, fromKeyInfo.getKeyName(),
+ toKeyInfo.getKeyName(), toKeyInfo);
+
+ Assert.assertTrue(omMetadataManager.getSnapshotRenamedKeyTable().isEmpty());
+ omKeyRenameResponse.addToDBBatch(omMetadataManager, batchOperation);
+ omMetadataManager.getStore().commitBatchOperation(batchOperation);
+ }
+
+ private void createSnapshot(String snapName) throws Exception {
+ OMRequest omRequest =
+ OMRequestTestUtils.createSnapshotRequest(
+ volumeName, bucketName, snapName);
+ OMSnapshotCreateRequest omSnapshotCreateRequest = doPreExecute(omRequest);
+ //create entry
+ OMClientResponse omClientResponse =
+ omSnapshotCreateRequest.validateAndUpdateCache(ozoneManager, 1,
+ ozoneManagerDoubleBufferHelper);
+ omClientResponse.checkAndUpdateDB(omMetadataManager, batchOperation);
+ omMetadataManager.getStore().commitBatchOperation(batchOperation);
+ }
+
private OMSnapshotCreateRequest doPreExecute(
OMRequest originalRequest) throws Exception {
return doPreExecute(originalRequest, ozoneManager);
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/response/key/TestOMKeyRenameResponse.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/response/key/TestOMKeyRenameResponse.java
index 1e1294168c21..5fab714b221b 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/response/key/TestOMKeyRenameResponse.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/response/key/TestOMKeyRenameResponse.java
@@ -24,7 +24,6 @@
import org.apache.hadoop.hdds.utils.db.Table;
import org.apache.hadoop.ozone.om.helpers.BucketLayout;
import org.apache.hadoop.ozone.om.helpers.OmBucketInfo;
-import org.apache.hadoop.ozone.om.helpers.OmKeyRenameInfo;
import org.apache.hadoop.ozone.om.request.OMRequestTestUtils;
import org.junit.Assert;
import org.junit.Test;
@@ -64,7 +63,7 @@ public void testAddToDBBatch() throws Exception {
.isExist(dbFromKey));
Assert.assertFalse(omMetadataManager.getKeyTable(getBucketLayout())
.isExist(dbToKey));
- Assert.assertTrue(omMetadataManager.getRenamedKeyTable().isEmpty());
+ Assert.assertTrue(omMetadataManager.getSnapshotRenamedKeyTable().isEmpty());
if (getBucketLayout() == BucketLayout.FILE_SYSTEM_OPTIMIZED) {
Assert.assertFalse(omMetadataManager.getDirectoryTable()
.isExist(getDBKeyName(fromKeyParent)));
@@ -87,13 +86,11 @@ public void testAddToDBBatch() throws Exception {
String renameDbKey = omMetadataManager.getRenameKey(
fromKeyInfo.getVolumeName(), fromKeyInfo.getBucketName(),
fromKeyInfo.getObjectID());
- Assert.assertTrue(omMetadataManager.getRenamedKeyTable()
+ // snapshotRenamedKeyTable shouldn't contain those keys which
+ // is not part of snapshot bucket.
+ Assert.assertFalse(omMetadataManager.getSnapshotRenamedKeyTable()
.isExist(renameDbKey));
- OmKeyRenameInfo omKeyRenameInfo =
- omMetadataManager.getRenamedKeyTable().get(renameDbKey);
- Assert.assertTrue(omKeyRenameInfo.getOmKeyRenameInfoList()
- .contains(dbFromKey));
if (getBucketLayout() == BucketLayout.FILE_SYSTEM_OPTIMIZED) {
Assert.assertTrue(omMetadataManager.getDirectoryTable()
.isExist(getDBKeyName(fromKeyParent)));