)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"67e01b55ec54702f24fb9637c0ae9c40cbea9a0b","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Also adds a deprecation message to the node update API, if maintenance"},{"line_number":15,"context_line":"is set via this API."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ie24339239eecbd0b46d0ccddc09582df2aaa9d60"},{"line_number":18,"context_line":"Implements: blueprint maintenance-reason"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9aa7fdbe_c5b13048","line":16,"updated":"2014-10-28 14:23:17.000000000","message":"Do we need a DocImpact here?","commit_id":"4957fc6c2536d440fce1eff4d9abc730d179b6af"}],"ironic/api/controllers/v1/node.py":[{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"b3cb83b72e22c57b9bafde2c66af38f1993af1da","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from ironic.api.controllers.v1 import port"},{"line_number":30,"context_line":"from ironic.api.controllers.v1 import types"},{"line_number":31,"context_line":"from ironic.api.controllers.v1 import utils as api_utils"},{"line_number":32,"context_line":"from ironic.common import exception"},{"line_number":33,"context_line":"from ironic.common.i18n import _"},{"line_number":34,"context_line":"from ironic.common import states as ir_states"},{"line_number":35,"context_line":"from ironic.common import utils"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aa7fdbe_9cf6b25b","line":32,"updated":"2014-10-28 00:10:59.000000000","message":"need to write \"from ironic.common.i18n import _LW\". Otherwise this will cause an error at L848.","commit_id":"23e24a00d139cdb223fc02844ff6a6c5e7a6f80b"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"b3cb83b72e22c57b9bafde2c66af38f1993af1da","unresolved":false,"context_lines":[{"line_number":32,"context_line":"from ironic.common import exception"},{"line_number":33,"context_line":"from ironic.common.i18n import _"},{"line_number":34,"context_line":"from ironic.common import states as ir_states"},{"line_number":35,"context_line":"from ironic.common import utils"},{"line_number":36,"context_line":"from ironic import objects"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9aa7fdbe_1ca2c24a","line":35,"updated":"2014-10-28 00:10:59.000000000","message":"need to write \"from ironic.openstack.common import log as logging\"","commit_id":"23e24a00d139cdb223fc02844ff6a6c5e7a6f80b"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"b3cb83b72e22c57b9bafde2c66af38f1993af1da","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from ironic.common import states as ir_states"},{"line_number":35,"context_line":"from ironic.common import utils"},{"line_number":36,"context_line":"from ironic import objects"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"CONF \u003d cfg.CONF"},{"line_number":40,"context_line":"CONF.import_opt(\u0027heartbeat_timeout\u0027, \u0027ironic.conductor.manager\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aa7fdbe_3c8ce6d9","line":37,"updated":"2014-10-28 00:10:59.000000000","message":"need to write \"LOG \u003d logging.getLogger(__name__)\"","commit_id":"23e24a00d139cdb223fc02844ff6a6c5e7a6f80b"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"58f9022254930d789cee02df74eb66bcaf47a5f4","unresolved":false,"context_lines":[{"line_number":847,"context_line":"                if field \u003d\u003d \u0027maintenance\u0027:"},{"line_number":848,"context_line":"                    LOG.warning(_LW(\u0027Setting maintenance via node update is \u0027"},{"line_number":849,"context_line":"                            \u0027deprecated. The /nodes/\u003cuuid\u003e/maintenance \u0027"},{"line_number":850,"context_line":"                            \u0027endpoint should be used instead.\u0027))"},{"line_number":851,"context_line":""},{"line_number":852,"context_line":"        # NOTE(deva): we calculate the rpc topic here in case node.driver"},{"line_number":853,"context_line":"        #             has changed, so that update is sent to the"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aa7fdbe_daf9504f","line":850,"updated":"2014-10-24 15:58:58.000000000","message":"nit: v1/nodes/\u003cuuid\u003e/maintenance (just to be explicit about the API version)","commit_id":"23e24a00d139cdb223fc02844ff6a6c5e7a6f80b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"604995ba85d13c2a3043bfee918a086bb4f07e58","unresolved":false,"context_lines":[{"line_number":848,"context_line":"            if rpc_node[field] !\u003d patch_val:"},{"line_number":849,"context_line":"                rpc_node[field] \u003d patch_val"},{"line_number":850,"context_line":""},{"line_number":851,"context_line":"                if field \u003d\u003d \u0027maintenance\u0027:"},{"line_number":852,"context_line":"                    LOG.warning(_LW(\u0027Setting maintenance via node update is \u0027"},{"line_number":853,"context_line":"                            \u0027deprecated. The /v1/nodes/\u003cuuid\u003e/maintenance \u0027"},{"line_number":854,"context_line":"                            \u0027endpoint should be used instead.\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa7fdbe_c89865c2","line":851,"updated":"2014-10-28 14:48:33.000000000","message":"I would actually prefer if this were outside the \u0027if rpc_node...\u0027. Does it matter whether the value is the same as what is there already? The point is that the user tried to set maintenance via node update, so I think we\u0027d want to issue the warning regardless.","commit_id":"f04d7513e58b4a298684bb228eb70cb6f4524912"}],"ironic/conductor/manager.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ac7120a1b07dee40d937b1e90ee5a7886643bfae","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        # maintenance to False for backwards compatibility, for tools"},{"line_number":274,"context_line":"        # not using the maintenance endpoint."},{"line_number":275,"context_line":"        if \u0027maintenance\u0027 in delta and not node_obj.maintenance:"},{"line_number":276,"context_line":"            node_obj.maintenance_reason \u003d None"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        driver_name \u003d node_obj.driver if \u0027driver\u0027 in delta else None"},{"line_number":279,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_8cc51a3e","line":276,"updated":"2014-10-22 14:26:25.000000000","message":"This is fine with me, although I wonder what the comment at line 293 means. Should node_obj. maintenance_reason be set/updated there?","commit_id":"fd6ac7b58e73b53b5fe239362b6d795b0550c171"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"538de940ccedfc05efac80c14e90e829de815952","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        # maintenance to False for backwards compatibility, for tools"},{"line_number":274,"context_line":"        # not using the maintenance endpoint."},{"line_number":275,"context_line":"        if \u0027maintenance\u0027 in delta and not node_obj.maintenance:"},{"line_number":276,"context_line":"            node_obj.maintenance_reason \u003d None"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        driver_name \u003d node_obj.driver if \u0027driver\u0027 in delta else None"},{"line_number":279,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_f8d2d7d0","line":276,"in_reply_to":"9aa7fdbe_8cc51a3e","updated":"2014-10-22 19:14:19.000000000","message":"IMO that\u0027s a bad comment; it\u0027s either outdated or saying that calling save() does that. I don\u0027t think we need the lock when updating parameters, just when writing to the DB.\n\nBut you might be right; who knows? :)","commit_id":"fd6ac7b58e73b53b5fe239362b6d795b0550c171"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"6bf5f5d46b265da92cf3552d5445d97f83ae5c2c","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        # maintenance to False for backwards compatibility, for tools"},{"line_number":274,"context_line":"        # not using the maintenance endpoint."},{"line_number":275,"context_line":"        if \u0027maintenance\u0027 in delta and not node_obj.maintenance:"},{"line_number":276,"context_line":"            node_obj.maintenance_reason \u003d None"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        driver_name \u003d node_obj.driver if \u0027driver\u0027 in delta else None"},{"line_number":279,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_1b0eb534","line":276,"in_reply_to":"9aa7fdbe_f8d2d7d0","updated":"2014-10-22 19:22:01.000000000","message":"I am wondering now, if that is there because you might want to check the state of the node (after it is locked), before updating any node_obj stuff.\n\nIn this case, it won\u0027t matter.","commit_id":"fd6ac7b58e73b53b5fe239362b6d795b0550c171"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"28d761fd0ef42defe41f26f5c4c04c3d1a88ca21","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        # maintenance to False for backwards compatibility, for tools"},{"line_number":274,"context_line":"        # not using the maintenance endpoint."},{"line_number":275,"context_line":"        if \u0027maintenance\u0027 in delta and not node_obj.maintenance:"},{"line_number":276,"context_line":"            node_obj.maintenance_reason \u003d None"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        driver_name \u003d node_obj.driver if \u0027driver\u0027 in delta else None"},{"line_number":279,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aa7fdbe_62e54837","line":276,"updated":"2014-10-23 09:07:16.000000000","message":"I think that if we want to deprecate it we should add a log.warning here telling the user that setting the maintenance via node update has been deprecated and to use the new api endpoit","commit_id":"8bca43edc80924ae9a7887ade644f6e810074357"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"6ceb14a7bfc05056adfb02963a4d56be478a229b","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        # maintenance to False for backwards compatibility, for tools"},{"line_number":274,"context_line":"        # not using the maintenance endpoint."},{"line_number":275,"context_line":"        if \u0027maintenance\u0027 in delta and not node_obj.maintenance:"},{"line_number":276,"context_line":"            node_obj.maintenance_reason \u003d None"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        driver_name \u003d node_obj.driver if \u0027driver\u0027 in delta else None"},{"line_number":279,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aa7fdbe_d1531237","line":276,"in_reply_to":"9aa7fdbe_62e54837","updated":"2014-10-23 17:27:23.000000000","message":"I tend to agree. However, the user calling this API isn\u0027t going to see this warning. Only the operator will see it. I\u0027d rather return it in the response body but not sure how to go about that.\n\nMaybe it\u0027s fine to just log it here, idk.","commit_id":"8bca43edc80924ae9a7887ade644f6e810074357"}],"ironic/tests/conductor/test_manager.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ac7120a1b07dee40d937b1e90ee5a7886643bfae","unresolved":false,"context_lines":[{"line_number":393,"context_line":"        res \u003d self.service.update_node(self.context, node)"},{"line_number":394,"context_line":"        self.assertEqual({\u0027test\u0027: \u0027two\u0027}, res[\u0027extra\u0027])"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"    def test_update_nodeclears_maintenance_reason(self):"},{"line_number":397,"context_line":"        node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027,"},{"line_number":398,"context_line":"                                          maintenance\u003dTrue,"},{"line_number":399,"context_line":"                                          maintenance_reason\u003d\u0027reason\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_0c376a4f","line":396,"updated":"2014-10-22 14:26:25.000000000","message":"this might be a nit, but I\u0027d really like \u0027nodeclears\u0027 -\u003e \u0027node_clears\u0027","commit_id":"fd6ac7b58e73b53b5fe239362b6d795b0550c171"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"538de940ccedfc05efac80c14e90e829de815952","unresolved":false,"context_lines":[{"line_number":393,"context_line":"        res \u003d self.service.update_node(self.context, node)"},{"line_number":394,"context_line":"        self.assertEqual({\u0027test\u0027: \u0027two\u0027}, res[\u0027extra\u0027])"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"    def test_update_nodeclears_maintenance_reason(self):"},{"line_number":397,"context_line":"        node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027,"},{"line_number":398,"context_line":"                                          maintenance\u003dTrue,"},{"line_number":399,"context_line":"                                          maintenance_reason\u003d\u0027reason\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_38dc5fe4","line":396,"in_reply_to":"9aa7fdbe_0c376a4f","updated":"2014-10-22 19:14:19.000000000","message":"Oops, that\u0027s what I meant to do :) Will fix.","commit_id":"fd6ac7b58e73b53b5fe239362b6d795b0550c171"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"28d761fd0ef42defe41f26f5c4c04c3d1a88ca21","unresolved":false,"context_lines":[{"line_number":402,"context_line":"        node.maintenance \u003d False"},{"line_number":403,"context_line":"        res \u003d self.service.update_node(self.context, node)"},{"line_number":404,"context_line":"        self.assertEqual(False, res[\u0027maintenance\u0027])"},{"line_number":405,"context_line":"        self.assertEqual(None, res[\u0027maintenance_reason\u0027])"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"    def test_update_node_already_locked(self):"},{"line_number":408,"context_line":"        node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aa7fdbe_62bc6807","line":405,"updated":"2014-10-23 09:07:16.000000000","message":"nits:\n\n self.assertFalse(res[\u0027maintenance\u0027])\n self.assertIsNone(res[\u0027maintenance_reason\u0027])","commit_id":"8bca43edc80924ae9a7887ade644f6e810074357"}]}
