#20470: Querying crashes with RuntimeError (dictionary changed size during
iteration)
----------------------------------------------+--------------------
     Reporter:  jpaalasm                      |      Owner:  nobody
         Type:  Bug                           |     Status:  new
    Component:  Database layer (models, ORM)  |    Version:  1.5
     Severity:  Normal                        |   Keywords:
 Triage Stage:  Unreviewed                    |  Has patch:  0
Easy pickings:  0                             |      UI/UX:  0
----------------------------------------------+--------------------
 We have defined the following model.

 {{{
 class SignalAnalysisTask(models.Model):
     continuous_signal = models.ForeignKey(ContinuousSignal,
 related_name='signal_analysis_tasks')
     closed = models.BooleanField(default=False, db_index=True)
     ticket = models.OneToOneField(AnalysisTicket, null=True, blank=True,
 related_name='analysis_task')
     latest_fragment = models.ForeignKey(SignalFragment, null=True,
 blank=True, related_name='analysis_task_latest_fragments')
 }}}

 When the below query is performed with the model, Django crashes with
 "RuntimeError: dictionary changed size during iteration". See the full
 traceback. Django is configured to run with Apache and mod_wsgi on Linux.

 {{{
 open_tasks = SignalAnalysisTask.objects.filter(closed=False)
 open_tasks_with_new_data =
 
open_tasks.exclude(latest_fragment=F('continuous_signal__last_signal_fragment'))
 open_tasks_with_new_data =
 open_tasks_with_new_data.order_by("continuous_signal__start_time")
 }}}

 Traceback:

 {{{
 Traceback (most recent call last):
   File "/usr/lib/finsor/virtualenvs/signalstorage/local/lib/python2.7
 /site-packages/django/core/handlers/base.py", line 115, in get_response
     response = callback(request, *callback_args, **callback_kwargs)
   File "/usr/lib/finsor/virtualenvs/signalstorage/local/lib/python2.7
 /site-packages/bedsenseweb/utils/viewutils.py", line 27, in check
     return view_func(request, *args, **kwargs)
   File "/usr/lib/finsor/virtualenvs/signalstorage/local/lib/python2.7
 /site-packages/bedsenseweb/tickets/views.py", line 21, in acquire
     ticket = models.create_new_ticket()
   File "/usr/lib/finsor/virtualenvs/signalstorage/local/lib/python2.7
 /site-packages/bedsenseweb/tickets/models.py", line 41, in
 create_new_ticket
     open_tasks_with_new_data =
 open_tasks_with_new_data.order_by("continuous_signal__start_time")
   File "/usr/lib/finsor/virtualenvs/signalstorage/local/lib/python2.7
 /site-packages/django/db/models/query.py", line 791, in order_by
     obj = self._clone()
   File "/usr/lib/finsor/virtualenvs/signalstorage/local/lib/python2.7
 /site-packages/django/db/models/query.py", line 907, in _clone
     query = self.query.clone()
   File "/usr/lib/finsor/virtualenvs/signalstorage/local/lib/python2.7
 /site-packages/django/db/models/sql/query.py", line 264, in clone
     obj.where = copy.deepcopy(self.where, memo=memo)
   File "/usr/lib/python2.7/copy.py", line 174, in deepcopy
     y = copier(memo)
   File "/usr/lib/finsor/virtualenvs/signalstorage/local/lib/python2.7
 /site-packages/django/utils/tree.py", line 61, in __deepcopy__
     obj.children = copy.deepcopy(self.children, memodict)
   File "/usr/lib/python2.7/copy.py", line 163, in deepcopy
     y = copier(x, memo)
   File "/usr/lib/python2.7/copy.py", line 230, in _deepcopy_list
     y.append(deepcopy(a, memo))
   File "/usr/lib/python2.7/copy.py", line 174, in deepcopy
     y = copier(memo)
   File "/usr/lib/finsor/virtualenvs/signalstorage/local/lib/python2.7
 /site-packages/django/utils/tree.py", line 61, in __deepcopy__
     obj.children = copy.deepcopy(self.children, memodict)
   File "/usr/lib/python2.7/copy.py", line 163, in deepcopy
     y = copier(x, memo)
   File "/usr/lib/python2.7/copy.py", line 230, in _deepcopy_list
     y.append(deepcopy(a, memo))
   File "/usr/lib/python2.7/copy.py", line 174, in deepcopy
     y = copier(memo)
   File "/usr/lib/finsor/virtualenvs/signalstorage/local/lib/python2.7
 /site-packages/django/utils/tree.py", line 61, in __deepcopy__
     obj.children = copy.deepcopy(self.children, memodict)
   File "/usr/lib/python2.7/copy.py", line 163, in deepcopy
     y = copier(x, memo)
   File "/usr/lib/python2.7/copy.py", line 230, in _deepcopy_list
     y.append(deepcopy(a, memo))
   File "/usr/lib/python2.7/copy.py", line 174, in deepcopy
     y = copier(memo)
   File "/usr/lib/finsor/virtualenvs/signalstorage/local/lib/python2.7
 /site-packages/django/utils/tree.py", line 61, in __deepcopy__
     obj.children = copy.deepcopy(self.children, memodict)
   File "/usr/lib/python2.7/copy.py", line 163, in deepcopy
     y = copier(x, memo)
   File "/usr/lib/python2.7/copy.py", line 230, in _deepcopy_list
     y.append(deepcopy(a, memo))
   File "/usr/lib/python2.7/copy.py", line 163, in deepcopy
     y = copier(x, memo)
   File "/usr/lib/python2.7/copy.py", line 237, in _deepcopy_tuple
     y.append(deepcopy(a, memo))
   File "/usr/lib/python2.7/copy.py", line 190, in deepcopy
     y = _reconstruct(x, rv, 1, memo)
   File "/usr/lib/python2.7/copy.py", line 334, in _reconstruct
     state = deepcopy(state, memo)
   File "/usr/lib/python2.7/copy.py", line 163, in deepcopy
     y = copier(x, memo)
   File "/usr/lib/python2.7/copy.py", line 257, in _deepcopy_dict
     y[deepcopy(key, memo)] = deepcopy(value, memo)
   File "/usr/lib/python2.7/copy.py", line 190, in deepcopy
     y = _reconstruct(x, rv, 1, memo)
   File "/usr/lib/python2.7/copy.py", line 334, in _reconstruct
     state = deepcopy(state, memo)
   File "/usr/lib/python2.7/copy.py", line 163, in deepcopy
     y = copier(x, memo)
   File "/usr/lib/python2.7/copy.py", line 257, in _deepcopy_dict
     y[deepcopy(key, memo)] = deepcopy(value, memo)
   File "/usr/lib/python2.7/copy.py", line 163, in deepcopy
     y = copier(x, memo)
   File "/usr/lib/python2.7/copy.py", line 256, in _deepcopy_dict
     for key, value in x.iteritems():
 RuntimeError: dictionary changed size during iteration
 }}}

-- 
Ticket URL: <https://code.djangoproject.com/ticket/20470>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to