|
@@ -17,45 +17,76 @@
|
|
|
*/
|
|
|
package org.apache.hadoop.ozone.s3.object;
|
|
|
|
|
|
+import javax.ws.rs.DefaultValue;
|
|
|
import javax.ws.rs.HeaderParam;
|
|
|
import javax.ws.rs.PUT;
|
|
|
import javax.ws.rs.Path;
|
|
|
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.HttpHeaders;
|
|
|
import javax.ws.rs.core.MediaType;
|
|
|
+import javax.ws.rs.core.Response;
|
|
|
import java.io.IOException;
|
|
|
import java.io.InputStream;
|
|
|
|
|
|
+import org.apache.hadoop.conf.Configuration;
|
|
|
import org.apache.hadoop.hdds.client.ReplicationFactor;
|
|
|
import org.apache.hadoop.hdds.client.ReplicationType;
|
|
|
+import org.apache.hadoop.hdds.conf.OzoneConfiguration;
|
|
|
+import org.apache.hadoop.hdds.scm.ScmConfigKeys;
|
|
|
import org.apache.hadoop.ozone.client.OzoneBucket;
|
|
|
import org.apache.hadoop.ozone.client.io.OzoneOutputStream;
|
|
|
+import org.apache.hadoop.ozone.s3.EndpointBase;
|
|
|
|
|
|
import org.apache.commons.io.IOUtils;
|
|
|
-import org.apache.hadoop.ozone.s3.EndpointBase;
|
|
|
+import org.apache.http.HttpStatus;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
|
|
|
/**
|
|
|
* File upload.
|
|
|
*/
|
|
|
-@Path("/{volume}/{bucket}/{path:.+}")
|
|
|
+@Path("/{bucket}/{path:.+}")
|
|
|
public class PutObject extends EndpointBase {
|
|
|
|
|
|
+ private static final Logger LOG =
|
|
|
+ LoggerFactory.getLogger(PutObject.class);
|
|
|
+
|
|
|
@PUT
|
|
|
@Produces(MediaType.APPLICATION_XML)
|
|
|
- public void put(
|
|
|
- @PathParam("volume") String volumeName,
|
|
|
+ public Response put(
|
|
|
+ @Context HttpHeaders headers,
|
|
|
@PathParam("bucket") String bucketName,
|
|
|
@PathParam("path") String keyPath,
|
|
|
+ @DefaultValue("STAND_ALONE" ) @QueryParam("replicationType")
|
|
|
+ ReplicationType replicationType,
|
|
|
+ @DefaultValue("ONE") @QueryParam("replicationFactor")
|
|
|
+ ReplicationFactor replicationFactor,
|
|
|
+ @DefaultValue("32 * 1024 * 1024") @QueryParam("chunkSize")
|
|
|
+ String chunkSize,
|
|
|
@HeaderParam("Content-Length") long length,
|
|
|
InputStream body) throws IOException {
|
|
|
|
|
|
- OzoneBucket bucket = getBucket(volumeName, bucketName);
|
|
|
+ try {
|
|
|
+ Configuration config = new OzoneConfiguration();
|
|
|
+ config.set(ScmConfigKeys.OZONE_SCM_CHUNK_SIZE_KEY, chunkSize);
|
|
|
+
|
|
|
+ OzoneBucket bucket = getVolume(getOzoneVolumeName(bucketName))
|
|
|
+ .getBucket(bucketName);
|
|
|
+ OzoneOutputStream output = bucket
|
|
|
+ .createKey(keyPath, length, replicationType, replicationFactor);
|
|
|
|
|
|
- OzoneOutputStream output = bucket
|
|
|
- .createKey(keyPath, length, ReplicationType.STAND_ALONE,
|
|
|
- ReplicationFactor.ONE);
|
|
|
+ IOUtils.copy(body, output);
|
|
|
+ output.close();
|
|
|
|
|
|
- IOUtils.copy(body, output);
|
|
|
- output.close();
|
|
|
+ return Response.ok().status(HttpStatus.SC_OK)
|
|
|
+ .header("Content-Length", length)
|
|
|
+ .build();
|
|
|
+ } catch (IOException ex) {
|
|
|
+ LOG.error("Exception occurred in PutObject", ex);
|
|
|
+ throw ex;
|
|
|
+ }
|
|
|
}
|
|
|
-}
|
|
|
+}
|