Merging trunk

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/HDFS-2802@1454238 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Suresh Srinivas 2013-03-08 04:13:41 +00:00
commit 82230367ba
19 changed files with 189 additions and 44 deletions

View File

@ -456,7 +456,15 @@ Trunk (Unreleased)
HADOOP-9372. Fix bad timeout annotations on tests. HADOOP-9372. Fix bad timeout annotations on tests.
(Arpit Agarwal via suresh) (Arpit Agarwal via suresh)
Release 2.0.4-beta - UNRELEASED HADOOP-9376. TestProxyUserFromEnv fails on a Windows domain joined machine.
(Ivan Mitic via suresh)
HADOOP-9365. TestHAZKUtil fails on Windows. (Ivan Mitic via suresh)
HADOOP-9364. PathData#expandAsGlob does not return correct results for
absolute paths on Windows. (Ivan Mitic via suresh)
Release 2.0.5-beta - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES
@ -527,6 +535,21 @@ Release 2.0.4-beta - UNRELEASED
HADOOP-9337. org.apache.hadoop.fs.DF.getMount() does not work on Mac OS. HADOOP-9337. org.apache.hadoop.fs.DF.getMount() does not work on Mac OS.
(Ivan A. Veselovsky via atm) (Ivan A. Veselovsky via atm)
HADOOP-9369. DNS#reverseDns() can return hostname with . appended at the
end. (Karthik Kambatla via atm)
Release 2.0.4-alpha - UNRELEASED
INCOMPATIBLE CHANGES
NEW FEATURES
IMPROVEMENTS
OPTIMIZATIONS
BUG FIXES
Release 2.0.3-alpha - 2013-02-06 Release 2.0.3-alpha - 2013-02-06
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES
@ -1512,6 +1535,8 @@ Release 0.23.7 - UNRELEASED
HADOOP-9209. Add shell command to dump file checksums (Todd Lipcon via HADOOP-9209. Add shell command to dump file checksums (Todd Lipcon via
jeagles) jeagles)
HADOOP-9374. Add tokens from -tokenCacheFile into UGI (daryn)
OPTIMIZATIONS OPTIMIZATIONS
HADOOP-8462. Native-code implementation of bzip2 codec. (Govind Kamat via HADOOP-8462. Native-code implementation of bzip2 codec. (Govind Kamat via

View File

@ -338,7 +338,8 @@ public static PathData[] expandAsGlob(String pattern, Configuration conf)
URI globUri = globPath.toUri(); URI globUri = globPath.toUri();
if (globUri.getScheme() != null) { if (globUri.getScheme() != null) {
globType = PathType.HAS_SCHEME; globType = PathType.HAS_SCHEME;
} else if (new File(globUri.getPath()).isAbsolute()) { } else if (!globUri.getPath().isEmpty() &&
new Path(globUri.getPath()).isAbsolute()) {
globType = PathType.SCHEMELESS_ABSOLUTE; globType = PathType.SCHEMELESS_ABSOLUTE;
} else { } else {
globType = PathType.RELATIVE; globType = PathType.RELATIVE;

View File

@ -89,7 +89,12 @@ public static String reverseDns(InetAddress hostIp, String ns)
ictx.close(); ictx.close();
} }
return attribute.get("PTR").get().toString(); String hostname = attribute.get("PTR").get().toString();
int hostnameLength = hostname.length();
if (hostname.charAt(hostnameLength - 1) == '.') {
hostname = hostname.substring(0, hostnameLength - 1);
}
return hostname;
} }
/** /**

View File

@ -42,6 +42,8 @@
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.Path;
import org.apache.hadoop.security.Credentials;
import org.apache.hadoop.security.UserGroupInformation;
/** /**
* <code>GenericOptionsParser</code> is a utility to parse command line * <code>GenericOptionsParser</code> is a utility to parse command line
@ -321,15 +323,17 @@ private void processGeneralOptions(Configuration conf,
String fileName = line.getOptionValue("tokenCacheFile"); String fileName = line.getOptionValue("tokenCacheFile");
// check if the local file exists // check if the local file exists
FileSystem localFs = FileSystem.getLocal(conf); FileSystem localFs = FileSystem.getLocal(conf);
Path p = new Path(fileName); Path p = localFs.makeQualified(new Path(fileName));
if (!localFs.exists(p)) { if (!localFs.exists(p)) {
throw new FileNotFoundException("File "+fileName+" does not exist."); throw new FileNotFoundException("File "+fileName+" does not exist.");
} }
if(LOG.isDebugEnabled()) { if(LOG.isDebugEnabled()) {
LOG.debug("setting conf tokensFile: " + fileName); LOG.debug("setting conf tokensFile: " + fileName);
} }
conf.set("mapreduce.job.credentials.json", localFs.makeQualified(p) UserGroupInformation.getCurrentUser().addCredentials(
.toString(), "from -tokenCacheFile command line option"); Credentials.readTokenStorageFile(p, conf));
conf.set("mapreduce.job.credentials.json", p.toString(),
"from -tokenCacheFile command line option");
} }
} }

View File

@ -23,11 +23,13 @@
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.net.URI;
import java.util.Arrays; import java.util.Arrays;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.Path;
import org.apache.hadoop.util.Shell;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@ -173,6 +175,25 @@ public void testAbsoluteGlob() throws Exception {
sortedString(testDir+"/d1/f1", testDir+"/d1/f1.1"), sortedString(testDir+"/d1/f1", testDir+"/d1/f1.1"),
sortedString(items) sortedString(items)
); );
String absolutePathNoDriveLetter = testDir+"/d1/f1";
if (Shell.WINDOWS) {
// testDir is an absolute path with a drive letter on Windows, i.e.
// c:/some/path
// and for the test we want something like the following
// /some/path
absolutePathNoDriveLetter = absolutePathNoDriveLetter.substring(2);
}
items = PathData.expandAsGlob(absolutePathNoDriveLetter, conf);
assertEquals(
sortedString(absolutePathNoDriveLetter),
sortedString(items)
);
items = PathData.expandAsGlob(".", conf);
assertEquals(
sortedString("."),
sortedString(items)
);
} }
@Test (timeout = 30000) @Test (timeout = 30000)

View File

@ -40,7 +40,8 @@ public class TestHAZKUtil {
"test-file"); "test-file");
/** A path which is expected not to exist */ /** A path which is expected not to exist */
private static final String BOGUS_FILE = "/xxxx-this-does-not-exist"; private static final String BOGUS_FILE =
new File("/xxxx-this-does-not-exist").getPath();
@Test @Test
public void testEmptyACL() { public void testEmptyACL() {

View File

@ -42,6 +42,15 @@ public void testProxyUserFromEnvironment() throws IOException {
BufferedReader br = new BufferedReader BufferedReader br = new BufferedReader
(new InputStreamReader(pp.getInputStream())); (new InputStreamReader(pp.getInputStream()));
String realUser = br.readLine().trim(); String realUser = br.readLine().trim();
// On Windows domain joined machine, whoami returns the username
// in the DOMAIN\\username format, so we trim the domain part before
// the comparison. We don't have to special case for Windows
// given that Unix systems do not allow slashes in usernames.
int backslashIndex = realUser.indexOf('\\');
if (backslashIndex != -1) {
realUser = realUser.substring(backslashIndex + 1);
}
assertEquals(realUser, realUgi.getUserName()); assertEquals(realUser, realUgi.getUserName());
} }
} }

