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
24 import java.io.IOException;
25
26 import org.apache.commons.logging.Log;
27 import org.apache.commons.logging.LogFactory;
28 import org.apache.hadoop.hbase.classification.InterfaceAudience;
29 import org.apache.hadoop.hbase.wal.WALKey;
30 import org.apache.hadoop.hbase.CompatibilitySingletonFactory;
31 import org.apache.hadoop.util.StringUtils;
32
33
34
35
36
37 @InterfaceAudience.Private
38 public class MetricsWAL extends WALActionsListener.Base {
39 static final Log LOG = LogFactory.getLog(MetricsWAL.class);
40
41 private final MetricsWALSource source;
42
43 public MetricsWAL() {
44 this(CompatibilitySingletonFactory.getInstance(MetricsWALSource.class));
45 }
46
47 @VisibleForTesting
48 MetricsWAL(MetricsWALSource s) {
49 this.source = s;
50 }
51
52 @Override
53 public void postSync(final long timeInNanos, final int handlerSyncs) {
54 source.incrementSyncTime(timeInNanos/1000000L);
55 }
56
57 @Override
58 public void postAppend(final long size, final long time, final WALKey logkey,
59 final WALEdit logEdit) throws IOException {
60 source.incrementAppendCount();
61 source.incrementAppendTime(time);
62 source.incrementAppendSize(size);
63 source.incrementWrittenBytes(size);
64
65 if (time > 1000) {
66 source.incrementSlowAppendCount();
67 LOG.warn(String.format("%s took %d ms appending an edit to wal; len~=%s",
68 Thread.currentThread().getName(),
69 time,
70 StringUtils.humanReadableInt(size)));
71 }
72 }
73
74 @Override
75 public void logRollRequested(boolean underReplicated) {
76 source.incrementLogRollRequested();
77 if (underReplicated) {
78 source.incrementLowReplicationLogRoll();
79 }
80 }
81 }