Title: [108005] trunk/Tools
Revision
108005
Author
[email protected]
Date
2012-02-16 17:11:25 -0800 (Thu, 16 Feb 2012)

Log Message

nrwt: simplify worker interface
https://bugs.webkit.org/show_bug.cgi?id=78181

Reviewed by Tony Chang.

This change moves code in name(), is_done(), run(), and cancel()
from Worker to AbstractWorker, since the logic is pretty much
boilerplate code that any implementation would want to use.

* Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
(get.should):
(AbstractWorker.__init__):
(AbstractWorker):
(AbstractWorker.name):
(AbstractWorker.stop_handling_messages):
(AbstractWorker.run):
(AbstractWorker.is_done):
(AbstractWorker.cancel):
* Scripts/webkitpy/layout_tests/controllers/worker.py:
(Worker.__init__):
(Worker.run):
(Worker.handle_stop):

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (108004 => 108005)


--- trunk/Tools/ChangeLog	2012-02-17 01:06:41 UTC (rev 108004)
+++ trunk/Tools/ChangeLog	2012-02-17 01:11:25 UTC (rev 108005)
@@ -1,3 +1,28 @@
+2012-02-16  Dirk Pranke  <[email protected]>
+
+        nrwt: simplify worker interface
+        https://bugs.webkit.org/show_bug.cgi?id=78181
+
+        Reviewed by Tony Chang.
+
+        This change moves code in name(), is_done(), run(), and cancel()
+        from Worker to AbstractWorker, since the logic is pretty much
+        boilerplate code that any implementation would want to use.
+
+        * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
+        (get.should):
+        (AbstractWorker.__init__):
+        (AbstractWorker):
+        (AbstractWorker.name):
+        (AbstractWorker.stop_handling_messages):
+        (AbstractWorker.run):
+        (AbstractWorker.is_done):
+        (AbstractWorker.cancel):
+        * Scripts/webkitpy/layout_tests/controllers/worker.py:
+        (Worker.__init__):
+        (Worker.run):
+        (Worker.handle_stop):
+
 2012-02-16  Michael Saboff  <[email protected]>
 
         ENH: Add ability to run subset of _javascript_ layout tests with JSC

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py (108004 => 108005)


--- trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py	2012-02-17 01:06:41 UTC (rev 108004)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py	2012-02-17 01:11:25 UTC (rev 108005)
@@ -66,12 +66,11 @@
         worker_model - concurrency model to use (inline/processes)
         client - message_broker.BrokerClient implementation to dispatch
             replies to.
-        worker_class - type of workers to create. This class must implement
+        worker_class - type of workers to create. This class should override
             the methods in AbstractWorker.
     Returns:
         A handle to an object that will talk to a message broker configured
-        for the normal manager/worker communication.
-    """
+        for the normal manager/worker communication."""
     if worker_model == 'inline':
         queue_class = Queue.Queue
         manager_class = _InlineManager
@@ -99,17 +98,44 @@
             worker_arguments - (optional, Picklable) object passed to the worker from the manager"""
         message_broker.BrokerClient.__init__(self)
         self._worker_connection = worker_connection
+        self._name = 'worker'
+        self._done = False
+        self._canceled = False
 
+    def name(self):
+        return self._name
+
+    def is_done(self):
+        return self._done or self._canceled
+
+    def stop_handling_messages(self):
+        self._done = True
+
     def run(self):
         """Callback for the worker to start executing. Typically does any
         remaining initialization and then calls broker_connection.run_message_loop()."""
-        raise NotImplementedError
+        exception_msg = ""
+        _log.debug("%s starting" % self._name)
 
+        try:
+            self._worker_connection.run_message_loop()
+            if not self.is_done():
+                raise AssertionError("%s: ran out of messages in worker queue."
+                                     % self._name)
+        except KeyboardInterrupt:
+            exception_msg = ", interrupted"
+            self._worker_connection.raise_exception(sys.exc_info())
+        except:
+            exception_msg = ", exception raised"
+            self._worker_connection.raise_exception(sys.exc_info())
+        finally:
+            _log.debug("%s done with message loop%s" % (self._name, exception_msg))
+
     def cancel(self):
         """Called when possible to indicate to the worker to stop processing
         messages and shut down. Note that workers may be stopped without this
         method being called, so clients should not rely solely on this."""
-        raise NotImplementedError
+        self._canceled = True
 
 
 class _ManagerConnection(message_broker.BrokerConnection):

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/controllers/worker.py (108004 => 108005)


--- trunk/Tools/Scripts/webkitpy/layout_tests/controllers/worker.py	2012-02-17 01:06:41 UTC (rev 108004)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/controllers/worker.py	2012-02-17 01:11:25 UTC (rev 108005)
@@ -58,8 +58,6 @@
         self._name = 'worker/%d' % self._worker_number
         self._results_directory = worker_arguments.results_directory
         self._options = worker_arguments.options
-        self._done = False
-        self._canceled = False
         self._port = None
         self._batch_size = None
         self._batch_count = None
@@ -84,16 +82,6 @@
         tests_run_filename = self._filesystem.join(self._results_directory, "tests_run%d.txt" % self._worker_number)
         self._tests_run_file = self._filesystem.open_text_file_for_writing(tests_run_filename)
 
-    def cancel(self):
-        """Attempt to abort processing (best effort)."""
-        self._canceled = True
-
-    def is_done(self):
-        return self._done or self._canceled
-
-    def name(self):
-        return self._name
-
     def set_inline_arguments(self, port):
         self._port = port
 
@@ -122,22 +110,10 @@
 
         self.safe_init()
 
-        exception_msg = ""
-        _log.debug("%s starting" % self._name)
-
         try:
-            self._worker_connection.run_message_loop()
-            if not self.is_done():
-                raise AssertionError("%s: ran out of messages in worker queue."
-                                     % self._name)
-        except KeyboardInterrupt:
-            exception_msg = ", interrupted"
-            self._worker_connection.raise_exception(sys.exc_info())
-        except:
-            exception_msg = ", exception raised"
-            self._worker_connection.raise_exception(sys.exc_info())
+            _log.debug("%s starting" % self._name)
+            super(Worker, self).run()
         finally:
-            _log.debug("%s done with message loop%s" % (self._name, exception_msg))
             self._worker_connection.post_message('done')
             self.cleanup()
             _log.debug("%s exiting" % self._name)
@@ -157,7 +133,7 @@
         self._worker_connection.post_message('finished_list', list_name, num_tests, elapsed_time)
 
     def handle_stop(self, src):
-        self._done = True
+        self.stop_handling_messages()
 
     def _run_test(self, test_input):
         test_timeout_sec = self.timeout(test_input)
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to