View File

@ -27,6 +27,11 @@
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.security.Credentials;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.security.token.Token;
import org.apache.hadoop.security.token.delegation.AbstractDelegationTokenIdentifier;
import org.apache.commons.cli.Option; import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder; import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options; import org.apache.commons.cli.Options;
@ -164,13 +169,25 @@ public void testTokenCacheOption() throws IOException {
th instanceof FileNotFoundException); th instanceof FileNotFoundException);
// create file // create file
Path tmpPath = new Path(tmpFile.toString()); Path tmpPath = localFs.makeQualified(new Path(tmpFile.toString()));
localFs.create(tmpPath); Token<?> token = new Token<AbstractDelegationTokenIdentifier>(
"identifier".getBytes(), "password".getBytes(),
new Text("token-kind"), new Text("token-service"));
Credentials creds = new Credentials();
creds.addToken(new Text("token-alias"), token);
creds.writeTokenStorageFile(tmpPath, conf);
new GenericOptionsParser(conf, args); new GenericOptionsParser(conf, args);
String fileName = conf.get("mapreduce.job.credentials.json"); String fileName = conf.get("mapreduce.job.credentials.json");
assertNotNull("files is null", fileName); assertNotNull("files is null", fileName);
assertEquals("files option does not match", assertEquals("files option does not match", tmpPath.toString(), fileName);
localFs.makeQualified(tmpPath).toString(), fileName);
Credentials ugiCreds =
UserGroupInformation.getCurrentUser().getCredentials();
assertEquals(1, ugiCreds.numberOfTokens());
Token<?> ugiToken = ugiCreds.getToken(new Text("token-alias"));
assertNotNull(ugiToken);
assertEquals(token, ugiToken);
localFs.delete(new Path(testDir.getAbsolutePath()), true); localFs.delete(new Path(testDir.getAbsolutePath()), true);
} }

