package com.linkedin.databus2.core; /* * * Copyright 2013 LinkedIn Corp. All rights reserved * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ import com.linkedin.databus.core.util.ConfigBuilder; import com.linkedin.databus.core.util.InvalidConfigException; /** A builder for error retries static configuration */ public class BackoffTimerStaticConfigBuilder implements ConfigBuilder<BackoffTimerStaticConfig> { public static final long NO_SLEEP = 0L; private long _initSleep = 0; private long _maxSleep = 60000; //1 min private double _sleepIncFactor = 2.0; private long _sleepIncDelta = 1; private int _maxRetryNum = 10; public BackoffTimerStaticConfigBuilder() { } public long getInitSleep() { return _initSleep; } public void setInitSleep(long initSleep) { _initSleep = initSleep; } public long getMaxSleep() { return _maxSleep; } public void setMaxSleep(long maxSleep) { _maxSleep = maxSleep; } public double getSleepIncFactor() { return _sleepIncFactor; } public void setSleepIncFactor(double sleepIncFactor) { _sleepIncFactor = sleepIncFactor; } public long getSleepIncDelta() { return _sleepIncDelta; } public void setSleepIncDelta(long sleepIncDelta) { _sleepIncDelta = sleepIncDelta; } public int getMaxRetryNum() { return _maxRetryNum; } public void setMaxRetryNum(int maxRetryNum) { _maxRetryNum = maxRetryNum; } @Override public BackoffTimerStaticConfig build() throws InvalidConfigException { if (0 > _initSleep) throw new InvalidConfigException("initial sleep must be non-negative:" + _initSleep); if (0 > _maxSleep) throw new InvalidConfigException("max sleep must be non-negative: " + _maxSleep); BackoffTimerStaticConfig newConfig = new BackoffTimerStaticConfig(_initSleep, _maxSleep, _sleepIncFactor, _sleepIncDelta, _maxRetryNum); //sanity check long secondSleep = newConfig.calcNextSleep(_initSleep); if (secondSleep < _initSleep || secondSleep < 0) throw new InvalidConfigException("sleeps are decreasing!"); return newConfig; } @Override public String toString() { return "BackoffTimerStaticConfigBuilder [_initSleep=" + _initSleep + ", _maxSleep=" + _maxSleep + ", _sleepIncFactor=" + _sleepIncFactor + ", _sleepIncDelta=" + _sleepIncDelta + ", _maxRetryNum=" + _maxRetryNum + "]"; } }