use of software.amazon.awssdk.services.s3.model.Bucket in project aws-doc-sdk-examples by awsdocs.
the class S3Service method getObjectBytes.
public byte[] getObjectBytes(String bucketName, String keyName) {
try {
S3Client s3 = getClient();
GetObjectRequest objectRequest = GetObjectRequest.builder().key(keyName).bucket(bucketName).build();
ResponseBytes<GetObjectResponse> objectBytes = s3.getObjectAsBytes(objectRequest);
byte[] data = objectBytes.asByteArray();
return data;
} catch (S3Exception e) {
System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);
}
return null;
}
use of software.amazon.awssdk.services.s3.model.Bucket in project pravega by pravega.
the class S3ChunkStorage method doGetInfo.
@Override
protected ChunkInfo doGetInfo(String chunkName) throws ChunkStorageException {
try {
val objectPath = getObjectPath(chunkName);
val response = client.headObject(HeadObjectRequest.builder().bucket(this.config.getBucket()).key(objectPath).build());
return ChunkInfo.builder().name(chunkName).length(response.contentLength()).build();
} catch (Exception e) {
throw convertException(chunkName, "doGetInfo", e);
}
}
use of software.amazon.awssdk.services.s3.model.Bucket in project pravega by pravega.
the class S3ChunkStorage method doRead.
@Override
protected int doRead(ChunkHandle handle, long fromOffset, int length, byte[] buffer, int bufferOffset) throws ChunkStorageException {
try {
GetObjectRequest objectRequest = GetObjectRequest.builder().key(getObjectPath(handle.getChunkName())).range(getRangeWithLength(fromOffset, length)).bucket(config.getBucket()).build();
ResponseBytes<GetObjectResponse> objectBytes = client.getObjectAsBytes(objectRequest);
try (val inputStream = objectBytes.asInputStream()) {
return StreamHelpers.readAll(inputStream, buffer, bufferOffset, length);
}
} catch (Exception e) {
throw convertException(handle.getChunkName(), "doRead", e);
}
}
use of software.amazon.awssdk.services.s3.model.Bucket in project pravega by pravega.
the class S3ChunkStorage method doConcat.
@Override
public int doConcat(ConcatArgument[] chunks) throws ChunkStorageException {
int totalBytesConcatenated = 0;
String targetPath = getObjectPath(chunks[0].getName());
String uploadId = null;
boolean isCompleted = false;
try {
int partNumber = 1;
val response = client.createMultipartUpload(CreateMultipartUploadRequest.builder().bucket(config.getBucket()).key(targetPath).build());
uploadId = response.uploadId();
// check whether the target exists
if (!checkExists(chunks[0].getName())) {
throw new ChunkNotFoundException(chunks[0].getName(), "doConcat - Target segment does not exist");
}
CompletedPart[] completedParts = new CompletedPart[chunks.length];
// Copy the parts
for (int i = 0; i < chunks.length; i++) {
if (0 != chunks[i].getLength()) {
val sourceHandle = chunks[i];
long objectSize = client.headObject(HeadObjectRequest.builder().bucket(this.config.getBucket()).key(getObjectPath(sourceHandle.getName())).build()).contentLength();
Preconditions.checkState(objectSize >= chunks[i].getLength(), "Length of object should be equal or greater. Length on LTS={} provided={}", objectSize, chunks[i].getLength());
UploadPartCopyRequest copyRequest = UploadPartCopyRequest.builder().destinationBucket(config.getBucket()).destinationKey(targetPath).sourceBucket(config.getBucket()).sourceKey(getObjectPath(sourceHandle.getName())).uploadId(uploadId).partNumber(partNumber).copySourceRange(getRangeWithLength(0, chunks[i].getLength())).build();
val copyResult = client.uploadPartCopy(copyRequest);
val eTag = copyResult.copyPartResult().eTag();
completedParts[i] = CompletedPart.builder().partNumber(partNumber).eTag(eTag).build();
partNumber++;
totalBytesConcatenated += chunks[i].getLength();
}
}
// Close the upload
CompletedMultipartUpload completedRequest = CompletedMultipartUpload.builder().parts(completedParts).build();
client.completeMultipartUpload(CompleteMultipartUploadRequest.builder().bucket(config.getBucket()).key(targetPath).multipartUpload(completedRequest).uploadId(uploadId).build());
isCompleted = true;
} catch (RuntimeException e) {
// Error message is REC_CATCH_EXCEPTION: Exception is caught when Exception is not thrown
throw convertException(chunks[0].getName(), "doConcat", e);
} catch (Exception e) {
throw convertException(chunks[0].getName(), "doConcat", e);
} finally {
if (!isCompleted && null != uploadId) {
try {
client.abortMultipartUpload(AbortMultipartUploadRequest.builder().bucket(config.getBucket()).key(targetPath).uploadId(uploadId).build());
} catch (Exception e) {
throw convertException(chunks[0].getName(), "doConcat", e);
}
}
}
return totalBytesConcatenated;
}
use of software.amazon.awssdk.services.s3.model.Bucket in project pravega by pravega.
the class S3ChunkStorage method checkExists.
@Override
protected boolean checkExists(String chunkName) throws ChunkStorageException {
try {
val objectPath = getObjectPath(chunkName);
val response = client.headObject(HeadObjectRequest.builder().bucket(this.config.getBucket()).key(objectPath).build());
return true;
} catch (S3Exception e) {
if (e.awsErrorDetails().errorCode().equals(NO_SUCH_KEY)) {
return false;
} else {
throw convertException(chunkName, "checkExists", e);
}
}
}
Aggregations