1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.hadoop.hbase.regionserver.wal;
21
22 import com.google.common.annotations.VisibleForTesting;
23 import org.apache.commons.logging.Log;
24 import org.apache.commons.logging.LogFactory;
25 import org.apache.hadoop.hbase.classification.InterfaceAudience;
26 import org.apache.hadoop.hbase.CompatibilitySingletonFactory;
27 import org.apache.hadoop.util.StringUtils;
28
29
30
31
32
33 @InterfaceAudience.Private
34 public class MetricsWAL extends WALActionsListener.Base {
35 private static final Log LOG = LogFactory.getLog(MetricsWAL.class);
36
37 private final MetricsWALSource source;
38
39 public MetricsWAL() {
40 this(CompatibilitySingletonFactory.getInstance(MetricsWALSource.class));
41 }
42
43 @VisibleForTesting
44 MetricsWAL(MetricsWALSource s) {
45 this.source = s;
46 }
47
48 @Override
49 public void postSync(final long timeInNanos, final int handlerSyncs) {
50 source.incrementSyncTime(timeInNanos/1000000L);
51 }
52
53 @Override
54 public void postAppend(final long size, final long time) {
55 source.incrementAppendCount();
56 source.incrementAppendTime(time);
57 source.incrementAppendSize(size);
58
59 if (time > 1000) {
60 source.incrementSlowAppendCount();
61 LOG.warn(String.format("%s took %d ms appending an edit to wal; len~=%s",
62 Thread.currentThread().getName(),
63 time,
64 StringUtils.humanReadableInt(size)));
65 }
66 }
67
68 @Override
69 public void logRollRequested(boolean underReplicated) {
70 source.incrementLogRollRequested();
71 if (underReplicated) {
72 source.incrementLowReplicationLogRoll();
73 }
74 }
75 }