)]}'
{"ironic/api/controllers/v1/node.py":[{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"24ae3eec8031dc30118fa41da329aadeb26ad6cc","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        return defaults + [\u0027/last_error\u0027, \u0027/power_state\u0027, \u0027/provision_state\u0027,"},{"line_number":51,"context_line":"                           \u0027/target_power_state\u0027, \u0027/target_provision_state\u0027,"},{"line_number":52,"context_line":"                           \u0027/maintenance\u0027]"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @staticmethod"},{"line_number":55,"context_line":"    def mandatory_attrs():"},{"line_number":56,"context_line":"        return [\u0027/chassis_uuid\u0027, \u0027/driver\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F1wI%3D","line":53,"updated":"2013-12-30 11:56:43.000000000","message":"It is better that keep this alpha-sorted, it will make easier to read/scan about it:\n\n[\u0027/last_error\u0027,  \u0027/maintenance\u0027, \u0027/power_state\u0027, \u0027/provision_state\u0027, \u0027/target_power_state\u0027, \u0027/target_provision_state\u0027]\n\nthanks!","commit_id":"c93b24bae4650509266e777918fb199925fbb078"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"fc7fb8480b9f2272817c3a2a53ffb76a23c7601e","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        return defaults + [\u0027/last_error\u0027, \u0027/power_state\u0027, \u0027/provision_state\u0027,"},{"line_number":51,"context_line":"                           \u0027/target_power_state\u0027, \u0027/target_provision_state\u0027,"},{"line_number":52,"context_line":"                           \u0027/maintenance\u0027]"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @staticmethod"},{"line_number":55,"context_line":"    def mandatory_attrs():"},{"line_number":56,"context_line":"        return [\u0027/chassis_uuid\u0027, \u0027/driver\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F1ZU%3D","line":53,"in_reply_to":"AAAAT3%2F%2F1wI%3D","updated":"2013-12-30 14:42:13.000000000","message":"Done","commit_id":"c93b24bae4650509266e777918fb199925fbb078"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"367daa6850e4d88627432899ab09b3b5d6d42a8a","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    \"Represent the current (not transition) provision state of the node\""},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    target_provision_state \u003d wtypes.text"},{"line_number":184,"context_line":"    \"The user modified desired provision state of the node.\""},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    driver \u003d wsme.wsattr(wtypes.text, mandatory\u003dTrue)"},{"line_number":187,"context_line":"    \"The driver responsible for controlling the node\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FwG8%3D","line":184,"updated":"2014-01-02 11:39:08.000000000","message":"I think that \"maintenance\" would be a nice information to be returned by a GET and should be added to the node\u0027s document.\n\nmaintenance \u003d wsme.wsattr(bool, default\u003dFalse)\n\"Indicates whether the node is in maintenance\"","commit_id":"76f1fe6aaf061254e981efc5d697a081bc71a34e"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"eeebee2c4cd263e7bf925f835df7e10c130e855c","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    \"Represent the current (not transition) provision state of the node\""},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    target_provision_state \u003d wtypes.text"},{"line_number":184,"context_line":"    \"The user modified desired provision state of the node.\""},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    driver \u003d wsme.wsattr(wtypes.text, mandatory\u003dTrue)"},{"line_number":187,"context_line":"    \"The driver responsible for controlling the node\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FwcQ%3D","line":184,"in_reply_to":"AAAAT3%2F%2FwG8%3D","updated":"2014-01-08 21:31:06.000000000","message":".. is in maintenance mode\". :-)","commit_id":"76f1fe6aaf061254e981efc5d697a081bc71a34e"},{"author":{"_account_id":6623,"name":"Roman Prykhodchenko","email":"me@romcheg.me","username":"prykhodchenko"},"change_message_id":"c13fc1e9e2c333724f62c3782949d3d133410408","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    \"Represent the current (not transition) provision state of the node\""},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    target_provision_state \u003d wtypes.text"},{"line_number":184,"context_line":"    \"The user modified desired provision state of the node.\""},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    driver \u003d wsme.wsattr(wtypes.text, mandatory\u003dTrue)"},{"line_number":187,"context_line":"    \"The driver responsible for controlling the node\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FVkQ%3D","line":184,"in_reply_to":"AAAAUH%2F%2FwcQ%3D","updated":"2014-01-14 22:27:11.000000000","message":"Done","commit_id":"76f1fe6aaf061254e981efc5d697a081bc71a34e"}],"ironic/common/exception.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"be204e3afd70d89a98b8b426379c39f71ca85c5f","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"class NodeMaintenanceFailure(Invalid):"},{"line_number":251,"context_line":"    message \u003d _(\"Maintenance failed for node %(node)s: %(reason)s\")"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"class NodeInUse(InvalidState):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F0CQ%3D","line":251,"updated":"2013-12-31 01:43:29.000000000","message":"Wording could be improved for english language translation:\n\n  Failed to toggle maintenance-mode flag for node %(node)s: %(reason)s","commit_id":"76f1fe6aaf061254e981efc5d697a081bc71a34e"},{"author":{"_account_id":6623,"name":"Roman Prykhodchenko","email":"me@romcheg.me","username":"prykhodchenko"},"change_message_id":"c13fc1e9e2c333724f62c3782949d3d133410408","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"class NodeMaintenanceFailure(Invalid):"},{"line_number":251,"context_line":"    message \u003d _(\"Maintenance failed for node %(node)s: %(reason)s\")"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"class NodeInUse(InvalidState):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FVrk%3D","line":251,"in_reply_to":"AAAAT3%2F%2F0CQ%3D","updated":"2014-01-14 22:27:11.000000000","message":"Done","commit_id":"76f1fe6aaf061254e981efc5d697a081bc71a34e"}],"ironic/conductor/manager.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"5340437238863caccab3be8682482582e822f89d","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        LOG.debug(_(\u0027RPC change_node_maintenance_mode called for node %s.\u0027) %"},{"line_number":396,"context_line":"                    node_id)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dFalse) as task:"},{"line_number":399,"context_line":"            node \u003d task.node"},{"line_number":400,"context_line":"            if mode \u003d\u003d \u0027on\u0027:"},{"line_number":401,"context_line":"                if node.maintenance is not None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAT3%2F%2F7MY%3D","line":398,"updated":"2013-12-27 01:57:26.000000000","message":"Toggling maintenance mode should not require an exclusive lock -- it should be possible to set maintenance mode without interrupting (or blocking on) an ongoing operation.","commit_id":"e7b52e2b26cd438c586703edcb6c23af88d4d0a1"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"ef1b9d6fcaa81d5edf2f8b2b23fbac41e80c07fa","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        LOG.debug(_(\u0027RPC change_node_maintenance_mode called for node %s.\u0027) %"},{"line_number":396,"context_line":"                    node_id)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dFalse) as task:"},{"line_number":399,"context_line":"            node \u003d task.node"},{"line_number":400,"context_line":"            if mode \u003d\u003d \u0027on\u0027:"},{"line_number":401,"context_line":"                if node.maintenance is not None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAT3%2F%2F6RY%3D","line":398,"in_reply_to":"AAAAT3%2F%2F7MY%3D","updated":"2013-12-27 11:59:43.000000000","message":"Good point.","commit_id":"e7b52e2b26cd438c586703edcb6c23af88d4d0a1"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"5340437238863caccab3be8682482582e822f89d","unresolved":false,"context_lines":[{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dFalse) as task:"},{"line_number":399,"context_line":"            node \u003d task.node"},{"line_number":400,"context_line":"            if mode \u003d\u003d \u0027on\u0027:"},{"line_number":401,"context_line":"                if node.maintenance is not None:"},{"line_number":402,"context_line":"                    raise exception.NodeMaintenanceFailure(node\u003dnode_id,"},{"line_number":403,"context_line":"                            reason\u003d_(\"node already in maintenance mode\"))"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAT3%2F%2F7MM%3D","line":400,"updated":"2013-12-27 01:57:26.000000000","message":"We should not be passing strings \u0027on\u0027 / \u0027off\u0027. Either use boolean True/False, or use module constants, eg. what we do with ironic.states","commit_id":"e7b52e2b26cd438c586703edcb6c23af88d4d0a1"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"ef1b9d6fcaa81d5edf2f8b2b23fbac41e80c07fa","unresolved":false,"context_lines":[{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dFalse) as task:"},{"line_number":399,"context_line":"            node \u003d task.node"},{"line_number":400,"context_line":"            if mode \u003d\u003d \u0027on\u0027:"},{"line_number":401,"context_line":"                if node.maintenance is not None:"},{"line_number":402,"context_line":"                    raise exception.NodeMaintenanceFailure(node\u003dnode_id,"},{"line_number":403,"context_line":"                            reason\u003d_(\"node already in maintenance mode\"))"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAT3%2F%2F6RU%3D","line":400,"in_reply_to":"AAAAT3%2F%2F7MM%3D","updated":"2013-12-27 11:59:43.000000000","message":"Done","commit_id":"e7b52e2b26cd438c586703edcb6c23af88d4d0a1"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"24ae3eec8031dc30118fa41da329aadeb26ad6cc","unresolved":false,"context_lines":[{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        \"\"\""},{"line_number":395,"context_line":"        LOG.debug(_(\u0027RPC change_node_maintenance_mode called for node %s.\u0027) %"},{"line_number":396,"context_line":"                    node_id)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dTrue) as task:"},{"line_number":399,"context_line":"            node \u003d task.node"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F1v8%3D","line":396,"updated":"2013-12-30 11:56:43.000000000","message":"It is better we keep same format for the message string with double quotes.","commit_id":"c93b24bae4650509266e777918fb199925fbb078"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"fc7fb8480b9f2272817c3a2a53ffb76a23c7601e","unresolved":false,"context_lines":[{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        \"\"\""},{"line_number":395,"context_line":"        LOG.debug(_(\u0027RPC change_node_maintenance_mode called for node %s.\u0027) %"},{"line_number":396,"context_line":"                    node_id)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dTrue) as task:"},{"line_number":399,"context_line":"            node \u003d task.node"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F1Y8%3D","line":396,"in_reply_to":"AAAAT3%2F%2F1v8%3D","updated":"2013-12-30 14:42:13.000000000","message":"Done","commit_id":"c93b24bae4650509266e777918fb199925fbb078"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"eeebee2c4cd263e7bf925f835df7e10c130e855c","unresolved":false,"context_lines":[{"line_number":392,"context_line":"        :raises: NodeMaintenanceFailure"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        \"\"\""},{"line_number":395,"context_line":"        LOG.debug(_(\"RPC change_node_maintenance_mode called for node %s.\") %"},{"line_number":396,"context_line":"                    node_id)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dTrue) as task:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Fwa0%3D","line":395,"updated":"2014-01-08 21:31:06.000000000","message":"might be useful to output mode value too, eg ... for node %s to change to maintenance mode: %s.\"","commit_id":"76f1fe6aaf061254e981efc5d697a081bc71a34e"},{"author":{"_account_id":6623,"name":"Roman Prykhodchenko","email":"me@romcheg.me","username":"prykhodchenko"},"change_message_id":"c13fc1e9e2c333724f62c3782949d3d133410408","unresolved":false,"context_lines":[{"line_number":392,"context_line":"        :raises: NodeMaintenanceFailure"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        \"\"\""},{"line_number":395,"context_line":"        LOG.debug(_(\"RPC change_node_maintenance_mode called for node %s.\") %"},{"line_number":396,"context_line":"                    node_id)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dTrue) as task:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FVpM%3D","line":395,"in_reply_to":"AAAAUH%2F%2Fwa0%3D","updated":"2014-01-14 22:27:11.000000000","message":"Thanks for the suggestion. I added that information to the log message.","commit_id":"76f1fe6aaf061254e981efc5d697a081bc71a34e"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"eeebee2c4cd263e7bf925f835df7e10c130e855c","unresolved":false,"context_lines":[{"line_number":403,"context_line":"            else:"},{"line_number":404,"context_line":"                msg \u003d _(\"node already in maintenance mode\") if mode \\"},{"line_number":405,"context_line":"                        else _(\"node not in maintenance mode\")"},{"line_number":406,"context_line":"                raise exception.NodeMaintenanceFailure(node\u003dnode_id,"},{"line_number":407,"context_line":"                                                       reason\u003dmsg)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"            return node"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FwQM%3D","line":406,"updated":"2014-01-08 21:31:06.000000000","message":"It is hard for me to see why it is a failure if the node is already in the requested maintenance mode. Why not do nothing? But anyway, if we want to raise an exception, I think the msg could be a bit clearer. Something like \u0027RPC change_node_maintenance_mode called for node %(node)s, but its maintenance mode is already set to %(mode)s\" % {\u0027node\u0027:node_id, \u0027mode\u0027:mode}\n\nOn the other hand, looking through this file, it doesn\u0027t look like we have consistency wrt the verbosity of the exception msgs. So maybe we don\u0027t want to mention the RPC call part of the msg.\n\nThe \"node not in maintenance mode\" is missing an \u0027already\u0027, but \"node already not in maintenance mode\" seems awkward.","commit_id":"76f1fe6aaf061254e981efc5d697a081bc71a34e"},{"author":{"_account_id":6623,"name":"Roman Prykhodchenko","email":"me@romcheg.me","username":"prykhodchenko"},"change_message_id":"c13fc1e9e2c333724f62c3782949d3d133410408","unresolved":false,"context_lines":[{"line_number":403,"context_line":"            else:"},{"line_number":404,"context_line":"                msg \u003d _(\"node already in maintenance mode\") if mode \\"},{"line_number":405,"context_line":"                        else _(\"node not in maintenance mode\")"},{"line_number":406,"context_line":"                raise exception.NodeMaintenanceFailure(node\u003dnode_id,"},{"line_number":407,"context_line":"                                                       reason\u003dmsg)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"            return node"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FVm8%3D","line":406,"in_reply_to":"AAAAUH%2F%2FwQM%3D","updated":"2014-01-14 22:27:11.000000000","message":"Since I\u0027m not the author of the original patch, I cannot guarantee that my thoughts match Yuriy\u0027s ones :)\n\nIf the node is in the maintenance mode that means some operation might be running against it. To avoid problems with those running operations (some of the problems actually brake hardware) we should not touch the node in any way.\n\nI will update error messages to new ones.","commit_id":"76f1fe6aaf061254e981efc5d697a081bc71a34e"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"2bed6416bdd57a8d3c298404025dfb7e928448bb","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"class ConductorManager(service.PeriodicService):"},{"line_number":87,"context_line":"    \"\"\"Ironic Conductor service main class.\"\"\""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    RPC_API_VERSION \u003d \u00271.7\u0027"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def __init__(self, host, topic):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2BqXo%3D","line":88,"updated":"2014-01-23 12:41:42.000000000","message":"gah! forgot to change the version here. I\u0027ll fix in my next patch, I\u0027ll need to increase the counter anyway","commit_id":"9bc5f92fb88169acdac48b367e9ea71930cfaf38"}],"ironic/conductor/rpcapi.py":[{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"2bed6416bdd57a8d3c298404025dfb7e928448bb","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    \"\"\""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    RPC_API_VERSION \u003d \u00271.7\u0027"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def __init__(self, topic\u003dNone):"},{"line_number":64,"context_line":"        if topic is None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2BqX8%3D","line":61,"updated":"2014-01-23 12:41:42.000000000","message":"same here","commit_id":"9bc5f92fb88169acdac48b367e9ea71930cfaf38"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ae208569cf946b306a3562b24be5ef14983547d4","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    \"\"\""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    RPC_API_VERSION \u003d \u00271.7\u0027"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def __init__(self, topic\u003dNone):"},{"line_number":64,"context_line":"        if topic is None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2BqRk%3D","line":61,"in_reply_to":"AAAAUH%2F%2BqX8%3D","updated":"2014-01-23 12:59:28.000000000","message":"Oh feck, yea that needs to be fixed asap, thanks for spotting that!","commit_id":"9bc5f92fb88169acdac48b367e9ea71930cfaf38"}],"ironic/db/sqlalchemy/migrate_repo/versions/015_nodes_add_maintenance.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"5340437238863caccab3be8682482582e822f89d","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    nodes \u003d Table(\u0027nodes\u0027, meta, autoload\u003dTrue)"},{"line_number":24,"context_line":"    nodes.create_column(Column(\u0027maintenance\u0027, String(255), nullable\u003dTrue))"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def downgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAT3%2F%2F7MA%3D","line":24,"updated":"2013-12-27 01:57:26.000000000","message":"I see that you\u0027re stashing self.host in the maintenance field, and this is why it is created as a String.\n\nBut why store self.host? Why not just a boolean column? (eg, a BIT or ENUM(\u0027True\u0027, \u0027False\u0027) column)","commit_id":"e7b52e2b26cd438c586703edcb6c23af88d4d0a1"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"ef1b9d6fcaa81d5edf2f8b2b23fbac41e80c07fa","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    nodes \u003d Table(\u0027nodes\u0027, meta, autoload\u003dTrue)"},{"line_number":24,"context_line":"    nodes.create_column(Column(\u0027maintenance\u0027, String(255), nullable\u003dTrue))"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def downgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAT3%2F%2F6Rc%3D","line":24,"in_reply_to":"AAAAT3%2F%2F7MA%3D","updated":"2013-12-27 11:59:43.000000000","message":"Done","commit_id":"e7b52e2b26cd438c586703edcb6c23af88d4d0a1"}],"ironic/tests/api/test_nodes.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"be204e3afd70d89a98b8b426379c39f71ca85c5f","unresolved":false,"context_lines":[{"line_number":482,"context_line":"        self.assertEqual(response.status_code, 400)"},{"line_number":483,"context_line":"        self.assertTrue(response.json[\u0027error_message\u0027])"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def test_replace_maintenance(self):"},{"line_number":486,"context_line":"        response \u003d self.patch_json(\u0027/nodes/%s\u0027 % self.node[\u0027uuid\u0027],"},{"line_number":487,"context_line":"                                   [{\u0027path\u0027: \u0027/maintenance\u0027, \u0027op\u0027: \u0027replace\u0027,"},{"line_number":488,"context_line":"                                     \u0027value\u0027: \u0027fake\u0027}],"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2Fz6Y%3D","line":485,"updated":"2013-12-31 01:43:29.000000000","message":"should this test be in the related API patch?","commit_id":"76f1fe6aaf061254e981efc5d697a081bc71a34e"},{"author":{"_account_id":6623,"name":"Roman Prykhodchenko","email":"me@romcheg.me","username":"prykhodchenko"},"change_message_id":"c13fc1e9e2c333724f62c3782949d3d133410408","unresolved":false,"context_lines":[{"line_number":482,"context_line":"        self.assertEqual(response.status_code, 400)"},{"line_number":483,"context_line":"        self.assertTrue(response.json[\u0027error_message\u0027])"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def test_replace_maintenance(self):"},{"line_number":486,"context_line":"        response \u003d self.patch_json(\u0027/nodes/%s\u0027 % self.node[\u0027uuid\u0027],"},{"line_number":487,"context_line":"                                   [{\u0027path\u0027: \u0027/maintenance\u0027, \u0027op\u0027: \u0027replace\u0027,"},{"line_number":488,"context_line":"                                     \u0027value\u0027: \u0027fake\u0027}],"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FVjE%3D","line":485,"in_reply_to":"AAAAT3%2F%2Fz6Y%3D","updated":"2014-01-14 22:27:11.000000000","message":"Since I\u0027m not the author of this code, I cannot move it to a separate patch because it will be my patch. I will live Yuri a chance to do that as soon as he\u0027s back.","commit_id":"76f1fe6aaf061254e981efc5d697a081bc71a34e"}]}
