Skip to content

Commit 673137d

Browse files
committed
Remove base_backoff_ms
1 parent 2e036f2 commit 673137d

File tree

7 files changed

+5
-30
lines changed

7 files changed

+5
-30
lines changed

docs/settings.rst

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,6 @@ The number of times to retry certain failed DynamoDB API calls. The most common
3434
retries include ``ProvisionedThroughputExceededException`` and ``5xx`` errors.
3535

3636

37-
base_backoff_ms
38-
---------------
39-
40-
Default: ``25``
41-
42-
The base number of milliseconds used for `exponential backoff and jitter
43-
<https://www.awsarchitectureblog.com/2015/03/backoff.html>`_ on retries.
44-
45-
4637
region
4738
------
4839

pynamodb/connection/base.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,6 @@ def __init__(self,
236236
read_timeout_seconds: Optional[float] = None,
237237
connect_timeout_seconds: Optional[float] = None,
238238
max_retry_attempts: Optional[int] = None,
239-
base_backoff_ms: Optional[int] = None,
240239
max_pool_connections: Optional[int] = None,
241240
extra_headers: Optional[Mapping[str, str]] = None):
242241
self._tables: Dict[str, MetaTable] = {}
@@ -264,11 +263,6 @@ def __init__(self,
264263
else:
265264
self._max_retry_attempts_exception = get_settings_value('max_retry_attempts')
266265

267-
if base_backoff_ms is not None:
268-
self._base_backoff_ms = base_backoff_ms
269-
else:
270-
self._base_backoff_ms = get_settings_value('base_backoff_ms')
271-
272266
if max_pool_connections is not None:
273267
self._max_pool_connections = max_pool_connections
274268
else:

pynamodb/connection/table.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ def __init__(
2424
connect_timeout_seconds: Optional[float] = None,
2525
read_timeout_seconds: Optional[float] = None,
2626
max_retry_attempts: Optional[int] = None,
27-
base_backoff_ms: Optional[int] = None,
2827
max_pool_connections: Optional[int] = None,
2928
extra_headers: Optional[Mapping[str, str]] = None,
3029
aws_access_key_id: Optional[str] = None,
@@ -37,7 +36,6 @@ def __init__(
3736
connect_timeout_seconds=connect_timeout_seconds,
3837
read_timeout_seconds=read_timeout_seconds,
3938
max_retry_attempts=max_retry_attempts,
40-
base_backoff_ms=base_backoff_ms,
4139
max_pool_connections=max_pool_connections,
4240
extra_headers=extra_headers)
4341

pynamodb/models.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,9 @@ def commit(self) -> None:
152152
retries = 0
153153
unprocessed_items = data.get(UNPROCESSED_ITEMS, {}).get(self.model.Meta.table_name)
154154
while unprocessed_items:
155-
sleep_time = random.randint(0, self.model.Meta.base_backoff_ms * (2 ** retries)) / 1000
156-
time.sleep(sleep_time)
155+
# TODO: we should consider using exponential backoff here
156+
# TODO: it is somewhat unintuitive that we retry unprocessed items max_retry_attempts times,
157+
# since each `batch_write_item` operation is also subject to max_retry_attempts
157158
retries += 1
158159
if retries >= self.model.Meta.max_retry_attempts:
159160
self.failed_operations = unprocessed_items
@@ -165,8 +166,7 @@ def commit(self) -> None:
165166
put_items.append(item.get(PUT_REQUEST).get(ITEM)) # type: ignore
166167
elif DELETE_REQUEST in item:
167168
delete_items.append(item.get(DELETE_REQUEST).get(KEY)) # type: ignore
168-
log.info("Resending %d unprocessed keys for batch operation after %d seconds sleep",
169-
len(unprocessed_items), sleep_time)
169+
log.info("Resending %d unprocessed keys for batch operation (retry %d)", len(unprocessed_items), retries)
170170
data = self.model._get_connection().batch_write_item(
171171
put_items=put_items,
172172
delete_items=delete_items,
@@ -182,7 +182,6 @@ class MetaProtocol(Protocol):
182182
host: Optional[str]
183183
connect_timeout_seconds: int
184184
read_timeout_seconds: int
185-
base_backoff_ms: int
186185
max_retry_attempts: int
187186
max_pool_connections: int
188187
extra_headers: Mapping[str, str]
@@ -241,8 +240,6 @@ def __init__(self, name, bases, namespace, discriminator=None) -> None:
241240
setattr(attr_obj, 'connect_timeout_seconds', get_settings_value('connect_timeout_seconds'))
242241
if not hasattr(attr_obj, 'read_timeout_seconds'):
243242
setattr(attr_obj, 'read_timeout_seconds', get_settings_value('read_timeout_seconds'))
244-
if not hasattr(attr_obj, 'base_backoff_ms'):
245-
setattr(attr_obj, 'base_backoff_ms', get_settings_value('base_backoff_ms'))
246243
if not hasattr(attr_obj, 'max_retry_attempts'):
247244
setattr(attr_obj, 'max_retry_attempts', get_settings_value('max_retry_attempts'))
248245
if not hasattr(attr_obj, 'max_pool_connections'):
@@ -1052,7 +1049,6 @@ def _get_connection(cls) -> TableConnection:
10521049
connect_timeout_seconds=cls.Meta.connect_timeout_seconds,
10531050
read_timeout_seconds=cls.Meta.read_timeout_seconds,
10541051
max_retry_attempts=cls.Meta.max_retry_attempts,
1055-
base_backoff_ms=cls.Meta.base_backoff_ms,
10561052
max_pool_connections=cls.Meta.max_pool_connections,
10571053
extra_headers=cls.Meta.extra_headers,
10581054
aws_access_key_id=cls.Meta.aws_access_key_id,

pynamodb/settings.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
'connect_timeout_seconds': 15,
1313
'read_timeout_seconds': 30,
1414
'max_retry_attempts': 3,
15-
'base_backoff_ms': 25,
1615
'region': None,
1716
'max_pool_connections': 10,
1817
'extra_headers': None,

tests/test_base_connection.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1541,9 +1541,8 @@ def test_connection_make_api_call__throws_retry_disabled(send_mock):
15411541
send_mock.side_effect = [
15421542
botocore.exceptions.ReadTimeoutError(endpoint_url='http://lyft.com'),
15431543
]
1544-
c = Connection(read_timeout_seconds=11, base_backoff_ms=3, max_retry_attempts=0)
1544+
c = Connection(read_timeout_seconds=11, max_retry_attempts=0)
15451545

1546-
assert c._base_backoff_ms == 3
15471546
with pytest.raises(botocore.exceptions.ReadTimeoutError):
15481547
c._make_api_call('DescribeTable', {'TableName': 'MyTable'})
15491548

tests/test_model.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -523,14 +523,12 @@ def fake_dynamodb(*args):
523523
assert UserModel.Meta.connect_timeout_seconds, 15
524524
assert UserModel.Meta.read_timeout_seconds == 30
525525
assert UserModel.Meta.max_retry_attempts == 3
526-
assert UserModel.Meta.base_backoff_ms == 25
527526
assert UserModel.Meta.max_pool_connections == 10
528527

529528
assert UserModel._connection.connection._connect_timeout_seconds == 15
530529
assert UserModel._connection.connection._read_timeout_seconds == 30
531530
assert UserModel._connection.connection._max_retry_attempts_exception == 3
532531
assert UserModel._connection.connection._max_pool_connections == 10
533-
assert UserModel._connection.connection._base_backoff_ms == 25
534532

535533
with patch(PATCH_METHOD) as req:
536534
req.return_value = MODEL_TABLE_DATA

0 commit comments

Comments
 (0)