|
@@ -21,11 +21,15 @@ import javax.ws.rs.DELETE;
|
|
import javax.ws.rs.GET;
|
|
import javax.ws.rs.GET;
|
|
import javax.ws.rs.HEAD;
|
|
import javax.ws.rs.HEAD;
|
|
import javax.ws.rs.HeaderParam;
|
|
import javax.ws.rs.HeaderParam;
|
|
|
|
+import javax.ws.rs.POST;
|
|
import javax.ws.rs.PUT;
|
|
import javax.ws.rs.PUT;
|
|
import javax.ws.rs.Path;
|
|
import javax.ws.rs.Path;
|
|
import javax.ws.rs.PathParam;
|
|
import javax.ws.rs.PathParam;
|
|
|
|
+import javax.ws.rs.Produces;
|
|
|
|
+import javax.ws.rs.QueryParam;
|
|
import javax.ws.rs.core.Context;
|
|
import javax.ws.rs.core.Context;
|
|
import javax.ws.rs.core.HttpHeaders;
|
|
import javax.ws.rs.core.HttpHeaders;
|
|
|
|
+import javax.ws.rs.core.MediaType;
|
|
import javax.ws.rs.core.Response;
|
|
import javax.ws.rs.core.Response;
|
|
import javax.ws.rs.core.Response.ResponseBuilder;
|
|
import javax.ws.rs.core.Response.ResponseBuilder;
|
|
import javax.ws.rs.core.Response.Status;
|
|
import javax.ws.rs.core.Response.Status;
|
|
@@ -44,6 +48,7 @@ import org.apache.hadoop.ozone.client.OzoneBucket;
|
|
import org.apache.hadoop.ozone.client.OzoneKeyDetails;
|
|
import org.apache.hadoop.ozone.client.OzoneKeyDetails;
|
|
import org.apache.hadoop.ozone.client.io.OzoneInputStream;
|
|
import org.apache.hadoop.ozone.client.io.OzoneInputStream;
|
|
import org.apache.hadoop.ozone.client.io.OzoneOutputStream;
|
|
import org.apache.hadoop.ozone.client.io.OzoneOutputStream;
|
|
|
|
+import org.apache.hadoop.ozone.om.helpers.OmMultipartInfo;
|
|
import org.apache.hadoop.ozone.s3.SignedChunksInputStream;
|
|
import org.apache.hadoop.ozone.s3.SignedChunksInputStream;
|
|
import org.apache.hadoop.ozone.s3.exception.OS3Exception;
|
|
import org.apache.hadoop.ozone.s3.exception.OS3Exception;
|
|
import org.apache.hadoop.ozone.s3.exception.S3ErrorTable;
|
|
import org.apache.hadoop.ozone.s3.exception.S3ErrorTable;
|
|
@@ -340,6 +345,51 @@ public class ObjectEndpoint extends EndpointBase {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @POST
|
|
|
|
+ @Produces(MediaType.APPLICATION_XML)
|
|
|
|
+ public Response initiateMultipartUpload(
|
|
|
|
+ @PathParam("bucket") String bucket,
|
|
|
|
+ @PathParam("path") String key,
|
|
|
|
+ @QueryParam("uploads") String uploads) throws IOException, OS3Exception {
|
|
|
|
+ try {
|
|
|
|
+ OzoneBucket ozoneBucket = getBucket(bucket);
|
|
|
|
+ String storageType = headers.getHeaderString(STORAGE_CLASS_HEADER);
|
|
|
|
+
|
|
|
|
+ ReplicationType replicationType;
|
|
|
|
+ ReplicationFactor replicationFactor;
|
|
|
|
+ if (storageType == null || storageType.equals("")) {
|
|
|
|
+ replicationType = S3StorageType.getDefault().getType();
|
|
|
|
+ replicationFactor = S3StorageType.getDefault().getFactor();
|
|
|
|
+ } else {
|
|
|
|
+ try {
|
|
|
|
+ replicationType = S3StorageType.valueOf(storageType).getType();
|
|
|
|
+ replicationFactor = S3StorageType.valueOf(storageType).getFactor();
|
|
|
|
+ } catch (IllegalArgumentException ex) {
|
|
|
|
+ throw S3ErrorTable.newError(S3ErrorTable.INVALID_ARGUMENT,
|
|
|
|
+ storageType);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ OmMultipartInfo multipartInfo = ozoneBucket
|
|
|
|
+ .initiateMultipartUpload(key, replicationType, replicationFactor);
|
|
|
|
+
|
|
|
|
+ MultipartUploadInitiateResponse multipartUploadInitiateResponse = new
|
|
|
|
+ MultipartUploadInitiateResponse();
|
|
|
|
+
|
|
|
|
+ multipartUploadInitiateResponse.setBucket(bucket);
|
|
|
|
+ multipartUploadInitiateResponse.setKey(key);
|
|
|
|
+ multipartUploadInitiateResponse.setUploadID(multipartInfo.getUploadID());
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ return Response.status(Status.OK).entity(
|
|
|
|
+ multipartUploadInitiateResponse).build();
|
|
|
|
+
|
|
|
|
+ } catch (IOException ex) {
|
|
|
|
+ throw ex;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
@VisibleForTesting
|
|
@VisibleForTesting
|
|
public void setHeaders(HttpHeaders headers) {
|
|
public void setHeaders(HttpHeaders headers) {
|
|
this.headers = headers;
|
|
this.headers = headers;
|