1 /** 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 19 package org.apache.hadoop.hbase.replication.regionserver; 20 21 import org.apache.hadoop.hbase.classification.InterfaceAudience; 22 import org.apache.hadoop.hbase.CompatibilitySingletonFactory; 23 24 /** 25 * This class is for maintaining the various replication statistics for a sink and publishing them 26 * through the metrics interfaces. 27 */ 28 @InterfaceAudience.Private 29 public class MetricsSink { 30 31 private long lastTimestampForAge = System.currentTimeMillis(); 32 private final MetricsReplicationSinkSource mss; 33 34 public MetricsSink() { 35 mss = 36 CompatibilitySingletonFactory.getInstance(MetricsReplicationSourceFactory.class).getSink(); 37 } 38 39 /** 40 * Set the age of the last applied operation 41 * 42 * @param timestamp The timestamp of the last operation applied. 43 * @return the age that was set 44 */ 45 public long setAgeOfLastAppliedOp(long timestamp) { 46 long age = 0; 47 if (lastTimestampForAge != timestamp) { 48 lastTimestampForAge = timestamp; 49 age = System.currentTimeMillis() - lastTimestampForAge; 50 } 51 mss.setLastAppliedOpAge(age); 52 return age; 53 } 54 55 /** 56 * Refreshing the age makes sure the value returned is the actual one and 57 * not the one set a replication time 58 * @return refreshed age 59 */ 60 public long refreshAgeOfLastAppliedOp() { 61 return setAgeOfLastAppliedOp(lastTimestampForAge); 62 } 63 64 /** 65 * Convience method to change metrics when a batch of operations are applied. 66 * 67 * @param batchSize 68 */ 69 public void applyBatch(long batchSize) { 70 mss.incrAppliedBatches(1); 71 mss.incrAppliedOps(batchSize); 72 } 73 74 /** 75 * Get the Age of Last Applied Op 76 * @return ageOfLastAppliedOp 77 */ 78 public long getAgeOfLastAppliedOp() { 79 return mss.getLastAppliedOpAge(); 80 } 81 82 /** 83 * Get the TimeStampOfLastAppliedOp. If no replication Op applied yet, the value is the timestamp 84 * at which hbase instance starts 85 * @return timeStampsOfLastAppliedOp; 86 */ 87 public long getTimeStampOfLastAppliedOp() { 88 return this.lastTimestampForAge; 89 } 90 91 }