)]}'
{"nova/compute/manager.py":[{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"ef022f17ebd4602725f0ef5f2042f2645cd92463","unresolved":false,"context_lines":[{"line_number":2376,"context_line":"            expected_states \u003d (task_states.REBOOTING_HARD,"},{"line_number":2377,"context_line":"                               task_states.REBOOT_PENDING_HARD,"},{"line_number":2378,"context_line":"                               task_states.REBOOT_STARTED_HARD)"},{"line_number":2379,"context_line":""},{"line_number":2380,"context_line":"        context \u003d context.elevated()"},{"line_number":2381,"context_line":"        LOG.audit(_(\"Rebooting instance\"), context\u003dcontext, instance\u003dinstance)"},{"line_number":2382,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F8wo%3D","line":2379,"updated":"2014-01-06 10:55:50.000000000","message":"nit: random blank line, 1000s of LOC from your change...","commit_id":"c3cf5e7e5880d9ae705641584f39b1397e46cc84"},{"author":{"_account_id":1882,"name":"dave-mcnally","email":"dave.mcnally@hpe.com","username":"dave-mcnally"},"change_message_id":"b174f0193443ec42500146362844a4c2ad75eae3","unresolved":false,"context_lines":[{"line_number":2376,"context_line":"            expected_states \u003d (task_states.REBOOTING_HARD,"},{"line_number":2377,"context_line":"                               task_states.REBOOT_PENDING_HARD,"},{"line_number":2378,"context_line":"                               task_states.REBOOT_STARTED_HARD)"},{"line_number":2379,"context_line":""},{"line_number":2380,"context_line":"        context \u003d context.elevated()"},{"line_number":2381,"context_line":"        LOG.audit(_(\"Rebooting instance\"), context\u003dcontext, instance\u003dinstance)"},{"line_number":2382,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F8tM%3D","line":2379,"in_reply_to":"AAAAUH%2F%2F8wo%3D","updated":"2014-01-06 11:06:57.000000000","message":"Done","commit_id":"c3cf5e7e5880d9ae705641584f39b1397e46cc84"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c0a2546d67cf1fa727bd157803957c1ebc44c2ba","unresolved":false,"context_lines":[{"line_number":706,"context_line":"            LOG.debug(_(\"Instance in transitional state %s at start-up \""},{"line_number":707,"context_line":"                        \"retrying stop request\"),"},{"line_number":708,"context_line":"                        instance[\u0027task_state\u0027], instance\u003dinstance)"},{"line_number":709,"context_line":"            self.compute_rpcapi.stop_instance(context, instance)"},{"line_number":710,"context_line":"            return"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"        if instance.task_state \u003d\u003d task_states.POWERING_ON:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2Fa0k%3D","line":709,"updated":"2014-02-26 18:53:52.000000000","message":"Why are we sending this over rpc? Also, we could have failed before we reset the task state (by my reading of start and stop). Shouldn\u0027t we only do this if the power state of the instance doesn\u0027t match the expected state?","commit_id":"062655044bf4fc38b619f006c6b6fe64862cc986"},{"author":{"_account_id":1882,"name":"dave-mcnally","email":"dave.mcnally@hpe.com","username":"dave-mcnally"},"change_message_id":"8e7034d42b77a9baed3cbe8675155bb7c3f5120e","unresolved":false,"context_lines":[{"line_number":706,"context_line":"            LOG.debug(_(\"Instance in transitional state %s at start-up \""},{"line_number":707,"context_line":"                        \"retrying stop request\"),"},{"line_number":708,"context_line":"                        instance[\u0027task_state\u0027], instance\u003dinstance)"},{"line_number":709,"context_line":"            self.compute_rpcapi.stop_instance(context, instance)"},{"line_number":710,"context_line":"            return"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"        if instance.task_state \u003d\u003d task_states.POWERING_ON:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVX%2F%2F65Y%3D","line":709,"in_reply_to":"AAAAU3%2F%2Fa0k%3D","updated":"2014-02-27 11:21:22.000000000","message":"Using a cast over rpc would mean any instance specific exceptions wouldn\u0027t prevent the init from completing.\nAlso if the power state and and expected state match this is a no-op in the driver but stop_instance will do the correct clean up of task_state and vm_state and I didn\u0027t want to duplicate that here.","commit_id":"062655044bf4fc38b619f006c6b6fe64862cc986"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"833ebd289fbb8eba30cb3b71801bfc3ba332727f","unresolved":false,"context_lines":[{"line_number":706,"context_line":"            LOG.debug(_(\"Instance in transitional state %s at start-up \""},{"line_number":707,"context_line":"                        \"retrying stop request\"),"},{"line_number":708,"context_line":"                        instance[\u0027task_state\u0027], instance\u003dinstance)"},{"line_number":709,"context_line":"            self.compute_rpcapi.stop_instance(context, instance)"},{"line_number":710,"context_line":"            return"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"        if instance.task_state \u003d\u003d task_states.POWERING_ON:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVX%2F%2Fueg%3D","line":709,"in_reply_to":"AAAAVX%2F%2F65Y%3D","updated":"2014-02-28 18:42:47.000000000","message":"This is a bit heavy handed, but seems OK for now.\n\nOnce we have all this clean up stuff in, I think we need to look at a better way of coding it up more generally. All seems a bit to special case, at the moment. Which seems fine as a first cut.","commit_id":"062655044bf4fc38b619f006c6b6fe64862cc986"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6ac5218cdbdf68794647f03dd9d210355f3d032c","unresolved":false,"context_lines":[{"line_number":706,"context_line":"            LOG.debug(_(\"Instance in transitional state %s at start-up \""},{"line_number":707,"context_line":"                        \"retrying stop request\"),"},{"line_number":708,"context_line":"                        instance[\u0027task_state\u0027], instance\u003dinstance)"},{"line_number":709,"context_line":"            self.compute_rpcapi.stop_instance(context, instance)"},{"line_number":710,"context_line":"            return"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"        if instance.task_state \u003d\u003d task_states.POWERING_ON:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2F2Rk%3D","line":709,"in_reply_to":"AAAAVX%2F%2Fueg%3D","updated":"2014-03-03 20:14:26.000000000","message":"I think this is crazy-pants. Several places above and below this, we catch exception if something fails. I don\u0027t see why we should do anything differently here. Doing this to avoid an exception is nuts, IMHO.\n\nFurther, during init_host(), we\u0027re single-threaded. If we delay processing of this stop request until it comes back to us over RPC, things might have changed. The user may have issued a start or delete or any other request. If we\u0027re going to take action on it, I think we should do it here, serially, like everything else.","commit_id":"062655044bf4fc38b619f006c6b6fe64862cc986"},{"author":{"_account_id":1882,"name":"dave-mcnally","email":"dave.mcnally@hpe.com","username":"dave-mcnally"},"change_message_id":"e0afc797ccbae5575e9e2e7ca6401c0b1554a197","unresolved":false,"context_lines":[{"line_number":706,"context_line":"            LOG.debug(_(\"Instance in transitional state %s at start-up \""},{"line_number":707,"context_line":"                        \"retrying stop request\"),"},{"line_number":708,"context_line":"                        instance[\u0027task_state\u0027], instance\u003dinstance)"},{"line_number":709,"context_line":"            self.compute_rpcapi.stop_instance(context, instance)"},{"line_number":710,"context_line":"            return"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"        if instance.task_state \u003d\u003d task_states.POWERING_ON:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2FtjI%3D","line":709,"in_reply_to":"AAAAVn%2F%2F16w%3D","updated":"2014-03-04 14:49:55.000000000","message":"Done","commit_id":"062655044bf4fc38b619f006c6b6fe64862cc986"},{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"9c257a12439d79f058555bc820e2981306e1d054","unresolved":false,"context_lines":[{"line_number":706,"context_line":"            LOG.debug(_(\"Instance in transitional state %s at start-up \""},{"line_number":707,"context_line":"                        \"retrying stop request\"),"},{"line_number":708,"context_line":"                        instance[\u0027task_state\u0027], instance\u003dinstance)"},{"line_number":709,"context_line":"            self.compute_rpcapi.stop_instance(context, instance)"},{"line_number":710,"context_line":"            return"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"        if instance.task_state \u003d\u003d task_states.POWERING_ON:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2F16w%3D","line":709,"in_reply_to":"AAAAVn%2F%2F2Rk%3D","updated":"2014-03-03 20:49:03.000000000","message":"+1 to what Dan said, let\u0027s handle this here and minimize racing with other potential API requests.\n\nDelaying the action until it comes back over RPC is confusing at best.  Any reconciliation done here should serially complete previous, unfinished work.","commit_id":"062655044bf4fc38b619f006c6b6fe64862cc986"},{"author":{"_account_id":1882,"name":"dave-mcnally","email":"dave.mcnally@hpe.com","username":"dave-mcnally"},"change_message_id":"e0afc797ccbae5575e9e2e7ca6401c0b1554a197","unresolved":false,"context_lines":[{"line_number":706,"context_line":"            LOG.debug(_(\"Instance in transitional state %s at start-up \""},{"line_number":707,"context_line":"                        \"retrying stop request\"),"},{"line_number":708,"context_line":"                        instance[\u0027task_state\u0027], instance\u003dinstance)"},{"line_number":709,"context_line":"            self.compute_rpcapi.stop_instance(context, instance)"},{"line_number":710,"context_line":"            return"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"        if instance.task_state \u003d\u003d task_states.POWERING_ON:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2FtjU%3D","line":709,"in_reply_to":"AAAAVn%2F%2F2Rk%3D","updated":"2014-03-04 14:49:55.000000000","message":"Crazy-pants eh? I\u0027ve had my code called a lot of things but that\u0027s a new one :)\nPoint taken on the exception and to be honest I had completely forgotten about init being single threaded. I\u0027ll remove the RPC use.","commit_id":"062655044bf4fc38b619f006c6b6fe64862cc986"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f7a1d93313d548ec83ae977f14158268360f013f","unresolved":false,"context_lines":[{"line_number":706,"context_line":"            try:"},{"line_number":707,"context_line":"                LOG.debug(_(\"Instance in transitional state %s at start-up \""},{"line_number":708,"context_line":"                            \"retrying stop request\"),"},{"line_number":709,"context_line":"                            instance[\u0027task_state\u0027], instance\u003dinstance)"},{"line_number":710,"context_line":"                self.stop_instance(context, instance)"},{"line_number":711,"context_line":"            except Exception:"},{"line_number":712,"context_line":"                # we don\u0027t want that an exception blocks the init_host"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAVn%2F%2Ff4U%3D","line":709,"updated":"2014-03-05 18:59:48.000000000","message":"Having these log messages inside the try:except is not right, IMHO, because anything that fails there is probably actually worthy of being fatal.","commit_id":"4cb99dec31ac5aa5c516b045915bb7ee082c100a"}],"nova/tests/compute/test_compute_mgr.py":[{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"443ca40cfcc37c7995378cc1eebc0b9c63d9211b","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        instance.uuid \u003d \u0027foo\u0027"},{"line_number":453,"context_line":"        instance.vm_state \u003d vm_states.ACTIVE"},{"line_number":454,"context_line":"        instance.task_state \u003d task_states.POWERING_OFF"},{"line_number":455,"context_line":"        with contextlib.nested("},{"line_number":456,"context_line":"            mock.patch.object(self.compute, \u0027_get_power_state\u0027,"},{"line_number":457,"context_line":"                               return_value\u003dpower_state.RUNNING),"},{"line_number":458,"context_line":"            mock.patch.object(self.compute, \u0027stop_instance\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAVn%2F%2FpHY%3D","line":455,"updated":"2014-03-04 22:05:05.000000000","message":"Do you need to mock _get_power_state?\n\nBoth if blocks return if a \"transitional\" state is detected so I think it gets called?","commit_id":"8a1fceb009c384dbb7c45a25bf86611318579a29"},{"author":{"_account_id":1882,"name":"dave-mcnally","email":"dave.mcnally@hpe.com","username":"dave-mcnally"},"change_message_id":"88a9586c2d597d3a834cb9247475e4e9135ed5e4","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        instance.uuid \u003d \u0027foo\u0027"},{"line_number":453,"context_line":"        instance.vm_state \u003d vm_states.ACTIVE"},{"line_number":454,"context_line":"        instance.task_state \u003d task_states.POWERING_OFF"},{"line_number":455,"context_line":"        with contextlib.nested("},{"line_number":456,"context_line":"            mock.patch.object(self.compute, \u0027_get_power_state\u0027,"},{"line_number":457,"context_line":"                               return_value\u003dpower_state.RUNNING),"},{"line_number":458,"context_line":"            mock.patch.object(self.compute, \u0027stop_instance\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAVn%2F%2Fj%2BQ%3D","line":455,"in_reply_to":"AAAAVn%2F%2FpHY%3D","updated":"2014-03-05 11:27:17.000000000","message":"You\u0027re correct it isn\u0027t getting called. I\u0027ve removed the mock.","commit_id":"8a1fceb009c384dbb7c45a25bf86611318579a29"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f7a1d93313d548ec83ae977f14158268360f013f","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        instance.uuid \u003d \u0027foo\u0027"},{"line_number":453,"context_line":"        instance.vm_state \u003d vm_states.ACTIVE"},{"line_number":454,"context_line":"        instance.task_state \u003d task_states.POWERING_OFF"},{"line_number":455,"context_line":"        with contextlib.nested("},{"line_number":456,"context_line":"            mock.patch.object(self.compute, \u0027stop_instance\u0027)"},{"line_number":457,"context_line":"          ) as ("},{"line_number":458,"context_line":"            stop_instance,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAVn%2F%2Ff3c%3D","line":455,"updated":"2014-03-05 18:59:48.000000000","message":"Why are you using contextlib.nested for a single context? This is majorly ugly and makes it all much harder to read.","commit_id":"4cb99dec31ac5aa5c516b045915bb7ee082c100a"},{"author":{"_account_id":1882,"name":"dave-mcnally","email":"dave.mcnally@hpe.com","username":"dave-mcnally"},"change_message_id":"bde250d46b90fa1075e60aa7dde37e374c03b8f7","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        instance.uuid \u003d \u0027foo\u0027"},{"line_number":453,"context_line":"        instance.vm_state \u003d vm_states.ACTIVE"},{"line_number":454,"context_line":"        instance.task_state \u003d task_states.POWERING_OFF"},{"line_number":455,"context_line":"        with contextlib.nested("},{"line_number":456,"context_line":"            mock.patch.object(self.compute, \u0027stop_instance\u0027)"},{"line_number":457,"context_line":"          ) as ("},{"line_number":458,"context_line":"            stop_instance,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAVn%2F%2FfAs%3D","line":455,"in_reply_to":"AAAAVn%2F%2Ff3c%3D","updated":"2014-03-05 20:12:10.000000000","message":"Up until the previous patch I was mocking more in here, removed an unnecessary mock but forgot to scrap the nested part. Done now.","commit_id":"4cb99dec31ac5aa5c516b045915bb7ee082c100a"}]}
