)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"1afc66722a09c87399d2e8eb1d0a9b5753a3c178","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Allow rebuild of node in ERROR and DEPLOYFAIL state"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch allows nodes in ERROR or DEPLOTFAIL state to be rebuilt. This"},{"line_number":10,"context_line":"allows operators have a chance of recovering a node should it go into"},{"line_number":11,"context_line":"an error state while deploying or rebuilding."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"7ac7a964_6f547c54","line":9,"updated":"2014-08-14 23:07:47.000000000","message":"s/DEPLOTFAIL/DEPLOYFAIL/","commit_id":"6f5de6b9293b3513a5709594b67ad0c8ef3115a9"}],"ironic/conductor/manager.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"a3065d219db8a360a16a23e287a93da005bb694d","unresolved":false,"context_lines":[{"line_number":440,"context_line":"        # want to add retries or extra synchronization here."},{"line_number":441,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dFalse) as task:"},{"line_number":442,"context_line":"            node \u003d task.node"},{"line_number":443,"context_line":"            # May only rebuild a node in ACTIVE state"},{"line_number":444,"context_line":"            if rebuild and (node.provision_state not in [states.ACTIVE,"},{"line_number":445,"context_line":"\t\t\t\t\t\t\t states.ERROR]):"},{"line_number":446,"context_line":"                raise exception.InstanceDeployFailure(_("}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac7a964_6134a1de","line":443,"updated":"2014-08-14 15:58:07.000000000","message":"this comment needs update","commit_id":"29fb1a6db2d774206ed050a6ffebfea010a29ce8"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"a3065d219db8a360a16a23e287a93da005bb694d","unresolved":false,"context_lines":[{"line_number":442,"context_line":"            node \u003d task.node"},{"line_number":443,"context_line":"            # May only rebuild a node in ACTIVE state"},{"line_number":444,"context_line":"            if rebuild and (node.provision_state not in [states.ACTIVE,"},{"line_number":445,"context_line":"\t\t\t\t\t\t\t states.ERROR]):"},{"line_number":446,"context_line":"                raise exception.InstanceDeployFailure(_("},{"line_number":447,"context_line":"                    \"RPC do_node_deploy called to rebuild %(node)s, but \""},{"line_number":448,"context_line":"                    \"provision state is %(curstate)s. Must be %(state)s.\") %"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac7a964_e157d100","line":445,"updated":"2014-08-14 15:58:07.000000000","message":"trailing tabs :)","commit_id":"29fb1a6db2d774206ed050a6ffebfea010a29ce8"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"d73a2bb1d5befccf1253dc1fb6d44dd05115f137","unresolved":false,"context_lines":[{"line_number":448,"context_line":"                    \"RPC do_node_deploy called to rebuild %(node)s, but \""},{"line_number":449,"context_line":"                    \"provision state is %(curstate)s. Must be %(state)s.\") %"},{"line_number":450,"context_line":"                    {\u0027node\u0027: node.uuid, \u0027curstate\u0027: node.provision_state,"},{"line_number":451,"context_line":"                     \u0027state\u0027: states.ACTIVE})"},{"line_number":452,"context_line":"            elif node.provision_state !\u003d states.NOSTATE and not rebuild:"},{"line_number":453,"context_line":"                raise exception.InstanceDeployFailure(_("},{"line_number":454,"context_line":"                    \"RPC do_node_deploy called for %(node)s, but provision \""}],"source_content_type":"text/x-python","patch_set":8,"id":"7ac7a964_8fb8dfe6","line":451,"updated":"2014-08-15 14:30:14.000000000","message":"We should probably adjust this exception message now.","commit_id":"82d531bcf38013c8840964fa2021acc9a6d8d0c6"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"18b20b18cd780ce70219284466d8865bef247b74","unresolved":false,"context_lines":[{"line_number":448,"context_line":"                    \"RPC do_node_deploy called to rebuild %(node)s, but \""},{"line_number":449,"context_line":"                    \"provision state is %(curstate)s. Must be %(state)s.\") %"},{"line_number":450,"context_line":"                    {\u0027node\u0027: node.uuid, \u0027curstate\u0027: node.provision_state,"},{"line_number":451,"context_line":"                     \u0027state\u0027: states.ACTIVE})"},{"line_number":452,"context_line":"            elif node.provision_state !\u003d states.NOSTATE and not rebuild:"},{"line_number":453,"context_line":"                raise exception.InstanceDeployFailure(_("},{"line_number":454,"context_line":"                    \"RPC do_node_deploy called for %(node)s, but provision \""}],"source_content_type":"text/x-python","patch_set":8,"id":"7ac7a964_f663e7da","line":451,"in_reply_to":"7ac7a964_8fb8dfe6","updated":"2014-08-15 17:26:07.000000000","message":"Done","commit_id":"82d531bcf38013c8840964fa2021acc9a6d8d0c6"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"a26e65e06f1eabf2c2d710055586248e5b901dbb","unresolved":false,"context_lines":[{"line_number":440,"context_line":"        # want to add retries or extra synchronization here."},{"line_number":441,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dFalse) as task:"},{"line_number":442,"context_line":"            node \u003d task.node"},{"line_number":443,"context_line":"            # May only rebuild a node in ACTIVE, ERROR, or DEPLOYFAIL state"},{"line_number":444,"context_line":"            if rebuild and (node.provision_state not in [states.ACTIVE,"},{"line_number":445,"context_line":"                                                         states.ERROR,"},{"line_number":446,"context_line":"                                                         states.DEPLOYFAIL]):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ac4a560_1e9b71ca","line":443,"updated":"2014-08-16 22:51:51.000000000","message":"I think this comment isn\u0027t necessary, but not going to block on it...","commit_id":"566990e82b029322f9584a70d2940e689914e81d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e8e768d78162da26752a39aba24be45f790c6e07","unresolved":false,"context_lines":[{"line_number":449,"context_line":"                    \"provision state is %(curstate)s. State must be \""},{"line_number":450,"context_line":"                    \"%(state)s.\") % {\u0027node\u0027: node.uuid,"},{"line_number":451,"context_line":"                     \u0027curstate\u0027: node.provision_state,"},{"line_number":452,"context_line":"                     \u0027state\u0027: \"ACTIVE, ERROR, or DEPLOYFAIL\"})"},{"line_number":453,"context_line":"            elif node.provision_state !\u003d states.NOSTATE and not rebuild:"},{"line_number":454,"context_line":"                raise exception.InstanceDeployFailure(_("},{"line_number":455,"context_line":"                    \"RPC do_node_deploy called for %(node)s, but provision \""}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_3452aa13","line":452,"updated":"2014-08-19 21:33:44.000000000","message":"nit: you have a list above [states.ACTIVE, states.ERROR, states.DEPLOYFAIL]; seems like you could reuse that list here.\n\nhmm. Those strings are wrong if you meant to use the strings corresponding to the states. If you wanted to use the strings corresponding to the names of the state variables, then they are right. (If that made sense.)","commit_id":"50719b76b4e367ac5c8d74b3c3e3a5a79f387226"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"ba836eafb81257e19e20daf55923820b10776f07","unresolved":false,"context_lines":[{"line_number":449,"context_line":"                    \"provision state is %(curstate)s. State must be \""},{"line_number":450,"context_line":"                    \"%(state)s.\") % {\u0027node\u0027: node.uuid,"},{"line_number":451,"context_line":"                     \u0027curstate\u0027: node.provision_state,"},{"line_number":452,"context_line":"                     \u0027state\u0027: \"ACTIVE, ERROR, or DEPLOYFAIL\"})"},{"line_number":453,"context_line":"            elif node.provision_state !\u003d states.NOSTATE and not rebuild:"},{"line_number":454,"context_line":"                raise exception.InstanceDeployFailure(_("},{"line_number":455,"context_line":"                    \"RPC do_node_deploy called for %(node)s, but provision \""}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_285a4ef3","line":452,"in_reply_to":"1abeadc6_3452aa13","updated":"2014-08-19 22:11:53.000000000","message":"Done","commit_id":"50719b76b4e367ac5c8d74b3c3e3a5a79f387226"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"64ee8843c9a8b08839f23e70424b222aa8ebb6e5","unresolved":false,"context_lines":[{"line_number":453,"context_line":"                    \"provision state is %(curstate)s. State must be \""},{"line_number":454,"context_line":"                    \"%(state)s.\") % {\u0027node\u0027: node.uuid,"},{"line_number":455,"context_line":"                     \u0027curstate\u0027: node.provision_state,"},{"line_number":456,"context_line":"                     \u0027state\u0027: valid_states_string})"},{"line_number":457,"context_line":"            elif node.provision_state !\u003d states.NOSTATE and not rebuild:"},{"line_number":458,"context_line":"                raise exception.InstanceDeployFailure(_("},{"line_number":459,"context_line":"                    \"RPC do_node_deploy called for %(node)s, but provision \""}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_5e3bc0d0","line":456,"updated":"2014-08-19 22:56:52.000000000","message":"instead of how you generated valid_states_string, I think you could do \u0027, \u0027.join(rebuild_states)","commit_id":"3d8c1ae47441c81bdf0df52f7eaa7890ccf1e373"},{"author":{"_account_id":10035,"name":"greghaynes","email":"greg@greghaynes.net","username":"greghaynes"},"change_message_id":"86638873cccdbf7a1fc8e4034716ef60ef771e07","unresolved":false,"context_lines":[{"line_number":445,"context_line":"                              states.ERROR,"},{"line_number":446,"context_line":"                              states.DEPLOYFAIL]"},{"line_number":447,"context_line":"            if rebuild and (node.provision_state not in rebuild_states):"},{"line_number":448,"context_line":"                valid_states_string \u003d \u0027,\u0027.join(rebuild_states)"},{"line_number":449,"context_line":"                raise exception.InstanceDeployFailure(_("},{"line_number":450,"context_line":"                    \"RPC do_node_deploy called to rebuild %(node)s, but \""},{"line_number":451,"context_line":"                    \"provision state is %(curstate)s. State must be one \""}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_be73f413","line":448,"updated":"2014-08-19 23:21:28.000000000","message":"This join is missing a space after the ,.","commit_id":"71f6bd16e746a09a214559a671528de795443cf2"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"7e3739f012a672de8c4666aeaf170fe097c386f6","unresolved":false,"context_lines":[{"line_number":445,"context_line":"                              states.ERROR,"},{"line_number":446,"context_line":"                              states.DEPLOYFAIL]"},{"line_number":447,"context_line":"            if rebuild and (node.provision_state not in rebuild_states):"},{"line_number":448,"context_line":"                valid_states_string \u003d \u0027,\u0027.join(rebuild_states)"},{"line_number":449,"context_line":"                raise exception.InstanceDeployFailure(_("},{"line_number":450,"context_line":"                    \"RPC do_node_deploy called to rebuild %(node)s, but \""},{"line_number":451,"context_line":"                    \"provision state is %(curstate)s. State must be one \""}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_c1f8d54b","line":448,"in_reply_to":"1abeadc6_be73f413","updated":"2014-08-19 23:58:17.000000000","message":"Done","commit_id":"71f6bd16e746a09a214559a671528de795443cf2"},{"author":{"_account_id":10035,"name":"greghaynes","email":"greg@greghaynes.net","username":"greghaynes"},"change_message_id":"86638873cccdbf7a1fc8e4034716ef60ef771e07","unresolved":false,"context_lines":[{"line_number":451,"context_line":"                    \"provision state is %(curstate)s. State must be one \""},{"line_number":452,"context_line":"                    \"of : %(state)s.\") % {\u0027node\u0027: node.uuid,"},{"line_number":453,"context_line":"                     \u0027curstate\u0027: node.provision_state,"},{"line_number":454,"context_line":"                     \u0027state\u0027: valid_states_string})"},{"line_number":455,"context_line":"            elif node.provision_state !\u003d states.NOSTATE and not rebuild:"},{"line_number":456,"context_line":"                raise exception.InstanceDeployFailure(_("},{"line_number":457,"context_line":"                    \"RPC do_node_deploy called for %(node)s, but provision \""}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_3e5fe473","line":454,"updated":"2014-08-19 23:21:28.000000000","message":"Nitpick, but this property would be better named \u0027states\u0027 now.","commit_id":"71f6bd16e746a09a214559a671528de795443cf2"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"7e3739f012a672de8c4666aeaf170fe097c386f6","unresolved":false,"context_lines":[{"line_number":451,"context_line":"                    \"provision state is %(curstate)s. State must be one \""},{"line_number":452,"context_line":"                    \"of : %(state)s.\") % {\u0027node\u0027: node.uuid,"},{"line_number":453,"context_line":"                     \u0027curstate\u0027: node.provision_state,"},{"line_number":454,"context_line":"                     \u0027state\u0027: valid_states_string})"},{"line_number":455,"context_line":"            elif node.provision_state !\u003d states.NOSTATE and not rebuild:"},{"line_number":456,"context_line":"                raise exception.InstanceDeployFailure(_("},{"line_number":457,"context_line":"                    \"RPC do_node_deploy called for %(node)s, but provision \""}],"source_content_type":"text/x-python","patch_set":15,"id":"1abeadc6_019acd13","line":454,"in_reply_to":"1abeadc6_3e5fe473","updated":"2014-08-19 23:58:17.000000000","message":"Done","commit_id":"71f6bd16e746a09a214559a671528de795443cf2"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"54ed3329b4245422811667ef86ca1e03b595d3e0","unresolved":false,"context_lines":[{"line_number":444,"context_line":"            rebuild_states \u003d [states.ACTIVE,"},{"line_number":445,"context_line":"                              states.ERROR,"},{"line_number":446,"context_line":"                              states.DEPLOYFAIL]"},{"line_number":447,"context_line":"            if rebuild and (node.provision_state not in rebuild_states):"},{"line_number":448,"context_line":"                valid_states_string \u003d \u0027, \u0027.join(rebuild_states)"},{"line_number":449,"context_line":"                raise exception.InstanceDeployFailure(_("},{"line_number":450,"context_line":"                    \"RPC do_node_deploy called to rebuild %(node)s, but \""}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_a182f991","line":447,"updated":"2014-08-20 00:02:20.000000000","message":"Nit if someone makes you push another patch, you don\u0027t need the parentheses around `node.provision state not in rebuild_states`.","commit_id":"8ca29ebb1a78108dcf602891ed42267bbe14df29"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"54ed3329b4245422811667ef86ca1e03b595d3e0","unresolved":false,"context_lines":[{"line_number":449,"context_line":"                raise exception.InstanceDeployFailure(_("},{"line_number":450,"context_line":"                    \"RPC do_node_deploy called to rebuild %(node)s, but \""},{"line_number":451,"context_line":"                    \"provision state is %(curstate)s. State must be one \""},{"line_number":452,"context_line":"                    \"of : %(states)s.\") % {\u0027node\u0027: node.uuid,"},{"line_number":453,"context_line":"                     \u0027curstate\u0027: node.provision_state,"},{"line_number":454,"context_line":"                     \u0027states\u0027: valid_states_string})"},{"line_number":455,"context_line":"            elif node.provision_state !\u003d states.NOSTATE and not rebuild:"}],"source_content_type":"text/x-python","patch_set":16,"id":"1abeadc6_014f2d93","line":452,"updated":"2014-08-20 00:02:20.000000000","message":"Another nit if you push another: s/of :/of:/","commit_id":"8ca29ebb1a78108dcf602891ed42267bbe14df29"}],"ironic/tests/conductor/test_manager.py":[{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"b5089cb53a363c1922966c5842f450bea7d3af49","unresolved":false,"context_lines":[{"line_number":646,"context_line":"        self.assertIsNone(node.last_error)"},{"line_number":647,"context_line":"        # Verify reservation has been cleared."},{"line_number":648,"context_line":"        self.assertIsNone(node.reservation)"},{"line_number":649,"context_line":"    "},{"line_number":650,"context_line":"    def test_do_node_deploy_maintenance(self):"},{"line_number":651,"context_line":"        node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027,"},{"line_number":652,"context_line":"                                          maintenance\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7ac7a964_22c29ce9","line":649,"updated":"2014-08-14 22:06:37.000000000","message":"whitespace","commit_id":"68145a8a88f9b55df7e288bd592ff4553a605592"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e182a7c4142da7768075bdc6881c883511ced92b","unresolved":false,"context_lines":[{"line_number":730,"context_line":"    def test_do_node_deploy_rebuild_active_state(self):"},{"line_number":731,"context_line":"        self._start_service()"},{"line_number":732,"context_line":"        thread \u003d self.service._spawn_worker(lambda: None)"},{"line_number":733,"context_line":"        with mock.patch.object(self.service, \u0027_spawn_worker\u0027) as mock_spawn:"},{"line_number":734,"context_line":"            mock_spawn.return_value \u003d thread"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"            node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ac7a964_0fcbf253","line":733,"updated":"2014-08-15 13:13:03.000000000","message":"ugh. I know that this whole file requires some more refactoring, but can at least new tests use\n\n @mock.patch.object(manager.ConductorManager, \u0027_spawn_worker\u0027)\n\ndecorator instead of increasing indentation?","commit_id":"82d531bcf38013c8840964fa2021acc9a6d8d0c6"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"18b20b18cd780ce70219284466d8865bef247b74","unresolved":false,"context_lines":[{"line_number":730,"context_line":"    def test_do_node_deploy_rebuild_active_state(self):"},{"line_number":731,"context_line":"        self._start_service()"},{"line_number":732,"context_line":"        thread \u003d self.service._spawn_worker(lambda: None)"},{"line_number":733,"context_line":"        with mock.patch.object(self.service, \u0027_spawn_worker\u0027) as mock_spawn:"},{"line_number":734,"context_line":"            mock_spawn.return_value \u003d thread"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"            node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ac7a964_d668abbc","line":733,"in_reply_to":"7ac7a964_0fcbf253","updated":"2014-08-15 17:26:07.000000000","message":"Done","commit_id":"82d531bcf38013c8840964fa2021acc9a6d8d0c6"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"5663934d942d015550b39921fe8f9e11d34c2884","unresolved":false,"context_lines":[{"line_number":748,"context_line":"    @mock.patch(\u0027ironic.drivers.modules.fake.FakeDeploy.deploy\u0027)"},{"line_number":749,"context_line":"    def test_do_node_deploy_rebuild_deployfail_state(self, mock_deploy):"},{"line_number":750,"context_line":"        self._start_service()"},{"line_number":751,"context_line":"        "},{"line_number":752,"context_line":"        mock_deploy.return_value \u003d states.DEPLOYING"},{"line_number":753,"context_line":""},{"line_number":754,"context_line":"        node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7ac7a964_76f27770","line":751,"updated":"2014-08-15 17:43:04.000000000","message":"white space","commit_id":"99b663f3a8e41193e99c078c7d136e45fbd05223"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"a26e65e06f1eabf2c2d710055586248e5b901dbb","unresolved":false,"context_lines":[{"line_number":739,"context_line":"        node.refresh()"},{"line_number":740,"context_line":"        self.assertEqual(states.DEPLOYING, node.provision_state)"},{"line_number":741,"context_line":"        self.assertEqual(states.DEPLOYDONE, node.target_provision_state)"},{"line_number":742,"context_line":"        # This is a sync operation last_error should be None."},{"line_number":743,"context_line":"        self.assertIsNone(node.last_error)"},{"line_number":744,"context_line":"        # Verify reservation has been cleared."},{"line_number":745,"context_line":"        self.assertIsNone(node.reservation)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ac4a560_5eca49a2","line":742,"updated":"2014-08-16 22:51:51.000000000","message":"s/a sync/async/ ?","commit_id":"566990e82b029322f9584a70d2940e689914e81d"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"a26e65e06f1eabf2c2d710055586248e5b901dbb","unresolved":false,"context_lines":[{"line_number":743,"context_line":"        self.assertIsNone(node.last_error)"},{"line_number":744,"context_line":"        # Verify reservation has been cleared."},{"line_number":745,"context_line":"        self.assertIsNone(node.reservation)"},{"line_number":746,"context_line":"        mock_deploy.assert_called_once_with(mock.ANY)"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"    @mock.patch(\u0027ironic.drivers.modules.fake.FakeDeploy.deploy\u0027)"},{"line_number":749,"context_line":"    def test_do_node_deploy_rebuild_deployfail_state(self, mock_deploy):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ac4a560_1e37f1b1","line":746,"updated":"2014-08-16 22:51:51.000000000","message":"If you\u0027re not going to check the arguments, maybe just do assert_called_once()\n\n(same with the others below)","commit_id":"566990e82b029322f9584a70d2940e689914e81d"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"a26e65e06f1eabf2c2d710055586248e5b901dbb","unresolved":false,"context_lines":[{"line_number":759,"context_line":"        node.refresh()"},{"line_number":760,"context_line":"        self.assertEqual(states.DEPLOYING, node.provision_state)"},{"line_number":761,"context_line":"        self.assertEqual(states.DEPLOYDONE, node.target_provision_state)"},{"line_number":762,"context_line":"        # This is a sync operation last_error should be None."},{"line_number":763,"context_line":"        self.assertIsNone(node.last_error)"},{"line_number":764,"context_line":"        # Verify reservation has been cleared."},{"line_number":765,"context_line":"        self.assertIsNone(node.reservation)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ac4a560_7ecf05b1","line":762,"updated":"2014-08-16 22:51:51.000000000","message":"ditto","commit_id":"566990e82b029322f9584a70d2940e689914e81d"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"a26e65e06f1eabf2c2d710055586248e5b901dbb","unresolved":false,"context_lines":[{"line_number":777,"context_line":"        node.refresh()"},{"line_number":778,"context_line":"        self.assertEqual(states.DEPLOYING, node.provision_state)"},{"line_number":779,"context_line":"        self.assertEqual(states.DEPLOYDONE, node.target_provision_state)"},{"line_number":780,"context_line":"        # This is a sync operation last_error should be None."},{"line_number":781,"context_line":"        self.assertIsNone(node.last_error)"},{"line_number":782,"context_line":"        # Verify reservation has been cleared."},{"line_number":783,"context_line":"        self.assertIsNone(node.reservation)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ac4a560_9ec3018a","line":780,"updated":"2014-08-16 22:51:51.000000000","message":"ditto","commit_id":"566990e82b029322f9584a70d2940e689914e81d"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"a26e65e06f1eabf2c2d710055586248e5b901dbb","unresolved":false,"context_lines":[{"line_number":792,"context_line":"                                self.context, node[\u0027uuid\u0027], rebuild\u003dTrue)"},{"line_number":793,"context_line":"        # Compare true exception hidden by @messaging.expected_exceptions"},{"line_number":794,"context_line":"        self.assertEqual(exception.InstanceDeployFailure, exc.exc_info[0])"},{"line_number":795,"context_line":"        # This is a sync operation last_error should be None."},{"line_number":796,"context_line":"        self.assertIsNone(node.last_error)"},{"line_number":797,"context_line":"        # Verify reservation has been cleared."},{"line_number":798,"context_line":"        self.assertIsNone(node.reservation)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ac4a560_bec0bd7d","line":795,"updated":"2014-08-16 22:51:51.000000000","message":"ditto","commit_id":"566990e82b029322f9584a70d2940e689914e81d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e8e768d78162da26752a39aba24be45f790c6e07","unresolved":false,"context_lines":[{"line_number":749,"context_line":"    def test_do_node_deploy_rebuild_deployfail_state(self, mock_deploy):"},{"line_number":750,"context_line":"        self._start_service()"},{"line_number":751,"context_line":""},{"line_number":752,"context_line":"        mock_deploy.return_value \u003d states.DEPLOYING"},{"line_number":753,"context_line":""},{"line_number":754,"context_line":"        node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027,"},{"line_number":755,"context_line":"                                        provision_state\u003dstates.DEPLOYFAIL)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_149daebc","line":752,"updated":"2014-08-19 21:33:44.000000000","message":"just wondering why you have blank lines before/after this line, when you don\u0027t do that in your other unit tests.","commit_id":"50719b76b4e367ac5c8d74b3c3e3a5a79f387226"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"ba836eafb81257e19e20daf55923820b10776f07","unresolved":false,"context_lines":[{"line_number":749,"context_line":"    def test_do_node_deploy_rebuild_deployfail_state(self, mock_deploy):"},{"line_number":750,"context_line":"        self._start_service()"},{"line_number":751,"context_line":""},{"line_number":752,"context_line":"        mock_deploy.return_value \u003d states.DEPLOYING"},{"line_number":753,"context_line":""},{"line_number":754,"context_line":"        node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027,"},{"line_number":755,"context_line":"                                        provision_state\u003dstates.DEPLOYFAIL)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_080af2d1","line":752,"in_reply_to":"1abeadc6_149daebc","updated":"2014-08-19 22:11:53.000000000","message":"Done","commit_id":"50719b76b4e367ac5c8d74b3c3e3a5a79f387226"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e8e768d78162da26752a39aba24be45f790c6e07","unresolved":false,"context_lines":[{"line_number":784,"context_line":"        mock_deploy.assert_called_once()"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"    def test_do_node_deploy_rebuild_nostate_state(self):"},{"line_number":787,"context_line":"        # test node[\u0027provision_state\u0027] is not NOSTATE"},{"line_number":788,"context_line":"        node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027,"},{"line_number":789,"context_line":"                                          provision_state\u003dstates.NOSTATE)"},{"line_number":790,"context_line":"        exc \u003d self.assertRaises(messaging.rpc.ExpectedException,"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_944c5e44","line":787,"updated":"2014-08-19 21:33:44.000000000","message":"Aren\u0027t you testing that it IS NOSTATE?","commit_id":"50719b76b4e367ac5c8d74b3c3e3a5a79f387226"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"ba836eafb81257e19e20daf55923820b10776f07","unresolved":false,"context_lines":[{"line_number":784,"context_line":"        mock_deploy.assert_called_once()"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"    def test_do_node_deploy_rebuild_nostate_state(self):"},{"line_number":787,"context_line":"        # test node[\u0027provision_state\u0027] is not NOSTATE"},{"line_number":788,"context_line":"        node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027,"},{"line_number":789,"context_line":"                                          provision_state\u003dstates.NOSTATE)"},{"line_number":790,"context_line":"        exc \u003d self.assertRaises(messaging.rpc.ExpectedException,"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_68a446a6","line":787,"in_reply_to":"1abeadc6_944c5e44","updated":"2014-08-19 22:11:53.000000000","message":"Done","commit_id":"50719b76b4e367ac5c8d74b3c3e3a5a79f387226"}]}
