0001-utils-augment-default-retries-in-safe_get_or_create-.patch
src/authentic2/utils/models.py | ||
---|---|---|
27 | 27 |
return -math.log(1.0 - random.random()) / frequency |
28 | 28 | |
29 | 29 | |
30 |
SAFE_GET_OR_CREATE_RETRIES = 3
|
|
30 |
SAFE_GET_OR_CREATE_RETRIES = 100
|
|
31 | 31 | |
32 | 32 | |
33 | 33 |
class ConcurrencyError(Exception): |
34 | 34 |
pass |
35 | 35 | |
36 | 36 | |
37 |
def safe_get_or_create(model, defaults=None, **kwargs): |
|
37 |
def safe_get_or_create(model, defaults=None, retries=None, **kwargs):
|
|
38 | 38 |
assert ( |
39 | 39 |
getattr(settings, 'TESTING', False) or not connection.in_atomic_block |
40 | 40 |
), 'safe_get_or_create cannot be used in inside a transaction' |
41 | 41 | |
42 | 42 |
defaults = defaults or {} |
43 | 43 |
exception = None |
44 |
for dummy in range(SAFE_GET_OR_CREATE_RETRIES): |
|
44 |
for dummy in range(retries or SAFE_GET_OR_CREATE_RETRIES):
|
|
45 | 45 |
try: |
46 | 46 |
instance, created = model.objects.get_or_create(defaults=defaults, **kwargs) |
47 | 47 |
except model.MultipleObjectsReturned as e: |
48 |
- |