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)));