Zhou Zheng Sheng has posted comments on this change.
Change subject: tests: add a rollback manager for easy undoing
......................................................................
Patch Set 3:
Thanks Vinzenz and Saggi.
Creating context manager for each resource is good. When the number of the
resource is variable or large, for example, creating multiple volumes according
to a configuration file, we have to use contextlib.nested(). However according
to Python official document, this function is being deprecated, and there are
some limitations.
storage.misc.DeferableContext() is good, and it re-raises the last exception,
while rollbackManager re-raises the first exception with exc_info. When
investigating the problem, the first exception is more probably to be the root
cause, and exc_info is very useful.
There will be little different comparing DeferableContext() with
rollbackManager. I can try to write examples.
DeferableContext Example
buildContext1(arg, df):
r1 = step1(arg)
df.prependDefer(lambda: undo1(r1))
r2 = step2(r1)
df.prependDefer(lambda: undo2(r2))
return r2
buildContext2(arg, df):
for i in arg:
r = step(i)
df.prependDefer(lambda: undo(r))
return r
with DeferableContext() as df:
r1 = buildContext1(arg1, df)
r2 = buildContext2(arg2, df)
consume(r1, r2)
--------
rollbackManager Example
@rollbackManager
buildContext1(arg, rollback):
r1 = step1(arg)
rollback.append(lambda: undo1(r1))
r2 = step2(r1)
rollback.append(lambda: undo2(r2))
return r2
@rollbackManager
buildContext2(arg, rollback):
for i in arg:
r = step(i)
rollback.append(lambda: undo(r))
return r
with buildContext1(arg1) as r1, buildContext2(arg2) as r2:
consume(r1, r2)
Which style do you like? If you think it's better to re-use DeferableContext,
may I propose a way to keep and re-raise the first exception in
DeferableContext with exc_info?
--
To view, visit http://gerrit.ovirt.org/8671
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: Ibc932637dd81c3becf92de34ea647c1cea136111
Gerrit-PatchSet: 3
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Zhou Zheng Sheng <[email protected]>
Gerrit-Reviewer: Dan Kenigsberg <[email protected]>
Gerrit-Reviewer: Royce Lv <[email protected]>
Gerrit-Reviewer: Ryan Harper <[email protected]>
Gerrit-Reviewer: Saggi Mizrahi <[email protected]>
Gerrit-Reviewer: Vinzenz Feenstra <[email protected]>
Gerrit-Reviewer: Zhou Zheng Sheng <[email protected]>
_______________________________________________
vdsm-patches mailing list
[email protected]
https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches