launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #07087
[Merge] lp:~jtv/maas/bug-979409 into lp:maas
Jeroen T. Vermeulen has proposed merging lp:~jtv/maas/bug-979409 into lp:maas.
Requested reviews:
Launchpad code reviewers (launchpad-reviewers)
Related bugs:
Bug #979409 in MAAS: "Breaks during reconcile"
https://bugs.launchpad.net/maas/+bug/979409
For more details, see:
https://code.launchpad.net/~jtv/maas/bug-979409/+merge/101665
Scott ran into a little kaboomski while running the reconcile script. The traceback seemed to make no sense at all, going from ProvisioningProxy (which wraps a remote XMLRPC method) into xmlrpclib (and seemingly, an attempt at invoking a remote method) while looking up the method's name in one of its policy dicts.
Here's what I think happened: the attempt to access method.__name__ tickled the proxy's __getattr__, which is where the tie to the remote method happens. And so, the attempt to read __name__ went through almost all the motions needed for invoking a remote method. Not quite all, and it's probably in that difference somewhere that things went haywire.
To avoid the problem, just keep track of the method's name ourselves! We've got it anyway. Pass it to the ProvisioningProxy, and done. This solves Scott's problem.
--
https://code.launchpad.net/~jtv/maas/bug-979409/+merge/101665
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~jtv/maas/bug-979409 into lp:maas.
=== modified file 'src/maasserver/provisioning.py'
--- src/maasserver/provisioning.py 2012-04-11 15:50:10 +0000
+++ src/maasserver/provisioning.py 2012-04-11 23:28:18 +0000
@@ -214,7 +214,8 @@
- Registers failing/working components.
"""
- def __init__(self, method):
+ def __init__(self, method_name, method):
+ self.method_name = method_name
self.method = method
def __call__(self, *args, **kwargs):
@@ -222,7 +223,7 @@
result = self.method(*args, **kwargs)
# The call was a success, discard persistent errors for
# components referenced by this method.
- register_working_components(self.method.__name__)
+ register_working_components(self.method_name)
return result
except xmlrpclib.Fault as e:
# Register failing component.
@@ -257,7 +258,7 @@
return attribute
else:
# This attribute is callable. Wrap it in a caller.
- return ProvisioningCaller(attribute)
+ return ProvisioningCaller(attribute_name, attribute)
def get_provisioning_api_proxy():
Follow ups