)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"cd34c3bc5af39fa8c4d233e1d08a9b4385056982","unresolved":false,"context_lines":[{"line_number":10,"context_line":"while e.g. slow (I\u0027ve seen up to 1.5 minutes) power operation is on."},{"line_number":11,"context_line":"This, for example, happens when Inspector is in use: the last action"},{"line_number":12,"context_line":"it does is to power off the node. If it takes time, many operations"},{"line_number":13,"context_line":"won\u0027t be possible on a node afterwards. But this particular operation"},{"line_number":14,"context_line":"(node update) is not even retried on the server side (in task_manager),"},{"line_number":15,"context_line":"as conductor is not involved."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a50d1a3_80e22400","line":13,"updated":"2015-07-27 02:12:32.000000000","message":"afterwards by whom ? We mentioned in the last sentence that last action by Inspector is power off","commit_id":"b7efe39537d24771698260be6c17bd863b454734"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"cd34c3bc5af39fa8c4d233e1d08a9b4385056982","unresolved":false,"context_lines":[{"line_number":11,"context_line":"This, for example, happens when Inspector is in use: the last action"},{"line_number":12,"context_line":"it does is to power off the node. If it takes time, many operations"},{"line_number":13,"context_line":"won\u0027t be possible on a node afterwards. But this particular operation"},{"line_number":14,"context_line":"(node update) is not even retried on the server side (in task_manager),"},{"line_number":15,"context_line":"as conductor is not involved."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"After this patch in the worst case a user will be able to move node"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a50d1a3_a025e05c","line":14,"updated":"2015-07-27 02:12:32.000000000","message":"Conductor is involved in node update, right ?\n\nhttps://github.com/openstack/ironic/blob/master/ironic/api/controllers/v1/node.py#L1118-L1119","commit_id":"b7efe39537d24771698260be6c17bd863b454734"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bface4bfdaa1025afa4a70d9f763f3f7e84b924f","unresolved":false,"context_lines":[{"line_number":11,"context_line":"This, for example, happens when Inspector is in use: the last action"},{"line_number":12,"context_line":"it does is to power off the node. If it takes time, many operations"},{"line_number":13,"context_line":"won\u0027t be possible on a node afterwards. But this particular operation"},{"line_number":14,"context_line":"(node update) is not even retried on the server side (in task_manager),"},{"line_number":15,"context_line":"as conductor is not involved."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"After this patch in the worst case a user will be able to move node"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a50d1a3_6d0fb788","line":14,"in_reply_to":"3a50d1a3_a025e05c","updated":"2015-07-27 14:14:54.000000000","message":"++","commit_id":"b7efe39537d24771698260be6c17bd863b454734"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"cd34c3bc5af39fa8c4d233e1d08a9b4385056982","unresolved":false,"context_lines":[{"line_number":15,"context_line":"as conductor is not involved."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"After this patch in the worst case a user will be able to move node"},{"line_number":18,"context_line":"to ERROR power state by updating credentials in the middle of operations,"},{"line_number":19,"context_line":"which seems acceptable."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I43ea1b05b5021a658f47a6006ee9bb86018b3833"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a50d1a3_e0b9a8ed","line":18,"updated":"2015-07-27 02:12:32.000000000","message":"How does it move to ERROR power state by updating credentials ?","commit_id":"b7efe39537d24771698260be6c17bd863b454734"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bface4bfdaa1025afa4a70d9f763f3f7e84b924f","unresolved":false,"context_lines":[{"line_number":15,"context_line":"as conductor is not involved."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"After this patch in the worst case a user will be able to move node"},{"line_number":18,"context_line":"to ERROR power state by updating credentials in the middle of operations,"},{"line_number":19,"context_line":"which seems acceptable."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I43ea1b05b5021a658f47a6006ee9bb86018b3833"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a50d1a3_2d50cf5d","line":18,"in_reply_to":"3a50d1a3_e0b9a8ed","updated":"2015-07-27 14:14:54.000000000","message":"I think he meant that the ironic-conductor will move it to power_state \u003d ERROR if the credentials are wrong","commit_id":"b7efe39537d24771698260be6c17bd863b454734"}],"ironic/api/controllers/v1/node.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"91b459498fefb7c8247da22a58792b5c54c277be","unresolved":false,"context_lines":[{"line_number":1050,"context_line":"                      {\u0027instance\u0027: rpc_node.instance_uuid,"},{"line_number":1051,"context_line":"                       \u0027node\u0027: rpc_node.uuid})"},{"line_number":1052,"context_line":"        elif rpc_node.target_power_state and any(\u0027/driver_info\u0027 in p[\u0027path\u0027]"},{"line_number":1053,"context_line":"                                                 for p in patch):"},{"line_number":1054,"context_line":"            msg \u003d _(\"Node %s driver_info can not be updated while a power \""},{"line_number":1055,"context_line":"                    \"operation is in progress.\")"},{"line_number":1056,"context_line":"            raise wsme.exc.ClientSideError(msg % node_ident, status_code\u003d409)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_f9191789","line":1053,"updated":"2015-07-22 13:06:10.000000000","message":"I find it a bit dodge, since we accept nested dicts nothing prevents one for doing something i.e [{\u0027path\u0027: \u0027/extra/driver_info\u0027 , \u0027op\u0027: ...}]","commit_id":"16cf953e012f6570dc01c290371033026555756b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3412aefd08be83dc6ad96db26e4cd76a5cc7e101","unresolved":false,"context_lines":[{"line_number":1050,"context_line":"                      {\u0027instance\u0027: rpc_node.instance_uuid,"},{"line_number":1051,"context_line":"                       \u0027node\u0027: rpc_node.uuid})"},{"line_number":1052,"context_line":"        elif rpc_node.target_power_state and any(\u0027/driver_info\u0027 in p[\u0027path\u0027]"},{"line_number":1053,"context_line":"                                                 for p in patch):"},{"line_number":1054,"context_line":"            msg \u003d _(\"Node %s driver_info can not be updated while a power \""},{"line_number":1055,"context_line":"                    \"operation is in progress.\")"},{"line_number":1056,"context_line":"            raise wsme.exc.ClientSideError(msg % node_ident, status_code\u003d409)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_2480b6bf","line":1053,"in_reply_to":"3a50d1a3_c45552c2","updated":"2015-07-22 13:12:07.000000000","message":"I think I can just use startswith","commit_id":"16cf953e012f6570dc01c290371033026555756b"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"0c4f1529060e26b7868634c9c0754ac6fe71a9bd","unresolved":false,"context_lines":[{"line_number":1050,"context_line":"                      {\u0027instance\u0027: rpc_node.instance_uuid,"},{"line_number":1051,"context_line":"                       \u0027node\u0027: rpc_node.uuid})"},{"line_number":1052,"context_line":"        elif rpc_node.target_power_state and any(\u0027/driver_info\u0027 in p[\u0027path\u0027]"},{"line_number":1053,"context_line":"                                                 for p in patch):"},{"line_number":1054,"context_line":"            msg \u003d _(\"Node %s driver_info can not be updated while a power \""},{"line_number":1055,"context_line":"                    \"operation is in progress.\")"},{"line_number":1056,"context_line":"            raise wsme.exc.ClientSideError(msg % node_ident, status_code\u003d409)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_c45552c2","line":1053,"in_reply_to":"3a50d1a3_f9191789","updated":"2015-07-22 13:06:58.000000000","message":"I mean doesn\u0027t even need to be a nested dict, could be just a normal json field. Perhaps regex would be a better way to validate it","commit_id":"16cf953e012f6570dc01c290371033026555756b"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"91b459498fefb7c8247da22a58792b5c54c277be","unresolved":false,"context_lines":[{"line_number":1053,"context_line":"                                                 for p in patch):"},{"line_number":1054,"context_line":"            msg \u003d _(\"Node %s driver_info can not be updated while a power \""},{"line_number":1055,"context_line":"                    \"operation is in progress.\")"},{"line_number":1056,"context_line":"            raise wsme.exc.ClientSideError(msg % node_ident, status_code\u003d409)"},{"line_number":1057,"context_line":"        elif (rpc_node.target_provision_state and rpc_node.provision_state"},{"line_number":1058,"context_line":"              not in ir_states.UPDATE_ALLOWED_STATES):"},{"line_number":1059,"context_line":"            msg \u003d _(\"Node %s can not be updated while a state transition \""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_a495a687","line":1056,"updated":"2015-07-22 13:06:10.000000000","message":"To be honest, I think we should accept updates to anything independent of whether there\u0027s a power transition going on. We already capture the provision state transition, which is what matters. If one is just playing with power (and there are no provision state transition involved) I don\u0027t think it would be risky to update anything in the node.\n\n...\n\nAlso (and I have to point it out) this is changing the behavior of the API we may want to deal with versioning here","commit_id":"16cf953e012f6570dc01c290371033026555756b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3412aefd08be83dc6ad96db26e4cd76a5cc7e101","unresolved":false,"context_lines":[{"line_number":1053,"context_line":"                                                 for p in patch):"},{"line_number":1054,"context_line":"            msg \u003d _(\"Node %s driver_info can not be updated while a power \""},{"line_number":1055,"context_line":"                    \"operation is in progress.\")"},{"line_number":1056,"context_line":"            raise wsme.exc.ClientSideError(msg % node_ident, status_code\u003d409)"},{"line_number":1057,"context_line":"        elif (rpc_node.target_provision_state and rpc_node.provision_state"},{"line_number":1058,"context_line":"              not in ir_states.UPDATE_ALLOWED_STATES):"},{"line_number":1059,"context_line":"            msg \u003d _(\"Node %s can not be updated while a state transition \""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_c4579258","line":1056,"in_reply_to":"3a50d1a3_a495a687","updated":"2015-07-22 13:12:07.000000000","message":"I think when we wait for power state results, we poll a node by calling get_power_state. These call might be broken by changing driver_info. But I\u0027m fine any way.","commit_id":"16cf953e012f6570dc01c290371033026555756b"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f16f1057027c224cb19a1464249a3c391df8ed34","unresolved":false,"context_lines":[{"line_number":1053,"context_line":"                                                 for p in patch):"},{"line_number":1054,"context_line":"            msg \u003d _(\"Node %s driver_info can not be updated while a power \""},{"line_number":1055,"context_line":"                    \"operation is in progress.\")"},{"line_number":1056,"context_line":"            raise wsme.exc.ClientSideError(msg % node_ident, status_code\u003d409)"},{"line_number":1057,"context_line":"        elif (rpc_node.target_provision_state and rpc_node.provision_state"},{"line_number":1058,"context_line":"              not in ir_states.UPDATE_ALLOWED_STATES):"},{"line_number":1059,"context_line":"            msg \u003d _(\"Node %s can not be updated while a state transition \""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_8a2753c9","line":1056,"in_reply_to":"3a50d1a3_c4579258","updated":"2015-07-22 13:44:39.000000000","message":"Yeah. I still believe that\u0027s fine because such errors will result in the node\u0027s power_state to go to ERROR and the last_error attribute will have a message indicating the problem","commit_id":"16cf953e012f6570dc01c290371033026555756b"}]}
