Skip to content

Commit 5d775d2

Browse files
added retrysettings
1 parent f4f2b3c commit 5d775d2

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from datetime import timedelta
2+
import random
3+
4+
class RetrySettings(object):
5+
6+
def __init__(self, maximum_retries = None):
7+
8+
self.__default_number_of_retries = 0
9+
self.__maximum_allowed_number_of_retries = 5
10+
self.__minimum_retry_time = timedelta(seconds=1)
11+
self.__maximum_retry_time = timedelta(seconds=10)
12+
13+
if maximum_retries:
14+
if maximum_retries < 0:
15+
raise ValueError("maximumNumberOfRetries must be greater than 0")
16+
if maximum_retries > self.__maximum_allowed_number_of_retries:
17+
raise ValueError("The maximum number of allowed retries is ", self.__maximum_allowed_number_of_retries)
18+
self.__maximum_number_of_retries = maximum_retries
19+
else:
20+
self.__maximum_number_of_retries = self.__default_number_of_retries
21+
22+
@property
23+
def maximum_number_of_retries(self):
24+
return self.__maximum_number_of_retries
25+
26+
def get_next_wait_interval(self, number_of_attempts):
27+
28+
interval = int(min(
29+
((self.__minimum_retry_time.seconds * 1000) + self.get_retry_delta(number_of_attempts)),
30+
(self.__maximum_retry_time.seconds * 1000)
31+
))
32+
33+
return timedelta(milliseconds=interval)
34+
35+
def get_retry_delta(self, number_of_attempts):
36+
37+
minimum = (int)((timedelta(seconds=1).seconds * 1000) * 0.8)
38+
maximum = (int)((timedelta(seconds=1).seconds * 1000) * 1.2)
39+
40+
return (int)((pow(2.0, number_of_attempts) - 1.0) * random.randint(minimum, maximum))

0 commit comments

Comments
 (0)