2 * Copyright (c) 2017 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.netvirt.bgpmanager;
11 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
15 @SuppressFBWarnings("NM_CLASS_NOT_EXCEPTION")
16 public class RetryOnException {
17 public static final int DEFAULT_RETRIES = Integer.MAX_VALUE;
18 public static final long TIME_IN_MILLI = 1000;
19 public static final int MAX_DELAY_FACTOR = 15;
20 private static final Logger LOG = LoggerFactory.getLogger(RetryOnException.class);
22 private int numberOfTriesLeft;
23 private int delayFactor;
25 public RetryOnException(int numberOfRetries) {
26 numberOfTriesLeft = numberOfRetries;
29 public int getNumberOfTriesLeft() {
30 return numberOfTriesLeft;
33 public boolean shouldRetry() {
34 return numberOfTriesLeft > 0;
37 public boolean decrementAndRetry() {
39 return numberOfTriesLeft > 0;
42 public void errorOccured() {
45 LOG.info("number of retries left {} delay factor {}", numberOfTriesLeft, delayFactor);
52 public void errorOccured(int decrementTries) {
53 numberOfTriesLeft = numberOfTriesLeft - decrementTries;
55 LOG.info("number of retries left {} delay factor {}", numberOfTriesLeft, delayFactor);
63 public long getTimeToWait() {
65 Disabling exponential backoff
66 if (delayFactor > MAX_DELAY_FACTOR) { // max wait time is 225 seconds
69 return delayFactor * delayFactor * TIME_IN_MILLI;
74 private void waitUntilNextTry() {
76 Thread.sleep(getTimeToWait());
77 } catch (InterruptedException ignored) {
78 LOG.error("Exception while waiting for next try", ignored);