001/*
002 *
003 * Licensed to the Apache Software Foundation (ASF) under one
004 * or more contributor license agreements.  See the NOTICE file
005 * distributed with this work for additional information
006 * regarding copyright ownership.  The ASF licenses this file
007 * to you under the Apache License, Version 2.0 (the
008 * "License"); you may not use this file except in compliance
009 * with the License.  You may obtain a copy of the License at
010 *
011 *     http://www.apache.org/licenses/LICENSE-2.0
012 *
013 * Unless required by applicable law or agreed to in writing, software
014 * distributed under the License is distributed on an "AS IS" BASIS,
015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
016 * See the License for the specific language governing permissions and
017 * limitations under the License.
018 */
019package org.apache.hadoop.hbase.util;
020
021import org.apache.yetus.audience.InterfaceAudience;
022
023/**
024 * Uses an incrementing algorithm instead of the default.
025 */
026@InterfaceAudience.Private
027public class IncrementingEnvironmentEdge implements EnvironmentEdge {
028
029  private long timeIncrement;
030
031  /**
032   * Construct an incremental edge starting from currentTimeMillis
033   */
034  public IncrementingEnvironmentEdge() {
035    this(System.currentTimeMillis());
036  }
037
038  /**
039   * Construct an incremental edge with an initial amount
040   * @param initialAmount the initial value to start with
041   */
042  public IncrementingEnvironmentEdge(long initialAmount) {
043    this.timeIncrement = initialAmount;
044  }
045
046  /**
047   * {@inheritDoc}
048   * <p>
049   * This method increments a known value for the current time each time this
050   * method is called. The first value is 1.
051   * </p>
052   */
053  @Override
054  public synchronized long currentTime() {
055    return timeIncrement++;
056  }
057
058  /**
059   * Increment the time by the given amount
060   */
061  public synchronized long incrementTime(long amount) {
062    timeIncrement += amount;
063    return timeIncrement;
064  }
065}