Deep-copy not always possible.

In working with cinder it appears that at last
cinder is using objects which can not be deep
copied (sqlalchemy objects) and which actually
cause the deepcopy routine to fail. To get
around this avoid the deepcopy until proven
its really needed.

Change-Id: Ia7b7c49e82c2151351cc0f78ecb1531c35540652
This commit is contained in:
Joshua Harlow
2013-08-02 00:05:08 -07:00
parent 112d8664f4
commit d889c0b607

View File

@@ -17,7 +17,6 @@
# under the License. # under the License.
import collections import collections
import copy
import logging import logging
from taskflow.openstack.common import excutils from taskflow.openstack.common import excutils
@@ -193,18 +192,9 @@ class Flow(base.Flow):
# notifying others that the task has finished to # notifying others that the task has finished to
# avoid the case where a listener might throw an # avoid the case where a listener might throw an
# exception. # exception.
#
# Note(harlowja): Keep the original result in the
# accumulator only and give a duplicated copy to
# avoid the original result being altered by other
# tasks.
#
# This is due to python being by reference (which means
# some task could alter this result intentionally or not
# intentionally).
rb.result = result rb.result = result
runner.result = result runner.result = result
self.results[runner.uuid] = copy.deepcopy(result) self.results[runner.uuid] = result
self.task_notifier.notify(states.SUCCESS, details={ self.task_notifier.notify(states.SUCCESS, details={
'context': context, 'context': context,
'flow': self, 'flow': self,