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 Aug 31, 2021 by Markus Scheidgen
Assignee Loading
Time tracking Loading