HADOOP-10111. Allow DU to be initialized with an initial value (Kihwal Lee via jeagles)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1544239 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Jonathan Turner Eagles 2013-11-21 16:13:16 +00:00
parent 709b74e515
commit 18b53b780d
3 changed files with 54 additions and 7 deletions

View File

@ -385,6 +385,9 @@ Release 2.3.0 - UNRELEASED
HADOOP-10103. update commons-lang to 2.6 (Akira AJISAKA via stevel) HADOOP-10103. update commons-lang to 2.6 (Akira AJISAKA via stevel)
HADOOP-10111. Allow DU to be initialized with an initial value (Kihwal Lee
via jeagles)
OPTIMIZATIONS OPTIMIZATIONS
HADOOP-9748. Reduce blocking on UGI.ensureInitialized (daryn) HADOOP-9748. Reduce blocking on UGI.ensureInitialized (daryn)

View File

@ -47,6 +47,17 @@ public class DU extends Shell {
* @throws IOException if we fail to refresh the disk usage * @throws IOException if we fail to refresh the disk usage
*/ */
public DU(File path, long interval) throws IOException { public DU(File path, long interval) throws IOException {
this(path, interval, -1L);
}
/**
* Keeps track of disk usage.
* @param path the path to check disk usage in
* @param interval refresh the disk usage at this interval
* @param initialUsed use this value until next refresh
* @throws IOException if we fail to refresh the disk usage
*/
public DU(File path, long interval, long initialUsed) throws IOException {
super(0); super(0);
//we set the Shell interval to 0 so it will always run our command //we set the Shell interval to 0 so it will always run our command
@ -54,8 +65,12 @@ public DU(File path, long interval) throws IOException {
this.refreshInterval = interval; this.refreshInterval = interval;
this.dirPath = path.getCanonicalPath(); this.dirPath = path.getCanonicalPath();
//populate the used variable //populate the used variable if the initial value is not specified.
if (initialUsed < 0) {
run(); run();
} else {
this.used.set(initialUsed);
}
} }
/** /**
@ -65,10 +80,24 @@ public DU(File path, long interval) throws IOException {
* @throws IOException if we fail to refresh the disk usage * @throws IOException if we fail to refresh the disk usage
*/ */
public DU(File path, Configuration conf) throws IOException { public DU(File path, Configuration conf) throws IOException {
this(path, conf.getLong(CommonConfigurationKeys.FS_DU_INTERVAL_KEY, this(path, conf, -1L);
CommonConfigurationKeys.FS_DU_INTERVAL_DEFAULT));
} }
/**
* Keeps track of disk usage.
* @param path the path to check disk usage in
* @param conf configuration object
* @param initialUsed use it until the next refresh.
* @throws IOException if we fail to refresh the disk usage
*/
public DU(File path, Configuration conf, long initialUsed)
throws IOException {
this(path, conf.getLong(CommonConfigurationKeys.FS_DU_INTERVAL_KEY,
CommonConfigurationKeys.FS_DU_INTERVAL_DEFAULT), initialUsed);
}
/** /**
* This thread refreshes the "used" variable. * This thread refreshes the "used" variable.
* *

View File

@ -116,4 +116,19 @@ public void testDUGetUsedWillNotReturnNegative() throws IOException {
long duSize = du.getUsed(); long duSize = du.getUsed();
assertTrue(String.valueOf(duSize), duSize >= 0L); assertTrue(String.valueOf(duSize), duSize >= 0L);
} }
public void testDUSetInitialValue() throws IOException {
File file = new File(DU_DIR, "dataX");
createFile(file, 8192);
DU du = new DU(file, 3000, 1024);
du.start();
assertTrue("Initial usage setting not honored", du.getUsed() == 1024);
// wait until the first du runs.
try {
Thread.sleep(5000);
} catch (InterruptedException ie) {}
assertTrue("Usage didn't get updated", du.getUsed() == 8192);
}
} }