Changeset 122615 in webkit


Ignore:
Timestamp:
Jul 13, 2012 12:08:27 PM (12 years ago)
Author:
dpranke@chromium.org
Message:

NRWT doesn't print exceptions
https://bugs.webkit.org/show_bug.cgi?id=91129

Reviewed by Ojan Vafai.

Although we printed exceptions in most cases, if an unexpected
exception (like a runtime error) was raised when creating a
port, we wouldn't. This patch fixes that, and also cleans up
how we were logging exceptions from the workers to be less
verbose.

Because of the corner cases where these errors are occurring,
it's difficult to write automated unit tests for them. I've
tested it quite a bit by hand, though.

  • Scripts/webkitpy/common/message_pool.py:

(_MessagePool._close):
(_MessagePool._handle_worker_exception):
(_Worker.run):
(_Worker._raise):

  • Scripts/webkitpy/layout_tests/controllers/manager.py:

(Manager._run_tests):

  • Scripts/webkitpy/layout_tests/run_webkit_tests.py:

(main):

Location:
trunk/Tools
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r122606 r122615  
     12012-07-13  Dirk Pranke  <dpranke@chromium.org>
     2
     3        NRWT doesn't print exceptions
     4        https://bugs.webkit.org/show_bug.cgi?id=91129
     5
     6        Reviewed by Ojan Vafai.
     7
     8        Although we printed exceptions in most cases, if an unexpected
     9        exception (like a runtime error) was raised when creating a
     10        port, we wouldn't. This patch fixes that, and also cleans up
     11        how we were logging exceptions from the workers to be less
     12        verbose.
     13
     14        Because of the corner cases where these errors are occurring,
     15        it's difficult to write automated unit tests for them. I've
     16        tested it quite a bit by hand, though.
     17
     18        * Scripts/webkitpy/common/message_pool.py:
     19        (_MessagePool._close):
     20        (_MessagePool._handle_worker_exception):
     21        (_Worker.run):
     22        (_Worker._raise):
     23        * Scripts/webkitpy/layout_tests/controllers/manager.py:
     24        (Manager._run_tests):
     25        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
     26        (main):
     27
    1282012-07-13  Wei James  <james.wei@intel.com>
    229
  • trunk/Tools/Scripts/webkitpy/common/message_pool.py

    r122517 r122615  
    129129        self._workers = []
    130130        if not self._running_inline:
     131            # FIXME: This is a hack to get multiprocessing to not log tracebacks during shutdown :(.
     132            multiprocessing.util._exiting = True
    131133            if self._messages_to_worker:
    132134                self._messages_to_worker.close()
     
    147149        if exception_type == KeyboardInterrupt:
    148150            raise exception_type(exception_value)
    149         _log.error("%s raised %s('%s'):" % (
    150                    source, exception_value.__class__.__name__, str(exception_value)))
    151151        raise WorkerException(str(exception_value))
    152152
     
    246246                    break
    247247
     248            _log.debug("%s exiting" % self.name)
    248249        except Queue.Empty:
    249250            assert False, '%s: ran out of messages in worker queue.' % self.name
    250251        except KeyboardInterrupt, e:
    251             exception_msg = ", interrupted"
    252             if not self._running_inline:
    253                 _log.warning('worker exception')
    254                 self._raise(sys.exc_info())
    255             raise
     252            self._raise(sys.exc_info())
    256253        except Exception, e:
    257             exception_msg = ", exception raised: %s" % str(e)
    258             if not self._running_inline:
    259                 self._raise(sys.exc_info())
    260             raise
     254            self._raise(sys.exc_info())
    261255        finally:
    262             _log.debug("%s exiting%s" % (self.name, exception_msg))
    263256            try:
    264257                worker.stop()
     
    280273
    281274    def _raise(self, exc_info):
     275        exception_type, exception_value, exception_traceback = exc_info
     276        if self._running_inline:
     277            raise exception_type, exception_value, exception_traceback
     278
     279        if exception_type == KeyboardInterrupt:
     280            _log.debug("%s: interrupted, exiting" % self.name)
     281            stack_utils.log_traceback(_log.debug, exception_traceback)
     282        else:
     283            _log.error("%s: %s('%s') raised:" % (self.name, exception_value.__class__.__name__, str(exception_value)))
     284            stack_utils.log_traceback(_log.error, exception_traceback)
    282285        # Since tracebacks aren't picklable, send the extracted stack instead.
    283         exception_type, exception_value, exception_traceback = exc_info
    284         stack_utils.log_traceback(_log.error, exception_traceback)
    285286        stack = traceback.extract_tb(exception_traceback)
    286287        self._post(name='worker_exception', args=(exception_type, exception_value, stack), from_user=False)
  • trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py

    r122513 r122615  
    783783            _log.warning(e.reason)
    784784            interrupted = True
    785         except:
    786             _log.error("Exception raised, exiting")
     785        except Exception, e:
     786            _log.debug('%s("%s") raised, exiting' % (e.__class__.__name__, str(e)))
    787787            raise
    788788        finally:
  • trunk/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py

    r122542 r122615  
    3636import signal
    3737import sys
     38import traceback
    3839
    3940from webkitpy.common.host import Host
     
    470471        print >> sys.stderr, str(e)
    471472        return EXCEPTIONAL_EXIT_STATUS
     473    except:
     474        traceback.print_exc(file=sys.stderr)
     475        raise
    472476
    473477    logging.getLogger().setLevel(logging.DEBUG if options.verbose else logging.INFO)
     
    478482    try:
    479483        sys.exit(main())
    480     except Exception, e:
     484    except BaseException, e:
    481485        if e.__class__ in (KeyboardInterrupt, TestRunInterruptedException):
    482486            sys.exit(INTERRUPTED_EXIT_STATUS)
Note: See TracChangeset for help on using the changeset viewer.