tags);
+
@Private
@Stable
public abstract void setAMRMToken(Token amRmToken);
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationSubmissionContext.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationSubmissionContext.java
index a320bb2..72eff3e 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationSubmissionContext.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationSubmissionContext.java
@@ -27,6 +27,8 @@
import org.apache.hadoop.yarn.api.ApplicationMasterProtocol;
import org.apache.hadoop.yarn.util.Records;
+import java.util.Set;
+
/**
* ApplicationSubmissionContext represents all of the
* information needed by the ResourceManager to launch
@@ -284,7 +286,6 @@ public static ApplicationSubmissionContext newInstance(
@Stable
public abstract void setApplicationType(String applicationType);
-
/**
* Get the flag which indicates whether to keep containers across application
* attempts or not.
@@ -314,4 +315,26 @@ public static ApplicationSubmissionContext newInstance(
@Stable
public abstract void setKeepContainersAcrossApplicationAttempts(
boolean keepContainers);
+
+ /*
+ * Get tags for the application
+ *
+ * @return the application type
+ */
+ @Public
+ @Stable
+ public abstract Set getApplicationTags();
+
+ /**
+ * Set tags for the application. A maximum of {@link org.apache.hadoop.yarn
+ * .conf.YarnConfiguration#APPLICATION_MAX_TAGS} are allowed
+ * per application. Each tag can be at most {@link org.apache.hadoop.yarn
+ * .conf.YarnConfiguration#APPLICATION_MAX_TAG_LENGTH}
+ * characters, and can contain only ASCII characters.
+ *
+ * @param tags tags to set
+ */
+ @Public
+ @Stable
+ public abstract void setApplicationTags(Set tags);
}
\ No newline at end of file
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java
index 919ed90..135e305 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java
@@ -25,6 +25,7 @@
import org.apache.hadoop.classification.InterfaceAudience.Private;
import org.apache.hadoop.classification.InterfaceAudience.Public;
+import org.apache.hadoop.classification.InterfaceStability;
import org.apache.hadoop.classification.InterfaceStability.Evolving;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
@@ -46,6 +47,12 @@
@Private
public static final String CORE_SITE_CONFIGURATION_FILE = "core-site.xml";
+ @Evolving
+ public static final int APPLICATION_MAX_TAGS = 10;
+
+ @Evolving
+ public static final int APPLICATION_MAX_TAG_LENGTH = 100;
+
private static final String YARN_DEFAULT_XML_FILE = "yarn-default.xml";
static {
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto
index c86d971..8f6cf4c 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto
@@ -190,6 +190,7 @@ message ApplicationReportProto {
optional float progress = 17;
optional string applicationType = 18;
optional hadoop.common.TokenProto am_rm_token = 19;
+ repeated string applicationTags = 20;
}
message ApplicationAttemptReportProto {
@@ -287,6 +288,7 @@ message ApplicationSubmissionContextProto {
optional ResourceProto resource = 9;
optional string applicationType = 10 [default = "YARN"];
optional bool keep_containers_across_application_attempts = 11 [default = false];
+ repeated string applicationTags = 12;
}
enum ApplicationAccessTypeProto {
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_service_protos.proto hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_service_protos.proto
index 139b3bb..eff5cd7 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_service_protos.proto
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_service_protos.proto
@@ -136,6 +136,12 @@ message MoveApplicationAcrossQueuesRequestProto {
message MoveApplicationAcrossQueuesResponseProto {
}
+enum ApplicationsRequestScopeProto {
+ ALL = 0;
+ VIEWABLE = 1;
+ OWN = 2;
+}
+
message GetApplicationsRequestProto {
repeated string application_types = 1;
repeated YarnApplicationStateProto application_states = 2;
@@ -146,6 +152,8 @@ message GetApplicationsRequestProto {
optional int64 start_end = 7;
optional int64 finish_begin = 8;
optional int64 finish_end = 9;
+ repeated string applicationTags = 10;
+ optional ApplicationsRequestScopeProto scope = 11 [default = ALL];
}
message GetApplicationsResponseProto {
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/GetApplicationsRequestPBImpl.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/GetApplicationsRequestPBImpl.java
index 10513a3..733f19f 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/GetApplicationsRequestPBImpl.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/GetApplicationsRequestPBImpl.java
@@ -27,6 +27,7 @@
import org.apache.commons.lang.math.LongRange;
import org.apache.hadoop.classification.InterfaceAudience.Private;
import org.apache.hadoop.classification.InterfaceStability.Unstable;
+import org.apache.hadoop.yarn.api.protocolrecords.ApplicationsRequestScope;
import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsRequest;
import org.apache.hadoop.yarn.api.records.YarnApplicationState;
import org.apache.hadoop.yarn.api.records.impl.pb.ProtoUtils;
@@ -49,6 +50,8 @@
Set queues = null;
long limit = Long.MAX_VALUE;
LongRange start = null, finish = null;
+ private Set applicationTags;
+ private ApplicationsRequestScope scope;
public GetApplicationsRequestPBImpl() {
builder = GetApplicationsRequestProto.newBuilder();
@@ -112,6 +115,12 @@ public void remove() {
};
builder.addAllApplicationStates(iterable);
}
+ if (this.applicationTags != null && !this.applicationTags.isEmpty()) {
+ builder.addAllApplicationTags(this.applicationTags);
+ }
+ if (this.scope != null) {
+ builder.setScope(ProtoUtils.convertToProtoFormat(scope));
+ }
}
private void addLocalApplicationTypesToProto() {
@@ -187,12 +196,64 @@ public void setApplicationTypes(Set applicationTypes) {
this.applicationTypes = applicationTypes;
}
+ private void initApplicationTags() {
+ if (this.applicationTags != null) {
+ return;
+ }
+ GetApplicationsRequestProtoOrBuilder p = viaProto ? proto : builder;
+ this.applicationTags = new HashSet();
+ this.applicationTags.addAll(p.getApplicationTagsList());
+ }
+
+ @Override
+ public Set getApplicationTags() {
+ initApplicationTags();
+ return this.applicationTags;
+ }
+
+ @Override
+ public void setApplicationTags(Set tags) {
+ maybeInitBuilder();
+ if (tags == null || tags.isEmpty()) {
+ builder.clearApplicationTags();
+ this.applicationTags = null;
+ return;
+ }
+ // Convert applicationTags to lower case and add
+ this.applicationTags = new HashSet();
+ for (String tag : tags) {
+ this.applicationTags.add(tag.toLowerCase());
+ }
+ }
+
@Override
public EnumSet getApplicationStates() {
initApplicationStates();
return this.applicationStates;
}
+ private void initScope() {
+ if (this.scope != null) {
+ return;
+ }
+ GetApplicationsRequestProtoOrBuilder p = viaProto ? proto : builder;
+ this.scope = ProtoUtils.convertFromProtoFormat(p.getScope());
+ }
+
+ @Override
+ public ApplicationsRequestScope getScope() {
+ initScope();
+ return this.scope;
+ }
+
+ public void setScope(ApplicationsRequestScope scope) {
+ maybeInitBuilder();
+ if (scope == null) {
+ builder.clearScope();
+ }
+ this.scope = scope;
+ }
+
@Override
public void setApplicationStates(EnumSet applicationStates) {
maybeInitBuilder();
@@ -223,7 +284,6 @@ public void setApplicationStates(Set applicationStates) {
return this.users;
}
- @Override
public void setUsers(Set users) {
maybeInitBuilder();
if (users == null) {
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationReportPBImpl.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationReportPBImpl.java
index 9716f74..7e19d8f 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationReportPBImpl.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationReportPBImpl.java
@@ -38,6 +38,9 @@
import com.google.protobuf.TextFormat;
+import java.util.HashSet;
+import java.util.Set;
+
@Private
@Unstable
public class ApplicationReportPBImpl extends ApplicationReport {
@@ -49,6 +52,7 @@
private ApplicationAttemptId currentApplicationAttemptId;
private Token clientToAMToken = null;
private Token amRmToken = null;
+ private Set applicationTags = null;
public ApplicationReportPBImpl() {
builder = ApplicationReportProto.newBuilder();
@@ -245,6 +249,21 @@ public Token getAMRMToken() {
return amRmToken;
}
+ private void initApplicationTags() {
+ if (this.applicationTags != null) {
+ return;
+ }
+ ApplicationReportProtoOrBuilder p = viaProto ? proto : builder;
+ this.applicationTags = new HashSet();
+ this.applicationTags.addAll(p.getApplicationTagsList());
+ }
+
+ @Override
+ public Set getApplicationTags() {
+ initApplicationTags();
+ return this.applicationTags;
+ }
+
@Override
public void setApplicationId(ApplicationId applicationId) {
maybeInitBuilder();
@@ -356,6 +375,15 @@ public void setApplicationType(String applicationType) {
}
@Override
+ public void setApplicationTags(Set tags) {
+ maybeInitBuilder();
+ if (tags == null || tags.isEmpty()) {
+ builder.clearApplicationTags();
+ }
+ this.applicationTags = tags;
+ }
+
+ @Override
public void setDiagnostics(String diagnostics) {
maybeInitBuilder();
if (diagnostics == null) {
@@ -450,6 +478,9 @@ private void mergeLocalToBuilder() {
builder.getAmRmToken())) {
builder.setAmRmToken(convertToProtoFormat(this.amRmToken));
}
+ if (this.applicationTags != null && !this.applicationTags.isEmpty()) {
+ builder.addAllApplicationTags(this.applicationTags);
+ }
}
private void mergeLocalToProto() {
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationSubmissionContextPBImpl.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationSubmissionContextPBImpl.java
index ffaaf35..c4a3a72 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationSubmissionContextPBImpl.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationSubmissionContextPBImpl.java
@@ -18,6 +18,7 @@
package org.apache.hadoop.yarn.api.records.impl.pb;
+import com.google.common.base.CharMatcher;
import org.apache.hadoop.classification.InterfaceAudience.Private;
import org.apache.hadoop.classification.InterfaceStability.Unstable;
import org.apache.hadoop.yarn.api.records.ApplicationId;
@@ -25,6 +26,7 @@
import org.apache.hadoop.yarn.api.records.ContainerLaunchContext;
import org.apache.hadoop.yarn.api.records.Priority;
import org.apache.hadoop.yarn.api.records.Resource;
+import org.apache.hadoop.yarn.conf.YarnConfiguration;
import org.apache.hadoop.yarn.proto.YarnProtos.ApplicationIdProto;
import org.apache.hadoop.yarn.proto.YarnProtos.ApplicationSubmissionContextProto;
import org.apache.hadoop.yarn.proto.YarnProtos.ApplicationSubmissionContextProtoOrBuilder;
@@ -34,6 +36,9 @@
import com.google.protobuf.TextFormat;
+import java.util.HashSet;
+import java.util.Set;
+
@Private
@Unstable
public class ApplicationSubmissionContextPBImpl
@@ -47,6 +52,7 @@
private Priority priority = null;
private ContainerLaunchContext amContainer = null;
private Resource resource = null;
+ private Set applicationTags = null;
public ApplicationSubmissionContextPBImpl() {
builder = ApplicationSubmissionContextProto.newBuilder();
@@ -100,6 +106,9 @@ private void mergeLocalToBuilder() {
builder.getResource())) {
builder.setResource(convertToProtoFormat(this.resource));
}
+ if (this.applicationTags != null && !this.applicationTags.isEmpty()) {
+ builder.addAllApplicationTags(this.applicationTags);
+ }
}
private void mergeLocalToProto() {
@@ -196,7 +205,22 @@ public String getApplicationType() {
}
return (p.getApplicationType());
}
-
+
+ private void initApplicationTags() {
+ if (this.applicationTags != null) {
+ return;
+ }
+ ApplicationSubmissionContextProtoOrBuilder p = viaProto ? proto : builder;
+ this.applicationTags = new HashSet();
+ this.applicationTags.addAll(p.getApplicationTagsList());
+ }
+
+ @Override
+ public Set getApplicationTags() {
+ initApplicationTags();
+ return this.applicationTags;
+ }
+
@Override
public void setQueue(String queue) {
maybeInitBuilder();
@@ -217,6 +241,40 @@ public void setApplicationType(String applicationType) {
builder.setApplicationType((applicationType));
}
+ private void checkTags(Set tags) {
+ if (tags.size() > YarnConfiguration.APPLICATION_MAX_TAGS) {
+ throw new IllegalArgumentException("Too many applicationTags, a maximum of only "
+ + YarnConfiguration.APPLICATION_MAX_TAGS + " are allowed!");
+ }
+ for (String tag : tags) {
+ if (tag.length() > YarnConfiguration.APPLICATION_MAX_TAG_LENGTH) {
+ throw new IllegalArgumentException("Tag " + tag + " is too long, " +
+ "maximum allowed length of a tag is " +
+ YarnConfiguration.APPLICATION_MAX_TAG_LENGTH);
+ }
+ if (!CharMatcher.ASCII.matchesAllOf(tag)) {
+ throw new IllegalArgumentException("A tag can only have ASCII " +
+ "characters! Invalid tag - " + tag);
+ }
+ }
+ }
+
+ @Override
+ public void setApplicationTags(Set tags) {
+ maybeInitBuilder();
+ if (tags == null || tags.isEmpty()) {
+ builder.clearApplicationTags();
+ this.applicationTags = null;
+ return;
+ }
+ checkTags(tags);
+ // Convert applicationTags to lower case and add
+ this.applicationTags = new HashSet();
+ for (String tag : tags) {
+ this.applicationTags.add(tag.toLowerCase());
+ }
+ }
+
@Override
public ContainerLaunchContext getAMContainerSpec() {
ApplicationSubmissionContextProtoOrBuilder p = viaProto ? proto : builder;
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ProtoUtils.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ProtoUtils.java
index 8d73744..4a3c137 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ProtoUtils.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ProtoUtils.java
@@ -22,6 +22,7 @@
import org.apache.hadoop.classification.InterfaceAudience.Private;
import org.apache.hadoop.classification.InterfaceStability.Unstable;
+import org.apache.hadoop.yarn.api.protocolrecords.ApplicationsRequestScope;
import org.apache.hadoop.yarn.api.records.AMCommand;
import org.apache.hadoop.yarn.api.records.ApplicationAccessType;
import org.apache.hadoop.yarn.api.records.ApplicationResourceUsageReport;
@@ -50,6 +51,7 @@
import org.apache.hadoop.yarn.proto.YarnProtos.YarnApplicationStateProto;
import com.google.protobuf.ByteString;
+import org.apache.hadoop.yarn.proto.YarnServiceProtos;
@Private
@Unstable
@@ -114,6 +116,18 @@ public static YarnApplicationAttemptState convertFromProtoFormat(
}
/*
+ * ApplicationsRequestScope
+ */
+ public static YarnServiceProtos.ApplicationsRequestScopeProto
+ convertToProtoFormat(ApplicationsRequestScope e) {
+ return YarnServiceProtos.ApplicationsRequestScopeProto.valueOf(e.name());
+ }
+ public static ApplicationsRequestScope convertFromProtoFormat
+ (YarnServiceProtos.ApplicationsRequestScopeProto e) {
+ return ApplicationsRequestScope.valueOf(e.name());
+ }
+
+ /*
* ApplicationResourceUsageReport
*/
public static ApplicationResourceUsageReportProto convertToProtoFormat(ApplicationResourceUsageReport e) {
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/utils/BuilderUtils.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/utils/BuilderUtils.java
index 1b2a03e..ac25c00 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/utils/BuilderUtils.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/utils/BuilderUtils.java
@@ -26,6 +26,7 @@
import java.util.Comparator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.apache.hadoop.classification.InterfaceAudience.Private;
import org.apache.hadoop.io.Text;
@@ -312,7 +313,7 @@ public static ApplicationReport newApplicationReport(
String url, long startTime, long finishTime,
FinalApplicationStatus finalStatus,
ApplicationResourceUsageReport appResources, String origTrackingUrl,
- float progress, String appType, Token amRmToken) {
+ float progress, String appType, Token amRmToken, Set tags) {
ApplicationReport report = recordFactory
.newRecordInstance(ApplicationReport.class);
report.setApplicationId(applicationId);
@@ -334,6 +335,7 @@ public static ApplicationReport newApplicationReport(
report.setProgress(progress);
report.setApplicationType(appType);
report.setAMRMToken(amRmToken);
+ report.setApplicationTags(tags);
return report;
}
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ClientRMService.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ClientRMService.java
index 8800f29..1c94906 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ClientRMService.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ClientRMService.java
@@ -44,6 +44,7 @@
import org.apache.hadoop.security.token.Token;
import org.apache.hadoop.service.AbstractService;
import org.apache.hadoop.yarn.api.ApplicationClientProtocol;
+import org.apache.hadoop.yarn.api.protocolrecords.ApplicationsRequestScope;
import org.apache.hadoop.yarn.api.protocolrecords.CancelDelegationTokenRequest;
import org.apache.hadoop.yarn.api.protocolrecords.CancelDelegationTokenResponse;
import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationReportRequest;
@@ -438,9 +439,11 @@ public GetApplicationsResponse getApplications(
request.getApplicationStates();
Set users = request.getUsers();
Set queues = request.getQueues();
+ Set tags = request.getApplicationTags();
long limit = request.getLimit();
LongRange start = request.getStartRange();
LongRange finish = request.getFinishRange();
+ ApplicationsRequestScope scope = request.getScope();
final Map apps = rmContext.getRMApps();
Iterator appsIter;
@@ -487,6 +490,17 @@ public void remove() {
List reports = new ArrayList();
while (appsIter.hasNext() && reports.size() < limit) {
RMApp application = appsIter.next();
+
+ // Check if current application falls under the specified scope
+ boolean allowAccess = checkAccess(callerUGI, application.getUser(),
+ ApplicationAccessType.VIEW_APP, application);
+ if (scope == ApplicationsRequestScope.OWN &&
+ !callerUGI.getUserName().equals(application.getUser())) {
+ continue;
+ } else if (scope == ApplicationsRequestScope.VIEWABLE && !allowAccess) {
+ continue;
+ }
+
if (applicationTypes != null && !applicationTypes.isEmpty()) {
String appTypeToMatch = caseSensitive
? application.getApplicationType()
@@ -516,8 +530,23 @@ public void remove() {
continue;
}
- boolean allowAccess = checkAccess(callerUGI, application.getUser(),
- ApplicationAccessType.VIEW_APP, application);
+ if (tags != null && !tags.isEmpty()) {
+ Set appTags = application.getApplicationTags();
+ if (appTags == null || appTags.isEmpty()) {
+ continue;
+ }
+ boolean match = false;
+ for (String tag : tags) {
+ if (appTags.contains(tag)) {
+ match = true;
+ break;
+ }
+ }
+ if (!match) {
+ continue;
+ }
+ }
+
reports.add(application.createAndGetApplicationReport(
callerUGI.getUserName(), allowAccess));
}
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMAppManager.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMAppManager.java
index 7dbc4cc..7855042 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMAppManager.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMAppManager.java
@@ -320,7 +320,8 @@ private RMAppImpl createAndPopulateNewRMApp(
submissionContext.getApplicationName(), user,
submissionContext.getQueue(),
submissionContext, this.scheduler, this.masterService,
- submitTime, submissionContext.getApplicationType());
+ submitTime, submissionContext.getApplicationType(),
+ submissionContext.getApplicationTags());
// Concurrent app submissions with same applicationId will fail here
// Concurrent app submissions with different applicationIds will not
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMApp.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMApp.java
index 1809a4b..1a7e74e 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMApp.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMApp.java
@@ -21,6 +21,7 @@
import java.util.Collection;
import java.util.Map;
+import java.util.Set;
import org.apache.hadoop.yarn.api.protocolrecords.FinishApplicationMasterRequest;
import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
@@ -194,7 +195,13 @@ ApplicationReport createAndGetApplicationReport(String clientUserName,
* Returns the application type
* @return the application type.
*/
- String getApplicationType();
+ String getApplicationType();
+
+ /**
+ * Get tags for the application
+ * @return tags corresponding to the application
+ */
+ Set getApplicationTags();
/**
* Check whether this application is safe to terminate.
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java
index d4cf416..edbe676 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java
@@ -104,6 +104,7 @@
private final long submitTime;
private final Set updatedNodes = new HashSet();
private final String applicationType;
+ private final Set applicationTags;
// Mutable fields
private long startTime;
@@ -302,9 +303,9 @@
public RMAppImpl(ApplicationId applicationId, RMContext rmContext,
Configuration config, String name, String user, String queue,
- ApplicationSubmissionContext submissionContext,
- YarnScheduler scheduler,
- ApplicationMasterService masterService, long submitTime, String applicationType) {
+ ApplicationSubmissionContext submissionContext, YarnScheduler scheduler,
+ ApplicationMasterService masterService, long submitTime,
+ String applicationType, Set applicationTags) {
this.applicationId = applicationId;
this.name = name;
@@ -320,6 +321,7 @@ public RMAppImpl(ApplicationId applicationId, RMContext rmContext,
this.submitTime = submitTime;
this.startTime = System.currentTimeMillis();
this.applicationType = applicationType;
+ this.applicationTags = applicationTags;
int globalMaxAppAttempts = conf.getInt(YarnConfiguration.RM_AM_MAX_ATTEMPTS,
YarnConfiguration.DEFAULT_RM_AM_MAX_ATTEMPTS);
@@ -553,7 +555,7 @@ public ApplicationReport createAndGetApplicationReport(String clientUserName,
createApplicationState(), diags,
trackingUrl, this.startTime, this.finishTime, finishState,
appUsageReport, origTrackingUrl, progress, this.applicationType,
- amrmToken);
+ amrmToken, applicationTags);
} finally {
this.readLock.unlock();
}
@@ -1086,6 +1088,11 @@ public String getApplicationType() {
}
@Override
+ public Set getApplicationTags() {
+ return this.applicationTags;
+ }
+
+ @Override
public boolean isAppSafeToTerminate() {
RMAppState state = getState();
return state.equals(RMAppState.FINISHING)
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/AppBlock.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/AppBlock.java
index ed147fb..445a5a2 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/AppBlock.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/AppBlock.java
@@ -110,6 +110,7 @@ protected void render(Block html) {
_("User:", app.getUser()).
_("Name:", app.getName()).
_("Application Type:", app.getApplicationType()).
+ _("Application Tags:", app.getApplicationTags()).
_("State:", app.getState()).
_("FinalStatus:", app.getFinalStatus()).
_("Started:", Times.format(app.getStartTime())).
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java
index e18c047..e854e2c 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java
@@ -261,12 +261,14 @@ public AppsInfo getApps(@Context HttpServletRequest hsr,
@QueryParam("startedTimeEnd") String startedEnd,
@QueryParam("finishedTimeBegin") String finishBegin,
@QueryParam("finishedTimeEnd") String finishEnd,
- @QueryParam("applicationTypes") Set applicationTypes) {
+ @QueryParam("applicationTypes") Set applicationTypes,
+ @QueryParam("applicationTags") Set applicationTags) {
boolean checkCount = false;
boolean checkStart = false;
boolean checkEnd = false;
boolean checkAppTypes = false;
boolean checkAppStates = false;
+ boolean checkAppTags = false;
long countNum = 0;
// set values suitable in case both of begin/end not specified
@@ -327,6 +329,11 @@ public AppsInfo getApps(@Context HttpServletRequest hsr,
checkAppTypes = true;
}
+ Set appTags = parseQueries(applicationTags, false);
+ if (!appTags.isEmpty()) {
+ checkAppTags = true;
+ }
+
// stateQuery is deprecated.
if (stateQuery != null && !stateQuery.isEmpty()) {
statesQuery.add(stateQuery);
@@ -354,6 +361,10 @@ public AppsInfo getApps(@Context HttpServletRequest hsr,
request.setApplicationTypes(appTypes);
}
+ if (checkAppTags) {
+ request.setApplicationTags(appTags);
+ }
+
if (checkAppStates) {
request.setApplicationStates(appStates);
}
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/AppInfo.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/AppInfo.java
index 295e1f3..a4f4873 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/AppInfo.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/AppInfo.java
@@ -24,6 +24,7 @@
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
+import com.google.common.base.Joiner;
import org.apache.hadoop.http.HttpConfig;
import org.apache.hadoop.yarn.api.records.ApplicationId;
import org.apache.hadoop.yarn.api.records.ApplicationResourceUsageReport;
@@ -33,7 +34,6 @@
import org.apache.hadoop.yarn.api.records.YarnApplicationState;
import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMApp;
-import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppState;
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttempt;
import org.apache.hadoop.yarn.util.ConverterUtils;
import org.apache.hadoop.yarn.util.Times;
@@ -67,6 +67,7 @@
protected String diagnostics;
protected long clusterId;
protected String applicationType;
+ protected String applicationTags = "";
// these are only allowed if acls allow
protected long startedTime;
@@ -117,6 +118,9 @@ public AppInfo(RMApp app, Boolean hasAccess) {
if (diagnostics == null || diagnostics.isEmpty()) {
this.diagnostics = "";
}
+ if (app.getApplicationTags() != null && !app.getApplicationTags().isEmpty()) {
+ this.applicationTags = Joiner.on(',').join(app.getApplicationTags());
+ }
this.finalStatus = app.getFinalApplicationStatus();
this.clusterId = ResourceManager.getClusterTimeStamp();
if (hasAccess) {
@@ -239,6 +243,10 @@ public long getClusterId() {
public String getApplicationType() {
return this.applicationType;
}
+
+ public String getApplicationTags() {
+ return this.applicationTags;
+ }
public int getRunningContainers() {
return this.runningContainers;
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestClientRMService.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestClientRMService.java
index 1894a11..ee6ebcc 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestClientRMService.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestClientRMService.java
@@ -41,6 +41,7 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CyclicBarrier;
+import com.google.common.collect.Sets;
import junit.framework.Assert;
import org.apache.commons.logging.Log;
@@ -51,6 +52,7 @@
import org.apache.hadoop.security.token.Token;
import org.apache.hadoop.yarn.MockApps;
import org.apache.hadoop.yarn.api.ApplicationClientProtocol;
+import org.apache.hadoop.yarn.api.protocolrecords.ApplicationsRequestScope;
import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationReportRequest;
import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsRequest;
import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsResponse;
@@ -465,6 +467,7 @@ public void handle(Event event) {}
{MockApps.newAppName(), MockApps.newAppName(), MockApps.newAppName()};
ApplicationId[] appIds =
{getApplicationId(101), getApplicationId(102), getApplicationId(103)};
+ List tags = Arrays.asList("Tag1", "Tag2", "Tag3");
// Submit applications
for (int i = 0; i < appIds.length; i++) {
@@ -472,7 +475,8 @@ public void handle(Event event) {}
when(mockAclsManager.checkAccess(UserGroupInformation.getCurrentUser(),
ApplicationAccessType.VIEW_APP, null, appId)).thenReturn(true);
SubmitApplicationRequest submitRequest = mockSubmitAppRequest(
- appId, appNames[i], queues[i % queues.length]);
+ appId, appNames[i], queues[i % queues.length],
+ new HashSet(tags.subList(0, i + 1)));
rmService.submitApplication(submitRequest);
}
@@ -513,6 +517,39 @@ public void handle(Event event) {}
userSet.add(UserGroupInformation.getCurrentUser().getShortUserName());
assertEquals("Incorrect number of applications for user", 3,
rmService.getApplications(request).getApplicationList().size());
+
+ // Check tags
+ request = GetApplicationsRequest.newInstance();
+ Set tagSet = new HashSet();
+ request.setApplicationTags(tagSet);
+ assertEquals("Incorrect number of matching tags", 6,
+ rmService.getApplications(request).getApplicationList().size());
+
+ tagSet = Sets.newHashSet(tags.get(0));
+ request.setApplicationTags(tagSet);
+ assertEquals("Incorrect number of matching tags", 3,
+ rmService.getApplications(request).getApplicationList().size());
+
+ tagSet = Sets.newHashSet(tags.get(1));
+ request.setApplicationTags(tagSet);
+ assertEquals("Incorrect number of matching tags", 2,
+ rmService.getApplications(request).getApplicationList().size());
+
+ tagSet = Sets.newHashSet(tags.get(2));
+ request.setApplicationTags(tagSet);
+ assertEquals("Incorrect number of matching tags", 1,
+ rmService.getApplications(request).getApplicationList().size());
+
+ // Check scope
+ request = GetApplicationsRequest.newInstance(
+ ApplicationsRequestScope.VIEWABLE);
+ assertEquals("Incorrect number of applications for the scope", 6,
+ rmService.getApplications(request).getApplicationList().size());
+
+ request = GetApplicationsRequest.newInstance(
+ ApplicationsRequestScope.OWN);
+ assertEquals("Incorrect number of applications for the scope", 3,
+ rmService.getApplications(request).getApplicationList().size());
}
@Test(timeout=4000)
@@ -583,6 +620,11 @@ public void run() {
private SubmitApplicationRequest mockSubmitAppRequest(ApplicationId appId,
String name, String queue) {
+ return mockSubmitAppRequest(appId, name, queue, null);
+ }
+
+ private SubmitApplicationRequest mockSubmitAppRequest(ApplicationId appId,
+ String name, String queue, Set tags) {
ContainerLaunchContext amContainerSpec = mock(ContainerLaunchContext.class);
Resource resource = Resources.createResource(
@@ -596,6 +638,7 @@ private SubmitApplicationRequest mockSubmitAppRequest(ApplicationId appId,
submissionContext.setApplicationId(appId);
submissionContext.setResource(resource);
submissionContext.setApplicationType(appType);
+ submissionContext.setApplicationTags(tags);
SubmitApplicationRequest submitRequest =
recordFactory.newRecordInstance(SubmitApplicationRequest.class);
@@ -664,7 +707,7 @@ private RMAppImpl getRMApp(RMContext rmContext, YarnScheduler yarnScheduler,
when(asContext.getMaxAppAttempts()).thenReturn(1);
RMAppImpl app = spy(new RMAppImpl(applicationId3, rmContext, config, null, null,
queueName, asContext, yarnScheduler, null , System
- .currentTimeMillis(), "YARN"));
+ .currentTimeMillis(), "YARN", null));
ApplicationAttemptId attemptId = ApplicationAttemptId.newInstance(applicationId3, 1);
RMAppAttemptImpl rmAppAttemptImpl = new RMAppAttemptImpl(attemptId,
rmContext, yarnScheduler, null, asContext, config, false);
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/MockAsm.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/MockAsm.java
index aa116bf..01e5eea 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/MockAsm.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/MockAsm.java
@@ -20,6 +20,7 @@
import java.util.Collection;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.yarn.MockApps;
@@ -140,6 +141,11 @@ public String getApplicationType() {
}
@Override
+ public Set getApplicationTags() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
public void setQueue(String name) {
throw new UnsupportedOperationException("Not supported yet.");
}
@@ -235,7 +241,11 @@ public RMAppAttempt getCurrentAppAttempt() {
public int getMaxAppAttempts() {
return maxAppAttempts;
}
-
+
+ @Override
+ public Set getApplicationTags() {
+ return null;
+ }
};
}
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/MockRMApp.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/MockRMApp.java
index debcffe..ac3751a 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/MockRMApp.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/MockRMApp.java
@@ -21,6 +21,7 @@
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.Set;
import org.apache.hadoop.yarn.MockApps;
import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
@@ -218,6 +219,11 @@ public String getApplicationType() {
}
@Override
+ public Set getApplicationTags() {
+ return null;
+ }
+
+ @Override
public boolean isAppSafeToTerminate() {
return true;
}
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/TestRMAppTransitions.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/TestRMAppTransitions.java
index a8c2ab6..5ac9353 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/TestRMAppTransitions.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/TestRMAppTransitions.java
@@ -230,7 +230,7 @@ protected RMApp createNewTestApp(ApplicationSubmissionContext submissionContext)
RMApp application =
new RMAppImpl(applicationId, rmContext, conf, name, user, queue,
submissionContext, scheduler, masterService,
- System.currentTimeMillis(), "YARN");
+ System.currentTimeMillis(), "YARN", null);
testAppStartState(applicationId, user, name, queue, application);
this.rmContext.getRMApps().putIfAbsent(application.getApplicationId(),
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java
index b251ce7..8924389 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairScheduler.java
@@ -621,7 +621,7 @@ public void testUserAsDefaultQueue() throws Exception {
ApplicationAttemptId appAttemptId = createAppAttemptId(1, 1);
RMApp rmApp = new RMAppImpl(appAttemptId.getApplicationId(), rmContext, conf,
null, null, null, ApplicationSubmissionContext.newInstance(null, null,
- null, null, null, false, false, 0, null, null), null, null, 0, null);
+ null, null, null, false, false, 0, null, null), null, null, 0, null, null);
appsMap.put(appAttemptId.getApplicationId(), rmApp);
AppAddedSchedulerEvent appAddedEvent =
@@ -647,7 +647,7 @@ public void testNotUserAsDefaultQueue() throws Exception {
ApplicationAttemptId appAttemptId = createAppAttemptId(1, 1);
RMApp rmApp = new RMAppImpl(appAttemptId.getApplicationId(), rmContext, conf,
null, null, null, ApplicationSubmissionContext.newInstance(null, null,
- null, null, null, false, false, 0, null, null), null, null, 0, null);
+ null, null, null, false, false, 0, null, null), null, null, 0, null, null);
appsMap.put(appAttemptId.getApplicationId(), rmApp);
AppAddedSchedulerEvent appAddedEvent =
@@ -1765,7 +1765,7 @@ public void testNotAllowSubmitApplication() throws Exception {
RMApp application =
new RMAppImpl(applicationId, resourceManager.getRMContext(), conf, name, user,
queue, submissionContext, scheduler, masterService,
- System.currentTimeMillis(), "YARN");
+ System.currentTimeMillis(), "YARN", null);
resourceManager.getRMContext().getRMApps().putIfAbsent(applicationId, application);
application.handle(new RMAppEvent(applicationId, RMAppEventType.START));
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
index 349bae4..18350fb 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
@@ -1317,8 +1317,8 @@ public void verifyAppsXML(NodeList nodes, RMApp app) throws JSONException,
public void verifyAppInfo(JSONObject info, RMApp app) throws JSONException,
Exception {
- // 15 because trackingUrl not assigned yet
- assertEquals("incorrect number of elements", 19, info.length());
+ // 20 because trackingUrl not assigned yet
+ assertEquals("incorrect number of elements", 20, info.length());
verifyAppInfoGeneric(app, info.getString("id"), info.getString("user"),
info.getString("name"), info.getString("applicationType"), info.getString("queue"),
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/apt/ResourceManagerRest.apt.vm hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/apt/ResourceManagerRest.apt.vm
index 7390291..ac6b446 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/apt/ResourceManagerRest.apt.vm
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/apt/ResourceManagerRest.apt.vm
@@ -1123,6 +1123,7 @@ ResourceManager REST API's.
* finishedTimeBegin - applications with finish time beginning with this time, specified in ms since epoch
* finishedTimeEnd - applications with finish time ending with this time, specified in ms since epoch
* applicationTypes - applications matching the given application types, specified as a comma-separated list.
+ * applicationTags - applications matching any of the given application tags, specified as a comma-separated list.
------
** Elements of the (Applications) object