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

Reply via email to