Test sometimes failing with "race" condition
One case:
_______________ ERROR at setup of TestAdminUploads.test_re_pack ________________
non_empty_processed = <Upload: upload proc celery_task_id=51e78d42-a74c-4f3c-a482-d6cd8164c89a worker_hostname=None upload_idexamples_template>
internal_example_user_metadata = {'coauthors': ['00000000-0000-0000-0000-000000000002'], 'comment': 'test comment', 'external_id': 'external_test_id', 'pid': '256', ...}
@pytest.mark.timeout(config.tests.default_timeout)
@pytest.fixture(scope='function')
def published(non_empty_processed: processing.Upload, internal_example_user_metadata) -> processing.Upload:
'''
Provides a processed upload. Upload was uploaded with test_user.
'''
> set_upload_entry_metadata(non_empty_processed, internal_example_user_metadata)
tests/conftest.py:697:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/utils.py:116: in set_upload_entry_metadata
entry.save()
/usr/local/lib/python3.7/site-packages/mongoengine/document.py:415: in save
doc, save_condition, write_concern
/usr/local/lib/python3.7/site-packages/mongoengine/document.py:526: in _save_update
select_dict, update_doc, upsert=upsert
/usr/local/lib/python3.7/site-packages/mongomock/collection.py:530: in update_one
return UpdateResult(self._update(filter, update, upsert=upsert, session=session),
/usr/local/lib/python3.7/site-packages/mongomock/collection.py:585: in _update
original_document_snapshot = copy.deepcopy(existing_document)
/usr/local/lib/python3.7/copy.py:150: in deepcopy
y = copier(x, memo)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
x = {'_id': 'XUlSxqEvec0LvPQbSLWeysB1Ksns', 'celery_task_id': '5bfac325-de60-4f32-ae46-289211bc4d3d', 'complete_time': datetime.datetime(2021, 8, 28, 11, 4, 31, 801000), 'create_time': datetime.datetime(2021, 8, 28, 11, 4, 31, 238000), ...}
memo = {140623653987744: {'calc_hash': 'LxIP9iRAcEjCC5PcdXvna0U6Qy5T', 'coauthors': [], 'datasets': [], 'domain': 'dft', ...}...time.datetime(2021, 8, 28, 11, 4, 31, 238000), [], [], [], [], [], ...], 140623654019232: [], 140623654096480: [], ...}
deepcopy = <function deepcopy at 0x7fe5edea67a0>
def _deepcopy_dict(x, memo, deepcopy=deepcopy):
y = {}
memo[id(x)] = y
> for key, value in x.items():
E RuntimeError: dictionary changed size during iteration
/usr/local/lib/python3.7/copy.py:240: RuntimeError
Another one:
- exception: Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/flask_restplus/api.py", line 581, in error_router
return self.handle_error(e)
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/usr/local/lib/python3.7/site-packages/flask_restplus/api.py", line 325, in wrapper
resp = resource(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/flask/views.py", line 89, in view
return self.dispatch_request(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/flask_restplus/resource.py", line 44, in dispatch_request
resp = meth(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/flask_restplus/marshalling.py", line 243, in wrapper
resp = f(*args, **kwargs)
File "/app/nomad/app/flask/api/auth.py", line 160, in wrapper
return func(*args, **kwargs)
File "/app/nomad/app/flask/api/upload.py", line 438, in get
(page - 1) * per_page, page * per_page, order_by=order_by))
File "/usr/local/lib/python3.7/site-packages/mongoengine/queryset/queryset.py", line 64, in __len__
list(self._iter_results())
File "/usr/local/lib/python3.7/site-packages/mongoengine/queryset/queryset.py", line 112, in _iter_results
self._populate_cache()
File "/usr/local/lib/python3.7/site-packages/mongoengine/queryset/queryset.py", line 131, in _populate_cache
self._result_cache.append(six.next(self))
File "/usr/local/lib/python3.7/site-packages/mongoengine/queryset/base.py", line 1574, in __next__
raw_doc = six.next(self._cursor)
File "/usr/local/lib/python3.7/site-packages/mongomock/collection.py", line 1719, in __next__
doc = self._compute_results(with_limit_and_skip=True)[self._emitted]
File "/usr/local/lib/python3.7/site-packages/mongomock/collection.py", line 1697, in _compute_results
results = list(self._factory())
File "/usr/local/lib/python3.7/site-packages/mongomock/collection.py", line 969, in _get_dataset
yield self._copy_only_fields(document, fields, as_class)
File "/usr/local/lib/python3.7/site-packages/mongomock/collection.py", line 1033, in _copy_only_fields
return self._copy_field(doc, container)
File "/usr/local/lib/python3.7/site-packages/mongomock/collection.py", line 979, in _copy_field
for key, value in obj.items():
RuntimeError: dictionary changed size during iteration
Edited by Markus Scheidgen