Martin Sivák has uploaded a new change for review. Change subject: Failing plugin should not cause an empty host list to be returned ......................................................................
Failing plugin should not cause an empty host list to be returned Changes the aggregation so that if a plugin is failing, the result is ignored. This prevents the filtering engine from returning an empty host list when something goes wrong. Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1002444 Change-Id: Ie1a38e7007cd50f261290bf5f31b85cb9c8c6314 Signed-off-by: Martin Sivak <[email protected]> --- M src/ovirtscheduler/request_handler.py M src/ovirtscheduler/request_handler_test.py M src/ovirtscheduler/runner.py 3 files changed, 21 insertions(+), 4 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-scheduler-proxy refs/changes/32/21232/1 diff --git a/src/ovirtscheduler/request_handler.py b/src/ovirtscheduler/request_handler.py index dd5a50b..cc60b00 100644 --- a/src/ovirtscheduler/request_handler.py +++ b/src/ovirtscheduler/request_handler.py @@ -110,15 +110,21 @@ "balance": self._balancers} def aggregate_filter_results(self, filterRunners): - resultSet = set() + resultSet = set(filterRunners) for runner in filterRunners: + + # if the filter fails, ignore it anc continue + # as if it was not there + if runner.getReturnCode() or runner.getErrors(): + self._logger.warn('Error in %s', runner._script) + continue + + # If there is no result, skip this filter if runner.getResults() is None: self._logger.warn('No results from %s', runner._script) continue + hosts = set(runner.getResults()) - if not resultSet: - resultSet = set(hosts) - continue resultSet = resultSet.intersection(hosts) return list(resultSet) @@ -161,9 +167,14 @@ def aggregate_score_results(self, scoreRunners): results = {} for runner, weight in scoreRunners: + # if the scoring function fails, ignore the result + if runner.getReturnCode() != 0 or runner.getErrors: + continue + hostScores = runner.getResults() if hostScores is None: continue + for host, score in hostScores: results.setdefault(host, 0) results[host] += weight * score diff --git a/src/ovirtscheduler/request_handler_test.py b/src/ovirtscheduler/request_handler_test.py index cd70b64..7e50f0a 100644 --- a/src/ovirtscheduler/request_handler_test.py +++ b/src/ovirtscheduler/request_handler_test.py @@ -72,5 +72,8 @@ def getResults(self): return None + def getErrors(self): + return None + filterRunners = [NoneResultRunner()] assert executor.aggregate_filter_results(filterRunners) is not None diff --git a/src/ovirtscheduler/runner.py b/src/ovirtscheduler/runner.py index 465d2fb..6e41e86 100755 --- a/src/ovirtscheduler/runner.py +++ b/src/ovirtscheduler/runner.py @@ -56,6 +56,9 @@ def getErrors(self): return self._error + def getReturnCode(self): + return self._process.returncode + def stop(self): return utils.killProcess(self._process) -- To view, visit http://gerrit.ovirt.org/21232 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie1a38e7007cd50f261290bf5f31b85cb9c8c6314 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-scheduler-proxy Gerrit-Branch: master Gerrit-Owner: Martin Sivák <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
