Skip to content

Commit

Permalink
HBASE-16661 Add last major compaction age to per-region metrics
Browse files Browse the repository at this point in the history
Signed-off-by: Gary Helmling <garyh@apache.org>
  • Loading branch information
Dustin Pho authored and ghelmling committed Oct 10, 2016
1 parent 341f049 commit fcef2c0
Show file tree
Hide file tree
Showing 8 changed files with 43 additions and 8 deletions.
Expand Up @@ -29,10 +29,12 @@ public interface MetricsRegionSource extends Comparable<MetricsRegionSource> {
String SIZE_VALUE_NAME = "size";
String COMPACTIONS_COMPLETED_COUNT = "compactionsCompletedCount";
String COMPACTIONS_FAILED_COUNT = "compactionsFailedCount";
String LAST_MAJOR_COMPACTION_AGE = "lastMajorCompactionAge";
String NUM_BYTES_COMPACTED_COUNT = "numBytesCompactedCount";
String NUM_FILES_COMPACTED_COUNT = "numFilesCompactedCount";
String COMPACTIONS_COMPLETED_DESC = "Number of compactions that have completed.";
String COMPACTIONS_FAILED_DESC = "Number of compactions that have failed.";
String LAST_MAJOR_COMPACTION_DESC = "Age of the last major compaction in milliseconds.";
String NUM_BYTES_COMPACTED_DESC =
"Sum of filesize on all files entering a finished, successful or aborted, compaction";
String NUM_FILES_COMPACTED_DESC =
Expand Down
Expand Up @@ -105,6 +105,11 @@ public interface MetricsRegionWrapper {

long getNumCompactionsCompleted();

/**
* @return Age of the last major compaction
*/
long getLastMajorCompactionAge();

/**
* Returns the total number of compactions that have been reported as failed on this region.
* Note that a given compaction can be reported as both completed and failed if an exception
Expand Down
Expand Up @@ -268,6 +268,10 @@ void snapshot(MetricsRecordBuilder mrb, boolean ignored) {
regionNamePrefix + MetricsRegionSource.COMPACTIONS_FAILED_COUNT,
MetricsRegionSource.COMPACTIONS_FAILED_DESC),
this.regionWrapper.getNumCompactionsFailed());
mrb.addCounter(Interns.info(
regionNamePrefix + MetricsRegionSource.LAST_MAJOR_COMPACTION_AGE,
MetricsRegionSource.LAST_MAJOR_COMPACTION_DESC),
this.regionWrapper.getLastMajorCompactionAge());
mrb.addCounter(Interns.info(
regionNamePrefix + MetricsRegionSource.NUM_BYTES_COMPACTED_COUNT,
MetricsRegionSource.NUM_BYTES_COMPACTED_DESC),
Expand Down
Expand Up @@ -146,6 +146,11 @@ public long getNumBytesCompacted() {
return 0;
}

@Override
public long getLastMajorCompactionAge() {
return 0;
}

@Override
public long getNumCompactionsCompleted() {
return 0;
Expand Down
Expand Up @@ -1707,7 +1707,7 @@ public long getEarliestFlushTimeForAllStores() {
}

@Override
public long getOldestHfileTs(boolean majorCompactioOnly) throws IOException {
public long getOldestHfileTs(boolean majorCompactionOnly) throws IOException {
long result = Long.MAX_VALUE;
for (Store store : getStores()) {
Collection<StoreFile> storeFiles = store.getStorefiles();
Expand All @@ -1717,12 +1717,9 @@ public long getOldestHfileTs(boolean majorCompactioOnly) throws IOException {
if (sfReader == null) continue;
HFile.Reader reader = sfReader.getHFileReader();
if (reader == null) continue;
if (majorCompactioOnly) {
if (majorCompactionOnly) {
byte[] val = reader.loadFileInfo().get(StoreFile.MAJOR_COMPACTION_KEY);
if (val == null) continue;
if (val == null || !Bytes.toBoolean(val)) {
continue;
}
if (val == null || !Bytes.toBoolean(val)) continue;
}
result = Math.min(result, reader.getFileContext().getFileCreateTime());
}
Expand Down
Expand Up @@ -25,15 +25,20 @@
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.hbase.classification.InterfaceAudience;
import org.apache.hadoop.hbase.CompatibilitySingletonFactory;
import org.apache.hadoop.hbase.HRegionInfo;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
import org.apache.hadoop.metrics2.MetricsExecutor;

@InterfaceAudience.Private
public class MetricsRegionWrapperImpl implements MetricsRegionWrapper, Closeable {

private static final Log LOG = LogFactory.getLog(MetricsRegionWrapperImpl.class);

public static final int PERIOD = 45;
public static final String UNKNOWN = "unknown";

Expand Down Expand Up @@ -140,6 +145,18 @@ public long getNumCompactionsCompleted() {
return this.region.compactionsFinished.get();
}

@Override
public long getLastMajorCompactionAge() {
long lastMajorCompactionTs = 0L;
try {
lastMajorCompactionTs = this.region.getOldestHfileTs(true);
} catch (IOException ioe) {
LOG.error("Could not load HFile info ", ioe);
}
long now = EnvironmentEdgeManager.currentTime();
return now - lastMajorCompactionTs;
}

@Override
public long getNumCompactionsFailed() {
return this.region.compactionsFailed.get();
Expand Down
Expand Up @@ -140,10 +140,10 @@ public interface Region extends ConfigurationObserver {

/**
* This can be used to determine the last time all files of this region were major compacted.
* @param majorCompactioOnly Only consider HFile that are the result of major compaction
* @param majorCompactionOnly Only consider HFile that are the result of major compaction
* @return the timestamp of the oldest HFile for all stores of this region
*/
long getOldestHfileTs(boolean majorCompactioOnly) throws IOException;
long getOldestHfileTs(boolean majorCompactionOnly) throws IOException;

/**
* @return map of column family names to max sequence id that was read from storage when this
Expand Down
Expand Up @@ -120,6 +120,11 @@ public long getNumCompactionsCompleted() {
return 0;
}

@Override
public long getLastMajorCompactionAge() {
return 0;
}

@Override
public long getNumCompactionsFailed() {
return 0;
Expand Down

0 comments on commit fcef2c0

Please sign in to comment.