|
@@ -44,6 +44,7 @@ import org.apache.hadoop.ozone.om.codec.OmKeyInfoCodec;
|
|
|
import org.apache.hadoop.ozone.om.codec.OmMultipartKeyInfoCodec;
|
|
|
import org.apache.hadoop.ozone.om.codec.OmPrefixInfoCodec;
|
|
|
import org.apache.hadoop.ozone.om.codec.OmVolumeArgsCodec;
|
|
|
+import org.apache.hadoop.ozone.om.codec.RepeatedOmKeyInfoCodec;
|
|
|
import org.apache.hadoop.ozone.om.codec.S3SecretValueCodec;
|
|
|
import org.apache.hadoop.ozone.om.codec.TokenIdentifierCodec;
|
|
|
import org.apache.hadoop.ozone.om.codec.VolumeListCodec;
|
|
@@ -57,6 +58,7 @@ import org.apache.hadoop.ozone.om.helpers.OmMultipartUpload;
|
|
|
import org.apache.hadoop.ozone.om.helpers.OmPrefixInfo;
|
|
|
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.S3SecretValue;
|
|
|
import org.apache.hadoop.ozone.om.lock.OzoneManagerLock;
|
|
|
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.VolumeList;
|
|
@@ -87,31 +89,31 @@ public class OmMetadataManagerImpl implements OMMetadataManager {
|
|
|
* OM DB stores metadata as KV pairs in different column families.
|
|
|
* <p>
|
|
|
* OM DB Schema:
|
|
|
- * |-------------------------------------------------------------------|
|
|
|
- * | Column Family | VALUE |
|
|
|
- * |-------------------------------------------------------------------|
|
|
|
- * | userTable | user->VolumeList |
|
|
|
- * |-------------------------------------------------------------------|
|
|
|
- * | volumeTable | /volume->VolumeInfo |
|
|
|
- * |-------------------------------------------------------------------|
|
|
|
- * | bucketTable | /volume/bucket-> BucketInfo |
|
|
|
- * |-------------------------------------------------------------------|
|
|
|
- * | keyTable | /volumeName/bucketName/keyName->KeyInfo |
|
|
|
- * |-------------------------------------------------------------------|
|
|
|
- * | deletedTable | /volumeName/bucketName/keyName->KeyInfo |
|
|
|
- * |-------------------------------------------------------------------|
|
|
|
- * | openKey | /volumeName/bucketName/keyName/id->KeyInfo |
|
|
|
- * |-------------------------------------------------------------------|
|
|
|
- * | s3Table | s3BucketName -> /volumeName/bucketName |
|
|
|
- * |-------------------------------------------------------------------|
|
|
|
- * | s3SecretTable | s3g_access_key_id -> s3Secret |
|
|
|
- * |-------------------------------------------------------------------|
|
|
|
- * | dTokenTable | s3g_access_key_id -> s3Secret |
|
|
|
- * |-------------------------------------------------------------------|
|
|
|
- * | prefixInfoTable | prefix -> PrefixInfo |
|
|
|
- * |-------------------------------------------------------------------|
|
|
|
- * | multipartInfoTable| /volumeName/bucketName/keyName/uploadId ->...|
|
|
|
- * |-------------------------------------------------------------------|
|
|
|
+ * |----------------------------------------------------------------------|
|
|
|
+ * | Column Family | VALUE |
|
|
|
+ * |----------------------------------------------------------------------|
|
|
|
+ * | userTable | user->VolumeList |
|
|
|
+ * |----------------------------------------------------------------------|
|
|
|
+ * | volumeTable | /volume->VolumeInfo |
|
|
|
+ * |----------------------------------------------------------------------|
|
|
|
+ * | bucketTable | /volume/bucket-> BucketInfo |
|
|
|
+ * |----------------------------------------------------------------------|
|
|
|
+ * | keyTable | /volumeName/bucketName/keyName->KeyInfo |
|
|
|
+ * |----------------------------------------------------------------------|
|
|
|
+ * | deletedTable | /volumeName/bucketName/keyName->RepeatedKeyInfo |
|
|
|
+ * |----------------------------------------------------------------------|
|
|
|
+ * | openKey | /volumeName/bucketName/keyName/id->KeyInfo |
|
|
|
+ * |----------------------------------------------------------------------|
|
|
|
+ * | s3Table | s3BucketName -> /volumeName/bucketName |
|
|
|
+ * |----------------------------------------------------------------------|
|
|
|
+ * | s3SecretTable | s3g_access_key_id -> s3Secret |
|
|
|
+ * |----------------------------------------------------------------------|
|
|
|
+ * | dTokenTable | s3g_access_key_id -> s3Secret |
|
|
|
+ * |----------------------------------------------------------------------|
|
|
|
+ * | prefixInfoTable | prefix -> PrefixInfo |
|
|
|
+ * |----------------------------------------------------------------------|
|
|
|
+ * | multipartInfoTable| /volumeName/bucketName/keyName/uploadId ->... |
|
|
|
+ * |----------------------------------------------------------------------|
|
|
|
*/
|
|
|
|
|
|
public static final String USER_TABLE = "userTable";
|
|
@@ -192,7 +194,7 @@ public class OmMetadataManagerImpl implements OMMetadataManager {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public Table<String, OmKeyInfo> getDeletedTable() {
|
|
|
+ public Table<String, RepeatedOmKeyInfo> getDeletedTable() {
|
|
|
return deletedTable;
|
|
|
}
|
|
|
|
|
@@ -261,6 +263,7 @@ public class OmMetadataManagerImpl implements OMMetadataManager {
|
|
|
.addTable(PREFIX_TABLE)
|
|
|
.addCodec(OzoneTokenIdentifier.class, new TokenIdentifierCodec())
|
|
|
.addCodec(OmKeyInfo.class, new OmKeyInfoCodec())
|
|
|
+ .addCodec(RepeatedOmKeyInfo.class, new RepeatedOmKeyInfoCodec())
|
|
|
.addCodec(OmBucketInfo.class, new OmBucketInfoCodec())
|
|
|
.addCodec(OmVolumeArgs.class, new OmVolumeArgsCodec())
|
|
|
.addCodec(VolumeList.class, new VolumeListCodec())
|
|
@@ -296,8 +299,8 @@ public class OmMetadataManagerImpl implements OMMetadataManager {
|
|
|
keyTable = this.store.getTable(KEY_TABLE, String.class, OmKeyInfo.class);
|
|
|
checkTableStatus(keyTable, KEY_TABLE);
|
|
|
|
|
|
- deletedTable =
|
|
|
- this.store.getTable(DELETED_TABLE, String.class, OmKeyInfo.class);
|
|
|
+ deletedTable = this.store.getTable(DELETED_TABLE, String.class,
|
|
|
+ RepeatedOmKeyInfo.class);
|
|
|
checkTableStatus(deletedTable, DELETED_TABLE);
|
|
|
|
|
|
openKeyTable =
|
|
@@ -765,25 +768,26 @@ public class OmMetadataManagerImpl implements OMMetadataManager {
|
|
|
public List<BlockGroup> getPendingDeletionKeys(final int keyCount)
|
|
|
throws IOException {
|
|
|
List<BlockGroup> keyBlocksList = Lists.newArrayList();
|
|
|
- try (TableIterator<String, ? extends KeyValue<String, OmKeyInfo>> keyIter =
|
|
|
- getDeletedTable()
|
|
|
- .iterator()) {
|
|
|
+ try (TableIterator<String, ? extends KeyValue<String, RepeatedOmKeyInfo>>
|
|
|
+ keyIter = getDeletedTable().iterator()) {
|
|
|
int currentCount = 0;
|
|
|
while (keyIter.hasNext() && currentCount < keyCount) {
|
|
|
- KeyValue<String, OmKeyInfo> kv = keyIter.next();
|
|
|
+ KeyValue<String, RepeatedOmKeyInfo> kv = keyIter.next();
|
|
|
if (kv != null) {
|
|
|
- OmKeyInfo info = kv.getValue();
|
|
|
+ RepeatedOmKeyInfo infoList = kv.getValue();
|
|
|
// Get block keys as a list.
|
|
|
- OmKeyLocationInfoGroup latest = info.getLatestVersionLocations();
|
|
|
- List<BlockID> item = latest.getLocationList().stream()
|
|
|
- .map(b -> new BlockID(b.getContainerID(), b.getLocalID()))
|
|
|
- .collect(Collectors.toList());
|
|
|
- BlockGroup keyBlocks = BlockGroup.newBuilder()
|
|
|
- .setKeyName(kv.getKey())
|
|
|
- .addAllBlockIDs(item)
|
|
|
- .build();
|
|
|
- keyBlocksList.add(keyBlocks);
|
|
|
- currentCount++;
|
|
|
+ for(OmKeyInfo info : infoList.getOmKeyInfoList()){
|
|
|
+ OmKeyLocationInfoGroup latest = info.getLatestVersionLocations();
|
|
|
+ List<BlockID> item = latest.getLocationList().stream()
|
|
|
+ .map(b -> new BlockID(b.getContainerID(), b.getLocalID()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ BlockGroup keyBlocks = BlockGroup.newBuilder()
|
|
|
+ .setKeyName(kv.getKey())
|
|
|
+ .addAllBlockIDs(item)
|
|
|
+ .build();
|
|
|
+ keyBlocksList.add(keyBlocks);
|
|
|
+ currentCount++;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|