View File

@ -26,7 +26,6 @@ Trunk (Unreleased)
Azure environments. (See breakdown of tasks below for subtasks and Azure environments. (See breakdown of tasks below for subtasks and
contributors) contributors)
IMPROVEMENTS IMPROVEMENTS
HDFS-1620. Rename HdfsConstants -> HdfsServerConstants, FSConstants -> HDFS-1620. Rename HdfsConstants -> HdfsServerConstants, FSConstants ->
@ -321,7 +320,7 @@ Trunk (Unreleased)
HDFS-4297. Fix issues related to datanode concurrent reading and writing on HDFS-4297. Fix issues related to datanode concurrent reading and writing on
Windows. (Arpit Agarwal, Chuan Liu via suresh) Windows. (Arpit Agarwal, Chuan Liu via suresh)
Release 2.0.4-beta - UNRELEASED Release 2.0.5-beta - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES
@ -341,6 +340,9 @@ Release 2.0.4-beta - UNRELEASED
HDFS-4519. Support overriding jsvc binary and log file locations HDFS-4519. Support overriding jsvc binary and log file locations
when launching secure datanode. (Chris Nauroth via suresh) when launching secure datanode. (Chris Nauroth via suresh)
HDFS-4569. Small image transfer related cleanups.
(Andrew Wang via suresh)
OPTIMIZATIONS OPTIMIZATIONS
BUG FIXES BUG FIXES
@ -371,6 +373,21 @@ Release 2.0.4-beta - UNRELEASED
HDFS-4544. Error in deleting blocks should not do check disk, for HDFS-4544. Error in deleting blocks should not do check disk, for
all types of errors. (Arpit Agarwal via suresh) all types of errors. (Arpit Agarwal via suresh)
HDFS-4565. Use DFSUtil.getSpnegoKeytabKey() to get the spnego keytab key
in secondary namenode and namenode http server. (Arpit Gupta via suresh)
Release 2.0.4-alpha - UNRELEASED
INCOMPATIBLE CHANGES
NEW FEATURES
IMPROVEMENTS
OPTIMIZATIONS
BUG FIXES
Release 2.0.3-alpha - 2013-02-06 Release 2.0.3-alpha - 2013-02-06
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES
@ -2357,6 +2374,10 @@ Release 0.23.7 - UNRELEASED
HDFS-4542. Webhdfs doesn't support secure proxy users (Daryn Sharp via HDFS-4542. Webhdfs doesn't support secure proxy users (Daryn Sharp via
kihwal) kihwal)
HDFS-4560. Webhdfs cannot use tokens obtained by another user (daryn)
HDFS-4566. Webdhfs token cancelation should use authentication (daryn)
Release 0.23.6 - UNRELEASED Release 0.23.6 - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -361,7 +361,7 @@ public class DFSConfigKeys extends CommonConfigurationKeys {
// Image transfer timeout // Image transfer timeout
public static final String DFS_IMAGE_TRANSFER_TIMEOUT_KEY = "dfs.image.transfer.timeout"; public static final String DFS_IMAGE_TRANSFER_TIMEOUT_KEY = "dfs.image.transfer.timeout";
public static final int DFS_IMAGE_TRANSFER_TIMEOUT_DEFAULT = 60 * 1000; public static final int DFS_IMAGE_TRANSFER_TIMEOUT_DEFAULT = 10 * 60 * 1000;
//Keys with no defaults //Keys with no defaults
public static final String DFS_DATANODE_PLUGINS_KEY = "dfs.datanode.plugins"; public static final String DFS_DATANODE_PLUGINS_KEY = "dfs.datanode.plugins";

View File

@ -113,11 +113,8 @@ private Map<String, String> getAuthFilterParams(Configuration conf)
DFSConfigKeys.DFS_WEB_AUTHENTICATION_KERBEROS_PRINCIPAL_KEY + DFSConfigKeys.DFS_WEB_AUTHENTICATION_KERBEROS_PRINCIPAL_KEY +
"' is not set."); "' is not set.");
} }
String httpKeytab = conf.get( String httpKeytab = conf.get(DFSUtil.getSpnegoKeytabKey(conf,
DFSConfigKeys.DFS_WEB_AUTHENTICATION_KERBEROS_KEYTAB_KEY); DFSConfigKeys.DFS_NAMENODE_KEYTAB_FILE_KEY));
if (httpKeytab == null) {
httpKeytab = conf.get(DFSConfigKeys.DFS_NAMENODE_KEYTAB_FILE_KEY);
}
if (httpKeytab != null && !httpKeytab.isEmpty()) { if (httpKeytab != null && !httpKeytab.isEmpty()) {
params.put( params.put(
DFSConfigKeys.DFS_WEB_AUTHENTICATION_KERBEROS_KEYTAB_KEY, DFSConfigKeys.DFS_WEB_AUTHENTICATION_KERBEROS_KEYTAB_KEY,

View File

@ -255,15 +255,11 @@ private void initialize(final Configuration conf,
new AccessControlList(conf.get(DFS_ADMIN, " "))) { new AccessControlList(conf.get(DFS_ADMIN, " "))) {
{ {
if (UserGroupInformation.isSecurityEnabled()) { if (UserGroupInformation.isSecurityEnabled()) {
String httpKeytabKey = DFSConfigKeys.
DFS_WEB_AUTHENTICATION_KERBEROS_KEYTAB_KEY;
if (null == conf.get(httpKeytabKey)) {
httpKeytabKey = DFSConfigKeys.DFS_SECONDARY_NAMENODE_KEYTAB_FILE_KEY;
}
initSpnego( initSpnego(
conf, conf,
DFSConfigKeys.DFS_SECONDARY_NAMENODE_INTERNAL_SPNEGO_USER_NAME_KEY, DFSConfigKeys.DFS_SECONDARY_NAMENODE_INTERNAL_SPNEGO_USER_NAME_KEY,
httpKeytabKey); DFSUtil.getSpnegoKeytabKey(conf,
DFSConfigKeys.DFS_SECONDARY_NAMENODE_KEYTAB_FILE_KEY));
} }
} }
}; };

View File

@ -229,7 +229,6 @@ public static MD5Hash doGetUrl(URL url, List<File> localPaths,
SecurityUtil.openSecureHttpConnection(url); SecurityUtil.openSecureHttpConnection(url);
if (timeout <= 0) { if (timeout <= 0) {
// Set the ping interval as timeout
Configuration conf = new HdfsConfiguration(); Configuration conf = new HdfsConfiguration();
timeout = conf.getInt(DFSConfigKeys.DFS_IMAGE_TRANSFER_TIMEOUT_KEY, timeout = conf.getInt(DFSConfigKeys.DFS_IMAGE_TRANSFER_TIMEOUT_KEY,
DFSConfigKeys.DFS_IMAGE_TRANSFER_TIMEOUT_DEFAULT); DFSConfigKeys.DFS_IMAGE_TRANSFER_TIMEOUT_DEFAULT);

View File

@ -341,7 +341,8 @@ Param<?,?>[] getAuthParameters(final HttpOpParam.Op op) throws IOException {
boolean hasToken = false; boolean hasToken = false;
if (UserGroupInformation.isSecurityEnabled() && if (UserGroupInformation.isSecurityEnabled() &&
op != GetOpParam.Op.GETDELEGATIONTOKEN && op != GetOpParam.Op.GETDELEGATIONTOKEN &&
op != PutOpParam.Op.RENEWDELEGATIONTOKEN) { op != PutOpParam.Op.RENEWDELEGATIONTOKEN &&
op != PutOpParam.Op.CANCELDELEGATIONTOKEN) {
synchronized (this) { synchronized (this) {
hasToken = (delegationToken != null); hasToken = (delegationToken != null);
if (hasToken) { if (hasToken) {
@ -350,15 +351,15 @@ Param<?,?>[] getAuthParameters(final HttpOpParam.Op op) throws IOException {
} // else we are talking to an insecure cluster } // else we are talking to an insecure cluster
} }
} }
UserGroupInformation userUgi = ugi;
if (!hasToken) { if (!hasToken) {
UserGroupInformation userUgi = ugi;
UserGroupInformation realUgi = userUgi.getRealUser(); UserGroupInformation realUgi = userUgi.getRealUser();
if (realUgi != null) { // proxy user if (realUgi != null) { // proxy user
authParams.add(new DoAsParam(userUgi.getShortUserName())); authParams.add(new DoAsParam(userUgi.getShortUserName()));
userUgi = realUgi; userUgi = realUgi;
} }
}
authParams.add(new UserParam(userUgi.getShortUserName())); authParams.add(new UserParam(userUgi.getShortUserName()));
}
return authParams.toArray(new Param<?,?>[0]); return authParams.toArray(new Param<?,?>[0]);
} }

View File

@ -733,12 +733,29 @@
</description> </description>
</property> </property>
<property>
<name>dfs.image.transfer.timeout</name>
<value>600000</value>
<description>
Timeout for image transfer in milliseconds. This timeout and the related
dfs.image.transfer.bandwidthPerSec parameter should be configured such
that normal image transfer can complete within the timeout.
This timeout prevents client hangs when the sender fails during
image transfer, which is particularly important during checkpointing.
Note that this timeout applies to the entirety of image transfer, and
is not a socket timeout.
</description>
</property>
<property> <property>
<name>dfs.image.transfer.bandwidthPerSec</name> <name>dfs.image.transfer.bandwidthPerSec</name>
<value>0</value> <value>0</value>
<description> <description>
Specifies the maximum amount of bandwidth that can be utilized for image Maximum bandwidth used for image transfer in bytes per second.
transfer in term of the number of bytes per second. This can help keep normal namenode operations responsive during
checkpointing. The maximum bandwidth and timeout in
dfs.image.transfer.timeout should be set such that normal image
transfers can complete successfully.
A default value of 0 indicates that throttling is disabled. A default value of 0 indicates that throttling is disabled.
</description> </description>
</property> </property>

View File

@ -134,7 +134,7 @@ public void testSecureAuthParamsInUrl() throws IOException {
}, },
renewTokenUrl); renewTokenUrl);
// send user+token // send token
URL cancelTokenUrl = webhdfs.toUrl(PutOpParam.Op.CANCELDELEGATIONTOKEN, URL cancelTokenUrl = webhdfs.toUrl(PutOpParam.Op.CANCELDELEGATIONTOKEN,
fsPath, new TokenArgumentParam(tokenString)); fsPath, new TokenArgumentParam(tokenString));
checkQueryParams( checkQueryParams(
@ -142,16 +142,14 @@ public void testSecureAuthParamsInUrl() throws IOException {
PutOpParam.Op.CANCELDELEGATIONTOKEN.toQueryString(), PutOpParam.Op.CANCELDELEGATIONTOKEN.toQueryString(),
new UserParam(ugi.getShortUserName()).toString(), new UserParam(ugi.getShortUserName()).toString(),
new TokenArgumentParam(tokenString).toString(), new TokenArgumentParam(tokenString).toString(),
new DelegationParam(tokenString).toString()
}, },
cancelTokenUrl); cancelTokenUrl);
// send user+token // send token
URL fileStatusUrl = webhdfs.toUrl(GetOpParam.Op.GETFILESTATUS, fsPath); URL fileStatusUrl = webhdfs.toUrl(GetOpParam.Op.GETFILESTATUS, fsPath);
checkQueryParams( checkQueryParams(
new String[]{ new String[]{
GetOpParam.Op.GETFILESTATUS.toQueryString(), GetOpParam.Op.GETFILESTATUS.toQueryString(),
new UserParam(ugi.getShortUserName()).toString(),
new DelegationParam(tokenString).toString() new DelegationParam(tokenString).toString()
}, },
fileStatusUrl); fileStatusUrl);
@ -219,24 +217,23 @@ public void testSecureProxyAuthParamsInUrl() throws IOException {
}, },
renewTokenUrl); renewTokenUrl);
// send effective+token // send token
URL cancelTokenUrl = webhdfs.toUrl(PutOpParam.Op.CANCELDELEGATIONTOKEN, URL cancelTokenUrl = webhdfs.toUrl(PutOpParam.Op.CANCELDELEGATIONTOKEN,
fsPath, new TokenArgumentParam(tokenString)); fsPath, new TokenArgumentParam(tokenString));
checkQueryParams( checkQueryParams(
new String[]{ new String[]{
PutOpParam.Op.CANCELDELEGATIONTOKEN.toQueryString(), PutOpParam.Op.CANCELDELEGATIONTOKEN.toQueryString(),
new UserParam(ugi.getShortUserName()).toString(), new UserParam(ugi.getRealUser().getShortUserName()).toString(),
new DoAsParam(ugi.getShortUserName()).toString(),
new TokenArgumentParam(tokenString).toString(), new TokenArgumentParam(tokenString).toString(),
new DelegationParam(tokenString).toString()
}, },
cancelTokenUrl); cancelTokenUrl);
// send effective+token // send token
URL fileStatusUrl = webhdfs.toUrl(GetOpParam.Op.GETFILESTATUS, fsPath); URL fileStatusUrl = webhdfs.toUrl(GetOpParam.Op.GETFILESTATUS, fsPath);
checkQueryParams( checkQueryParams(
new String[]{ new String[]{
GetOpParam.Op.GETFILESTATUS.toQueryString(), GetOpParam.Op.GETFILESTATUS.toQueryString(),
new UserParam(ugi.getShortUserName()).toString(),
new DelegationParam(tokenString).toString() new DelegationParam(tokenString).toString()
}, },
fileStatusUrl); fileStatusUrl);

