diff --git a/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon b/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon index 742949891db..2a5bfc72033 100644 --- a/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon +++ b/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.jamon @@ -476,7 +476,7 @@ AssignmentManager assignmentManager = master.getAssignmentManager();
<% snapshots.size() %> snapshot(s) in set.
+<% snapshots.size() %> snapshot(s) in set. [Snapshot Storefile stats]
%if> %def> diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotInfo.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotInfo.java index d93535b3d87..2e9a8d910f3 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotInfo.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotInfo.java @@ -23,8 +23,12 @@ import java.io.FileNotFoundException; import java.net.URI; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutorService; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; @@ -122,6 +126,7 @@ public final class SnapshotInfo extends Configured implements Tool { private AtomicInteger logsCount = new AtomicInteger(); private AtomicLong hfileArchiveSize = new AtomicLong(); private AtomicLong hfileSize = new AtomicLong(); + private AtomicLong nonSharedHfilesArchiveSize = new AtomicLong(); private AtomicLong logSize = new AtomicLong(); private final SnapshotDescription snapshot; @@ -194,6 +199,15 @@ public final class SnapshotInfo extends Configured implements Tool { return hfileArchiveSize.get(); } + /** @return the total size of the store files in the archive which is not shared + * with other snapshots and tables. + * This is only calculated when getSnapshotStats(Configuration, SnapshotDescription, Map) + * is called with a non-null Map + */ + public long getNonSharedArchivedStoreFilesSize() { + return nonSharedHfilesArchiveSize.get(); + } + /** @return the percentage of the shared store files */ public float getSharedStoreFilePercentage() { return ((float)hfileSize.get() / (hfileSize.get() + hfileArchiveSize.get())) * 100; @@ -204,15 +218,46 @@ public final class SnapshotInfo extends Configured implements Tool { return logSize.get(); } + /** Check if for a give file in archive, if there are other snapshots/tables still + * reference it. + * @param filePath file path in archive + * @param snapshotFilesMap a map for store files in snapshots about how many snapshots refer + * to it. + * @return true or false + */ + private boolean isArchivedFileStillReferenced(final Path filePath, + final MapSnapshot Name | +Table | +Creation Time | +Shared Storefile Size | +Archived Storefile Size | +
---|---|---|---|---|
+ <%= snapshotDesc.getName() %> | + <% + TableName snapshotTable = TableName.valueOf(snapshotDesc.getTable()); + SnapshotInfo.SnapshotStats stats = SnapshotInfo.getSnapshotStats(master.getConfiguration(), + snapshotDesc, filesMap); + totalUnsharedArchivedSize += stats.getNonSharedArchivedStoreFilesSize(); + tableExists = admin.tableExists(snapshotTable); + %> ++ <% if (tableExists) { %> + + <%= snapshotTable.getNameAsString() %> + <% } else { %> + <%= snapshotTable.getNameAsString() %> + <% } %> + | +<%= new Date(snapshotDesc.getCreationTime()) %> | +<%= StringUtils.humanReadableInt(stats.getSharedStoreFilesSize()) %> | +<%= StringUtils.humanReadableInt(stats.getArchivedStoreFileSize()) %> + (<%= StringUtils.humanReadableInt(stats.getNonSharedArchivedStoreFilesSize()) %>) | +