diff options
| author | Jenkins <jenkins@review.openstack.org> | 2011-11-18 23:12:12 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2011-11-18 23:12:12 +0000 |
| commit | e3ebb8978a954718f052a0c4c1099d85a2e49a05 (patch) | |
| tree | aa2842ddf58b772175e90cb5090fd388c76ee392 /plugins | |
| parent | 32f969ad59c70f308c7d2c8cfc54a1b6ffd572b1 (diff) | |
| parent | a46e2a6e00ab96a70b6cc4c429200f304606cbed (diff) | |
| download | nova-e3ebb8978a954718f052a0c4c1099d85a2e49a05.tar.gz nova-e3ebb8978a954718f052a0c4c1099d85a2e49a05.tar.xz nova-e3ebb8978a954718f052a0c4c1099d85a2e49a05.zip | |
Merge "Workaround xenstore race conditions"
Diffstat (limited to 'plugins')
| -rwxr-xr-x | plugins/xenserver/xenapi/etc/xapi.d/plugins/xenstore.py | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/plugins/xenserver/xenapi/etc/xapi.d/plugins/xenstore.py b/plugins/xenserver/xenapi/etc/xapi.d/plugins/xenstore.py index c75013084..7e27b4ff7 100755 --- a/plugins/xenserver/xenapi/etc/xapi.d/plugins/xenstore.py +++ b/plugins/xenserver/xenapi/etc/xapi.d/plugins/xenstore.py @@ -91,12 +91,15 @@ def read_record(self, arg_dict): ret, result = _run_command(cmd) return result.strip() except XenstoreError, e: - if arg_dict.get("ignore_missing_path", False): - if not _record_exists(arg_dict): - return "None" - # Either we shouldn't ignore path errors, or another - # error was hit. Re-raise. - raise + if not arg_dict.get("ignore_missing_path", False): + raise + if not _record_exists(arg_dict): + return "None" + # Just try again in case the agent write won the race against + # the record_exists check. If this fails again, it will likely raise + # an equally meaningful XenstoreError as the one we just caught + ret, result = _run_command(cmd) + return result.strip() @jsonify @@ -128,7 +131,10 @@ def list_records(self, arg_dict): except XenstoreError, e: if not _record_exists(arg_dict): return {} - raise + # Just try again in case the path was created in between + # the "ls" and the existence check. If this fails again, it will + # likely raise an equally meaningful XenstoreError + ret, recs = _run_command(cmd) base_path = arg_dict["path"] paths = _paths_from_ls(recs) ret = {} |