View File

@ -180,7 +180,7 @@ Trunk (Unreleased)
HADOOP-9372. Fix bad timeout annotations on tests. HADOOP-9372. Fix bad timeout annotations on tests.
(Arpit Agarwal via suresh) (Arpit Agarwal via suresh)
Release 2.0.4-beta - UNRELEASED Release 2.0.5-beta - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES
@ -230,6 +230,18 @@ Release 2.0.4-beta - UNRELEASED
appropriately used and that on-disk segments are correctly sorted on appropriately used and that on-disk segments are correctly sorted on
file-size. (Anty Rao and Ravi Prakash via acmurthy) file-size. (Anty Rao and Ravi Prakash via acmurthy)
Release 2.0.4-alpha - UNRELEASED
INCOMPATIBLE CHANGES
NEW FEATURES
IMPROVEMENTS
OPTIMIZATIONS
BUG FIXES
Release 2.0.3-alpha - 2013-02-06 Release 2.0.3-alpha - 2013-02-06
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES
@ -792,6 +804,9 @@ Release 0.23.7 - UNRELEASED
MAPREDUCE-5043. Fetch failure processing can cause AM event queue to MAPREDUCE-5043. Fetch failure processing can cause AM event queue to
backup and eventually OOM (Jason Lowe via bobby) backup and eventually OOM (Jason Lowe via bobby)
MAPREDUCE-5023. History Server Web Services missing Job Counters (Ravi
Prakash via tgraves)
Release 0.23.6 - UNRELEASED Release 0.23.6 - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -71,10 +71,15 @@ public JobCounterInfo(AppContext ctx, Job job) {
} }
private void getCounters(AppContext ctx, Job job) { private void getCounters(AppContext ctx, Job job) {
total = new Counters();
if (job == null) { if (job == null) {
return; return;
} }
total = job.getAllCounters();
boolean needTotalCounters = false;
if (total == null) {
total = new Counters();
needTotalCounters = true;
}
map = new Counters(); map = new Counters();
reduce = new Counters(); reduce = new Counters();
// Get all types of counters // Get all types of counters
@ -84,7 +89,6 @@ private void getCounters(AppContext ctx, Job job) {
if (counters == null) { if (counters == null) {
continue; continue;
} }
total.incrAllCounters(counters);
switch (t.getType()) { switch (t.getType()) {
case MAP: case MAP:
map.incrAllCounters(counters); map.incrAllCounters(counters);
@ -93,6 +97,9 @@ private void getCounters(AppContext ctx, Job job) {
reduce.incrAllCounters(counters); reduce.incrAllCounters(counters);
break; break;
} }
if (needTotalCounters) {
total.incrAllCounters(counters);
}
} }
} }

View File

@ -48,7 +48,7 @@ Trunk - Unreleased
YARN-359. Fixing commands for container signalling in Windows. (Chris Nauroth YARN-359. Fixing commands for container signalling in Windows. (Chris Nauroth
via vinodkv) via vinodkv)
Release 2.0.4-beta - UNRELEASED Release 2.0.5-beta - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES
@ -91,6 +91,18 @@ Release 2.0.4-beta - UNRELEASED
YARN-376. Fixes a bug which would prevent the NM knowing about completed YARN-376. Fixes a bug which would prevent the NM knowing about completed
containers and applications. (Jason Lowe via sseth) containers and applications. (Jason Lowe via sseth)
Release 2.0.4-alpha - UNRELEASED
INCOMPATIBLE CHANGES
NEW FEATURES
IMPROVEMENTS
OPTIMIZATIONS
BUG FIXES
YARN-429. capacity-scheduler config missing from yarn-test artifact. YARN-429. capacity-scheduler config missing from yarn-test artifact.
(sseth via hitesh) (sseth via hitesh)