Skip to content
Snippets Groups Projects
Commit a85b8273 authored by Xing Lin's avatar Xing Lin Committed by Sean Busbey
Browse files

[s3] Remove unnecessary getObjectMetadata() from getS3ObjectAndMetadata() (#1060)


* Remove unnecessary getObjectMetadata() from getS3ObjectAndMetadata()

ObjectMetadata is available from S3Object.getObjectMetadata().
We don't need to send a separate GetObjectMetadata Request (an
HTTP HEAD request), in order to get the metadata. This will double
performance for read workloads.

Signed-off-by: default avatarXing Lin <Xing.Lin@netapp.com>

* Remove one unused import to pass style check.

Signed-off-by: default avatarXing Lin <xing.lin@netapp.com>
(cherry picked from commit 381aaebc83476e1d1c844f6db207f336bea4f8c6)
parent b7704ce4
No related branches found
No related tags found
No related merge requests found
......@@ -51,7 +51,6 @@ import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.S3ObjectSummary;
import com.amazonaws.services.s3.model.SSECustomerKey;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.model.GetObjectMetadataRequest;
/**
* S3 Storage client for YCSB framework.
......@@ -350,11 +349,11 @@ public class S3Client extends DB {
totalSize = sizeArray*fieldCount;
} else {
try {
Map.Entry<S3Object, ObjectMetadata> objectAndMetadata = getS3ObjectAndMetadata(bucket, key, ssecLocal);
int sizeOfFile = (int)objectAndMetadata.getValue().getContentLength();
S3Object object = getS3ObjectAndMetadata(bucket, key, ssecLocal);
int sizeOfFile = (int)object.getObjectMetadata().getContentLength();
fieldCount = sizeOfFile/sizeArray;
totalSize = sizeOfFile;
objectAndMetadata.getKey().close();
object.close();
} catch (Exception e){
System.err.println("Not possible to get the object :"+key);
e.printStackTrace();
......@@ -425,12 +424,12 @@ public class S3Client extends DB {
protected Status readFromStorage(String bucket, String key,
Map<String, ByteIterator> result, SSECustomerKey ssecLocal) {
try {
Map.Entry<S3Object, ObjectMetadata> objectAndMetadata = getS3ObjectAndMetadata(bucket, key, ssecLocal);
InputStream objectData = objectAndMetadata.getKey().getObjectContent(); //consuming the stream
S3Object object = getS3ObjectAndMetadata(bucket, key, ssecLocal);
InputStream objectData = object.getObjectContent(); //consuming the stream
// writing the stream to bytes and to results
result.put(key, new ByteArrayByteIterator(IOUtils.toByteArray(objectData)));
objectData.close();
objectAndMetadata.getKey().close();
object.close();
} catch (Exception e){
System.err.println("Not possible to get the object "+key);
e.printStackTrace();
......@@ -440,23 +439,17 @@ public class S3Client extends DB {
return Status.OK;
}
private Map.Entry<S3Object, ObjectMetadata> getS3ObjectAndMetadata(String bucket,
private S3Object getS3ObjectAndMetadata(String bucket,
String key, SSECustomerKey ssecLocal) {
GetObjectRequest getObjectRequest;
GetObjectMetadataRequest getObjectMetadataRequest;
if (ssecLocal != null) {
getObjectRequest = new GetObjectRequest(bucket,
key).withSSECustomerKey(ssecLocal);
getObjectMetadataRequest = new GetObjectMetadataRequest(bucket,
key).withSSECustomerKey(ssecLocal);
} else {
getObjectRequest = new GetObjectRequest(bucket, key);
getObjectMetadataRequest = new GetObjectMetadataRequest(bucket,
key);
}
return new AbstractMap.SimpleEntry<>(s3Client.getObject(getObjectRequest),
s3Client.getObjectMetadata(getObjectMetadataRequest));
return s3Client.getObject(getObjectRequest);
}
/**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment