Author: arp
Date: Wed Nov 20 05:31:02 2013
New Revision: 1543710
URL: http://svn.apache.org/r1543710
Log:
Merging r1543613 through r1543709 from trunk to branch HDFS-2832
Modified:
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/CHANGES.txt
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ApplicationMasterService.java
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/AppsBlock.java
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/FairSchedulerAppsBlock.java
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/NavBlock.java
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RmController.java
hadoop/common/branches/HDFS-2832/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/common/branches/HDFS-2832/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/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebApp.java
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/apt/ResourceManagerRest.apt.vm
Modified: hadoop/common/branches/HDFS-2832/hadoop-yarn-project/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2832/hadoop-yarn-project/CHANGES.txt?rev=1543710&r1=1543709&r2=1543710&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-2832/hadoop-yarn-project/CHANGES.txt (original)
+++ hadoop/common/branches/HDFS-2832/hadoop-yarn-project/CHANGES.txt Wed Nov 20
05:31:02 2013
@@ -156,6 +156,10 @@ Release 2.3.0 - UNRELEASED
YARN-1419. TestFifoScheduler.testAppAttemptMetrics fails intermittently
under jdk7 (Jonathan Eagles via jlowe)
+ YARN-744. Race condition in ApplicationMasterService.allocate .. It might
+ process same allocate request twice resulting in additional containers
+ getting allocated. (Omkar Vinit Joshi via bikas)
+
Release 2.2.1 - UNRELEASED
INCOMPATIBLE CHANGES
@@ -239,6 +243,9 @@ Release 2.2.1 - UNRELEASED
YARN-1381. Same relaxLocality appears twice in exception message of
AMRMClientImpl#checkLocalityRelaxationConflict() (Ted Yu via Sandy Ryza)
+ YARN-1407. RM Web UI and REST APIs should uniformly use
+ YarnApplicationState (Sandy Ryza)
+
Release 2.2.0 - 2013-10-13
INCOMPATIBLE CHANGES
Modified:
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ApplicationMasterService.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ApplicationMasterService.java?rev=1543710&r1=1543709&r2=1543710&view=diff
==============================================================================
---
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ApplicationMasterService.java
(original)
+++
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ApplicationMasterService.java
Wed Nov 20 05:31:02 2013
@@ -72,7 +72,6 @@ import org.apache.hadoop.yarn.ipc.YarnRP
import org.apache.hadoop.yarn.security.AMRMTokenIdentifier;
import
org.apache.hadoop.yarn.server.resourcemanager.RMAuditLogger.AuditConstants;
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.AMLivelinessMonitor;
import
org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttempt;
import
org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.event.RMAppAttemptRegistrationEvent;
@@ -81,7 +80,6 @@ import org.apache.hadoop.yarn.server.res
import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNode;
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.Allocation;
import
org.apache.hadoop.yarn.server.resourcemanager.scheduler.SchedulerNodeReport;
-import org.apache.hadoop.yarn.server.resourcemanager.scheduler.SchedulerUtils;
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.YarnScheduler;
import
org.apache.hadoop.yarn.server.resourcemanager.security.authorize.RMPolicyProvider;
import org.apache.hadoop.yarn.server.utils.BuilderUtils;
@@ -97,8 +95,8 @@ public class ApplicationMasterService ex
private Server server;
private final RecordFactory recordFactory =
RecordFactoryProvider.getRecordFactory(null);
- private final ConcurrentMap<ApplicationAttemptId, AllocateResponse>
responseMap =
- new ConcurrentHashMap<ApplicationAttemptId, AllocateResponse>();
+ private final ConcurrentMap<ApplicationAttemptId, AllocateResponseLock>
responseMap =
+ new ConcurrentHashMap<ApplicationAttemptId, AllocateResponseLock>();
private final AllocateResponse resync =
recordFactory.newRecordInstance(AllocateResponse.class);
private final RMContext rmContext;
@@ -217,21 +215,19 @@ public class ApplicationMasterService ex
ApplicationAttemptId applicationAttemptId = authorizeRequest();
ApplicationId appID = applicationAttemptId.getApplicationId();
- AllocateResponse lastResponse = responseMap.get(applicationAttemptId);
- if (lastResponse == null) {
- String message = "Application doesn't exist in cache "
- + applicationAttemptId;
- LOG.error(message);
+ AllocateResponseLock lock = responseMap.get(applicationAttemptId);
+ if (lock == null) {
RMAuditLogger.logFailure(this.rmContext.getRMApps().get(appID).getUser(),
- AuditConstants.REGISTER_AM, message, "ApplicationMasterService",
+ AuditConstants.REGISTER_AM, "Application doesn't exist in cache "
+ + applicationAttemptId, "ApplicationMasterService",
"Error in registering application master", appID,
applicationAttemptId);
- throw RPCUtil.getRemoteException(message);
+ throwApplicationDoesNotExistInCacheException(applicationAttemptId);
}
// Allow only one thread in AM to do registerApp at a time.
- synchronized (lastResponse) {
-
+ synchronized (lock) {
+ AllocateResponse lastResponse = lock.getAllocateResponse();
if (hasApplicationMasterRegistered(applicationAttemptId)) {
String message =
"Application Master is already registered : "
@@ -251,7 +247,7 @@ public class ApplicationMasterService ex
// Setting the response id to 0 to identify if the
// application master is register for the respective attemptid
lastResponse.setResponseId(0);
- responseMap.put(applicationAttemptId, lastResponse);
+ lock.setAllocateResponse(lastResponse);
LOG.info("AM registration " + applicationAttemptId);
this.rmContext
.getDispatcher()
@@ -286,17 +282,14 @@ public class ApplicationMasterService ex
ApplicationAttemptId applicationAttemptId = authorizeRequest();
- AllocateResponse lastResponse = responseMap.get(applicationAttemptId);
- if (lastResponse == null) {
- String message = "Application doesn't exist in cache "
- + applicationAttemptId;
- LOG.error(message);
- throw RPCUtil.getRemoteException(message);
+ AllocateResponseLock lock = responseMap.get(applicationAttemptId);
+ if (lock == null) {
+ throwApplicationDoesNotExistInCacheException(applicationAttemptId);
}
// Allow only one thread in AM to do finishApp at a time.
- synchronized (lastResponse) {
-
+ synchronized (lock) {
+
this.amLivelinessMonitor.receivedPing(applicationAttemptId);
rmContext.getDispatcher().getEventHandler().handle(
@@ -313,6 +306,15 @@ public class ApplicationMasterService ex
}
}
+ private void throwApplicationDoesNotExistInCacheException(
+ ApplicationAttemptId appAttemptId)
+ throws InvalidApplicationMasterRequestException {
+ String message = "Application doesn't exist in cache "
+ + appAttemptId;
+ LOG.error(message);
+ throw new InvalidApplicationMasterRequestException(message);
+ }
+
/**
* @param appAttemptId
* @return true if application is registered for the respective attemptid
@@ -320,10 +322,11 @@ public class ApplicationMasterService ex
public boolean hasApplicationMasterRegistered(
ApplicationAttemptId appAttemptId) {
boolean hasApplicationMasterRegistered = false;
- AllocateResponse lastResponse = responseMap.get(appAttemptId);
+ AllocateResponseLock lastResponse = responseMap.get(appAttemptId);
if (lastResponse != null) {
synchronized (lastResponse) {
- if (lastResponse.getResponseId() >= 0) {
+ if (lastResponse.getAllocateResponse() != null
+ && lastResponse.getAllocateResponse().getResponseId() >= 0) {
hasApplicationMasterRegistered = true;
}
}
@@ -340,38 +343,38 @@ public class ApplicationMasterService ex
this.amLivelinessMonitor.receivedPing(appAttemptId);
/* check if its in cache */
- AllocateResponse lastResponse = responseMap.get(appAttemptId);
- if (lastResponse == null) {
+ AllocateResponseLock lock = responseMap.get(appAttemptId);
+ if (lock == null) {
LOG.error("AppAttemptId doesnt exist in cache " + appAttemptId);
return resync;
}
-
- if (!hasApplicationMasterRegistered(appAttemptId)) {
- String message =
- "Application Master is trying to allocate before registering for: "
- + appAttemptId.getApplicationId();
- LOG.error(message);
- RMAuditLogger.logFailure(
- this.rmContext.getRMApps().get(appAttemptId.getApplicationId())
- .getUser(), AuditConstants.REGISTER_AM, "",
- "ApplicationMasterService", message, appAttemptId.getApplicationId(),
- appAttemptId);
- throw new InvalidApplicationMasterRequestException(message);
- }
-
- if ((request.getResponseId() + 1) == lastResponse.getResponseId()) {
- /* old heartbeat */
- return lastResponse;
- } else if (request.getResponseId() + 1 < lastResponse.getResponseId()) {
- LOG.error("Invalid responseid from appAttemptId " + appAttemptId);
- // Oh damn! Sending reboot isn't enough. RM state is corrupted. TODO:
- // Reboot is not useful since after AM reboots, it will send register
and
- // get an exception. Might as well throw an exception here.
- return resync;
- }
-
- // Allow only one thread in AM to do heartbeat at a time.
- synchronized (lastResponse) {
+ synchronized (lock) {
+ AllocateResponse lastResponse = lock.getAllocateResponse();
+ if (!hasApplicationMasterRegistered(appAttemptId)) {
+ String message =
+ "Application Master is trying to allocate before registering for: "
+ + appAttemptId.getApplicationId();
+ LOG.error(message);
+ RMAuditLogger.logFailure(
+ this.rmContext.getRMApps().get(appAttemptId.getApplicationId())
+ .getUser(), AuditConstants.REGISTER_AM, "",
+ "ApplicationMasterService", message,
+ appAttemptId.getApplicationId(),
+ appAttemptId);
+ throw new InvalidApplicationMasterRequestException(message);
+ }
+
+ if ((request.getResponseId() + 1) == lastResponse.getResponseId()) {
+ /* old heartbeat */
+ return lastResponse;
+ } else if (request.getResponseId() + 1 < lastResponse.getResponseId()) {
+ LOG.error("Invalid responseid from appAttemptId " + appAttemptId);
+ // Oh damn! Sending reboot isn't enough. RM state is corrupted. TODO:
+ // Reboot is not useful since after AM reboots, it will send register
+ // and
+ // get an exception. Might as well throw an exception here.
+ return resync;
+ }
// Send the status update to the appAttempt.
this.rmContext.getDispatcher().getEventHandler().handle(
@@ -380,15 +383,16 @@ public class ApplicationMasterService ex
List<ResourceRequest> ask = request.getAskList();
List<ContainerId> release = request.getReleaseList();
-
- ResourceBlacklistRequest blacklistRequest =
request.getResourceBlacklistRequest();
- List<String> blacklistAdditions =
- (blacklistRequest != null) ?
+
+ ResourceBlacklistRequest blacklistRequest =
+ request.getResourceBlacklistRequest();
+ List<String> blacklistAdditions =
+ (blacklistRequest != null) ?
blacklistRequest.getBlacklistAdditions() : null;
- List<String> blacklistRemovals =
- (blacklistRequest != null) ?
+ List<String> blacklistRemovals =
+ (blacklistRequest != null) ?
blacklistRequest.getBlacklistRemovals() : null;
-
+
// sanity check
try {
RMServerUtils.validateResourceRequests(ask,
@@ -443,7 +447,7 @@ public class ApplicationMasterService ex
rmNode.getTotalCapability(), numContainers,
rmNode.getHealthReport(),
rmNode.getLastHealthReportTime());
-
+
updatedNodeReports.add(report);
}
allocateResponse.setUpdatedNodes(updatedNodeReports);
@@ -454,11 +458,12 @@ public class ApplicationMasterService ex
.pullJustFinishedContainers());
allocateResponse.setResponseId(lastResponse.getResponseId() + 1);
allocateResponse.setAvailableResources(allocation.getResourceLimit());
-
+
allocateResponse.setNumClusterNodes(this.rScheduler.getNumClusterNodes());
-
+
// add preemption to the allocateResponse message (if any)
-
allocateResponse.setPreemptionMessage(generatePreemptionMessage(allocation));
+ allocateResponse
+ .setPreemptionMessage(generatePreemptionMessage(allocation));
// Adding NMTokens for allocated containers.
if (!allocation.getContainers().isEmpty()) {
@@ -466,21 +471,14 @@ public class ApplicationMasterService ex
.createAndGetNMTokens(app.getUser(), appAttemptId,
allocation.getContainers()));
}
-
- // before returning response, verify in sync
- AllocateResponse oldResponse =
- responseMap.put(appAttemptId, allocateResponse);
- if (oldResponse == null) {
- // appAttempt got unregistered, remove it back out
- responseMap.remove(appAttemptId);
- String message = "App Attempt removed from the cache during allocate"
- + appAttemptId;
- LOG.error(message);
- return resync;
- }
-
+ /*
+ * As we are updating the response inside the lock object so we don't
+ * need to worry about unregister call occurring in between (which
+ * removes the lock object).
+ */
+ lock.setAllocateResponse(allocateResponse);
return allocateResponse;
- }
+ }
}
private PreemptionMessage generatePreemptionMessage(Allocation allocation){
@@ -542,7 +540,7 @@ public class ApplicationMasterService ex
// attemptID get registered
response.setResponseId(-1);
LOG.info("Registering app attempt : " + attemptId);
- responseMap.put(attemptId, response);
+ responseMap.put(attemptId, new AllocateResponseLock(response));
rmContext.getNMTokenSecretManager().registerApplicationAttempt(attemptId);
}
@@ -564,4 +562,20 @@ public class ApplicationMasterService ex
}
super.serviceStop();
}
-}
+
+ public static class AllocateResponseLock {
+ private AllocateResponse response;
+
+ public AllocateResponseLock(AllocateResponse response) {
+ this.response = response;
+ }
+
+ public synchronized AllocateResponse getAllocateResponse() {
+ return response;
+ }
+
+ public synchronized void setAllocateResponse(AllocateResponse response) {
+ this.response = response;
+ }
+ }
+}
\ No newline at end of file
Modified:
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java?rev=1543710&r1=1543709&r2=1543710&view=diff
==============================================================================
---
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java
(original)
+++
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java
Wed Nov 20 05:31:02 2013
@@ -53,6 +53,7 @@ import org.apache.hadoop.yarn.api.record
import org.apache.hadoop.yarn.api.records.FinalApplicationStatus;
import org.apache.hadoop.yarn.api.records.NodeId;
import org.apache.hadoop.yarn.api.records.Priority;
+import org.apache.hadoop.yarn.api.records.Resource;
import org.apache.hadoop.yarn.api.records.ResourceRequest;
import org.apache.hadoop.yarn.event.EventHandler;
import org.apache.hadoop.yarn.factories.RecordFactory;
@@ -653,7 +654,14 @@ public class RMAppAttemptImpl implements
public ApplicationResourceUsageReport getApplicationResourceUsageReport() {
this.readLock.lock();
try {
- return scheduler.getAppResourceUsageReport(this.getAppAttemptId());
+ ApplicationResourceUsageReport report =
+ scheduler.getAppResourceUsageReport(this.getAppAttemptId());
+ if (report == null) {
+ Resource none = Resource.newInstance(0, 0);
+ report = ApplicationResourceUsageReport.newInstance(0, 0, none, none,
+ none);
+ }
+ return report;
} finally {
this.readLock.unlock();
}
Modified:
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/AppsBlock.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/AppsBlock.java?rev=1543710&r1=1543709&r2=1543710&view=diff
==============================================================================
---
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/AppsBlock.java
(original)
+++
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/AppsBlock.java
Wed Nov 20 05:31:02 2013
@@ -29,9 +29,9 @@ import java.util.concurrent.ConcurrentMa
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.hadoop.yarn.api.records.ApplicationId;
+import org.apache.hadoop.yarn.api.records.YarnApplicationState;
import org.apache.hadoop.yarn.server.resourcemanager.RMContext;
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.webapp.dao.AppInfo;
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet;
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.TABLE;
@@ -65,18 +65,18 @@ class AppsBlock extends HtmlBlock {
th(".progress", "Progress").
th(".ui", "Tracking UI")._()._().
tbody();
- Collection<RMAppState> reqAppStates = null;
+ Collection<YarnApplicationState> reqAppStates = null;
String reqStateString = $(APP_STATE);
if (reqStateString != null && !reqStateString.isEmpty()) {
String[] appStateStrings = reqStateString.split(",");
- reqAppStates = new HashSet<RMAppState>(appStateStrings.length);
+ reqAppStates = new HashSet<YarnApplicationState>(appStateStrings.length);
for(String stateString : appStateStrings) {
- reqAppStates.add(RMAppState.valueOf(stateString));
+ reqAppStates.add(YarnApplicationState.valueOf(stateString));
}
}
StringBuilder appsTableData = new StringBuilder("[\n");
for (RMApp app : apps.values()) {
- if (reqAppStates != null && !reqAppStates.contains(app.getState())) {
+ if (reqAppStates != null &&
!reqAppStates.contains(app.createApplicationState())) {
continue;
}
AppInfo appInfo = new AppInfo(app, true);
Modified:
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/FairSchedulerAppsBlock.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/FairSchedulerAppsBlock.java?rev=1543710&r1=1543709&r2=1543710&view=diff
==============================================================================
---
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/FairSchedulerAppsBlock.java
(original)
+++
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/FairSchedulerAppsBlock.java
Wed Nov 20 05:31:02 2013
@@ -30,10 +30,10 @@ import java.util.concurrent.ConcurrentMa
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
import org.apache.hadoop.yarn.api.records.ApplicationId;
+import org.apache.hadoop.yarn.api.records.YarnApplicationState;
import org.apache.hadoop.yarn.server.resourcemanager.RMContext;
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.scheduler.fair.FairScheduler;
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppInfo;
import
org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.FairSchedulerInfo;
@@ -77,13 +77,13 @@ public class FairSchedulerAppsBlock exte
th(".progress", "Progress").
th(".ui", "Tracking UI")._()._().
tbody();
- Collection<RMAppState> reqAppStates = null;
+ Collection<YarnApplicationState> reqAppStates = null;
String reqStateString = $(APP_STATE);
if (reqStateString != null && !reqStateString.isEmpty()) {
String[] appStateStrings = reqStateString.split(",");
- reqAppStates = new HashSet<RMAppState>(appStateStrings.length);
+ reqAppStates = new HashSet<YarnApplicationState>(appStateStrings.length);
for(String stateString : appStateStrings) {
- reqAppStates.add(RMAppState.valueOf(stateString));
+ reqAppStates.add(YarnApplicationState.valueOf(stateString));
}
}
StringBuilder appsTableData = new StringBuilder("[\n");
Modified:
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/NavBlock.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/NavBlock.java?rev=1543710&r1=1543709&r2=1543710&view=diff
==============================================================================
---
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/NavBlock.java
(original)
+++
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/NavBlock.java
Wed Nov 20 05:31:02 2013
@@ -18,7 +18,7 @@
package org.apache.hadoop.yarn.server.resourcemanager.webapp;
-import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppState;
+import org.apache.hadoop.yarn.api.records.YarnApplicationState;
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet;
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.DIV;
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.LI;
@@ -38,7 +38,7 @@ public class NavBlock extends HtmlBlock
li().a(url("apps"), "Applications").
ul();
subAppsList.li()._();
- for (RMAppState state : RMAppState.values()) {
+ for (YarnApplicationState state : YarnApplicationState.values()) {
subAppsList.
li().a(url("apps", state.toString()), state.toString())._();
}
Modified:
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RmController.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RmController.java?rev=1543710&r1=1543709&r2=1543710&view=diff
==============================================================================
---
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RmController.java
(original)
+++
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RmController.java
Wed Nov 20 05:31:02 2013
@@ -21,8 +21,8 @@ package org.apache.hadoop.yarn.server.re
import static org.apache.hadoop.yarn.util.StringHelper.join;
import static org.apache.hadoop.yarn.webapp.YarnWebParams.QUEUE_NAME;
+import org.apache.hadoop.yarn.api.records.YarnApplicationState;
import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
-import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppState;
import
org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
import
org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler;
import
org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler;
@@ -62,12 +62,11 @@ public class RmController extends Contro
public void scheduler() {
// limit applications to those in states relevant to scheduling
set(YarnWebParams.APP_STATE, StringHelper.cjoin(
- RMAppState.NEW.toString(),
- RMAppState.NEW_SAVING.toString(),
- RMAppState.SUBMITTED.toString(),
- RMAppState.ACCEPTED.toString(),
- RMAppState.RUNNING.toString(),
- RMAppState.FINISHING.toString()));
+ YarnApplicationState.NEW.toString(),
+ YarnApplicationState.NEW_SAVING.toString(),
+ YarnApplicationState.SUBMITTED.toString(),
+ YarnApplicationState.ACCEPTED.toString(),
+ YarnApplicationState.RUNNING.toString()));
ResourceManager rm = getInstance(ResourceManager.class);
ResourceScheduler rs = rm.getResourceScheduler();
Modified:
hadoop/common/branches/HDFS-2832/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
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2832/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?rev=1543710&r1=1543709&r2=1543710&view=diff
==============================================================================
---
hadoop/common/branches/HDFS-2832/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
(original)
+++
hadoop/common/branches/HDFS-2832/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
Wed Nov 20 05:31:02 2013
@@ -30,6 +30,7 @@ import org.apache.hadoop.yarn.api.record
import org.apache.hadoop.yarn.api.records.Container;
import org.apache.hadoop.yarn.api.records.FinalApplicationStatus;
import org.apache.hadoop.yarn.api.records.Resource;
+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;
@@ -58,7 +59,7 @@ public class AppInfo {
protected String user;
protected String name;
protected String queue;
- protected RMAppState state;
+ protected YarnApplicationState state;
protected FinalApplicationStatus finalStatus;
protected float progress;
protected String trackingUI;
@@ -88,12 +89,12 @@ public class AppInfo {
if (app != null) {
String trackingUrl = app.getTrackingUrl();
- this.state = app.getState();
+ this.state = app.createApplicationState();
this.trackingUrlIsNotReady = trackingUrl == null || trackingUrl.isEmpty()
- || RMAppState.NEW == this.state
- || RMAppState.NEW_SAVING == this.state
- || RMAppState.SUBMITTED == this.state
- || RMAppState.ACCEPTED == this.state;
+ || YarnApplicationState.NEW == this.state
+ || YarnApplicationState.NEW_SAVING == this.state
+ || YarnApplicationState.SUBMITTED == this.state
+ || YarnApplicationState.ACCEPTED == this.state;
this.trackingUI = this.trackingUrlIsNotReady ? "UNASSIGNED" : (app
.getFinishTime() == 0 ? "ApplicationMaster" : "History");
if (!trackingUrlIsNotReady) {
Modified:
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/MockAsm.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/MockAsm.java?rev=1543710&r1=1543709&r2=1543710&view=diff
==============================================================================
---
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/MockAsm.java
(original)
+++
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/applicationsmanager/MockAsm.java
Wed Nov 20 05:31:02 2013
@@ -168,8 +168,8 @@ public abstract class MockAsm extends Mo
final long start = 123456 + i * 1000;
final long finish = 234567 + i * 1000;
final String type = YarnConfiguration.DEFAULT_APPLICATION_TYPE;
- RMAppState[] allStates = RMAppState.values();
- final RMAppState state = allStates[i % allStates.length];
+ YarnApplicationState[] allStates = YarnApplicationState.values();
+ final YarnApplicationState state = allStates[i % allStates.length];
final int maxAppAttempts = i % 1000;
return new ApplicationBase() {
@Override
@@ -210,7 +210,7 @@ public abstract class MockAsm extends Mo
return null;
}
@Override
- public RMAppState getState() {
+ public YarnApplicationState createApplicationState() {
return state;
}
@Override
Modified:
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebApp.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebApp.java?rev=1543710&r1=1543709&r2=1543710&view=diff
==============================================================================
---
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebApp.java
(original)
+++
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebApp.java
Wed Nov 20 05:31:02 2013
@@ -32,6 +32,7 @@ import org.apache.hadoop.conf.Configurat
import org.apache.hadoop.yarn.api.records.ApplicationId;
import org.apache.hadoop.yarn.api.records.NodeId;
import org.apache.hadoop.yarn.api.records.NodeState;
+import org.apache.hadoop.yarn.api.records.YarnApplicationState;
import org.apache.hadoop.yarn.conf.YarnConfiguration;
import org.apache.hadoop.yarn.server.resourcemanager.MockNodes;
import org.apache.hadoop.yarn.server.resourcemanager.RMContext;
@@ -39,7 +40,6 @@ import org.apache.hadoop.yarn.server.res
import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
import
org.apache.hadoop.yarn.server.resourcemanager.applicationsmanager.MockAsm;
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.rmnode.RMNode;
import
org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
import
org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler;
@@ -93,12 +93,14 @@ public class TestRMWebApp {
}
});
RmView rmViewInstance = injector.getInstance(RmView.class);
- rmViewInstance.set(YarnWebParams.APP_STATE, RMAppState.RUNNING.toString());
+ rmViewInstance.set(YarnWebParams.APP_STATE,
+ YarnApplicationState.RUNNING.toString());
rmViewInstance.render();
WebAppTests.flushOutput(injector);
rmViewInstance.set(YarnWebParams.APP_STATE, StringHelper.cjoin(
- RMAppState.ACCEPTED.toString(), RMAppState.RUNNING.toString()));
+ YarnApplicationState.ACCEPTED.toString(),
+ YarnApplicationState.RUNNING.toString()));
rmViewInstance.render();
WebAppTests.flushOutput(injector);
}
Modified:
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/apt/ResourceManagerRest.apt.vm
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/apt/ResourceManagerRest.apt.vm?rev=1543710&r1=1543709&r2=1543710&view=diff
==============================================================================
---
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/apt/ResourceManagerRest.apt.vm
(original)
+++
hadoop/common/branches/HDFS-2832/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/apt/ResourceManagerRest.apt.vm
Wed Nov 20 05:31:02 2013
@@ -1445,7 +1445,7 @@ _01_000001</amContainerLogs>
*---------------+--------------+--------------------------------+
| queue | string | The queue the application was submitted to|
*---------------+--------------+--------------------------------+
-| state | string | The application state according to the
ResourceManager - valid values are: NEW, SUBMITTED, ACCEPTED, RUNNING,
FINISHED, FAILED, KILLED|
+| state | string | The application state according to the
ResourceManager - valid values are members of the YarnApplicationState enum:
NEW, NEW_SAVING, SUBMITTED, ACCEPTED, RUNNING, FINISHED, FAILED, KILLED|
*---------------+--------------+--------------------------------+
| finalStatus | string | The final status of the application if finished -
reported by the application itself - valid values are: UNDEFINED, SUCCEEDED,
FAILED, KILLED|
*---------------+--------------+--------------------------------+