Return-Path: X-Original-To: apmail-hadoop-mapreduce-commits-archive@minotaur.apache.org Delivered-To: apmail-hadoop-mapreduce-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 689391768 for ; Tue, 26 Apr 2011 06:27:24 +0000 (UTC) Received: (qmail 53008 invoked by uid 500); 26 Apr 2011 06:27:24 -0000 Delivered-To: apmail-hadoop-mapreduce-commits-archive@hadoop.apache.org Received: (qmail 52897 invoked by uid 500); 26 Apr 2011 06:27:22 -0000 Mailing-List: contact mapreduce-commits-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: mapreduce-dev@hadoop.apache.org Delivered-To: mailing list mapreduce-commits@hadoop.apache.org Received: (qmail 52889 invoked by uid 99); 26 Apr 2011 06:27:18 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 26 Apr 2011 06:27:18 +0000 X-ASF-Spam-Status: No, hits=-1996.5 required=5.0 tests=ALL_TRUSTED,FILL_THIS_FORM,FILL_THIS_FORM_LONG X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 26 Apr 2011 06:27:08 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 5A5DB238890A; Tue, 26 Apr 2011 06:26:45 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1096670 - in /hadoop/mapreduce/branches/MR-279: ./ mr-client/hadoop-mapreduce-client-common/src/main/java/org/apache/hadoop/mapreduce/ mr-client/hadoop-mapreduce-client-jobclient/src/main/java/org/apache/hadoop/mapred/ mr-client/hadoop-map... Date: Tue, 26 Apr 2011 06:26:44 -0000 To: mapreduce-commits@hadoop.apache.org From: acmurthy@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110426062645.5A5DB238890A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: acmurthy Date: Tue Apr 26 06:26:43 2011 New Revision: 1096670 URL: http://svn.apache.org/viewvc?rev=1096670&view=rev Log: Add ACLs for queues and command-line utilities for viewing them. Added: hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/GetQueueUserAclsInfoRequest.java hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/GetQueueUserAclsInfoResponse.java hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/GetQueueUserAclsInfoRequestPBImpl.java hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/GetQueueUserAclsInfoResponsePBImpl.java hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/QueueACL.java hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/QueueUserACLInfo.java hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/QueueUserACLInfoPBImpl.java Modified: hadoop/mapreduce/branches/MR-279/CHANGES.txt hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-common/src/main/java/org/apache/hadoop/mapreduce/TypeConverter.java hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-jobclient/src/main/java/org/apache/hadoop/mapred/ResourceMgrDelegate.java hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/mapred/TestClientRedirect.java hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/ClientRMProtocol.java hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/QueueInfoPBImpl.java hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/util/ProtoUtils.java hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/proto/client_RM_protocol.proto hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/proto/yarn_protos.proto hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/proto/yarn_service_protos.proto hadoop/mapreduce/branches/MR-279/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/api/impl/pb/client/ClientRMProtocolPBClientImpl.java hadoop/mapreduce/branches/MR-279/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/api/impl/pb/service/ClientRMProtocolPBServiceImpl.java hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ClientRMService.java hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/Queue.java hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/YarnScheduler.java hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacitySchedulerConfiguration.java hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/ParentQueue.java hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/Queue.java hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fifo/FifoScheduler.java hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMLaunchFailure.java hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMRMRPCResponseId.java hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMRestart.java hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestSchedulerNegotiator.java Modified: hadoop/mapreduce/branches/MR-279/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/CHANGES.txt?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/CHANGES.txt (original) +++ hadoop/mapreduce/branches/MR-279/CHANGES.txt Tue Apr 26 06:26:43 2011 @@ -3,6 +3,9 @@ Hadoop MapReduce Change Log Trunk (unreleased changes) MAPREDUCE-279 + + Add ACLs for queues and command-line utilities for viewing them. + (acmurthy) Add Containers' logs' view to NM UI and link it from AM UI. (vinodkv) Modified: hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-common/src/main/java/org/apache/hadoop/mapreduce/TypeConverter.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-common/src/main/java/org/apache/hadoop/mapreduce/TypeConverter.java?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-common/src/main/java/org/apache/hadoop/mapreduce/TypeConverter.java (original) +++ hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-common/src/main/java/org/apache/hadoop/mapreduce/TypeConverter.java Tue Apr 26 06:26:43 2011 @@ -47,6 +47,8 @@ import org.apache.hadoop.yarn.api.record import org.apache.hadoop.yarn.api.records.ApplicationId; import org.apache.hadoop.yarn.api.records.ApplicationState; import org.apache.hadoop.yarn.api.records.NodeManagerInfo; +import org.apache.hadoop.yarn.api.records.QueueACL; +import org.apache.hadoop.yarn.api.records.QueueUserACLInfo; import org.apache.hadoop.yarn.factory.providers.RecordFactoryProvider; public class TypeConverter { @@ -425,5 +427,22 @@ public class TypeConverter { return queueInfos.toArray(new QueueInfo[queueInfos.size()]); } + public static QueueAclsInfo[] fromYarnQueueUserAclsInfo( + List userAcls) { + List acls = new ArrayList(); + for (QueueUserACLInfo aclInfo : userAcls) { + List operations = new ArrayList(); + for (QueueACL qAcl : aclInfo.getUserAcls()) { + operations.add(qAcl.toString()); + } + + QueueAclsInfo acl = + new QueueAclsInfo(aclInfo.getQueueName(), + operations.toArray(new String[operations.size()])); + acls.add(acl); + } + return acls.toArray(new QueueAclsInfo[acls.size()]); + } + } Modified: hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-jobclient/src/main/java/org/apache/hadoop/mapred/ResourceMgrDelegate.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-jobclient/src/main/java/org/apache/hadoop/mapred/ResourceMgrDelegate.java?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-jobclient/src/main/java/org/apache/hadoop/mapred/ResourceMgrDelegate.java (original) +++ hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-jobclient/src/main/java/org/apache/hadoop/mapred/ResourceMgrDelegate.java Tue Apr 26 06:26:43 2011 @@ -54,11 +54,13 @@ import org.apache.hadoop.yarn.api.protoc import org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodesResponse; import org.apache.hadoop.yarn.api.protocolrecords.GetNewApplicationIdRequest; import org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoRequest; +import org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoRequest; import org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationRequest; import org.apache.hadoop.yarn.api.records.ApplicationId; import org.apache.hadoop.yarn.api.records.ApplicationMaster; import org.apache.hadoop.yarn.api.records.ApplicationState; import org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext; +import org.apache.hadoop.yarn.api.records.QueueUserACLInfo; import org.apache.hadoop.yarn.api.records.YarnClusterMetrics; import org.apache.hadoop.yarn.conf.YARNApplicationConstants; import org.apache.hadoop.yarn.conf.YarnConfiguration; @@ -192,7 +194,11 @@ public class ResourceMgrDelegate { public QueueAclsInfo[] getQueueAclsForCurrentUser() throws IOException, InterruptedException { - throw new IOException("Not implemented"); + GetQueueUserAclsInfoRequest request = + recordFactory.newRecordInstance(GetQueueUserAclsInfoRequest.class); + List userAcls = + applicationsManager.getQueueUserAcls(request).getUserAclsInfoList(); + return TypeConverter.fromYarnQueueUserAclsInfo(userAcls); } Modified: hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/mapred/TestClientRedirect.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/mapred/TestClientRedirect.java?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/mapred/TestClientRedirect.java (original) +++ hadoop/mapreduce/branches/MR-279/mr-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/mapred/TestClientRedirect.java Tue Apr 26 06:26:43 2011 @@ -75,6 +75,8 @@ import org.apache.hadoop.yarn.api.protoc import org.apache.hadoop.yarn.api.protocolrecords.GetNewApplicationIdResponse; import org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoRequest; import org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoRequest; +import org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoResponse; import org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationRequest; import org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationResponse; import org.apache.hadoop.yarn.api.records.ApplicationId; @@ -240,6 +242,13 @@ public class TestClientRedirect { // TODO Auto-generated method stub return null; } + + @Override + public GetQueueUserAclsInfoResponse getQueueUserAcls( + GetQueueUserAclsInfoRequest request) throws YarnRemoteException { + // TODO Auto-generated method stub + return null; + } } class HistoryService extends AMService { Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/ClientRMProtocol.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/ClientRMProtocol.java?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/ClientRMProtocol.java (original) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/ClientRMProtocol.java Tue Apr 26 06:26:43 2011 @@ -14,6 +14,8 @@ import org.apache.hadoop.yarn.api.protoc import org.apache.hadoop.yarn.api.protocolrecords.GetNewApplicationIdResponse; import org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoRequest; import org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoRequest; +import org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoResponse; import org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationRequest; import org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationResponse; import org.apache.hadoop.yarn.exceptions.YarnRemoteException; @@ -27,4 +29,5 @@ public interface ClientRMProtocol { public GetAllApplicationsResponse getAllApplications(GetAllApplicationsRequest request) throws YarnRemoteException; public GetClusterNodesResponse getClusterNodes(GetClusterNodesRequest request) throws YarnRemoteException; public GetQueueInfoResponse getQueueInfo(GetQueueInfoRequest request) throws YarnRemoteException; + public GetQueueUserAclsInfoResponse getQueueUserAcls(GetQueueUserAclsInfoRequest request) throws YarnRemoteException; } Added: hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/GetQueueUserAclsInfoRequest.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/GetQueueUserAclsInfoRequest.java?rev=1096670&view=auto ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/GetQueueUserAclsInfoRequest.java (added) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/GetQueueUserAclsInfoRequest.java Tue Apr 26 06:26:43 2011 @@ -0,0 +1,5 @@ +package org.apache.hadoop.yarn.api.protocolrecords; + +public interface GetQueueUserAclsInfoRequest { + +} Added: hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/GetQueueUserAclsInfoResponse.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/GetQueueUserAclsInfoResponse.java?rev=1096670&view=auto ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/GetQueueUserAclsInfoResponse.java (added) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/GetQueueUserAclsInfoResponse.java Tue Apr 26 06:26:43 2011 @@ -0,0 +1,13 @@ +package org.apache.hadoop.yarn.api.protocolrecords; + +import java.util.List; + +import org.apache.hadoop.yarn.api.records.QueueUserACLInfo; + +public interface GetQueueUserAclsInfoResponse { + + public List getUserAclsInfoList(); + + public void setUserAclsInfoList(List queueUserAclsList); + +} Added: hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/GetQueueUserAclsInfoRequestPBImpl.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/GetQueueUserAclsInfoRequestPBImpl.java?rev=1096670&view=auto ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/GetQueueUserAclsInfoRequestPBImpl.java (added) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/GetQueueUserAclsInfoRequestPBImpl.java Tue Apr 26 06:26:43 2011 @@ -0,0 +1,32 @@ +package org.apache.hadoop.yarn.api.protocolrecords.impl.pb; + +import org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoRequest; +import org.apache.hadoop.yarn.api.records.ProtoBase; +import org.apache.hadoop.yarn.proto.YarnServiceProtos.GetQueueUserAclsInfoRequestProto; + +public class GetQueueUserAclsInfoRequestPBImpl extends + ProtoBase implements + GetQueueUserAclsInfoRequest { + + GetQueueUserAclsInfoRequestProto proto = + GetQueueUserAclsInfoRequestProto.getDefaultInstance(); + GetQueueUserAclsInfoRequestProto.Builder builder = null; + boolean viaProto = false; + + public GetQueueUserAclsInfoRequestPBImpl() { + builder = GetQueueUserAclsInfoRequestProto.newBuilder(); + } + + public GetQueueUserAclsInfoRequestPBImpl(GetQueueUserAclsInfoRequestProto proto) { + this.proto = proto; + viaProto = true; + } + + @Override + public GetQueueUserAclsInfoRequestProto getProto() { + proto = viaProto ? proto : builder.build(); + viaProto = true; + return proto; + } + +} Added: hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/GetQueueUserAclsInfoResponsePBImpl.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/GetQueueUserAclsInfoResponsePBImpl.java?rev=1096670&view=auto ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/GetQueueUserAclsInfoResponsePBImpl.java (added) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/GetQueueUserAclsInfoResponsePBImpl.java Tue Apr 26 06:26:43 2011 @@ -0,0 +1,135 @@ +package org.apache.hadoop.yarn.api.protocolrecords.impl.pb; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoResponse; +import org.apache.hadoop.yarn.api.records.QueueUserACLInfo; +import org.apache.hadoop.yarn.api.records.ProtoBase; +import org.apache.hadoop.yarn.api.records.impl.pb.QueueUserACLInfoPBImpl; +import org.apache.hadoop.yarn.proto.YarnProtos.QueueUserACLInfoProto; +import org.apache.hadoop.yarn.proto.YarnServiceProtos.GetQueueUserAclsInfoResponseProto; +import org.apache.hadoop.yarn.proto.YarnServiceProtos.GetQueueUserAclsInfoResponseProtoOrBuilder; + +public class GetQueueUserAclsInfoResponsePBImpl extends +ProtoBase +implements GetQueueUserAclsInfoResponse { + + List queueUserAclsInfoList; + + GetQueueUserAclsInfoResponseProto proto = + GetQueueUserAclsInfoResponseProto.getDefaultInstance(); + GetQueueUserAclsInfoResponseProto.Builder builder = null; + boolean viaProto = false; + + public GetQueueUserAclsInfoResponsePBImpl() { + builder = GetQueueUserAclsInfoResponseProto.newBuilder(); + } + + public GetQueueUserAclsInfoResponsePBImpl( + GetQueueUserAclsInfoResponseProto proto) { + this.proto = proto; + viaProto = true; + } + + @Override + public List getUserAclsInfoList() { + initLocalQueueUserAclsList(); + return queueUserAclsInfoList; + } + + @Override + public void setUserAclsInfoList(List queueUserAclsList) { + if (queueUserAclsList == null) { + builder.clearQueueUserAcls(); + } + this.queueUserAclsInfoList = queueUserAclsList; + } + + @Override + public GetQueueUserAclsInfoResponseProto getProto() { + mergeLocalToProto(); + proto = viaProto ? proto : builder.build(); + viaProto = true; + return proto; + } + + private void mergeLocalToBuilder() { + if (this.queueUserAclsInfoList != null) { + addLocalQueueUserACLInfosToProto(); + } + } + + private void mergeLocalToProto() { + if (viaProto) + maybeInitBuilder(); + mergeLocalToBuilder(); + proto = builder.build(); + viaProto = true; + } + + private void maybeInitBuilder() { + if (viaProto || builder == null) { + builder = GetQueueUserAclsInfoResponseProto.newBuilder(proto); + } + viaProto = false; + } + + //Once this is called. containerList will never be null - untill a getProto is called. + private void initLocalQueueUserAclsList() { + if (this.queueUserAclsInfoList != null) { + return; + } + GetQueueUserAclsInfoResponseProtoOrBuilder p = viaProto ? proto : builder; + List list = p.getQueueUserAclsList(); + queueUserAclsInfoList = new ArrayList(); + + for (QueueUserACLInfoProto a : list) { + queueUserAclsInfoList.add(convertFromProtoFormat(a)); + } + } + + private void addLocalQueueUserACLInfosToProto() { + maybeInitBuilder(); + builder.clearQueueUserAcls(); + if (queueUserAclsInfoList == null) + return; + Iterable iterable = new Iterable() { + @Override + public Iterator iterator() { + return new Iterator() { + + Iterator iter = queueUserAclsInfoList.iterator(); + + @Override + public boolean hasNext() { + return iter.hasNext(); + } + + @Override + public QueueUserACLInfoProto next() { + return convertToProtoFormat(iter.next()); + } + + @Override + public void remove() { + throw new UnsupportedOperationException(); + + } + }; + + } + }; + builder.addAllQueueUserAcls(iterable); + } + + private QueueUserACLInfoPBImpl convertFromProtoFormat(QueueUserACLInfoProto p) { + return new QueueUserACLInfoPBImpl(p); + } + + private QueueUserACLInfoProto convertToProtoFormat(QueueUserACLInfo t) { + return ((QueueUserACLInfoPBImpl)t).getProto(); + } + +} Added: hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/QueueACL.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/QueueACL.java?rev=1096670&view=auto ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/QueueACL.java (added) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/QueueACL.java Tue Apr 26 06:26:43 2011 @@ -0,0 +1,7 @@ +package org.apache.hadoop.yarn.api.records; + +public enum QueueACL { + SUBMIT_JOB, + ADMINISTER_QUEUE_JOBS, // currently unused + ADMINISTER_QUEUE; // currently unused +} \ No newline at end of file Added: hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/QueueUserACLInfo.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/QueueUserACLInfo.java?rev=1096670&view=auto ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/QueueUserACLInfo.java (added) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/QueueUserACLInfo.java Tue Apr 26 06:26:43 2011 @@ -0,0 +1,11 @@ +package org.apache.hadoop.yarn.api.records; + +import java.util.List; + +public interface QueueUserACLInfo { + String getQueueName(); + void setQueueName(String queueName); + + List getUserAcls(); + void setUserAcls(List acls); +} Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/QueueInfoPBImpl.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/QueueInfoPBImpl.java?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/QueueInfoPBImpl.java (original) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/QueueInfoPBImpl.java Tue Apr 26 06:26:43 2011 @@ -9,7 +9,6 @@ import org.apache.hadoop.yarn.api.record import org.apache.hadoop.yarn.api.records.QueueInfo; import org.apache.hadoop.yarn.api.records.QueueState; import org.apache.hadoop.yarn.proto.YarnProtos.ApplicationProto; -import org.apache.hadoop.yarn.proto.YarnProtos.LocalResourceProtoOrBuilder; import org.apache.hadoop.yarn.proto.YarnProtos.QueueInfoProto; import org.apache.hadoop.yarn.proto.YarnProtos.QueueInfoProtoOrBuilder; import org.apache.hadoop.yarn.proto.YarnProtos.QueueStateProto; Added: hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/QueueUserACLInfoPBImpl.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/QueueUserACLInfoPBImpl.java?rev=1096670&view=auto ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/QueueUserACLInfoPBImpl.java (added) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/QueueUserACLInfoPBImpl.java Tue Apr 26 06:26:43 2011 @@ -0,0 +1,146 @@ +package org.apache.hadoop.yarn.api.records.impl.pb; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.apache.hadoop.yarn.api.records.QueueACL; +import org.apache.hadoop.yarn.api.records.ProtoBase; +import org.apache.hadoop.yarn.api.records.QueueUserACLInfo; +import org.apache.hadoop.yarn.proto.YarnProtos.QueueACLProto; +import org.apache.hadoop.yarn.proto.YarnProtos.QueueUserACLInfoProto; +import org.apache.hadoop.yarn.proto.YarnProtos.QueueUserACLInfoProtoOrBuilder; +import org.apache.hadoop.yarn.util.ProtoUtils; + +public class QueueUserACLInfoPBImpl extends ProtoBase +implements QueueUserACLInfo { + + QueueUserACLInfoProto proto = QueueUserACLInfoProto.getDefaultInstance(); + QueueUserACLInfoProto.Builder builder = null; + boolean viaProto = false; + + List userAclsList; + + public QueueUserACLInfoPBImpl() { + builder = QueueUserACLInfoProto.newBuilder(); + } + + public QueueUserACLInfoPBImpl(QueueUserACLInfoProto proto) { + this.proto = proto; + viaProto = true; + } + + @Override + public String getQueueName() { + QueueUserACLInfoProtoOrBuilder p = viaProto ? proto : builder; + return (p.hasQueueName()) ? p.getQueueName() : null; + } + + @Override + public List getUserAcls() { + initLocalQueueUserAclsList(); + return this.userAclsList; + } + + @Override + public void setQueueName(String queueName) { + maybeInitBuilder(); + if (queueName == null) { + builder.clearQueueName(); + } + builder.setQueueName(queueName); + } + + @Override + public void setUserAcls(List userAclsList) { + if (userAclsList == null) { + builder.clearUserAcls(); + } + this.userAclsList = userAclsList; + } + + @Override + public QueueUserACLInfoProto getProto() { + mergeLocalToProto(); + proto = viaProto ? proto : builder.build(); + viaProto = true; + return proto; + } + + private void initLocalQueueUserAclsList() { + if (this.userAclsList != null) { + return; + } + QueueUserACLInfoProtoOrBuilder p = viaProto ? proto : builder; + List list = p.getUserAclsList(); + userAclsList = new ArrayList(); + + for (QueueACLProto a : list) { + userAclsList.add(convertFromProtoFormat(a)); + } + } + + private void addQueueACLsToProto() { + maybeInitBuilder(); + builder.clearUserAcls(); + if (userAclsList == null) + return; + Iterable iterable = new Iterable() { + @Override + public Iterator iterator() { + return new Iterator() { + + Iterator iter = userAclsList.iterator(); + + @Override + public boolean hasNext() { + return iter.hasNext(); + } + + @Override + public QueueACLProto next() { + return convertToProtoFormat(iter.next()); + } + + @Override + public void remove() { + throw new UnsupportedOperationException(); + + } + }; + + } + }; + builder.addAllUserAcls(iterable); + } + + private void maybeInitBuilder() { + if (viaProto || builder == null) { + builder = QueueUserACLInfoProto.newBuilder(proto); + } + viaProto = false; + } + + private void mergeLocalToBuilder() { + if (this.userAclsList != null) { + addQueueACLsToProto(); + } + } + + private void mergeLocalToProto() { + if (viaProto) + maybeInitBuilder(); + mergeLocalToBuilder(); + proto = builder.build(); + viaProto = true; + } + + private QueueACL convertFromProtoFormat(QueueACLProto q) { + return ProtoUtils.convertFromProtoFormat(q); + } + + private QueueACLProto convertToProtoFormat(QueueACL queueAcl) { + return ProtoUtils.convertToProtoFormat(queueAcl); + } + +} Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/util/ProtoUtils.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/util/ProtoUtils.java?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/util/ProtoUtils.java (original) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/java/org/apache/hadoop/yarn/util/ProtoUtils.java Tue Apr 26 06:26:43 2011 @@ -6,12 +6,14 @@ import org.apache.hadoop.yarn.api.record import org.apache.hadoop.yarn.api.records.ContainerState; import org.apache.hadoop.yarn.api.records.LocalResourceType; import org.apache.hadoop.yarn.api.records.LocalResourceVisibility; +import org.apache.hadoop.yarn.api.records.QueueACL; import org.apache.hadoop.yarn.api.records.QueueState; import org.apache.hadoop.yarn.api.records.YarnContainerTags; import org.apache.hadoop.yarn.proto.YarnProtos.ApplicationStateProto; import org.apache.hadoop.yarn.proto.YarnProtos.ContainerStateProto; import org.apache.hadoop.yarn.proto.YarnProtos.LocalResourceTypeProto; import org.apache.hadoop.yarn.proto.YarnProtos.LocalResourceVisibilityProto; +import org.apache.hadoop.yarn.proto.YarnProtos.QueueACLProto; import org.apache.hadoop.yarn.proto.YarnProtos.QueueStateProto; import org.apache.hadoop.yarn.proto.YarnProtos.YarnContainerTagsProto; @@ -101,5 +103,16 @@ public class ProtoUtils { public static QueueState convertFromProtoFormat(QueueStateProto e) { return QueueState.valueOf(e.name().replace(QUEUE_STATE_PREFIX, "")); } + + /* + * QueueACL + */ + private static String QUEUE_ACL_PREFIX = "Q_"; + public static QueueACLProto convertToProtoFormat(QueueACL e) { + return QueueACLProto.valueOf(QUEUE_ACL_PREFIX + e.name()); + } + public static QueueACL convertFromProtoFormat(QueueACLProto e) { + return QueueACL.valueOf(e.name().replace(QUEUE_ACL_PREFIX, "")); + } } Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/proto/client_RM_protocol.proto URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/proto/client_RM_protocol.proto?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/proto/client_RM_protocol.proto (original) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/proto/client_RM_protocol.proto Tue Apr 26 06:26:43 2011 @@ -5,11 +5,6 @@ option java_generate_equals_and_hash = t import "yarn_service_protos.proto"; - - - - - service ClientRMProtocolService { rpc getNewApplicationId (GetNewApplicationIdRequestProto) returns (GetNewApplicationIdResponseProto); rpc getApplicationMaster (GetApplicationMasterRequestProto) returns (GetApplicationMasterResponseProto); @@ -19,5 +14,6 @@ service ClientRMProtocolService { rpc getAllApplications (GetAllApplicationsRequestProto) returns (GetAllApplicationsResponseProto); rpc getClusterNodes (GetClusterNodesRequestProto) returns (GetClusterNodesResponseProto); rpc getQueueInfo (GetQueueInfoRequestProto) returns (GetQueueInfoResponseProto); + rpc getQueueUserAcls (GetQueueUserAclsInfoRequestProto) returns (GetQueueUserAclsInfoResponseProto); } Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/proto/yarn_protos.proto URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/proto/yarn_protos.proto?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/proto/yarn_protos.proto (original) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/proto/yarn_protos.proto Tue Apr 26 06:26:43 2011 @@ -179,6 +179,16 @@ message QueueInfoProto { repeated ApplicationProto applications = 7; } +enum QueueACLProto { + Q_SUBMIT_JOB = 1; + Q_ADMINISTER_QUEUE_JOBS = 2; + Q_ADMINISTER_QUEUE = 3; +} + +message QueueUserACLInfoProto { + optional string queueName = 1; + repeated QueueACLProto userAcls = 2; +} //////////////////////////////////////////////////////////////////////// ////// From container_manager ////////////////////////////////////////// Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/proto/yarn_service_protos.proto URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/proto/yarn_service_protos.proto?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/proto/yarn_service_protos.proto (original) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-api/src/main/proto/yarn_service_protos.proto Tue Apr 26 06:26:43 2011 @@ -99,6 +99,13 @@ message GetQueueInfoResponseProto { optional QueueInfoProto queueInfo = 1; } +message GetQueueUserAclsInfoRequestProto { +} + +message GetQueueUserAclsInfoResponseProto { + repeated QueueUserACLInfoProto queueUserAcls = 1; +} + ////////////////////////////////////////////////////// /////// client_NM_Protocol /////////////////////////// ////////////////////////////////////////////////////// Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/api/impl/pb/client/ClientRMProtocolPBClientImpl.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/api/impl/pb/client/ClientRMProtocolPBClientImpl.java?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/api/impl/pb/client/ClientRMProtocolPBClientImpl.java (original) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/api/impl/pb/client/ClientRMProtocolPBClientImpl.java Tue Apr 26 06:26:43 2011 @@ -21,6 +21,8 @@ import org.apache.hadoop.yarn.api.protoc import org.apache.hadoop.yarn.api.protocolrecords.GetNewApplicationIdResponse; import org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoRequest; import org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoRequest; +import org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoResponse; import org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationRequest; import org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationResponse; import org.apache.hadoop.yarn.api.protocolrecords.impl.pb.FinishApplicationRequestPBImpl; @@ -37,6 +39,8 @@ import org.apache.hadoop.yarn.api.protoc import org.apache.hadoop.yarn.api.protocolrecords.impl.pb.GetNewApplicationIdResponsePBImpl; import org.apache.hadoop.yarn.api.protocolrecords.impl.pb.GetQueueInfoRequestPBImpl; import org.apache.hadoop.yarn.api.protocolrecords.impl.pb.GetQueueInfoResponsePBImpl; +import org.apache.hadoop.yarn.api.protocolrecords.impl.pb.GetQueueUserAclsInfoRequestPBImpl; +import org.apache.hadoop.yarn.api.protocolrecords.impl.pb.GetQueueUserAclsInfoResponsePBImpl; import org.apache.hadoop.yarn.api.protocolrecords.impl.pb.SubmitApplicationRequestPBImpl; import org.apache.hadoop.yarn.api.protocolrecords.impl.pb.SubmitApplicationResponsePBImpl; import org.apache.hadoop.yarn.exceptions.YarnRemoteException; @@ -48,6 +52,7 @@ import org.apache.hadoop.yarn.proto.Yarn import org.apache.hadoop.yarn.proto.YarnServiceProtos.GetClusterMetricsRequestProto; import org.apache.hadoop.yarn.proto.YarnServiceProtos.GetClusterNodesRequestProto; import org.apache.hadoop.yarn.proto.YarnServiceProtos.GetNewApplicationIdRequestProto; +import org.apache.hadoop.yarn.proto.YarnServiceProtos.GetQueueUserAclsInfoRequestProto; import org.apache.hadoop.yarn.proto.YarnServiceProtos.SubmitApplicationRequestProto; import org.apache.hadoop.yarn.proto.YarnServiceProtos.GetQueueInfoRequestProto; import org.apache.hadoop.yarn.proto.YarnServiceProtos.GetQueueInfoResponseProto; @@ -206,4 +211,23 @@ public class ClientRMProtocolPBClientImp } } + @Override + public GetQueueUserAclsInfoResponse getQueueUserAcls( + GetQueueUserAclsInfoRequest request) throws YarnRemoteException { + GetQueueUserAclsInfoRequestProto requestProto = + ((GetQueueUserAclsInfoRequestPBImpl)request).getProto(); + try { + return new GetQueueUserAclsInfoResponsePBImpl( + proxy.getQueueUserAcls(null, requestProto)); + } catch (ServiceException e) { + if (e.getCause() instanceof YarnRemoteException) { + throw (YarnRemoteException)e.getCause(); + } else if (e.getCause() instanceof UndeclaredThrowableException) { + throw (UndeclaredThrowableException)e.getCause(); + } else { + throw new UndeclaredThrowableException(e); + } + } + } + } Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/api/impl/pb/service/ClientRMProtocolPBServiceImpl.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/api/impl/pb/service/ClientRMProtocolPBServiceImpl.java?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/api/impl/pb/service/ClientRMProtocolPBServiceImpl.java (original) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-common/src/main/java/org/apache/hadoop/yarn/api/impl/pb/service/ClientRMProtocolPBServiceImpl.java Tue Apr 26 06:26:43 2011 @@ -8,6 +8,7 @@ import org.apache.hadoop.yarn.api.protoc import org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodesResponse; import org.apache.hadoop.yarn.api.protocolrecords.GetNewApplicationIdResponse; import org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoResponse; import org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationResponse; import org.apache.hadoop.yarn.api.protocolrecords.impl.pb.FinishApplicationRequestPBImpl; import org.apache.hadoop.yarn.api.protocolrecords.impl.pb.FinishApplicationResponsePBImpl; @@ -23,6 +24,8 @@ import org.apache.hadoop.yarn.api.protoc import org.apache.hadoop.yarn.api.protocolrecords.impl.pb.GetNewApplicationIdResponsePBImpl; import org.apache.hadoop.yarn.api.protocolrecords.impl.pb.GetQueueInfoRequestPBImpl; import org.apache.hadoop.yarn.api.protocolrecords.impl.pb.GetQueueInfoResponsePBImpl; +import org.apache.hadoop.yarn.api.protocolrecords.impl.pb.GetQueueUserAclsInfoRequestPBImpl; +import org.apache.hadoop.yarn.api.protocolrecords.impl.pb.GetQueueUserAclsInfoResponsePBImpl; import org.apache.hadoop.yarn.api.protocolrecords.impl.pb.SubmitApplicationRequestPBImpl; import org.apache.hadoop.yarn.api.protocolrecords.impl.pb.SubmitApplicationResponsePBImpl; import org.apache.hadoop.yarn.exceptions.YarnRemoteException; @@ -41,6 +44,8 @@ import org.apache.hadoop.yarn.proto.Yarn import org.apache.hadoop.yarn.proto.YarnServiceProtos.GetNewApplicationIdResponseProto; import org.apache.hadoop.yarn.proto.YarnServiceProtos.GetQueueInfoRequestProto; import org.apache.hadoop.yarn.proto.YarnServiceProtos.GetQueueInfoResponseProto; +import org.apache.hadoop.yarn.proto.YarnServiceProtos.GetQueueUserAclsInfoRequestProto; +import org.apache.hadoop.yarn.proto.YarnServiceProtos.GetQueueUserAclsInfoResponseProto; import org.apache.hadoop.yarn.proto.YarnServiceProtos.SubmitApplicationRequestProto; import org.apache.hadoop.yarn.proto.YarnServiceProtos.SubmitApplicationResponseProto; @@ -157,4 +162,18 @@ public class ClientRMProtocolPBServiceIm } } + @Override + public GetQueueUserAclsInfoResponseProto getQueueUserAcls( + RpcController controller, GetQueueUserAclsInfoRequestProto proto) + throws ServiceException { + GetQueueUserAclsInfoRequestPBImpl request = + new GetQueueUserAclsInfoRequestPBImpl(proto); + try { + GetQueueUserAclsInfoResponse response = real.getQueueUserAcls(request); + return ((GetQueueUserAclsInfoResponsePBImpl)response).getProto(); + } catch (YarnRemoteException e) { + throw new ServiceException(e); + } + } + } Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ClientRMService.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ClientRMService.java?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ClientRMService.java (original) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ClientRMService.java Tue Apr 26 06:26:43 2011 @@ -45,6 +45,8 @@ import org.apache.hadoop.yarn.api.protoc import org.apache.hadoop.yarn.api.protocolrecords.GetNewApplicationIdResponse; import org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoRequest; import org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoRequest; +import org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoResponse; import org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationRequest; import org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationResponse; import org.apache.hadoop.yarn.api.records.ApplicationId; @@ -218,6 +220,15 @@ public class ClientRMService extends Abs } @Override + public GetQueueUserAclsInfoResponse getQueueUserAcls( + GetQueueUserAclsInfoRequest request) throws YarnRemoteException { + GetQueueUserAclsInfoResponse response = + recordFactory.newRecordInstance(GetQueueUserAclsInfoResponse.class); + response.setUserAclsInfoList(scheduler.getQueueUserAclInfo()); + return response; + } + + @Override public void stop() { if (this.server != null) { this.server.close(); Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/Queue.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/Queue.java?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/Queue.java (original) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/Queue.java Tue Apr 26 06:26:43 2011 @@ -18,9 +18,16 @@ package org.apache.hadoop.yarn.server.resourcemanager.scheduler; +import java.util.List; +import java.util.Map; + import org.apache.hadoop.classification.InterfaceAudience.LimitedPrivate; import org.apache.hadoop.classification.InterfaceStability.Evolving; +import org.apache.hadoop.security.UserGroupInformation; +import org.apache.hadoop.security.authorize.AccessControlList; +import org.apache.hadoop.yarn.api.records.QueueACL; import org.apache.hadoop.yarn.api.records.QueueInfo; +import org.apache.hadoop.yarn.api.records.QueueUserACLInfo; @Evolving @LimitedPrivate("yarn") @@ -31,7 +38,12 @@ public interface Queue { */ String getQueueName(); - + /** + * Get ACLs for the queue. + * @return ACLs for the queue + */ + public Map getQueueAcls(); + /** * Get queue information * @param includeApplications include applications? @@ -41,4 +53,11 @@ public interface Queue { */ QueueInfo getQueueInfo(boolean includeApplications, boolean includeChildQueues, boolean recursive); + + /** + * Get queue ACLs for given user. + * @param user username + * @return queue ACLs for user + */ + List getQueueUserAclInfo(UserGroupInformation user); } Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/YarnScheduler.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/YarnScheduler.java?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/YarnScheduler.java (original) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/YarnScheduler.java Tue Apr 26 06:26:43 2011 @@ -26,6 +26,7 @@ import org.apache.hadoop.yarn.api.record import org.apache.hadoop.yarn.api.records.Container; import org.apache.hadoop.yarn.api.records.Priority; import org.apache.hadoop.yarn.api.records.QueueInfo; +import org.apache.hadoop.yarn.api.records.QueueUserACLInfo; import org.apache.hadoop.yarn.api.records.ResourceRequest; /** @@ -78,4 +79,10 @@ public interface YarnScheduler { boolean includeChildQueues, boolean recursive) throws IOException; + /** + * Get acls for queues for current user. + * @return acls for queues for current user + * @throws IOException + */ + public List getQueueUserAclInfo(); } Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java (original) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java Tue Apr 26 06:26:43 2011 @@ -20,6 +20,7 @@ package org.apache.hadoop.yarn.server.re import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; @@ -34,10 +35,12 @@ import org.apache.hadoop.classification. import org.apache.hadoop.classification.InterfaceStability.Evolving; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.security.AccessControlException; +import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.yarn.api.records.ApplicationId; import org.apache.hadoop.yarn.api.records.Container; import org.apache.hadoop.yarn.api.records.Priority; import org.apache.hadoop.yarn.api.records.QueueInfo; +import org.apache.hadoop.yarn.api.records.QueueUserACLInfo; import org.apache.hadoop.yarn.api.records.Resource; import org.apache.hadoop.yarn.api.records.ResourceRequest; import org.apache.hadoop.yarn.factory.providers.RecordFactoryProvider; @@ -320,6 +323,19 @@ implements ResourceScheduler, CapacitySc return queue.getQueueInfo(includeApplications, includeChildQueues, recursive); } + @Override + public List getQueueUserAclInfo() { + UserGroupInformation user = null; + try { + user = UserGroupInformation.getCurrentUser(); + } catch (IOException ioe) { + // should never happen + return new ArrayList(); + } + + return root.getQueueUserAclInfo(user); + } + private void normalizeRequests(List asks) { for (ResourceRequest ask : asks) { normalizeRequest(ask); Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacitySchedulerConfiguration.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacitySchedulerConfiguration.java?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacitySchedulerConfiguration.java (original) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacitySchedulerConfiguration.java Tue Apr 26 06:26:43 2011 @@ -18,11 +18,16 @@ package org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity; +import java.util.HashMap; +import java.util.Map; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.classification.InterfaceAudience.Private; import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.security.authorize.AccessControlList; import org.apache.hadoop.util.StringUtils; +import org.apache.hadoop.yarn.api.records.QueueACL; import org.apache.hadoop.yarn.api.records.QueueState; import org.apache.hadoop.yarn.api.records.Resource; @@ -85,6 +90,9 @@ public class CapacitySchedulerConfigurat @Private public static float DEFAULT_USER_LIMIT_FACTOR = 1.0f; + @Private + public static String DEFAULT_ACL = "*"; + public CapacitySchedulerConfiguration() { this(new Configuration()); } @@ -116,6 +124,12 @@ public class CapacitySchedulerConfigurat return capacity; } + public void setCapacity(String queue, int capacity) { + setInt(getQueuePrefix(queue) + CAPACITY, capacity); + LOG.info("CSConf - setCapacity: queuePrefix=" + getQueuePrefix(queue) + + ", capacity=" + capacity); + } + public int getMaximumCapacity(String queue) { int maxCapacity = getInt(getQueuePrefix(queue) + MAXIMUM_CAPACITY, UNDEFINED); @@ -141,15 +155,26 @@ public class CapacitySchedulerConfigurat public QueueState getState(String queue) { String state = get(getQueuePrefix(queue) + STATE); - return (state != null) ? QueueState.valueOf(state.toUpperCase()) : QueueState.RUNNING; + return (state != null) ? + QueueState.valueOf(state.toUpperCase()) : QueueState.RUNNING; } - - public void setCapacity(String queue, int capacity) { - setInt(getQueuePrefix(queue) + CAPACITY, capacity); - LOG.info("CSConf - setCapacity: queuePrefix=" + getQueuePrefix(queue) + - ", capacity=" + capacity); + + private static String getAclKey(QueueACL acl) { + return "acl_" + acl.toString().toLowerCase(); } + public Map getAcls(String queue) { + Map acls = + new HashMap(); + String queuePrefix = getQueuePrefix(queue); + for (QueueACL acl : QueueACL.values()) { + acls.put(acl, + new AccessControlList(get(queuePrefix + getAclKey(acl), + DEFAULT_ACL))); + } + return acls; + } + public String[] getQueues(String queue) { LOG.info("CSConf - getQueues called for: queuePrefix=" + getQueuePrefix(queue)); String[] queues = getStrings(getQueuePrefix(queue) + QUEUES); Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java (original) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java Tue Apr 26 06:26:43 2011 @@ -21,6 +21,7 @@ package org.apache.hadoop.yarn.server.re import java.io.IOException; import java.nio.ByteBuffer; import java.util.ArrayList; +import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; @@ -34,12 +35,15 @@ import org.apache.hadoop.classification. import org.apache.hadoop.classification.InterfaceStability.Unstable; import org.apache.hadoop.security.AccessControlException; import org.apache.hadoop.security.UserGroupInformation; +import org.apache.hadoop.security.authorize.AccessControlList; import org.apache.hadoop.yarn.api.records.ApplicationId; import org.apache.hadoop.yarn.api.records.Container; import org.apache.hadoop.yarn.api.records.ContainerToken; import org.apache.hadoop.yarn.api.records.Priority; +import org.apache.hadoop.yarn.api.records.QueueACL; import org.apache.hadoop.yarn.api.records.QueueInfo; import org.apache.hadoop.yarn.api.records.QueueState; +import org.apache.hadoop.yarn.api.records.QueueUserACLInfo; import org.apache.hadoop.yarn.api.records.Resource; import org.apache.hadoop.yarn.api.records.ResourceRequest; import org.apache.hadoop.yarn.factories.RecordFactory; @@ -87,7 +91,10 @@ public class LeafQueue implements Queue applicationInfos; private QueueState state; - + + private Map acls = + new HashMap(); + private final RecordFactory recordFactory = RecordFactoryProvider.getRecordFactory(null); @@ -128,11 +135,14 @@ public class LeafQueue implements Queue QueueState state = cs.getConfiguration().getState(getQueuePath()); + Map acls = + cs.getConfiguration().getAcls(getQueuePath()); + setupQueueConfigs(capacity, absoluteCapacity, maximumCapacity, absoluteMaxCapacity, userLimit, userLimitFactor, maxApplications, maxApplicationsPerUser, - state); + state, acls); LOG.info("DEBUG --- LeafQueue:" + " name=" + queueName + @@ -146,7 +156,7 @@ public class LeafQueue implements Queue float maxCapacity, float absoluteMaxCapacity, int userLimit, float userLimitFactor, int maxApplications, int maxApplicationsPerUser, - QueueState state) + QueueState state, Map acls) { this.capacity = capacity; this.absoluteCapacity = parent.getAbsoluteCapacity() * capacity; @@ -162,10 +172,17 @@ public class LeafQueue implements Queue this.state = state; + this.acls = acls; + this.queueInfo.setCapacity(capacity); this.queueInfo.setMaximumCapacity(maximumCapacity); this.queueInfo.setQueueState(state); + StringBuilder aclsString = new StringBuilder(); + for (Map.Entry e : acls.entrySet()) { + aclsString.append(e.getKey() + ":" + e.getValue().getAclString()); + } + LOG.info(queueName + ", capacity=" + capacity + ", asboluteCapacity=" + absoluteCapacity + @@ -174,9 +191,9 @@ public class LeafQueue implements Queue ", userLimit=" + userLimit + ", userLimitFactor=" + userLimitFactor + ", maxApplications=" + maxApplications + ", maxApplicationsPerUser=" + maxApplicationsPerUser + - ", state=" + state); + ", state=" + state + + ", acls=" + aclsString); } - @Override public float getCapacity() { @@ -260,6 +277,11 @@ public class LeafQueue implements Queue } @Override + public synchronized Map getQueueAcls() { + return new HashMap(acls); + } + + @Override public synchronized QueueInfo getQueueInfo(boolean includeApplications, boolean includeChildQueues, boolean recursive) { queueInfo.setCurrentCapacity(usedCapacity); @@ -276,6 +298,26 @@ public class LeafQueue implements Queue return queueInfo; } + @Override + public synchronized List + getQueueUserAclInfo(UserGroupInformation user) { + QueueUserACLInfo userAclInfo = + recordFactory.newRecordInstance(QueueUserACLInfo.class); + List operations = new ArrayList(); + for (Map.Entry e : acls.entrySet()) { + QueueACL operation = e.getKey(); + AccessControlList acl = e.getValue(); + + if (acl.isUserAllowed(user)) { + operations.add(operation); + } + } + + userAclInfo.setQueueName(getQueueName()); + userAclInfo.setUserAcls(operations); + return Collections.singletonList(userAclInfo); + } + public String toString() { return queueName + ":" + capacity + ":" + absoluteCapacity + ":" + getUsedCapacity() + ":" + getUtilization() + ":" + @@ -306,20 +348,46 @@ public class LeafQueue implements Queue leafQueue.maximumCapacity, leafQueue.absoluteMaxCapacity, leafQueue.userLimit, leafQueue.userLimitFactor, leafQueue.maxApplications, leafQueue.maxApplicationsPerUser, - leafQueue.state); + leafQueue.state, leafQueue.acls); update(clusterResource); } @Override + public boolean hasAccess(QueueACL acl, UserGroupInformation user) { + // Check if the leaf-queue allows access + synchronized (this) { + if (acls.get(acl).isUserAllowed(user)) { + return true; + } + } + + // Check if parent-queue allows access + return parent.hasAccess(acl, user); + } + + @Override public void submitApplication(Application application, String userName, String queue, Priority priority) throws AccessControlException { // Careful! Locking order is important! - User user = null; + // Check queue ACLs + UserGroupInformation userUgi; + try { + userUgi = UserGroupInformation.getCurrentUser(); + } catch (IOException ioe) { + throw new AccessControlException(ioe); + } + if (!hasAccess(QueueACL.SUBMIT_JOB, userUgi)) { + throw new AccessControlException("User " + userName + " cannot submit" + + " jobs to queue " + getQueuePath()); + } + + User user = null; synchronized (this) { + // Check if the queue is accepting jobs if (state != QueueState.RUNNING) { throw new AccessControlException("Queue " + getQueuePath() + " is STOPPED. Cannot accept submission of application: " + Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/ParentQueue.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/ParentQueue.java?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/ParentQueue.java (original) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/ParentQueue.java Tue Apr 26 06:26:43 2011 @@ -34,18 +34,21 @@ import org.apache.commons.logging.LogFac import org.apache.hadoop.classification.InterfaceAudience.Private; import org.apache.hadoop.classification.InterfaceStability.Evolving; import org.apache.hadoop.security.AccessControlException; +import org.apache.hadoop.security.UserGroupInformation; +import org.apache.hadoop.security.authorize.AccessControlList; import org.apache.hadoop.yarn.api.records.ApplicationId; import org.apache.hadoop.yarn.api.records.Container; import org.apache.hadoop.yarn.api.records.Priority; +import org.apache.hadoop.yarn.api.records.QueueACL; import org.apache.hadoop.yarn.api.records.QueueInfo; import org.apache.hadoop.yarn.api.records.QueueState; +import org.apache.hadoop.yarn.api.records.QueueUserACLInfo; import org.apache.hadoop.yarn.api.records.Resource; import org.apache.hadoop.yarn.factories.RecordFactory; import org.apache.hadoop.yarn.factory.providers.RecordFactoryProvider; import org.apache.hadoop.yarn.server.resourcemanager.resourcetracker.NodeInfo; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.Application; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.NodeManager; -import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.LeafQueue.User; @Private @Evolving @@ -83,6 +86,9 @@ public class ParentQueue implements Queu private Map applicationInfos; + private Map acls = + new HashMap(); + private final RecordFactory recordFactory = RecordFactoryProvider.getRecordFactory(null); @@ -108,13 +114,16 @@ public class ParentQueue implements Queu Float.MAX_VALUE : (parentAbsoluteCapacity * maximumCapacity) / 100; QueueState state = cs.getConfiguration().getState(getQueuePath()); + + Map acls = + cs.getConfiguration().getAcls(getQueuePath()); this.queueInfo = recordFactory.newRecordInstance(QueueInfo.class); this.queueInfo.setQueueName(queueName); this.queueInfo.setChildQueues(new ArrayList()); setupQueueConfigs(capacity, absoluteCapacity, - maximumCapacity, absoluteMaxCapacity, state); + maximumCapacity, absoluteMaxCapacity, state, acls); this.queueComparator = comparator; this.childQueues = new TreeSet(comparator); @@ -132,7 +141,7 @@ public class ParentQueue implements Queu private synchronized void setupQueueConfigs( float capacity, float absoluteCapacity, float maximumCapacity, float absoluteMaxCapacity, - QueueState state + QueueState state, Map acls ) { this.capacity = capacity; this.absoluteCapacity = absoluteCapacity; @@ -140,17 +149,25 @@ public class ParentQueue implements Queu this.absoluteMaxCapacity = absoluteMaxCapacity; this.state = state; + + this.acls = acls; this.queueInfo.setCapacity(capacity); this.queueInfo.setMaximumCapacity(maximumCapacity); this.queueInfo.setQueueState(state); + StringBuilder aclsString = new StringBuilder(); + for (Map.Entry e : acls.entrySet()) { + aclsString.append(e.getKey() + ":" + e.getValue().getAclString()); + } + LOG.info(queueName + ", capacity=" + capacity + ", asboluteCapacity=" + absoluteCapacity + ", maxCapacity=" + maximumCapacity + ", asboluteMaxCapacity=" + absoluteMaxCapacity + - ", state=" + state); + ", state=" + state + + ", acls=" + aclsString); } private static float PRECISION = 0.005f; // 0.05% precision @@ -250,6 +267,11 @@ public class ParentQueue implements Queu } @Override + public Map getQueueAcls() { + return new HashMap(acls); + } + + @Override public synchronized QueueInfo getQueueInfo(boolean includeApplications, boolean includeChildQueues, boolean recursive) { queueInfo.setCurrentCapacity(usedCapacity); @@ -274,7 +296,41 @@ public class ParentQueue implements Queu queueInfo.setChildQueues(childQueuesInfo); return queueInfo; -} + } + + private synchronized QueueUserACLInfo getUserAclInfo( + UserGroupInformation user) { + QueueUserACLInfo userAclInfo = + recordFactory.newRecordInstance(QueueUserACLInfo.class); + List operations = new ArrayList(); + for (Map.Entry e : acls.entrySet()) { + QueueACL operation = e.getKey(); + AccessControlList acl = e.getValue(); + + if (acl.isUserAllowed(user)) { + operations.add(operation); + } + } + + userAclInfo.setQueueName(getQueueName()); + userAclInfo.setUserAcls(operations); + return userAclInfo; + } + + @Override + public synchronized List getQueueUserAclInfo( + UserGroupInformation user) { + List userAcls = new ArrayList(); + + // Add parent queue acls + userAcls.add(getUserAclInfo(user)); + + // Add children queue acls + for (Queue child : childQueues) { + userAcls.addAll(child.getQueueUserAclInfo(user)); + } + return userAcls; + } public String toString() { return queueName + ":" + capacity + ":" + absoluteCapacity + ":" + @@ -320,7 +376,7 @@ public class ParentQueue implements Queu // Set new configs setupQueueConfigs(parentQueue.capacity, parentQueue.absoluteCapacity, parentQueue.maximumCapacity, parentQueue.absoluteMaxCapacity, - parentQueue.state); + parentQueue.state, parentQueue.acls); // Update update(clusterResource); @@ -335,6 +391,21 @@ public class ParentQueue implements Queu } @Override + public boolean hasAccess(QueueACL acl, UserGroupInformation user) { + synchronized (this) { + if (acls.get(acl).isUserAllowed(user)) { + return true; + } + } + + if (parent != null) { + return parent.hasAccess(acl, user); + } + + return false; + } + + @Override public void submitApplication(Application application, String user, String queue, Priority priority) throws AccessControlException { Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/Queue.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/Queue.java?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/Queue.java (original) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/Queue.java Tue Apr 26 06:26:43 2011 @@ -24,8 +24,10 @@ import java.util.List; import org.apache.hadoop.classification.InterfaceAudience.Private; import org.apache.hadoop.classification.InterfaceStability.Stable; import org.apache.hadoop.security.AccessControlException; +import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.yarn.api.records.Container; import org.apache.hadoop.yarn.api.records.Priority; +import org.apache.hadoop.yarn.api.records.QueueACL; import org.apache.hadoop.yarn.api.records.QueueState; import org.apache.hadoop.yarn.api.records.Resource; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.Application; @@ -128,6 +130,15 @@ extends org.apache.hadoop.yarn.server.re public List getApplications(); /** + * Check if the user has permission to perform the operation + * @param acl ACL + * @param user user + * @return true if the user has the permission, + * false otherwise + */ + public boolean hasAccess(QueueACL acl, UserGroupInformation user); + + /** * Submit a new application to the queue. * @param application application being submitted * @param user user who submitted the application Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fifo/FifoScheduler.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fifo/FifoScheduler.java?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fifo/FifoScheduler.java (original) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fifo/FifoScheduler.java Tue Apr 26 06:26:43 2011 @@ -22,6 +22,8 @@ import java.io.IOException; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; +import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -33,11 +35,14 @@ import org.apache.hadoop.classification. import org.apache.hadoop.classification.InterfaceStability.Evolving; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.security.UserGroupInformation; +import org.apache.hadoop.security.authorize.AccessControlList; import org.apache.hadoop.yarn.api.records.ApplicationId; import org.apache.hadoop.yarn.api.records.Container; import org.apache.hadoop.yarn.api.records.ContainerToken; import org.apache.hadoop.yarn.api.records.Priority; +import org.apache.hadoop.yarn.api.records.QueueACL; import org.apache.hadoop.yarn.api.records.QueueInfo; +import org.apache.hadoop.yarn.api.records.QueueUserACLInfo; import org.apache.hadoop.yarn.api.records.Resource; import org.apache.hadoop.yarn.api.records.ResourceRequest; import org.apache.hadoop.yarn.factories.RecordFactory; @@ -80,16 +85,18 @@ public class FifoScheduler implements Re new org.apache.hadoop.yarn.util.BuilderUtils.ApplicationIdComparator()); private final Queue DEFAULT_QUEUE = new Queue() { - QueueInfo queueInfo; + + private static final String DEFAULT_QUEUE_NAME = "default"; @Override public String getQueueName() { - return "default"; + return DEFAULT_QUEUE_NAME; } @Override public QueueInfo getQueueInfo(boolean includeApplications, boolean includeChildQueues, boolean recursive) { + QueueInfo queueInfo = recordFactory.newRecordInstance(QueueInfo.class); queueInfo.setQueueName(DEFAULT_QUEUE.getQueueName()); queueInfo.setCapacity(100.0f); queueInfo.setMaximumCapacity(100.0f); @@ -103,6 +110,26 @@ public class FifoScheduler implements Re } return queueInfo; } + + @Override + public Map getQueueAcls() { + Map acls = + new HashMap(); + for (QueueACL acl : QueueACL.values()) { + acls.put(acl, new AccessControlList("*")); + } + return acls; + } + + @Override + public List getQueueUserAclInfo( + UserGroupInformation unused) { + QueueUserACLInfo queueUserAclInfo = + recordFactory.newRecordInstance(QueueUserACLInfo.class); + queueUserAclInfo.setQueueName(DEFAULT_QUEUE_NAME); + queueUserAclInfo.setUserAcls(Arrays.asList(QueueACL.values())); + return Collections.singletonList(queueUserAclInfo); + } }; public FifoScheduler() {} @@ -484,11 +511,14 @@ public class FifoScheduler implements Re @Override public QueueInfo getQueueInfo(String queueName, boolean includeApplications, boolean includeChildQueues, boolean recursive) { - QueueInfo queueInfo = - DEFAULT_QUEUE.getQueueInfo(includeApplications, false, false); - return queueInfo; + return DEFAULT_QUEUE.getQueueInfo(includeApplications, false, false); } + @Override + public List getQueueUserAclInfo() { + return DEFAULT_QUEUE.getQueueUserAclInfo(null); + } + private synchronized List getApplications() { List applications = Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMLaunchFailure.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMLaunchFailure.java?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMLaunchFailure.java (original) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMLaunchFailure.java Tue Apr 26 06:26:43 2011 @@ -35,6 +35,7 @@ import org.apache.hadoop.yarn.api.record import org.apache.hadoop.yarn.api.records.Container; import org.apache.hadoop.yarn.api.records.Priority; import org.apache.hadoop.yarn.api.records.QueueInfo; +import org.apache.hadoop.yarn.api.records.QueueUserACLInfo; import org.apache.hadoop.yarn.api.records.ResourceRequest; import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.event.EventHandler; @@ -88,6 +89,11 @@ public class TestAMLaunchFailure extends boolean recursive) throws IOException { return null; } + + @Override + public List getQueueUserAclInfo() { + return null; + } } private class DummyApplicationTracker implements EventHandler> { Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMRMRPCResponseId.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMRMRPCResponseId.java?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMRMRPCResponseId.java (original) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMRMRPCResponseId.java Tue Apr 26 06:26:43 2011 @@ -34,6 +34,7 @@ import org.apache.hadoop.yarn.api.record import org.apache.hadoop.yarn.api.records.Container; import org.apache.hadoop.yarn.api.records.Priority; import org.apache.hadoop.yarn.api.records.QueueInfo; +import org.apache.hadoop.yarn.api.records.QueueUserACLInfo; import org.apache.hadoop.yarn.api.records.ResourceRequest; import org.apache.hadoop.yarn.factories.RecordFactory; import org.apache.hadoop.yarn.factory.providers.RecordFactoryProvider; @@ -98,6 +99,11 @@ public class TestAMRMRPCResponseId exten boolean recursive) throws IOException { return null; } + + @Override + public List getQueueUserAclInfo() { + return null; + } } @Before Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMRestart.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMRestart.java?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMRestart.java (original) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestAMRestart.java Tue Apr 26 06:26:43 2011 @@ -23,6 +23,7 @@ import org.apache.hadoop.yarn.api.record import org.apache.hadoop.yarn.api.records.ContainerToken; import org.apache.hadoop.yarn.api.records.Priority; import org.apache.hadoop.yarn.api.records.QueueInfo; +import org.apache.hadoop.yarn.api.records.QueueUserACLInfo; import org.apache.hadoop.yarn.api.records.Resource; import org.apache.hadoop.yarn.api.records.ResourceRequest; import org.apache.hadoop.yarn.conf.YarnConfiguration; @@ -196,6 +197,10 @@ public class TestAMRestart extends TestC boolean recursive) throws IOException { return null; } + @Override + public List getQueueUserAclInfo() { + return null; + } } @Before Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestSchedulerNegotiator.java URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestSchedulerNegotiator.java?rev=1096670&r1=1096669&r2=1096670&view=diff ============================================================================== --- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestSchedulerNegotiator.java (original) +++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/TestSchedulerNegotiator.java Tue Apr 26 06:26:43 2011 @@ -32,6 +32,7 @@ import org.apache.hadoop.yarn.api.record import org.apache.hadoop.yarn.api.records.ContainerId; import org.apache.hadoop.yarn.api.records.Priority; import org.apache.hadoop.yarn.api.records.QueueInfo; +import org.apache.hadoop.yarn.api.records.QueueUserACLInfo; import org.apache.hadoop.yarn.api.records.Resource; import org.apache.hadoop.yarn.api.records.ResourceRequest; import org.apache.hadoop.yarn.event.EventHandler; @@ -110,6 +111,10 @@ public class TestSchedulerNegotiator ext boolean recursive) throws IOException { return null; } + @Override + public List getQueueUserAclInfo() { + return null; + } } @Before