|
@@ -21,7 +21,6 @@ package org.apache.hadoop.ozone.om.request.bucket;
|
|
|
import java.io.IOException;
|
|
|
|
|
|
import com.google.common.base.Optional;
|
|
|
-import org.apache.hadoop.ozone.om.request.OMClientRequest;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
@@ -34,6 +33,7 @@ import org.apache.hadoop.ozone.om.OMMetrics;
|
|
|
import org.apache.hadoop.ozone.om.OzoneManager;
|
|
|
import org.apache.hadoop.ozone.om.exceptions.OMException;
|
|
|
import org.apache.hadoop.ozone.om.helpers.OmBucketInfo;
|
|
|
+import org.apache.hadoop.ozone.om.request.OMClientRequest;
|
|
|
import org.apache.hadoop.ozone.om.response.bucket.OMBucketCreateResponse;
|
|
|
import org.apache.hadoop.ozone.om.response.OMClientResponse;
|
|
|
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
|
|
@@ -50,7 +50,8 @@ import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
|
|
|
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
|
|
|
.OMResponse;
|
|
|
import org.apache.hadoop.ozone.protocolPB.OMPBHelper;
|
|
|
-import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerRatisUtils;
|
|
|
+import org.apache.hadoop.ozone.security.acl.IAccessAuthorizer;
|
|
|
+import org.apache.hadoop.ozone.security.acl.OzoneObj;
|
|
|
import org.apache.hadoop.util.Time;
|
|
|
import org.apache.hadoop.utils.db.cache.CacheKey;
|
|
|
import org.apache.hadoop.utils.db.cache.CacheValue;
|
|
@@ -94,8 +95,8 @@ public class OMBucketCreateRequest extends OMClientRequest {
|
|
|
}
|
|
|
|
|
|
newCreateBucketRequest.setBucketInfo(newBucketInfo.build());
|
|
|
- return getOmRequest().toBuilder().setCreateBucketRequest(
|
|
|
- newCreateBucketRequest.build()).build();
|
|
|
+ return getOmRequest().toBuilder().setUserInfo(getUserInfo())
|
|
|
+ .setCreateBucketRequest(newCreateBucketRequest.build()).build();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -114,15 +115,29 @@ public class OMBucketCreateRequest extends OMClientRequest {
|
|
|
OMResponse.Builder omResponse = OMResponse.newBuilder().setCmdType(
|
|
|
OzoneManagerProtocolProtos.Type.CreateBucket).setStatus(
|
|
|
OzoneManagerProtocolProtos.Status.OK);
|
|
|
- OmBucketInfo omBucketInfo = null;
|
|
|
+ OmBucketInfo omBucketInfo = OmBucketInfo.getFromProtobuf(bucketInfo);
|
|
|
+
|
|
|
+ try {
|
|
|
+ // check Acl
|
|
|
+ if (ozoneManager.getAclsEnabled()) {
|
|
|
+ checkAcls(ozoneManager, OzoneObj.ResourceType.BUCKET,
|
|
|
+ OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.CREATE,
|
|
|
+ volumeName, bucketName, null);
|
|
|
+ }
|
|
|
+ } catch (IOException ex) {
|
|
|
+ LOG.error("Bucket creation failed for bucket:{} in volume:{}",
|
|
|
+ bucketName, volumeName, ex);
|
|
|
+ omMetrics.incNumBucketCreateFails();
|
|
|
+ return new OMBucketCreateResponse(omBucketInfo,
|
|
|
+ createErrorOMResponse(omResponse, ex));
|
|
|
+ }
|
|
|
|
|
|
+ String volumeKey = metadataManager.getVolumeKey(volumeName);
|
|
|
+ String bucketKey = metadataManager.getBucketKey(volumeName, bucketName);
|
|
|
|
|
|
metadataManager.getLock().acquireVolumeLock(volumeName);
|
|
|
metadataManager.getLock().acquireBucketLock(volumeName, bucketName);
|
|
|
-
|
|
|
try {
|
|
|
- String volumeKey = metadataManager.getVolumeKey(volumeName);
|
|
|
- String bucketKey = metadataManager.getBucketKey(volumeName, bucketName);
|
|
|
|
|
|
//Check if the volume exists
|
|
|
if (metadataManager.getVolumeTable().get(volumeKey) == null) {
|
|
@@ -137,7 +152,6 @@ public class OMBucketCreateRequest extends OMClientRequest {
|
|
|
OMException.ResultCodes.BUCKET_ALREADY_EXISTS);
|
|
|
}
|
|
|
|
|
|
- omBucketInfo = OmBucketInfo.getFromProtobuf(bucketInfo);
|
|
|
LOG.debug("created bucket: {} in volume: {}", bucketName, volumeName);
|
|
|
omMetrics.incNumBuckets();
|
|
|
|
|
@@ -145,22 +159,21 @@ public class OMBucketCreateRequest extends OMClientRequest {
|
|
|
metadataManager.getBucketTable().addCacheEntry(new CacheKey<>(bucketKey),
|
|
|
new CacheValue<>(Optional.of(omBucketInfo), transactionLogIndex));
|
|
|
|
|
|
- // TODO: check acls.
|
|
|
+ // return response.
|
|
|
+ omResponse.setCreateBucketResponse(
|
|
|
+ CreateBucketResponse.newBuilder().build());
|
|
|
+ return new OMBucketCreateResponse(omBucketInfo, omResponse.build());
|
|
|
+
|
|
|
} catch (IOException ex) {
|
|
|
omMetrics.incNumBucketCreateFails();
|
|
|
LOG.error("Bucket creation failed for bucket:{} in volume:{}",
|
|
|
bucketName, volumeName, ex);
|
|
|
- omResponse.setStatus(
|
|
|
- OzoneManagerRatisUtils.exceptionToResponseStatus(ex));
|
|
|
- omResponse.setMessage(ex.getMessage());
|
|
|
- omResponse.setSuccess(false);
|
|
|
+ return new OMBucketCreateResponse(omBucketInfo,
|
|
|
+ createErrorOMResponse(omResponse, ex));
|
|
|
} finally {
|
|
|
metadataManager.getLock().releaseBucketLock(volumeName, bucketName);
|
|
|
metadataManager.getLock().releaseVolumeLock(volumeName);
|
|
|
}
|
|
|
- omResponse.setCreateBucketResponse(
|
|
|
- CreateBucketResponse.newBuilder().build());
|
|
|
- return new OMBucketCreateResponse(omBucketInfo, omResponse.build());
|
|
|
}
|
|
|
|
|
|
|