|
@@ -26,6 +26,7 @@ import java.util.stream.Collectors;
|
|
|
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
|
|
|
import org.apache.hadoop.hdds.scm.container.common.helpers.ExcludeList;
|
|
|
import org.apache.hadoop.io.Text;
|
|
|
+import org.apache.hadoop.ozone.OzoneAcl;
|
|
|
import org.apache.hadoop.ozone.om.exceptions.OMException;
|
|
|
import org.apache.hadoop.ozone.om.helpers.OmBucketArgs;
|
|
|
import org.apache.hadoop.ozone.om.helpers.OmBucketInfo;
|
|
@@ -43,7 +44,7 @@ import org.apache.hadoop.ozone.om.helpers.OpenKeySession;
|
|
|
import org.apache.hadoop.ozone.om.helpers.OzoneFileStatus;
|
|
|
import org.apache.hadoop.ozone.om.helpers.ServiceInfo;
|
|
|
import org.apache.hadoop.ozone.om.protocol.OzoneManagerServerProtocol;
|
|
|
-import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
|
|
|
+import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.AddAclResponse;
|
|
|
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.GetFileStatusRequest;
|
|
|
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.GetFileStatusResponse;
|
|
|
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.AllocateBlockRequest;
|
|
@@ -118,6 +119,7 @@ import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.SetVolu
|
|
|
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Status;
|
|
|
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Type;
|
|
|
import org.apache.hadoop.ozone.security.OzoneTokenIdentifier;
|
|
|
+import org.apache.hadoop.ozone.security.acl.OzoneObjInfo;
|
|
|
import org.apache.hadoop.security.proto.SecurityProtos.CancelDelegationTokenRequestProto;
|
|
|
import org.apache.hadoop.security.proto.SecurityProtos.GetDelegationTokenRequestProto;
|
|
|
import org.apache.hadoop.security.proto.SecurityProtos.RenewDelegationTokenRequestProto;
|
|
@@ -127,6 +129,8 @@ import com.google.common.collect.Lists;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
+import static org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.*;
|
|
|
+
|
|
|
/**
|
|
|
* Command Handler for OM requests. OM State Machine calls this handler for
|
|
|
* deserializing the client request and sending it to OM.
|
|
@@ -339,20 +343,40 @@ public class OzoneManagerRequestHandler implements RequestHandler {
|
|
|
createDirectory(request.getCreateDirectoryRequest());
|
|
|
break;
|
|
|
case CreateFile:
|
|
|
- OzoneManagerProtocolProtos.CreateFileResponse createFileResponse =
|
|
|
+ CreateFileResponse createFileResponse =
|
|
|
createFile(request.getCreateFileRequest());
|
|
|
responseBuilder.setCreateFileResponse(createFileResponse);
|
|
|
break;
|
|
|
case LookupFile:
|
|
|
- OzoneManagerProtocolProtos.LookupFileResponse lookupFileResponse =
|
|
|
+ LookupFileResponse lookupFileResponse =
|
|
|
lookupFile(request.getLookupFileRequest());
|
|
|
responseBuilder.setLookupFileResponse(lookupFileResponse);
|
|
|
break;
|
|
|
case ListStatus:
|
|
|
- OzoneManagerProtocolProtos.ListStatusResponse listStatusResponse =
|
|
|
+ ListStatusResponse listStatusResponse =
|
|
|
listStatus(request.getListStatusRequest());
|
|
|
responseBuilder.setListStatusResponse(listStatusResponse);
|
|
|
break;
|
|
|
+ case AddAcl:
|
|
|
+ AddAclResponse addAclResponse =
|
|
|
+ addAcl(request.getAddAclRequest());
|
|
|
+ responseBuilder.setAddAclResponse(addAclResponse);
|
|
|
+ break;
|
|
|
+ case RemoveAcl:
|
|
|
+ RemoveAclResponse removeAclResponse =
|
|
|
+ removeAcl(request.getRemoveAclRequest());
|
|
|
+ responseBuilder.setRemoveAclResponse(removeAclResponse);
|
|
|
+ break;
|
|
|
+ case SetAcl:
|
|
|
+ SetAclResponse setAclResponse =
|
|
|
+ setAcl(request.getSetAclRequest());
|
|
|
+ responseBuilder.setSetAclResponse(setAclResponse);
|
|
|
+ break;
|
|
|
+ case GetAcl:
|
|
|
+ GetAclResponse getAclResponse =
|
|
|
+ getAcl(request.getGetAclRequest());
|
|
|
+ responseBuilder.setGetAclResponse(getAclResponse);
|
|
|
+ break;
|
|
|
default:
|
|
|
responseBuilder.setSuccess(false);
|
|
|
responseBuilder.setMessage("Unrecognized Command Type: " + cmdType);
|
|
@@ -369,6 +393,37 @@ public class OzoneManagerRequestHandler implements RequestHandler {
|
|
|
return responseBuilder.build();
|
|
|
}
|
|
|
|
|
|
+ private GetAclResponse getAcl(GetAclRequest req) throws IOException {
|
|
|
+ List<OzoneAclInfo> acls = new ArrayList<>();
|
|
|
+
|
|
|
+ List<OzoneAcl> aclList =
|
|
|
+ impl.getAcl(OzoneObjInfo.fromProtobuf(req.getObj()));
|
|
|
+ aclList.parallelStream().forEach(a -> acls.add(OzoneAcl.toProtobuf(a)));
|
|
|
+ return GetAclResponse.newBuilder().addAllAcls(acls).build();
|
|
|
+ }
|
|
|
+
|
|
|
+ private RemoveAclResponse removeAcl(RemoveAclRequest req)
|
|
|
+ throws IOException {
|
|
|
+ boolean response = impl.removeAcl(OzoneObjInfo.fromProtobuf(req.getObj()),
|
|
|
+ OzoneAcl.fromProtobuf(req.getAcl()));
|
|
|
+ return RemoveAclResponse.newBuilder().setResponse(response).build();
|
|
|
+ }
|
|
|
+
|
|
|
+ private SetAclResponse setAcl(SetAclRequest req) throws IOException {
|
|
|
+ List<OzoneAcl> ozoneAcl = new ArrayList<>();
|
|
|
+ req.getAclList().parallelStream().forEach(a ->
|
|
|
+ ozoneAcl.add(OzoneAcl.fromProtobuf(a)));
|
|
|
+ boolean response = impl.setAcl(OzoneObjInfo.fromProtobuf(req.getObj()),
|
|
|
+ ozoneAcl);
|
|
|
+ return SetAclResponse.newBuilder().setResponse(response).build();
|
|
|
+ }
|
|
|
+
|
|
|
+ private AddAclResponse addAcl(AddAclRequest req) throws IOException {
|
|
|
+ boolean response = impl.addAcl(OzoneObjInfo.fromProtobuf(req.getObj()),
|
|
|
+ OzoneAcl.fromProtobuf(req.getAcl()));
|
|
|
+ return AddAclResponse.newBuilder().setResponse(response).build();
|
|
|
+ }
|
|
|
+
|
|
|
// Convert and exception to corresponding status code
|
|
|
protected Status exceptionToResponseStatus(IOException ex) {
|
|
|
if (ex instanceof OMException) {
|
|
@@ -899,7 +954,7 @@ public class OzoneManagerRequestHandler implements RequestHandler {
|
|
|
List<OmPartInfo> omPartInfoList =
|
|
|
omMultipartUploadListParts.getPartInfoList();
|
|
|
|
|
|
- List<OzoneManagerProtocolProtos.PartInfo> partInfoList =
|
|
|
+ List<PartInfo> partInfoList =
|
|
|
new ArrayList<>();
|
|
|
|
|
|
omPartInfoList.forEach(partInfo -> partInfoList.add(partInfo.getProto()));
|
|
@@ -962,11 +1017,11 @@ public class OzoneManagerRequestHandler implements RequestHandler {
|
|
|
return rb.build();
|
|
|
}
|
|
|
|
|
|
- private OzoneManagerProtocolProtos.GetS3SecretResponse getS3Secret(
|
|
|
- OzoneManagerProtocolProtos.GetS3SecretRequest request)
|
|
|
+ private GetS3SecretResponse getS3Secret(
|
|
|
+ GetS3SecretRequest request)
|
|
|
throws IOException {
|
|
|
- OzoneManagerProtocolProtos.GetS3SecretResponse.Builder rb =
|
|
|
- OzoneManagerProtocolProtos.GetS3SecretResponse.newBuilder();
|
|
|
+ GetS3SecretResponse.Builder rb =
|
|
|
+ GetS3SecretResponse.newBuilder();
|
|
|
|
|
|
rb.setS3Secret(impl.getS3Secret(request.getKerberosID()).getProtobuf());
|
|
|
|
|
@@ -999,8 +1054,8 @@ public class OzoneManagerRequestHandler implements RequestHandler {
|
|
|
impl.createDirectory(omKeyArgs);
|
|
|
}
|
|
|
|
|
|
- private OzoneManagerProtocolProtos.CreateFileResponse createFile(
|
|
|
- OzoneManagerProtocolProtos.CreateFileRequest request) throws IOException {
|
|
|
+ private CreateFileResponse createFile(
|
|
|
+ CreateFileRequest request) throws IOException {
|
|
|
KeyArgs keyArgs = request.getKeyArgs();
|
|
|
OmKeyArgs omKeyArgs = new OmKeyArgs.Builder()
|
|
|
.setVolumeName(keyArgs.getVolumeName())
|
|
@@ -1013,15 +1068,15 @@ public class OzoneManagerRequestHandler implements RequestHandler {
|
|
|
OpenKeySession keySession =
|
|
|
impl.createFile(omKeyArgs, request.getIsOverwrite(),
|
|
|
request.getIsRecursive());
|
|
|
- return OzoneManagerProtocolProtos.CreateFileResponse.newBuilder()
|
|
|
+ return CreateFileResponse.newBuilder()
|
|
|
.setKeyInfo(keySession.getKeyInfo().getProtobuf())
|
|
|
.setID(keySession.getId())
|
|
|
.setOpenVersion(keySession.getOpenVersion())
|
|
|
.build();
|
|
|
}
|
|
|
|
|
|
- private OzoneManagerProtocolProtos.LookupFileResponse lookupFile(
|
|
|
- OzoneManagerProtocolProtos.LookupFileRequest request)
|
|
|
+ private LookupFileResponse lookupFile(
|
|
|
+ LookupFileRequest request)
|
|
|
throws IOException {
|
|
|
KeyArgs keyArgs = request.getKeyArgs();
|
|
|
OmKeyArgs omKeyArgs = new OmKeyArgs.Builder()
|
|
@@ -1029,7 +1084,7 @@ public class OzoneManagerRequestHandler implements RequestHandler {
|
|
|
.setBucketName(keyArgs.getBucketName())
|
|
|
.setKeyName(keyArgs.getKeyName())
|
|
|
.build();
|
|
|
- return OzoneManagerProtocolProtos.LookupFileResponse.newBuilder()
|
|
|
+ return LookupFileResponse.newBuilder()
|
|
|
.setKeyInfo(impl.lookupFile(omKeyArgs).getProtobuf())
|
|
|
.build();
|
|
|
}
|
|
@@ -1038,8 +1093,8 @@ public class OzoneManagerRequestHandler implements RequestHandler {
|
|
|
return impl;
|
|
|
}
|
|
|
|
|
|
- private OzoneManagerProtocolProtos.ListStatusResponse listStatus(
|
|
|
- OzoneManagerProtocolProtos.ListStatusRequest request) throws IOException {
|
|
|
+ private ListStatusResponse listStatus(
|
|
|
+ ListStatusRequest request) throws IOException {
|
|
|
KeyArgs keyArgs = request.getKeyArgs();
|
|
|
OmKeyArgs omKeyArgs = new OmKeyArgs.Builder()
|
|
|
.setVolumeName(keyArgs.getVolumeName())
|
|
@@ -1049,9 +1104,9 @@ public class OzoneManagerRequestHandler implements RequestHandler {
|
|
|
List<OzoneFileStatus> statuses =
|
|
|
impl.listStatus(omKeyArgs, request.getRecursive(),
|
|
|
request.getStartKey(), request.getNumEntries());
|
|
|
- OzoneManagerProtocolProtos.ListStatusResponse.Builder
|
|
|
+ ListStatusResponse.Builder
|
|
|
listStatusResponseBuilder =
|
|
|
- OzoneManagerProtocolProtos.ListStatusResponse.newBuilder();
|
|
|
+ ListStatusResponse.newBuilder();
|
|
|
for (OzoneFileStatus status : statuses) {
|
|
|
listStatusResponseBuilder.addStatuses(status.getProtobuf());
|
|
|
}
|