)]}'
{"nova/compute/manager.py":[{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"910a44ae7bf961ffecc8e5f92e1be158865ee068","unresolved":false,"context_lines":[{"line_number":1827,"context_line":"    @manager.periodic_task"},{"line_number":1828,"context_line":"    def _poll_unconfirmed_resizes(self, context):"},{"line_number":1829,"context_line":"        if FLAGS.resize_confirm_window \u003e 0:"},{"line_number":1830,"context_line":"            self.driver.poll_rescued_instances(FLAGS.resize_confirm_window)"},{"line_number":1831,"context_line":""},{"line_number":1832,"context_line":"    @manager.periodic_task"},{"line_number":1833,"context_line":"    def _poll_bandwidth_usage(self, context, start_time\u003dNone, stop_time\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACn%2F%2F9No%3D","line":1830,"updated":"2011-11-19 03:48:36.000000000","message":"should be poll_unconfirmed_resizes()","commit_id":"9c5f0b26ee3941d69e81b22541880af35573009c"},{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"282a7012c88e4ca438d98b04e9eee0ee51ac13fe","unresolved":false,"context_lines":[{"line_number":1827,"context_line":"    @manager.periodic_task"},{"line_number":1828,"context_line":"    def _poll_unconfirmed_resizes(self, context):"},{"line_number":1829,"context_line":"        if FLAGS.resize_confirm_window \u003e 0:"},{"line_number":1830,"context_line":"            self.driver.poll_rescued_instances(FLAGS.resize_confirm_window)"},{"line_number":1831,"context_line":""},{"line_number":1832,"context_line":"    @manager.periodic_task"},{"line_number":1833,"context_line":"    def _poll_bandwidth_usage(self, context, start_time\u003dNone, stop_time\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACn%2F%2F9NU%3D","line":1830,"in_reply_to":"AAAACn%2F%2F9No%3D","updated":"2011-11-19 05:22:04.000000000","message":"Good find.","commit_id":"9c5f0b26ee3941d69e81b22541880af35573009c"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"071f8a75e7c714d991b16baa4d31fda42d8a524a","unresolved":false,"context_lines":[{"line_number":1954,"context_line":"                                  \" name label \u0027%(name_label)s\u0027 which is\""},{"line_number":1955,"context_line":"                                  \" marked as DELETED but still present on\""},{"line_number":1956,"context_line":"                                  \" host.\"), locals())"},{"line_number":1957,"context_line":"                    self._delete_instance(context, instance_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAACn%2F%2F81k%3D","line":1957,"updated":"2011-11-22 20:35:00.000000000","message":"I think perhaps this should call _shutdown_instance() and _cleanup_volumes() vs _delete_instance().  Or we add an optional argument to _delete_instance().  Otherwise, it\u0027s going to try to mark the instance delete again in the DB... but more importantly, it\u0027ll send an extra notification.","commit_id":"96cecac95d2ad6414ea08c1374b3adab407fce6a"},{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"22684a5cb7b8a2fb24fc7887e05ff7c13350c29d","unresolved":false,"context_lines":[{"line_number":1954,"context_line":"                                  \" name label \u0027%(name_label)s\u0027 which is\""},{"line_number":1955,"context_line":"                                  \" marked as DELETED but still present on\""},{"line_number":1956,"context_line":"                                  \" host.\"), locals())"},{"line_number":1957,"context_line":"                    self._delete_instance(context, instance_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAC3%2F%2F%2FgE%3D","line":1957,"in_reply_to":"AAAACn%2F%2F81k%3D","updated":"2011-12-02 21:38:40.000000000","message":"Agreed","commit_id":"96cecac95d2ad6414ea08c1374b3adab407fce6a"}],"nova/manager.py":[{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"910a44ae7bf961ffecc8e5f92e1be158865ee068","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        f \u003d args[0]"},{"line_number":89,"context_line":"        f._periodic_task \u003d True"},{"line_number":90,"context_line":"        f._ticks_between_runs \u003d 0"},{"line_number":91,"context_line":"        return f"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"class ManagerMeta(type):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACn%2F%2F9Nk%3D","line":91,"updated":"2011-11-19 03:48:36.000000000","message":"Hm.  Is the \u0027if/else\u0027 necessary or wouldn\u0027t first part of the \u0027if\u0027 always work?","commit_id":"9c5f0b26ee3941d69e81b22541880af35573009c"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"045ecbbda38f739a500d096f621452bd87a07442","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        f \u003d args[0]"},{"line_number":89,"context_line":"        f._periodic_task \u003d True"},{"line_number":90,"context_line":"        f._ticks_between_runs \u003d 0"},{"line_number":91,"context_line":"        return f"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"class ManagerMeta(type):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACn%2F%2F9MY%3D","line":91,"in_reply_to":"AAAACn%2F%2F9NQ%3D","updated":"2011-11-19 15:55:00.000000000","message":"Ah okay, that makes sense.","commit_id":"9c5f0b26ee3941d69e81b22541880af35573009c"},{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"282a7012c88e4ca438d98b04e9eee0ee51ac13fe","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        f \u003d args[0]"},{"line_number":89,"context_line":"        f._periodic_task \u003d True"},{"line_number":90,"context_line":"        f._ticks_between_runs \u003d 0"},{"line_number":91,"context_line":"        return f"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"class ManagerMeta(type):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACn%2F%2F9NQ%3D","line":91,"in_reply_to":"AAAACn%2F%2F9Nk%3D","updated":"2011-11-19 05:22:04.000000000","message":"I wanted the ability to use the decorator w/o parens in the no-arg common case, but also be able to use parens when you needed to specify an option to the decorator.\n\nAFAIK, this was the only way I could get this to work.\n\nThe first part of the \"if\" won\u0027t work if we used the decorator without args because it would return a wrapped function where the inner-function has the important attrs sets. Since the metaclass expects the outermost function to have the attrs set, this method would be skipped.\n\nThe first-part of the \"if\" works in the case when parens are used because the decorator is called at class definition time (parens invoke the callable), and so it returns the wrapping function which is, in turn, called with the function. All this has the effect of returning the original_function with the important attrs set.\n\nBasically, decorated(f) vs decorated(*args, **kwargs)(f).","commit_id":"9c5f0b26ee3941d69e81b22541880af35573009c"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"910a44ae7bf961ffecc8e5f92e1be158865ee068","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        super(ManagerMeta, cls).__init__(names, bases, dict_)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        try:"},{"line_number":100,"context_line":"            cls._periodic_tasks \u003d cls._periodic_tasks[:]"},{"line_number":101,"context_line":"        except AttributeError:"},{"line_number":102,"context_line":"            cls._periodic_tasks \u003d []"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACn%2F%2F9Ng%3D","line":100,"updated":"2011-11-19 03:48:36.000000000","message":"Is this to just to get an AttributeError if it\u0027s not set on the class yet, or is there another reason for the copy?  \n\nIf it\u0027s the former, you can do this instead:\n\nif not hasattr(cls, \u0027_periodic_tasks\u0027)\n    cls._periodic_tasks \u003d []","commit_id":"9c5f0b26ee3941d69e81b22541880af35573009c"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"045ecbbda38f739a500d096f621452bd87a07442","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        super(ManagerMeta, cls).__init__(names, bases, dict_)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        try:"},{"line_number":100,"context_line":"            cls._periodic_tasks \u003d cls._periodic_tasks[:]"},{"line_number":101,"context_line":"        except AttributeError:"},{"line_number":102,"context_line":"            cls._periodic_tasks \u003d []"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACn%2F%2F9MU%3D","line":100,"in_reply_to":"AAAACn%2F%2F9NM%3D","updated":"2011-11-19 15:55:00.000000000","message":"Ooh, right.  After I reviewed, I started thinking that multiple subclassing would be broken... but this solves that.  Makes perfect sense.  Would you mind adding a comment around this?\n\nAs far as EAFP, I don\u0027t really have a preference.  Or really, my preference changes at times. :)  I tend to feel like for certain things an if/else is more efficient than exception handling... although I\u0027ve never really confirmed this.  This is a case where I think it\u0027s fine.  The thought really only entered my head because I didn\u0027t understand the need for the copy.\n\nIf you want a 1 liner: cls._periodic_tasks \u003d getattr(cls, \u0027_periodic_tasks\u0027, [])[:]    ;)  but that\u0027s not any more clean.  I\u0027d keep what you have :)","commit_id":"9c5f0b26ee3941d69e81b22541880af35573009c"},{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"282a7012c88e4ca438d98b04e9eee0ee51ac13fe","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        super(ManagerMeta, cls).__init__(names, bases, dict_)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        try:"},{"line_number":100,"context_line":"            cls._periodic_tasks \u003d cls._periodic_tasks[:]"},{"line_number":101,"context_line":"        except AttributeError:"},{"line_number":102,"context_line":"            cls._periodic_tasks \u003d []"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACn%2F%2F9NM%3D","line":100,"in_reply_to":"AAAACn%2F%2F9Ng%3D","updated":"2011-11-19 05:22:04.000000000","message":"Two things are going one here, lemme unwind it to clarify.\n\nThe core logic is, if I don\u0027t have \u0027_periodic_tasks\u0027 as an attribute, then I must be the base class so go ahead and create it. If I do have \u0027_periodic_tasks\u0027 set, then I must have inherited it from my parent so make a copy of it so I don\u0027t step on their toes.\n\nThe try/except AttributeError is just the EAFP style I chose for this.\n\nAlternatively, it could be written:\n\nif hasattr(cls, \"_periodic_tasks\"):\n    # copy parent\u0027s task list\n    cls_periodic_tasks \u003d cls._periodic_tasks[:]\nelse:\n    # i\u0027m the base class, so create it anew\n    cls._periodic_tasks \u003d []\n\nDo you have a preference here? I tend to like EAFP (most of the time), but could be sway\u0027d either way.","commit_id":"9c5f0b26ee3941d69e81b22541880af35573009c"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"910a44ae7bf961ffecc8e5f92e1be158865ee068","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            cls._periodic_tasks \u003d []"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        try:"},{"line_number":105,"context_line":"            cls._ticks_between_runs \u003d cls._ticks_between_runs.copy()"},{"line_number":106,"context_line":"        except AttributeError:"},{"line_number":107,"context_line":"            cls._ticks_between_runs \u003d {}"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACn%2F%2F9Nc%3D","line":105,"updated":"2011-11-19 03:48:36.000000000","message":"Same question.","commit_id":"9c5f0b26ee3941d69e81b22541880af35573009c"},{"author":{"_account_id":518,"name":"Soren Hansen","email":"soren@linux2go.dk","username":"soren"},"change_message_id":"04d08e336b4aec6ddc5de0e81619c80e49105f9e","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    # In the \u0027without-parens\u0027 case, then the original function will be passed"},{"line_number":89,"context_line":"    # in directly because the interpreter will invoke it like:"},{"line_number":90,"context_line":"    #"},{"line_number":91,"context_line":"    #   periodic_task(f)"},{"line_number":92,"context_line":"    if kwargs:"},{"line_number":93,"context_line":"        def wrapped(f):"},{"line_number":94,"context_line":"            f._periodic_task \u003d True"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAC3%2F%2F%2FzE%3D","line":91,"updated":"2011-12-01 10:49:16.000000000","message":"Could you make sure the wrapped function\u0027s __name__ and __doc__ are preserved? functools.wraps is handy for this.","commit_id":"96cecac95d2ad6414ea08c1374b3adab407fce6a"},{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"22684a5cb7b8a2fb24fc7887e05ff7c13350c29d","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    # In the \u0027without-parens\u0027 case, then the original function will be passed"},{"line_number":89,"context_line":"    # in directly because the interpreter will invoke it like:"},{"line_number":90,"context_line":"    #"},{"line_number":91,"context_line":"    #   periodic_task(f)"},{"line_number":92,"context_line":"    if kwargs:"},{"line_number":93,"context_line":"        def wrapped(f):"},{"line_number":94,"context_line":"            f._periodic_task \u003d True"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAC3%2F%2F%2FgI%3D","line":91,"in_reply_to":"AAAAC3%2F%2F%2FzE%3D","updated":"2011-12-02 21:38:40.000000000","message":"AFAICT this isn\u0027t needed since in both cases we\u0027re passing back `f` itself and not a wrapper.\n\nThis is confusing since there is obviously a function called `wrapped` (perhaps a bit misnamed).\n\n`wrapped` isn\u0027t returned by the decorator, rather it\u0027s returned when the decorator is evaluated, and then is evaluated itself to return `f` directly, albeit modified by adding the extra variables.\n\nThe `@decorator` syntax confuses things here, I think.\n\nwrapped \u003d decorator(*args, **kwargs\n)\n\nf \u003d wrapped(f) # wrapped is actually returning `f` and rebinding it `f`.\n\nAND\n\nf \u003d decorator(f) # decorator is returning `f` directly, too.","commit_id":"96cecac95d2ad6414ea08c1374b3adab407fce6a"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"2107ecaf3f957b9110e1ffcd47ba21cf6555e884","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        f \u003d args[0]"},{"line_number":100,"context_line":"        f._periodic_task \u003d True"},{"line_number":101,"context_line":"        f._ticks_between_runs \u003d 0"},{"line_number":102,"context_line":"        return f"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"class ManagerMeta(type):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAACn%2F%2F9HQ%3D","line":102,"updated":"2011-11-21 18:46:42.000000000","message":"What I often do is declare the decorator function (wrapped(), in this case) unconditionally; then I test the arguments, and if I\u0027m being passed a function to decorate, I go ahead and call the decorator function; otherwise, I return the decorator function.  That helps to meet DRY, though at least in this instance the code in both branches is trivial.","commit_id":"96cecac95d2ad6414ea08c1374b3adab407fce6a"},{"author":{"_account_id":518,"name":"Soren Hansen","email":"soren@linux2go.dk","username":"soren"},"change_message_id":"04d08e336b4aec6ddc5de0e81619c80e49105f9e","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        for task_name, task in self._periodic_tasks:"},{"line_number":143,"context_line":"            full_task_name \u003d \u0027.\u0027.join([self.__class__.__name__, task_name])"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"            ticks_to_skip \u003d self._ticks_between_runs[task_name]"},{"line_number":146,"context_line":"            if ticks_to_skip \u003e 0:"},{"line_number":147,"context_line":"                LOG.debug(_(\"Skipping %(full_task_name)s, %(ticks_to_skip)s\""},{"line_number":148,"context_line":"                            \" ticks left until next run\"), locals())"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAC3%2F%2F%2FzA%3D","line":145,"updated":"2011-12-01 10:49:16.000000000","message":"I find it awkward that the _ticks_between_runs dict doesn\u0027t actually keep track of how many ticks there should be between runs, but rather how many ticks there are until the next run. Can you perhaps change the name of the dict to reflect this?","commit_id":"96cecac95d2ad6414ea08c1374b3adab407fce6a"},{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"22684a5cb7b8a2fb24fc7887e05ff7c13350c29d","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        for task_name, task in self._periodic_tasks:"},{"line_number":143,"context_line":"            full_task_name \u003d \u0027.\u0027.join([self.__class__.__name__, task_name])"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"            ticks_to_skip \u003d self._ticks_between_runs[task_name]"},{"line_number":146,"context_line":"            if ticks_to_skip \u003e 0:"},{"line_number":147,"context_line":"                LOG.debug(_(\"Skipping %(full_task_name)s, %(ticks_to_skip)s\""},{"line_number":148,"context_line":"                            \" ticks left until next run\"), locals())"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAC3%2F%2F%2FgM%3D","line":145,"in_reply_to":"AAAAC3%2F%2F%2FzA%3D","updated":"2011-12-02 21:38:40.000000000","message":"Agreed.","commit_id":"96cecac95d2ad6414ea08c1374b3adab407fce6a"}],"nova/scheduler/zone_manager.py":[{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"3afa05b23e91e373b5a0b756954342c24b91c9bc","unresolved":false,"context_lines":[{"line_number":318,"context_line":"        \"\"\"Try to connect to each child zone and get update.\"\"\""},{"line_number":319,"context_line":"        self.green_pool.imap(_poll_zone, self.zone_states.values())"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    def ping(self, context):"},{"line_number":322,"context_line":"        \"\"\"Ping should be called periodically to update zone status.\"\"\""},{"line_number":323,"context_line":"        diff \u003d utils.utcnow() - self.last_zone_db_check"},{"line_number":324,"context_line":"        if diff.seconds \u003e\u003d FLAGS.zone_db_check_interval:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAACn%2F%2F8qM%3D","line":321,"updated":"2011-11-23 18:55:25.000000000","message":"I don\u0027t see the relvance of this specific change in the contexct of this branch - are you sure this is intended ?","commit_id":"96cecac95d2ad6414ea08c1374b3adab407fce6a"},{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"22684a5cb7b8a2fb24fc7887e05ff7c13350c29d","unresolved":false,"context_lines":[{"line_number":318,"context_line":"        \"\"\"Try to connect to each child zone and get update.\"\"\""},{"line_number":319,"context_line":"        self.green_pool.imap(_poll_zone, self.zone_states.values())"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    def ping(self, context):"},{"line_number":322,"context_line":"        \"\"\"Ping should be called periodically to update zone status.\"\"\""},{"line_number":323,"context_line":"        diff \u003d utils.utcnow() - self.last_zone_db_check"},{"line_number":324,"context_line":"        if diff.seconds \u003e\u003d FLAGS.zone_db_check_interval:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAC3%2F%2F%2FgQ%3D","line":321,"in_reply_to":"AAAACn%2F%2F8qM%3D","updated":"2011-12-02 21:38:40.000000000","message":"Looking at zone manager, it appears that `ping` should always be called with a context object.\n\nThis was just a small cleanup to enforce this.\n\nGrepping around, I think should be a safe change. And the unit-tests pass (FWIW).\n\nThat said, if you feel strongly on omitting this, I can strip it from the patch.","commit_id":"96cecac95d2ad6414ea08c1374b3adab407fce6a"}],"nova/tests/test_compute.py":[{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"3afa05b23e91e373b5a0b756954342c24b91c9bc","unresolved":false,"context_lines":[{"line_number":883,"context_line":"        # Force the compute manager to do its periodic poll"},{"line_number":884,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":885,"context_line":"        error_list \u003d self.compute.periodic_tasks(ctxt, raise_on_error\u003dTrue)"},{"line_number":886,"context_line":""},{"line_number":887,"context_line":"        instances \u003d db.instance_get_all(context.get_admin_context())"},{"line_number":888,"context_line":"        LOG.info(_(\"After force-killing instances: %s\"), instances)"},{"line_number":889,"context_line":"        self.assertEqual(len(instances), 1)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAACn%2F%2F8qI%3D","line":886,"updated":"2011-11-23 18:55:25.000000000","message":"Shouldn\u0027t you do something with the error list - such as log it ?","commit_id":"96cecac95d2ad6414ea08c1374b3adab407fce6a"},{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"22684a5cb7b8a2fb24fc7887e05ff7c13350c29d","unresolved":false,"context_lines":[{"line_number":883,"context_line":"        # Force the compute manager to do its periodic poll"},{"line_number":884,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":885,"context_line":"        error_list \u003d self.compute.periodic_tasks(ctxt, raise_on_error\u003dTrue)"},{"line_number":886,"context_line":""},{"line_number":887,"context_line":"        instances \u003d db.instance_get_all(context.get_admin_context())"},{"line_number":888,"context_line":"        LOG.info(_(\"After force-killing instances: %s\"), instances)"},{"line_number":889,"context_line":"        self.assertEqual(len(instances), 1)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAC3%2F%2F%2FgU%3D","line":886,"in_reply_to":"AAAACn%2F%2F8qI%3D","updated":"2011-12-02 21:38:40.000000000","message":"Good catch.\n\nPeriodic tasks no-longer return an error-list, rather they raise when they encounter an exception.\n\nI updated the code to remove the assignment to the dead variable.","commit_id":"96cecac95d2ad6414ea08c1374b3adab407fce6a"}]}
