* fix a bug with restricted drone users config parsing
* display allowed users in the status server
* ensure drone users reparse correctly
* fix a bug in max_runnable_processes introduced by user restrictions (could pass empty set to max())

Signed-off-by: Steve Howard <showard@google.com>


git-svn-id: http://test.kernel.org/svn/autotest/trunk@4121 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/scheduler/drone_manager.py b/scheduler/drone_manager.py
index ba48dcb..f9ba9ac 100644
--- a/scheduler/drone_manager.py
+++ b/scheduler/drone_manager.py
@@ -223,7 +223,8 @@
             allowed_users = config.get_config_value(
                     section, '%s_users' % hostname, default=None)
             if allowed_users is not None:
-                drone.allowed_users = set(allowed_users)
+                allowed_users = set(allowed_users.split())
+            drone.allowed_users = allowed_users
 
         self._reorder_drone_queue() # max_processes may have changed
 
@@ -408,12 +409,13 @@
         execution) given the current load on drones.
         @param username: login of user to run a process.  may be None.
         """
-        if not self._drone_queue:
-            # all drones disabled
+        usable_drone_wrappers = [wrapper for wrapper in self._drone_queue
+                                 if wrapper.drone.usable_by(username)]
+        if not usable_drone_wrappers:
+            # all drones disabled or inaccessible
             return 0
         return max(wrapper.drone.max_processes - wrapper.drone.active_processes
-                   for wrapper in self._drone_queue
-                   if wrapper.drone.usable_by(username))
+                   for wrapper in usable_drone_wrappers)
 
 
     def _least_loaded_drone(self, drones):
diff --git a/scheduler/status_server.py b/scheduler/status_server.py
index 3d618dc..a35ed6b 100644
--- a/scheduler/status_server.py
+++ b/scheduler/status_server.py
@@ -50,8 +50,13 @@
 
 
     def _write_drone(self, drone):
-        line = '%s %s/%s processes' % (drone.hostname, drone.active_processes,
-                                       drone.max_processes)
+        if drone.allowed_users:
+            allowed_users = ', '.join(drone.allowed_users)
+        else:
+            allowed_users = 'all'
+        line = ('%s: %s/%s processes, users: %s'
+                % (drone.hostname, drone.active_processes, drone.max_processes,
+                   allowed_users))
         if not drone.enabled:
             line += ' (disabled)'
         self._write_line(line)