You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by xi...@apache.org on 2023/05/11 07:06:16 UTC
[iotdb] branch tiered_storage updated: add interface size() for objectStorage
This is an automated email from the ASF dual-hosted git repository.
xingtanzjr pushed a commit to branch tiered_storage
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/tiered_storage by this push:
new ece6708674c add interface size() for objectStorage
ece6708674c is described below
commit ece6708674ce569e265a443dbd4d60b34d797f4d
Author: Jinrui.Zhang <xi...@gmail.com>
AuthorDate: Thu May 11 15:06:04 2023 +0800
add interface size() for objectStorage
---
.../java/org/apache/iotdb/os/fileSystem/OSFile.java | 18 +++++++++---------
.../apache/iotdb/os/io/ObjectStorageConnector.java | 5 +++--
.../iotdb/os/io/aws/S3ObjectStorageConnector.java | 19 +++++++++++++++++--
3 files changed, 29 insertions(+), 13 deletions(-)
diff --git a/object-storage/src/main/java/org/apache/iotdb/os/fileSystem/OSFile.java b/object-storage/src/main/java/org/apache/iotdb/os/fileSystem/OSFile.java
index 722500dae26..8012ee3808c 100644
--- a/object-storage/src/main/java/org/apache/iotdb/os/fileSystem/OSFile.java
+++ b/object-storage/src/main/java/org/apache/iotdb/os/fileSystem/OSFile.java
@@ -18,12 +18,6 @@
*/
package org.apache.iotdb.os.fileSystem;
-import java.io.FileFilter;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.nio.file.Path;
import org.apache.iotdb.os.conf.ObjectStorageConfig;
import org.apache.iotdb.os.conf.ObjectStorageDescriptor;
import org.apache.iotdb.os.exception.ObjectStorageException;
@@ -34,14 +28,20 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
+import java.io.FileFilter;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.net.MalformedURLException;
import java.net.URI;
+import java.net.URL;
+import java.nio.file.Path;
import static org.apache.iotdb.os.utils.ObjectStorageConstant.FILE_SEPARATOR;
-
public class OSFile extends File {
private static final Logger logger = LoggerFactory.getLogger(OSFile.class);
- private static final String UNSUPPORT_OPERATION = "Current object storage file doesn't support this operation.";
+ private static final String UNSUPPORT_OPERATION =
+ "Current object storage file doesn't support this operation.";
private static final ObjectStorageConfig config =
ObjectStorageDescriptor.getInstance().getConfig();
private static final ObjectStorageConnector connector;
@@ -97,7 +97,7 @@ public class OSFile extends File {
@Override
public File getParentFile() {
int lastSeparatorIdx = osUri.getKey().lastIndexOf(FILE_SEPARATOR);
- if(lastSeparatorIdx <= 0) {
+ if (lastSeparatorIdx <= 0) {
return null;
}
return new OSFile(new OSURI(osUri.getBucket(), osUri.getKey().substring(0, lastSeparatorIdx)));
diff --git a/object-storage/src/main/java/org/apache/iotdb/os/io/ObjectStorageConnector.java b/object-storage/src/main/java/org/apache/iotdb/os/io/ObjectStorageConnector.java
index 2e70268bdcd..154417a4696 100644
--- a/object-storage/src/main/java/org/apache/iotdb/os/io/ObjectStorageConnector.java
+++ b/object-storage/src/main/java/org/apache/iotdb/os/io/ObjectStorageConnector.java
@@ -25,6 +25,7 @@ import org.apache.iotdb.os.fileSystem.OSURI;
public interface ObjectStorageConnector {
boolean doesObjectExist(OSURI osuri) throws ObjectStorageException;
- void write(String sourceFile, String containerName, String targetFileName)
- throws ObjectStorageException;
+ long size(String fileName) throws ObjectStorageException;
+
+ void write(String sourceFile, String targetFileName) throws ObjectStorageException;
}
diff --git a/object-storage/src/main/java/org/apache/iotdb/os/io/aws/S3ObjectStorageConnector.java b/object-storage/src/main/java/org/apache/iotdb/os/io/aws/S3ObjectStorageConnector.java
index 31cd148bcc0..f294daf82ac 100644
--- a/object-storage/src/main/java/org/apache/iotdb/os/io/aws/S3ObjectStorageConnector.java
+++ b/object-storage/src/main/java/org/apache/iotdb/os/io/aws/S3ObjectStorageConnector.java
@@ -27,11 +27,15 @@ import software.amazon.awssdk.core.sync.RequestBody;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.HeadObjectRequest;
+import software.amazon.awssdk.services.s3.model.ListObjectsV2Request;
+import software.amazon.awssdk.services.s3.model.ListObjectsV2Response;
import software.amazon.awssdk.services.s3.model.NoSuchKeyException;
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
import software.amazon.awssdk.services.s3.model.S3Exception;
+import software.amazon.awssdk.services.s3.model.S3Object;
import java.io.File;
+import java.util.List;
public class S3ObjectStorageConnector implements ObjectStorageConnector {
private S3Client s3Client;
@@ -58,9 +62,20 @@ public class S3ObjectStorageConnector implements ObjectStorageConnector {
return true;
}
+ public long size(String fileName) throws ObjectStorageException {
+ ListObjectsV2Request listObjectsRequest =
+ ListObjectsV2Request.builder().bucket(AWSS3Config.getBucketName()).prefix(fileName).build();
+ ListObjectsV2Response res = s3Client.listObjectsV2(listObjectsRequest);
+ List<S3Object> objects = res.contents();
+ if (objects.size() != 1) {
+ throw new ObjectStorageException(
+ String.format("expected 1 S3Object with prefix %s but get %d", fileName, objects.size()));
+ }
+ return objects.get(0).size();
+ }
+
@Override
- public void write(String sourceFile, String containerName, String targetFileName)
- throws ObjectStorageException {
+ public void write(String sourceFile, String targetFileName) throws ObjectStorageException {
try {
PutObjectRequest putOb =
PutObjectRequest.builder()