diff --git a/CHANGES.txt b/CHANGES.txt index 4bb4e45be4f..1720df98ea0 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -18,6 +18,9 @@ Trunk (unreleased changes) HADOOP-6853. Common component of HDFS-1045. (jghoman) + HADOOP-6859 - Introduce additional statistics to FileSystem to track + file system operations (suresh) + IMPROVEMENTS HADOOP-6644. util.Shell getGROUPS_FOR_USER_COMMAND method name diff --git a/src/java/org/apache/hadoop/fs/FileSystem.java b/src/java/org/apache/hadoop/fs/FileSystem.java index 47ce1a40872..482a51b7170 100644 --- a/src/java/org/apache/hadoop/fs/FileSystem.java +++ b/src/java/org/apache/hadoop/fs/FileSystem.java @@ -33,8 +33,8 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; +import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; -import java.util.regex.Pattern; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -42,7 +42,6 @@ import org.apache.hadoop.classification.InterfaceAudience; import org.apache.hadoop.classification.InterfaceStability; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; -import org.apache.hadoop.fs.Options.CreateOpts; import org.apache.hadoop.fs.Options.Rename; import org.apache.hadoop.fs.permission.FsPermission; import org.apache.hadoop.fs.CommonConfigurationKeys; @@ -1783,6 +1782,9 @@ public abstract class FileSystem extends Configured implements Closeable { private final String scheme; private AtomicLong bytesRead = new AtomicLong(); private AtomicLong bytesWritten = new AtomicLong(); + private AtomicInteger readOps = new AtomicInteger(); + private AtomicInteger largeReadOps = new AtomicInteger(); + private AtomicInteger writeOps = new AtomicInteger(); public Statistics(String scheme) { this.scheme = scheme; @@ -1804,6 +1806,30 @@ public abstract class FileSystem extends Configured implements Closeable { bytesWritten.getAndAdd(newBytes); } + /** + * Increment the number of read operations + * @param count number of read operations + */ + public void incrementReadOps(int count) { + readOps.getAndAdd(count); + } + + /** + * Increment the number of large read operations + * @param count number of large read operations + */ + public void incrementLargeReadOps(int count) { + largeReadOps.getAndAdd(count); + } + + /** + * Increment the number of write operations + * @param count number of write operations + */ + public void incrementWriteOps(int count) { + writeOps.getAndAdd(count); + } + /** * Get the total number of bytes read * @return the number of bytes @@ -1820,9 +1846,36 @@ public abstract class FileSystem extends Configured implements Closeable { return bytesWritten.get(); } + /** + * Get the number of file system read operations such as list files + * @return number of read operations + */ + public int getReadOps() { + return readOps.get() + largeReadOps.get(); + } + + /** + * Get the number of large file system read operations such as list files + * under a large directory + * @return number of large read operations + */ + public int getLargeReadOps() { + return largeReadOps.get(); + } + + /** + * Get the number of file system write operations such as create, append + * rename etc. + * @return number of write operations + */ + public int getWriteOps() { + return writeOps.get(); + } + public String toString() { - return bytesRead + " bytes read and " + bytesWritten + - " bytes written"; + return bytesRead + " bytes read, " + bytesWritten + " bytes written, " + + readOps + " read ops, " + largeReadOps + " large read ops, " + + writeOps + " write ops"; } /**