)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"df9c7ca69aba5b637f0ab85af28cf5502aef3cf9","unresolved":false,"context_lines":[{"line_number":11,"context_line":"heartbeats. This change adds a new configuration option that will"},{"line_number":12,"context_line":"cause such node to enter CLEAN FAIL on the first heartbeat."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"The same is done for deployment and automated cleaning during providing."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Finally, elevate the log level for such heartbeats from debug to warning,"},{"line_number":17,"context_line":"as it may be a sign of a problem (especially if the new option is off)."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"3fa7e38b_d00182b1","line":14,"updated":"2019-09-17 14:46:00.000000000","message":"and rescuing.","commit_id":"fcb793682dc063d6c36ce4555af018759a842ea8"}],"ironic/conductor/manager.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e807874fae86718f3262bd05ee7385f2aa16eb57","unresolved":false,"context_lines":[{"line_number":1575,"context_line":"                # NOTE(dtantsur): do this early to avoid entering cleaning."},{"line_number":1576,"context_line":"                if (not CONF.conductor.allow_provisioning_in_maintenance"},{"line_number":1577,"context_line":"                        and node.maintenance):"},{"line_number":1578,"context_line":"                    raise exception.NodeInMaintenance(op\u003d_(\u0027providing\u0027),"},{"line_number":1579,"context_line":"                                                      node\u003dnode.uuid)"},{"line_number":1580,"context_line":"                task.process_event("},{"line_number":1581,"context_line":"                    \u0027provide\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_4f6f9091","line":1578,"updated":"2019-09-03 17:27:56.000000000","message":"i think it would have been fine to s/_(\u0027providing\u0027)/action/ cuz action\u003d\u003d\u0027provide\u0027 and that\u0027s what the user actually has to specify. But this is OK too.","commit_id":"7ab30b212d0e0360a560e5c19e95fee6f46bec6b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c0bc14f3add22897722a9b2449d78bc19e1b391c","unresolved":false,"context_lines":[{"line_number":1575,"context_line":"                # NOTE(dtantsur): do this early to avoid entering cleaning."},{"line_number":1576,"context_line":"                if (not CONF.conductor.allow_provisioning_in_maintenance"},{"line_number":1577,"context_line":"                        and node.maintenance):"},{"line_number":1578,"context_line":"                    raise exception.NodeInMaintenance(op\u003d_(\u0027providing\u0027),"},{"line_number":1579,"context_line":"                                                      node\u003dnode.uuid)"},{"line_number":1580,"context_line":"                task.process_event("},{"line_number":1581,"context_line":"                    \u0027provide\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_59ff0567","line":1578,"in_reply_to":"7faddb67_4f6f9091","updated":"2019-09-17 11:02:55.000000000","message":"I agree, but other places here use a similar form (\"deploying\", etc)","commit_id":"7ab30b212d0e0360a560e5c19e95fee6f46bec6b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e807874fae86718f3262bd05ee7385f2aa16eb57","unresolved":false,"context_lines":[{"line_number":1576,"context_line":"                if (not CONF.conductor.allow_provisioning_in_maintenance"},{"line_number":1577,"context_line":"                        and node.maintenance):"},{"line_number":1578,"context_line":"                    raise exception.NodeInMaintenance(op\u003d_(\u0027providing\u0027),"},{"line_number":1579,"context_line":"                                                      node\u003dnode.uuid)"},{"line_number":1580,"context_line":"                task.process_event("},{"line_number":1581,"context_line":"                    \u0027provide\u0027,"},{"line_number":1582,"context_line":"                    callback\u003dself._spawn_worker,"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_2fced482","line":1579,"updated":"2019-09-03 17:27:56.000000000","message":"the problem is cleaning, not the \u0027provide\u0027 verb. It just happens though that to do the provide, we do cleaning.\n\nSo shouldn\u0027t we also check if the action is \u0027clean\u0027 and node.maintenance()? That would cause a problem too, right?","commit_id":"7ab30b212d0e0360a560e5c19e95fee6f46bec6b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c0bc14f3add22897722a9b2449d78bc19e1b391c","unresolved":false,"context_lines":[{"line_number":1576,"context_line":"                if (not CONF.conductor.allow_provisioning_in_maintenance"},{"line_number":1577,"context_line":"                        and node.maintenance):"},{"line_number":1578,"context_line":"                    raise exception.NodeInMaintenance(op\u003d_(\u0027providing\u0027),"},{"line_number":1579,"context_line":"                                                      node\u003dnode.uuid)"},{"line_number":1580,"context_line":"                task.process_event("},{"line_number":1581,"context_line":"                    \u0027provide\u0027,"},{"line_number":1582,"context_line":"                    callback\u003dself._spawn_worker,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_f9c11130","line":1579,"in_reply_to":"5faad753_c4f8aa4a","updated":"2019-09-17 11:02:55.000000000","message":"Deploying, rebuilding and rescuing are already blocked in maintenance, see do_node_rescue and do_node_deploy.","commit_id":"7ab30b212d0e0360a560e5c19e95fee6f46bec6b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"56f184b9d9a5405268c79febe3f2d6f8aee25eee","unresolved":false,"context_lines":[{"line_number":1576,"context_line":"                if (not CONF.conductor.allow_provisioning_in_maintenance"},{"line_number":1577,"context_line":"                        and node.maintenance):"},{"line_number":1578,"context_line":"                    raise exception.NodeInMaintenance(op\u003d_(\u0027providing\u0027),"},{"line_number":1579,"context_line":"                                                      node\u003dnode.uuid)"},{"line_number":1580,"context_line":"                task.process_event("},{"line_number":1581,"context_line":"                    \u0027provide\u0027,"},{"line_number":1582,"context_line":"                    callback\u003dself._spawn_worker,"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_889a506c","line":1579,"in_reply_to":"7faddb67_2fced482","updated":"2019-09-04 13:05:32.000000000","message":"Well, it seems like this should be further down in the logic.....","commit_id":"7ab30b212d0e0360a560e5c19e95fee6f46bec6b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"c95eec1477e1ed74574f09fbf930f89668c79ce4","unresolved":false,"context_lines":[{"line_number":1576,"context_line":"                if (not CONF.conductor.allow_provisioning_in_maintenance"},{"line_number":1577,"context_line":"                        and node.maintenance):"},{"line_number":1578,"context_line":"                    raise exception.NodeInMaintenance(op\u003d_(\u0027providing\u0027),"},{"line_number":1579,"context_line":"                                                      node\u003dnode.uuid)"},{"line_number":1580,"context_line":"                task.process_event("},{"line_number":1581,"context_line":"                    \u0027provide\u0027,"},{"line_number":1582,"context_line":"                    callback\u003dself._spawn_worker,"}],"source_content_type":"text/x-python","patch_set":13,"id":"5faad753_c4f8aa4a","line":1579,"in_reply_to":"7faddb67_5b2bc480","updated":"2019-09-10 17:05:41.000000000","message":"After thinking about it, I am good with this. If I understand it, the problem isn\u0027t just in cleaning, it is also when deploying (or rescuing). Do we want to be explicit and block rebuilding \u0026 rescuing provision actions too?","commit_id":"7ab30b212d0e0360a560e5c19e95fee6f46bec6b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"acb92437f477a0051faf34f79ed2ac9995877950","unresolved":false,"context_lines":[{"line_number":1576,"context_line":"                if (not CONF.conductor.allow_provisioning_in_maintenance"},{"line_number":1577,"context_line":"                        and node.maintenance):"},{"line_number":1578,"context_line":"                    raise exception.NodeInMaintenance(op\u003d_(\u0027providing\u0027),"},{"line_number":1579,"context_line":"                                                      node\u003dnode.uuid)"},{"line_number":1580,"context_line":"                task.process_event("},{"line_number":1581,"context_line":"                    \u0027provide\u0027,"},{"line_number":1582,"context_line":"                    callback\u003dself._spawn_worker,"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_5b2bc480","line":1579,"in_reply_to":"7faddb67_889a506c","updated":"2019-09-04 13:29:15.000000000","message":"The \u0027clean\u0027 action is already prevented in maintenance. The problems with providing are\n\n1. Conceptual: we should not provide nodes in maintenance\n\n2. Practical: providing implies cleaning, which is going to get stuck.","commit_id":"7ab30b212d0e0360a560e5c19e95fee6f46bec6b"}],"ironic/conductor/utils.py":[{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"274b53abd1b76cc9f5564d1a5cd83e843eaecbf5","unresolved":false,"context_lines":[{"line_number":240,"context_line":"    # for automated cleaning, it is AVAILABLE."},{"line_number":241,"context_line":"    manual_clean \u003d node.target_provision_state \u003d\u003d states.MANAGEABLE"},{"line_number":242,"context_line":"    node.last_error \u003d msg"},{"line_number":243,"context_line":"    if not node.maintenance:"},{"line_number":244,"context_line":"        node.maintenance \u003d True"},{"line_number":245,"context_line":"        node.maintenance_reason \u003d msg"},{"line_number":246,"context_line":"    node.save()"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_f3eb8476","line":243,"updated":"2016-09-14 22:34:31.000000000","message":"I\u0027m assuming that this is just here to avoid overriding the maintenance reason?","commit_id":"957276f75b1a579b934449af23cbf08615979dfe"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c871bb882d00274bc6d35e09a18a23d4e5765b29","unresolved":false,"context_lines":[{"line_number":240,"context_line":"    # for automated cleaning, it is AVAILABLE."},{"line_number":241,"context_line":"    manual_clean \u003d node.target_provision_state \u003d\u003d states.MANAGEABLE"},{"line_number":242,"context_line":"    node.last_error \u003d msg"},{"line_number":243,"context_line":"    if not node.maintenance:"},{"line_number":244,"context_line":"        node.maintenance \u003d True"},{"line_number":245,"context_line":"        node.maintenance_reason \u003d msg"},{"line_number":246,"context_line":"    node.save()"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_e17a67f0","line":243,"in_reply_to":"7a8ec9b2_f3eb8476","updated":"2016-11-10 16:03:34.000000000","message":"yep","commit_id":"957276f75b1a579b934449af23cbf08615979dfe"}],"ironic/conf/conductor.py":[{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"238d3a9c376def5304d24476566604fad4cf756c","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                mutable\u003dTrue,"},{"line_number":184,"context_line":"                help\u003d_(\u0027Whether to allow nodes to enter or undergo deploy or \u0027"},{"line_number":185,"context_line":"                       \u0027cleaning when in maintenance mode. If this option is \u0027"},{"line_number":186,"context_line":"                       \u0027set to False, and a node enters maintenance during \u0027"},{"line_number":187,"context_line":"                       \u0027deploy or cleaning, the process will be aborted \u0027"},{"line_number":188,"context_line":"                       \u0027after the next heartbeat. Automated cleaning or \u0027"},{"line_number":189,"context_line":"                       \u0027making a node available will also fail.\u0027)),"},{"line_number":190,"context_line":"    cfg.IntOpt(\u0027clean_callback_timeout\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_8e9e8d67","line":187,"range":{"start_line":186,"start_character":42,"end_line":187,"end_character":42},"updated":"2019-08-08 07:14:44.000000000","message":"Isn\u0027t it the other way?\n\nThe node entering deploy or cleaning if the node is in maintenance, the process will be aborted. No?","commit_id":"cef420e99c3963eba63c3dd8efc3f3c9ea427a98"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d47610949653796d1a0ed164a85503e9e507660e","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                mutable\u003dTrue,"},{"line_number":184,"context_line":"                help\u003d_(\u0027Whether to allow nodes to enter or undergo deploy or \u0027"},{"line_number":185,"context_line":"                       \u0027cleaning when in maintenance mode. If this option is \u0027"},{"line_number":186,"context_line":"                       \u0027set to False, and a node enters maintenance during \u0027"},{"line_number":187,"context_line":"                       \u0027deploy or cleaning, the process will be aborted \u0027"},{"line_number":188,"context_line":"                       \u0027after the next heartbeat. Automated cleaning or \u0027"},{"line_number":189,"context_line":"                       \u0027making a node available will also fail.\u0027)),"},{"line_number":190,"context_line":"    cfg.IntOpt(\u0027clean_callback_timeout\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_a9d5831d","line":187,"range":{"start_line":186,"start_character":42,"end_line":187,"end_character":42},"in_reply_to":"7faddb67_8e9e8d67","updated":"2019-08-08 07:43:14.000000000","message":"Actually, both are true. You won\u0027t be able to start cleaning in maintenance, and if a node enters maintenance, the process will be aborted.","commit_id":"cef420e99c3963eba63c3dd8efc3f3c9ea427a98"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"7e54b4b154ae3f428f61fd3b0f129e949a66828d","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                mutable\u003dTrue,"},{"line_number":184,"context_line":"                help\u003d_(\u0027Whether to allow nodes to enter or undergo deploy or \u0027"},{"line_number":185,"context_line":"                       \u0027cleaning when in maintenance mode. If this option is \u0027"},{"line_number":186,"context_line":"                       \u0027set to False, and a node enters maintenance during \u0027"},{"line_number":187,"context_line":"                       \u0027deploy or cleaning, the process will be aborted \u0027"},{"line_number":188,"context_line":"                       \u0027after the next heartbeat. Automated cleaning or \u0027"},{"line_number":189,"context_line":"                       \u0027making a node available will also fail.\u0027)),"},{"line_number":190,"context_line":"    cfg.IntOpt(\u0027clean_callback_timeout\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_fb1ee2b9","line":187,"range":{"start_line":186,"start_character":42,"end_line":187,"end_character":42},"in_reply_to":"7faddb67_a9d5831d","updated":"2019-08-08 08:52:29.000000000","message":"Ok thanks for the explanation.","commit_id":"cef420e99c3963eba63c3dd8efc3f3c9ea427a98"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"250abf3f6536463d0ac9149a5739fd105b14f38d","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    cfg.BoolOpt(\u0027allow_provisioning_in_maintenance\u0027,"},{"line_number":182,"context_line":"                default\u003dTrue,"},{"line_number":183,"context_line":"                mutable\u003dTrue,"},{"line_number":184,"context_line":"                help\u003d_(\u0027Whether to allow nodes to enter or undergo deploy or \u0027"},{"line_number":185,"context_line":"                       \u0027cleaning when in maintenance mode. If this option is \u0027"},{"line_number":186,"context_line":"                       \u0027set to False, and a node enters maintenance during \u0027"},{"line_number":187,"context_line":"                       \u0027deploy or cleaning, the process will be aborted \u0027"},{"line_number":188,"context_line":"                       \u0027after the next heartbeat. Automated cleaning or \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_7bf09992","line":185,"range":{"start_line":184,"start_character":24,"end_line":185,"end_character":58},"updated":"2019-08-26 06:37:21.000000000","message":"This gives impression that deployment/cleaning will proceed if this option is set to True, but heartbeat will not take any action unless nodes are not moved out of maintenance. Would it help if we make it explicit here?","commit_id":"0f688cefadb58252e27b0d4a4aa7ce2d205b3321"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"c95eec1477e1ed74574f09fbf930f89668c79ce4","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                       \u0027making a node available will also fail. If True \u0027"},{"line_number":190,"context_line":"                       \u0027(the default), the process will begin and will pause \u0027"},{"line_number":191,"context_line":"                       \u0027after the node starts heartbeating. Moving it from \u0027"},{"line_number":192,"context_line":"                       \u0027maintenance will make the process continue.\u0027)),"},{"line_number":193,"context_line":"    cfg.IntOpt(\u0027clean_callback_timeout\u0027,"},{"line_number":194,"context_line":"               default\u003d1800,"},{"line_number":195,"context_line":"               help\u003d_(\u0027Timeout (seconds) to wait for a callback from the \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"5faad753_c1f89c4a","line":192,"updated":"2019-09-10 17:05:41.000000000","message":"Does anyone use ansible deploy driver? That\u0027s the only one that doesn\u0027t use IPA, right? Don\u0027t know if we care to be explicit here that this is only for IPA.","commit_id":"7ab30b212d0e0360a560e5c19e95fee6f46bec6b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c0bc14f3add22897722a9b2449d78bc19e1b391c","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                       \u0027making a node available will also fail. If True \u0027"},{"line_number":190,"context_line":"                       \u0027(the default), the process will begin and will pause \u0027"},{"line_number":191,"context_line":"                       \u0027after the node starts heartbeating. Moving it from \u0027"},{"line_number":192,"context_line":"                       \u0027maintenance will make the process continue.\u0027)),"},{"line_number":193,"context_line":"    cfg.IntOpt(\u0027clean_callback_timeout\u0027,"},{"line_number":194,"context_line":"               default\u003d1800,"},{"line_number":195,"context_line":"               help\u003d_(\u0027Timeout (seconds) to wait for a callback from the \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_b90ab987","line":192,"in_reply_to":"5faad753_c1f89c4a","updated":"2019-09-17 11:02:55.000000000","message":"It can use IPA and by default relies on heartbeating. So it applies to the ansible deploy as well.","commit_id":"7ab30b212d0e0360a560e5c19e95fee6f46bec6b"}],"ironic/drivers/modules/agent_base_vendor.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"21f96c7908548d20a9e189738de040d48f291a87","unresolved":false,"context_lines":[{"line_number":472,"context_line":"        msg \u003d _(\u0027Failed checking if deploy is done.\u0027)"},{"line_number":473,"context_line":"        try:"},{"line_number":474,"context_line":"            if node.maintenance:"},{"line_number":475,"context_line":"                last_error \u003d _(\u0027Operation aborted as node is in maintenance\u0027)"},{"line_number":476,"context_line":"                if node.provision_state in (states.CLEANING, states.CLEANWAIT):"},{"line_number":477,"context_line":"                    manager_utils.cleaning_error_handler(task, last_error)"},{"line_number":478,"context_line":"                elif node.provision_state in (states.DEPLOYING,"},{"line_number":479,"context_line":"                                              states.DEPLOYWAIT):"},{"line_number":480,"context_line":"                    deploy_utils.set_failed_state(task, last_error)"},{"line_number":481,"context_line":"                else:"},{"line_number":482,"context_line":"                    LOG.debug(\u0027Heartbeat from node %(node)s in \u0027"},{"line_number":483,"context_line":"                              \u0027maintenance mode; not taking any action.\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_a0c72663","line":480,"range":{"start_line":475,"start_character":16,"end_line":480,"end_character":67},"updated":"2016-09-09 07:26:26.000000000","message":"I think also log message for these actions is needed.","commit_id":"f8efcdd4ecd3aa794671e6ee76743f4de62e8b31"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"274b53abd1b76cc9f5564d1a5cd83e843eaecbf5","unresolved":false,"context_lines":[{"line_number":472,"context_line":"        msg \u003d _(\u0027Failed checking if deploy is done.\u0027)"},{"line_number":473,"context_line":"        try:"},{"line_number":474,"context_line":"            if node.maintenance:"},{"line_number":475,"context_line":"                last_error \u003d _(\u0027Operation aborted as node is in maintenance\u0027)"},{"line_number":476,"context_line":"                if node.provision_state in (states.CLEANING, states.CLEANWAIT):"},{"line_number":477,"context_line":"                    LOG.error(_LE(\u0027Aborting cleaning for node %s, as it is \u0027"},{"line_number":478,"context_line":"                                  \u0027in maintenance mode\u0027), node.uuid)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_1378f0c3","line":475,"updated":"2016-09-14 22:34:31.000000000","message":"I would like a specification of which operation was aborted. It can be useful to an operator to know how many nodes failed deploy vs. failed cleaning.","commit_id":"957276f75b1a579b934449af23cbf08615979dfe"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c871bb882d00274bc6d35e09a18a23d4e5765b29","unresolved":false,"context_lines":[{"line_number":472,"context_line":"        msg \u003d _(\u0027Failed checking if deploy is done.\u0027)"},{"line_number":473,"context_line":"        try:"},{"line_number":474,"context_line":"            if node.maintenance:"},{"line_number":475,"context_line":"                last_error \u003d _(\u0027Operation aborted as node is in maintenance\u0027)"},{"line_number":476,"context_line":"                if node.provision_state in (states.CLEANING, states.CLEANWAIT):"},{"line_number":477,"context_line":"                    LOG.error(_LE(\u0027Aborting cleaning for node %s, as it is \u0027"},{"line_number":478,"context_line":"                                  \u0027in maintenance mode\u0027), node.uuid)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_e14b4785","line":475,"in_reply_to":"7a8ec9b2_1378f0c3","updated":"2016-11-10 16:03:34.000000000","message":"Done","commit_id":"957276f75b1a579b934449af23cbf08615979dfe"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"bd57f573af31b0aa1ac01cebcf77e82b8d0f1d79","unresolved":false,"context_lines":[{"line_number":474,"context_line":"            if node.maintenance:"},{"line_number":475,"context_line":"                last_error \u003d _(\u0027Operation aborted as node is in maintenance\u0027)"},{"line_number":476,"context_line":"                if node.provision_state in (states.CLEANING, states.CLEANWAIT):"},{"line_number":477,"context_line":"                    LOG.error(_LE(\u0027Aborting cleaning for node %s, as it is \u0027"},{"line_number":478,"context_line":"                                  \u0027in maintenance mode\u0027), node.uuid)"},{"line_number":479,"context_line":"                    manager_utils.cleaning_error_handler(task, last_error)"},{"line_number":480,"context_line":"                elif node.provision_state in (states.DEPLOYING,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a89bdaa_bb8407d3","line":477,"updated":"2016-09-13 14:22:51.000000000","message":"Not sure about error priority because it\u0027s operator action.","commit_id":"957276f75b1a579b934449af23cbf08615979dfe"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c871bb882d00274bc6d35e09a18a23d4e5765b29","unresolved":false,"context_lines":[{"line_number":474,"context_line":"            if node.maintenance:"},{"line_number":475,"context_line":"                last_error \u003d _(\u0027Operation aborted as node is in maintenance\u0027)"},{"line_number":476,"context_line":"                if node.provision_state in (states.CLEANING, states.CLEANWAIT):"},{"line_number":477,"context_line":"                    LOG.error(_LE(\u0027Aborting cleaning for node %s, as it is \u0027"},{"line_number":478,"context_line":"                                  \u0027in maintenance mode\u0027), node.uuid)"},{"line_number":479,"context_line":"                    manager_utils.cleaning_error_handler(task, last_error)"},{"line_number":480,"context_line":"                elif node.provision_state in (states.DEPLOYING,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_01511b36","line":477,"in_reply_to":"7a8ec9b2_13b1d08f","updated":"2016-11-10 16:03:34.000000000","message":"Done","commit_id":"957276f75b1a579b934449af23cbf08615979dfe"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"274b53abd1b76cc9f5564d1a5cd83e843eaecbf5","unresolved":false,"context_lines":[{"line_number":474,"context_line":"            if node.maintenance:"},{"line_number":475,"context_line":"                last_error \u003d _(\u0027Operation aborted as node is in maintenance\u0027)"},{"line_number":476,"context_line":"                if node.provision_state in (states.CLEANING, states.CLEANWAIT):"},{"line_number":477,"context_line":"                    LOG.error(_LE(\u0027Aborting cleaning for node %s, as it is \u0027"},{"line_number":478,"context_line":"                                  \u0027in maintenance mode\u0027), node.uuid)"},{"line_number":479,"context_line":"                    manager_utils.cleaning_error_handler(task, last_error)"},{"line_number":480,"context_line":"                elif node.provision_state in (states.DEPLOYING,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_13b1d08f","line":477,"in_reply_to":"7a8ec9b2_33961a95","updated":"2016-09-14 22:34:31.000000000","message":"I think warning is sufficient, but I don\u0027t really care either way.","commit_id":"957276f75b1a579b934449af23cbf08615979dfe"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"7c9d6d3403586020e52501a66bec50219161ac3d","unresolved":false,"context_lines":[{"line_number":474,"context_line":"            if node.maintenance:"},{"line_number":475,"context_line":"                last_error \u003d _(\u0027Operation aborted as node is in maintenance\u0027)"},{"line_number":476,"context_line":"                if node.provision_state in (states.CLEANING, states.CLEANWAIT):"},{"line_number":477,"context_line":"                    LOG.error(_LE(\u0027Aborting cleaning for node %s, as it is \u0027"},{"line_number":478,"context_line":"                                  \u0027in maintenance mode\u0027), node.uuid)"},{"line_number":479,"context_line":"                    manager_utils.cleaning_error_handler(task, last_error)"},{"line_number":480,"context_line":"                elif node.provision_state in (states.DEPLOYING,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_33961a95","line":477,"in_reply_to":"9a89bdaa_3c8d4dd3","updated":"2016-09-13 19:45:39.000000000","message":"I agree ERROR is probably overkill for this; but it doesn\u0027t matter that much.","commit_id":"957276f75b1a579b934449af23cbf08615979dfe"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"7298a619e6ec6b22b4d7e7ba719fdc28f1343d60","unresolved":false,"context_lines":[{"line_number":474,"context_line":"            if node.maintenance:"},{"line_number":475,"context_line":"                last_error \u003d _(\u0027Operation aborted as node is in maintenance\u0027)"},{"line_number":476,"context_line":"                if node.provision_state in (states.CLEANING, states.CLEANWAIT):"},{"line_number":477,"context_line":"                    LOG.error(_LE(\u0027Aborting cleaning for node %s, as it is \u0027"},{"line_number":478,"context_line":"                                  \u0027in maintenance mode\u0027), node.uuid)"},{"line_number":479,"context_line":"                    manager_utils.cleaning_error_handler(task, last_error)"},{"line_number":480,"context_line":"                elif node.provision_state in (states.DEPLOYING,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a89bdaa_3c8d4dd3","line":477,"in_reply_to":"9a89bdaa_bb8407d3","updated":"2016-09-13 15:04:11.000000000","message":"Not necessary, it can be automatic maintenance due to power failure.","commit_id":"957276f75b1a579b934449af23cbf08615979dfe"},{"author":{"_account_id":19072,"name":"Xavier","email":"marcusrafael@lsd.ufcg.edu.br","username":"marcusrafael"},"change_message_id":"0bf7e590335c15ce1778cac1d00a2de3dd0d0348","unresolved":false,"context_lines":[{"line_number":443,"context_line":"        if node.provision_state in (states.CLEANING, states.CLEANWAIT):"},{"line_number":444,"context_line":"            LOG.warning(_LW(\u0027Aborting cleaning for node %s, as it is \u0027"},{"line_number":445,"context_line":"                            \u0027in maintenance mode\u0027), node.uuid)"},{"line_number":446,"context_line":"            last_error \u003d _(\u0027Cleaning aborted as node is in maintenance\u0027)"},{"line_number":447,"context_line":"            manager_utils.cleaning_error_handler(task, last_error)"},{"line_number":448,"context_line":"        elif node.provision_state in (states.DEPLOYING,"},{"line_number":449,"context_line":"                                      states.DEPLOYWAIT):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a629dbe_ea792e94","line":446,"range":{"start_line":446,"start_character":59,"end_line":446,"end_character":70},"updated":"2016-11-11 17:47:25.000000000","message":"s/maintenance/maintenance mode/","commit_id":"46532ed0abbf7000c6b88c4e2db7b5a5287e3af5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"4f1d496df0b5028f9bb0eac00246b0a7afa666a1","unresolved":false,"context_lines":[{"line_number":444,"context_line":"            LOG.warning(_LW(\u0027Aborting cleaning for node %s, as it is \u0027"},{"line_number":445,"context_line":"                            \u0027in maintenance mode\u0027), node.uuid)"},{"line_number":446,"context_line":"            last_error \u003d _(\u0027Cleaning aborted as node is in maintenance\u0027)"},{"line_number":447,"context_line":"            manager_utils.cleaning_error_handler(task, last_error)"},{"line_number":448,"context_line":"        elif node.provision_state in (states.DEPLOYING,"},{"line_number":449,"context_line":"                                      states.DEPLOYWAIT):"},{"line_number":450,"context_line":"            LOG.warning(_LW(\u0027Aborting deployment for node %s, as it is \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5201f7_adfe3a03","line":447,"updated":"2016-12-29 13:04:05.000000000","message":"Might be set tear_down_cleaning\u003dFalse here instead of modifying  tear_down_inband_cleaning() ?","commit_id":"46532ed0abbf7000c6b88c4e2db7b5a5287e3af5"},{"author":{"_account_id":19072,"name":"Xavier","email":"marcusrafael@lsd.ufcg.edu.br","username":"marcusrafael"},"change_message_id":"0bf7e590335c15ce1778cac1d00a2de3dd0d0348","unresolved":false,"context_lines":[{"line_number":449,"context_line":"                                      states.DEPLOYWAIT):"},{"line_number":450,"context_line":"            LOG.warning(_LW(\u0027Aborting deployment for node %s, as it is \u0027"},{"line_number":451,"context_line":"                            \u0027in maintenance mode\u0027), node.uuid)"},{"line_number":452,"context_line":"            last_error \u003d _(\u0027Deploy aborted as node is in maintenance\u0027)"},{"line_number":453,"context_line":"            deploy_utils.set_failed_state(task, last_error)"},{"line_number":454,"context_line":"        else:"},{"line_number":455,"context_line":"            LOG.debug(\u0027Heartbeat from node %(node)s in \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a629dbe_0a6d82cb","line":452,"range":{"start_line":452,"start_character":57,"end_line":452,"end_character":68},"updated":"2016-11-11 17:47:25.000000000","message":"s/maintenance/maintenance mode/","commit_id":"46532ed0abbf7000c6b88c4e2db7b5a5287e3af5"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"c95eec1477e1ed74574f09fbf930f89668c79ce4","unresolved":false,"context_lines":[{"line_number":314,"context_line":"            LOG.debug(\u0027Heartbeat from node %(node)s in \u0027"},{"line_number":315,"context_line":"                      \u0027maintenance mode; not taking any action.\u0027,"},{"line_number":316,"context_line":"                      {\u0027node\u0027: node.uuid})"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    @METRICS.timer(\u0027HeartbeatMixin.heartbeat\u0027)"},{"line_number":319,"context_line":"    def heartbeat(self, task, callback_url, agent_version):"},{"line_number":320,"context_line":"        \"\"\"Process a heartbeat."}],"source_content_type":"text/x-python","patch_set":13,"id":"5faad753_c468aa88","line":317,"updated":"2019-09-10 17:05:41.000000000","message":"I was looking at the code. L327 checks if the provision state is deploywait|cleanwait|rescuewait| or fasttrack-allowed-states -- which includes enroll/manageable/available/deploying.\n\nDo we want to include rescuing too?\n\nArne likes that this is configurable. Instead of Boolean, I was wondering if we want the config value to be a list of provision states that we allow if maintenance, but maybe that is too complicated.","commit_id":"7ab30b212d0e0360a560e5c19e95fee6f46bec6b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c0bc14f3add22897722a9b2449d78bc19e1b391c","unresolved":false,"context_lines":[{"line_number":314,"context_line":"            LOG.debug(\u0027Heartbeat from node %(node)s in \u0027"},{"line_number":315,"context_line":"                      \u0027maintenance mode; not taking any action.\u0027,"},{"line_number":316,"context_line":"                      {\u0027node\u0027: node.uuid})"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    @METRICS.timer(\u0027HeartbeatMixin.heartbeat\u0027)"},{"line_number":319,"context_line":"    def heartbeat(self, task, callback_url, agent_version):"},{"line_number":320,"context_line":"        \"\"\"Process a heartbeat."}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_5934e54a","line":317,"in_reply_to":"5faad753_c468aa88","updated":"2019-09-17 11:02:55.000000000","message":"We probably need to include rescue. As to a configuration option, I\u0027m afraid it exposes too many implementation details.","commit_id":"7ab30b212d0e0360a560e5c19e95fee6f46bec6b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"c95eec1477e1ed74574f09fbf930f89668c79ce4","unresolved":false,"context_lines":[{"line_number":362,"context_line":"            return"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        if node.maintenance:"},{"line_number":365,"context_line":"            return self._heartbeat_in_maintenance(task)"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"        # Async call backs don\u0027t set error state on their own"},{"line_number":368,"context_line":"        # TODO(jimrollenhagen) improve error messages here"}],"source_content_type":"text/x-python","patch_set":13,"id":"5faad753_a4480ecc","line":365,"updated":"2019-09-10 17:05:41.000000000","message":"The problem we\u0027re trying to solve is that if IPA heartbeats and the node is in maintenance, the original code would do \u0027nothing\u0027, instead of handling DEPLOYWAIT, CLEANWAIT, or RESCUEWAIT (below). So we want to allow the user to be able to specify whether or not to put the node in some error state if node is in maintenance and in one of these DEPLOYWAIT, CLEANWAIT, RESCUEWAIT states, right?","commit_id":"7ab30b212d0e0360a560e5c19e95fee6f46bec6b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c0bc14f3add22897722a9b2449d78bc19e1b391c","unresolved":false,"context_lines":[{"line_number":362,"context_line":"            return"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        if node.maintenance:"},{"line_number":365,"context_line":"            return self._heartbeat_in_maintenance(task)"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"        # Async call backs don\u0027t set error state on their own"},{"line_number":368,"context_line":"        # TODO(jimrollenhagen) improve error messages here"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_99781df9","line":365,"in_reply_to":"5faad753_a4480ecc","updated":"2019-09-17 11:02:55.000000000","message":"Right","commit_id":"7ab30b212d0e0360a560e5c19e95fee6f46bec6b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"df9c7ca69aba5b637f0ab85af28cf5502aef3cf9","unresolved":false,"context_lines":[{"line_number":317,"context_line":"            last_error \u003d _(\u0027Rescue aborted as node is in maintenance mode\u0027)"},{"line_number":318,"context_line":"            manager_utils.rescuing_error_handler(task, last_error)"},{"line_number":319,"context_line":"        else:"},{"line_number":320,"context_line":"            LOG.warning(\u0027Heartbeat from node %(node)s in \u0027"},{"line_number":321,"context_line":"                        \u0027maintenance mode; not taking any action.\u0027,"},{"line_number":322,"context_line":"                        {\u0027node\u0027: node.uuid})"},{"line_number":323,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa7e38b_f0ecbef4","line":320,"updated":"2019-09-17 14:46:00.000000000","message":"I\u0027m a bit concerned about this. If it is heartbeating, it may heartbeat regularly, so there may be a lot of LOG.warning\u0027s.","commit_id":"fcb793682dc063d6c36ce4555af018759a842ea8"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"515490b9de7829460356cccb8a2e1932ac094889","unresolved":false,"context_lines":[{"line_number":317,"context_line":"            last_error \u003d _(\u0027Rescue aborted as node is in maintenance mode\u0027)"},{"line_number":318,"context_line":"            manager_utils.rescuing_error_handler(task, last_error)"},{"line_number":319,"context_line":"        else:"},{"line_number":320,"context_line":"            LOG.warning(\u0027Heartbeat from node %(node)s in \u0027"},{"line_number":321,"context_line":"                        \u0027maintenance mode; not taking any action.\u0027,"},{"line_number":322,"context_line":"                        {\u0027node\u0027: node.uuid})"},{"line_number":323,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa7e38b_f04b5ead","line":320,"in_reply_to":"3fa7e38b_90dc6a19","updated":"2019-09-17 15:00:10.000000000","message":"That\u0027s true. L335 is an error though. This is a warning -- cuz we\u0027re not sure. Well we can leave it as warning and see if anyone complains :)","commit_id":"fcb793682dc063d6c36ce4555af018759a842ea8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"76f2a8c76a71f06c05b773b724348886525909ba","unresolved":false,"context_lines":[{"line_number":317,"context_line":"            last_error \u003d _(\u0027Rescue aborted as node is in maintenance mode\u0027)"},{"line_number":318,"context_line":"            manager_utils.rescuing_error_handler(task, last_error)"},{"line_number":319,"context_line":"        else:"},{"line_number":320,"context_line":"            LOG.warning(\u0027Heartbeat from node %(node)s in \u0027"},{"line_number":321,"context_line":"                        \u0027maintenance mode; not taking any action.\u0027,"},{"line_number":322,"context_line":"                        {\u0027node\u0027: node.uuid})"},{"line_number":323,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa7e38b_90dc6a19","line":320,"in_reply_to":"3fa7e38b_f0ecbef4","updated":"2019-09-17 14:52:12.000000000","message":"We have a similar LOG.error on line 335, so dunno.","commit_id":"fcb793682dc063d6c36ce4555af018759a842ea8"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"df9c7ca69aba5b637f0ab85af28cf5502aef3cf9","unresolved":false,"context_lines":[{"line_number":318,"context_line":"            manager_utils.rescuing_error_handler(task, last_error)"},{"line_number":319,"context_line":"        else:"},{"line_number":320,"context_line":"            LOG.warning(\u0027Heartbeat from node %(node)s in \u0027"},{"line_number":321,"context_line":"                        \u0027maintenance mode; not taking any action.\u0027,"},{"line_number":322,"context_line":"                        {\u0027node\u0027: node.uuid})"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    @METRICS.timer(\u0027HeartbeatMixin.heartbeat\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa7e38b_b0c08652","line":321,"updated":"2019-09-17 14:46:00.000000000","message":"might be worth spitting out node.provision_state to make it easier to debug if there is a problem.","commit_id":"fcb793682dc063d6c36ce4555af018759a842ea8"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"3103f2404409c97db8bdc68a68d64cdb59db5f2a","unresolved":false,"context_lines":[{"line_number":318,"context_line":"            manager_utils.rescuing_error_handler(task, last_error)"},{"line_number":319,"context_line":"        else:"},{"line_number":320,"context_line":"            LOG.warning(\u0027Heartbeat from node %(node)s in \u0027"},{"line_number":321,"context_line":"                        \u0027maintenance mode; not taking any action.\u0027,"},{"line_number":322,"context_line":"                        {\u0027node\u0027: node.uuid})"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    @METRICS.timer(\u0027HeartbeatMixin.heartbeat\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa7e38b_013a4f35","line":321,"in_reply_to":"3fa7e38b_b0c08652","updated":"2019-09-19 07:42:06.000000000","message":"+1","commit_id":"fcb793682dc063d6c36ce4555af018759a842ea8"}],"ironic/drivers/modules/deploy_utils.py":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"ec87f062fe1fd02b812a76a4f98545cc46e40b01","unresolved":false,"context_lines":[{"line_number":1114,"context_line":"    # NOTE(dtantsur): if node moved to maintenance during cleaning or as a"},{"line_number":1115,"context_line":"    # result of failed cleaning, do not touch the power state."},{"line_number":1116,"context_line":"    if not task.node.maintenance:"},{"line_number":1117,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":1118,"context_line":""},{"line_number":1119,"context_line":"    if manage_boot:"},{"line_number":1120,"context_line":"        task.driver.boot.clean_up_ramdisk(task)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_d73bbfcf","line":1117,"updated":"2016-09-15 10:21:50.000000000","message":"should wrap with try: except like it done in L495","commit_id":"957276f75b1a579b934449af23cbf08615979dfe"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c871bb882d00274bc6d35e09a18a23d4e5765b29","unresolved":false,"context_lines":[{"line_number":1114,"context_line":"    # NOTE(dtantsur): if node moved to maintenance during cleaning or as a"},{"line_number":1115,"context_line":"    # result of failed cleaning, do not touch the power state."},{"line_number":1116,"context_line":"    if not task.node.maintenance:"},{"line_number":1117,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":1118,"context_line":""},{"line_number":1119,"context_line":"    if manage_boot:"},{"line_number":1120,"context_line":"        task.driver.boot.clean_up_ramdisk(task)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_a156af27","line":1117,"in_reply_to":"7a8ec9b2_d73bbfcf","updated":"2016-11-10 16:03:34.000000000","message":"I agree, but this was the same previously, so let\u0027s fix it in a separate patch","commit_id":"957276f75b1a579b934449af23cbf08615979dfe"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"4f1d496df0b5028f9bb0eac00246b0a7afa666a1","unresolved":false,"context_lines":[{"line_number":514,"context_line":"        LOG.exception(msg2)"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"    # NOTE(dtantsur): if node moved to maintenance during deployment or as a"},{"line_number":517,"context_line":"    # result of failed deployment, do not touch the power state."},{"line_number":518,"context_line":"    if CONF.deploy.power_off_after_deploy_failure and not node.maintenance:"},{"line_number":519,"context_line":"        try:"},{"line_number":520,"context_line":"            manager_utils.node_power_action(task, states.POWER_OFF)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5201f7_6d4b725a","line":517,"updated":"2016-12-29 13:04:05.000000000","message":"Please update docstring as behaviour of the function has been changed.","commit_id":"46532ed0abbf7000c6b88c4e2db7b5a5287e3af5"},{"author":{"_account_id":19072,"name":"Xavier","email":"marcusrafael@lsd.ufcg.edu.br","username":"marcusrafael"},"change_message_id":"0bf7e590335c15ce1778cac1d00a2de3dd0d0348","unresolved":false,"context_lines":[{"line_number":515,"context_line":""},{"line_number":516,"context_line":"    # NOTE(dtantsur): if node moved to maintenance during deployment or as a"},{"line_number":517,"context_line":"    # result of failed deployment, do not touch the power state."},{"line_number":518,"context_line":"    if CONF.deploy.power_off_after_deploy_failure and not node.maintenance:"},{"line_number":519,"context_line":"        try:"},{"line_number":520,"context_line":"            manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":521,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a629dbe_772347bd","line":518,"range":{"start_line":518,"start_character":19,"end_line":518,"end_character":49},"updated":"2016-11-11 17:47:25.000000000","message":"I think we should tell in the conf [DEPLOY]/power_off_after_deploy_failure [1] that this action will be only taken when node is not in maintenance mode. WDYT?\n\n[1] https://github.com/openstack/ironic/blob/f6334c0ff51ce51ab0750e6d93ecc2528ff64c27/etc/ironic/ironic.conf.sample#L995","commit_id":"46532ed0abbf7000c6b88c4e2db7b5a5287e3af5"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"6438d217b58fd95a05d245adae8f782f627e241c","unresolved":false,"context_lines":[{"line_number":515,"context_line":""},{"line_number":516,"context_line":"    # NOTE(dtantsur): if node moved to maintenance during deployment or as a"},{"line_number":517,"context_line":"    # result of failed deployment, do not touch the power state."},{"line_number":518,"context_line":"    if CONF.deploy.power_off_after_deploy_failure and not node.maintenance:"},{"line_number":519,"context_line":"        try:"},{"line_number":520,"context_line":"            manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":521,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_09fdb2b3","line":518,"range":{"start_line":518,"start_character":19,"end_line":518,"end_character":49},"in_reply_to":"9a629dbe_772347bd","updated":"2016-11-18 11:18:35.000000000","message":"Yup, worth updating.","commit_id":"46532ed0abbf7000c6b88c4e2db7b5a5287e3af5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"4f1d496df0b5028f9bb0eac00246b0a7afa666a1","unresolved":false,"context_lines":[{"line_number":1125,"context_line":"    # NOTE(dtantsur): if node moved to maintenance during cleaning or as a"},{"line_number":1126,"context_line":"    # result of failed cleaning, do not touch the power state."},{"line_number":1127,"context_line":"    if not task.node.maintenance:"},{"line_number":1128,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":1129,"context_line":""},{"line_number":1130,"context_line":"    if manage_boot:"},{"line_number":1131,"context_line":"        task.driver.boot.clean_up_ramdisk(task)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5201f7_ad739ab3","line":1128,"updated":"2016-12-29 13:04:05.000000000","message":"ditto about docstring.","commit_id":"46532ed0abbf7000c6b88c4e2db7b5a5287e3af5"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"6438d217b58fd95a05d245adae8f782f627e241c","unresolved":false,"context_lines":[{"line_number":1130,"context_line":"    if manage_boot:"},{"line_number":1131,"context_line":"        task.driver.boot.clean_up_ramdisk(task)"},{"line_number":1132,"context_line":""},{"line_number":1133,"context_line":"    tear_down_cleaning_ports(task)"},{"line_number":1134,"context_line":""},{"line_number":1135,"context_line":""},{"line_number":1136,"context_line":"def get_image_instance_info(node):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_6e08ecda","line":1133,"updated":"2016-11-18 11:18:35.000000000","message":"We\u0027re removing the cleaning ports here, so may lose the connectivity to the node at some point, I\u0027d put this under if too.","commit_id":"46532ed0abbf7000c6b88c4e2db7b5a5287e3af5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"4f1d496df0b5028f9bb0eac00246b0a7afa666a1","unresolved":false,"context_lines":[{"line_number":1130,"context_line":"    if manage_boot:"},{"line_number":1131,"context_line":"        task.driver.boot.clean_up_ramdisk(task)"},{"line_number":1132,"context_line":""},{"line_number":1133,"context_line":"    tear_down_cleaning_ports(task)"},{"line_number":1134,"context_line":""},{"line_number":1135,"context_line":""},{"line_number":1136,"context_line":"def get_image_instance_info(node):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5201f7_374b772d","line":1133,"in_reply_to":"7a77a97e_6e08ecda","updated":"2016-12-29 13:04:05.000000000","message":"+1 we shouldn\u0027t remove cleaning ports if we want to keep network connectivity.","commit_id":"46532ed0abbf7000c6b88c4e2db7b5a5287e3af5"}],"ironic/drivers/modules/inspector.py":[{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"31ec9bfa21af6508a6644b90a52796eb300e13fc","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        if (task.node.maintenance"},{"line_number":97,"context_line":"                and not CONF.conductor.allow_provisioning_in_maintenance):"},{"line_number":98,"context_line":"            raise exception.NodeInMaintenance(op\u003d_(\u0027in-band inspection\u0027),"},{"line_number":99,"context_line":"                                              node\u003dtask.node.uuid)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        LOG.debug(\u0027Starting inspection for node %(uuid)s using \u0027"},{"line_number":102,"context_line":"                  \u0027ironic-inspector\u0027, {\u0027uuid\u0027: task.node.uuid})"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_c9cc9564","line":99,"updated":"2019-08-22 10:26:12.000000000","message":"Test for this change is missing. Please add one. Thanks!","commit_id":"0f688cefadb58252e27b0d4a4aa7ce2d205b3321"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e807874fae86718f3262bd05ee7385f2aa16eb57","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        :raises: NodeInMaintenance"},{"line_number":95,"context_line":"        \"\"\""},{"line_number":96,"context_line":"        if (task.node.maintenance"},{"line_number":97,"context_line":"                and not CONF.conductor.allow_provisioning_in_maintenance):"},{"line_number":98,"context_line":"            raise exception.NodeInMaintenance(op\u003d_(\u0027in-band inspection\u0027),"},{"line_number":99,"context_line":"                                              node\u003dtask.node.uuid)"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_ef719c46","line":97,"updated":"2019-09-03 17:27:56.000000000","message":"so why do you block doing inspection if node is in maintenance? Does inspection leverage some cleaning operations?","commit_id":"7ab30b212d0e0360a560e5c19e95fee6f46bec6b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"c95eec1477e1ed74574f09fbf930f89668c79ce4","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        :raises: NodeInMaintenance"},{"line_number":95,"context_line":"        \"\"\""},{"line_number":96,"context_line":"        if (task.node.maintenance"},{"line_number":97,"context_line":"                and not CONF.conductor.allow_provisioning_in_maintenance):"},{"line_number":98,"context_line":"            raise exception.NodeInMaintenance(op\u003d_(\u0027in-band inspection\u0027),"},{"line_number":99,"context_line":"                                              node\u003dtask.node.uuid)"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5faad753_c4c42a62","line":97,"in_reply_to":"5faad753_6bda0318","updated":"2019-09-10 17:05:41.000000000","message":"Yes, it might be better to remove this.","commit_id":"7ab30b212d0e0360a560e5c19e95fee6f46bec6b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c0bc14f3add22897722a9b2449d78bc19e1b391c","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        :raises: NodeInMaintenance"},{"line_number":95,"context_line":"        \"\"\""},{"line_number":96,"context_line":"        if (task.node.maintenance"},{"line_number":97,"context_line":"                and not CONF.conductor.allow_provisioning_in_maintenance):"},{"line_number":98,"context_line":"            raise exception.NodeInMaintenance(op\u003d_(\u0027in-band inspection\u0027),"},{"line_number":99,"context_line":"                                              node\u003dtask.node.uuid)"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_5982a5ca","line":97,"in_reply_to":"5faad753_c4c42a62","updated":"2019-09-17 11:02:55.000000000","message":"Done","commit_id":"7ab30b212d0e0360a560e5c19e95fee6f46bec6b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6212f3660e233261d6230da71e329b24e2f1dc46","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        :raises: NodeInMaintenance"},{"line_number":95,"context_line":"        \"\"\""},{"line_number":96,"context_line":"        if (task.node.maintenance"},{"line_number":97,"context_line":"                and not CONF.conductor.allow_provisioning_in_maintenance):"},{"line_number":98,"context_line":"            raise exception.NodeInMaintenance(op\u003d_(\u0027in-band inspection\u0027),"},{"line_number":99,"context_line":"                                              node\u003dtask.node.uuid)"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5faad753_6bda0318","line":97,"in_reply_to":"7faddb67_ef719c46","updated":"2019-09-09 15:41:10.000000000","message":"Well... this can be removed. I did it for consistency, but actually introspection doesn\u0027t have the same issue.","commit_id":"7ab30b212d0e0360a560e5c19e95fee6f46bec6b"}],"ironic/tests/unit/drivers/modules/test_agent_base_vendor.py":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"ec87f062fe1fd02b812a76a4f98545cc46e40b01","unresolved":false,"context_lines":[{"line_number":567,"context_line":"                self.context, self.node[\u0027uuid\u0027], shared\u003dFalse) as task:"},{"line_number":568,"context_line":"            self.deploy.heartbeat(task, \u0027http://127.0.0.1:8080\u0027)"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"        self.assertEqual(0, ncrc_mock.call_count)"},{"line_number":571,"context_line":"        self.assertEqual(0, rti_mock.call_count)"},{"line_number":572,"context_line":"        self.assertEqual(0, cd_mock.call_count)"},{"line_number":573,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_17bb6728","line":570,"updated":"2016-09-15 10:21:50.000000000","message":"ditto about: assert_not_called()","commit_id":"957276f75b1a579b934449af23cbf08615979dfe"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"ec87f062fe1fd02b812a76a4f98545cc46e40b01","unresolved":false,"context_lines":[{"line_number":591,"context_line":"                err_mock.assert_called_once_with(task, mock.ANY)"},{"line_number":592,"context_line":"                err_mock.reset_mock()"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"        self.assertEqual(0, ncrc_mock.call_count)"},{"line_number":595,"context_line":"        self.assertEqual(0, rti_mock.call_count)"},{"line_number":596,"context_line":"        self.assertEqual(0, cd_mock.call_count)"},{"line_number":597,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_97a6970e","line":594,"updated":"2016-09-15 10:21:50.000000000","message":"It is better to replace it with: assert_not_called()","commit_id":"957276f75b1a579b934449af23cbf08615979dfe"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c871bb882d00274bc6d35e09a18a23d4e5765b29","unresolved":false,"context_lines":[{"line_number":591,"context_line":"                err_mock.assert_called_once_with(task, mock.ANY)"},{"line_number":592,"context_line":"                err_mock.reset_mock()"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"        self.assertEqual(0, ncrc_mock.call_count)"},{"line_number":595,"context_line":"        self.assertEqual(0, rti_mock.call_count)"},{"line_number":596,"context_line":"        self.assertEqual(0, cd_mock.call_count)"},{"line_number":597,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_345adb2a","line":594,"in_reply_to":"7a8ec9b2_97a6970e","updated":"2016-11-10 16:03:34.000000000","message":"this does not seem to be a thing:\n\n AttributeError: \u0027function\u0027 object has no attribute \u0027assert_not_called\u0027","commit_id":"957276f75b1a579b934449af23cbf08615979dfe"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"ec87f062fe1fd02b812a76a4f98545cc46e40b01","unresolved":false,"context_lines":[{"line_number":615,"context_line":"                err_mock.assert_called_once_with(task, mock.ANY)"},{"line_number":616,"context_line":"                err_mock.reset_mock()"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"        self.assertEqual(0, ncrc_mock.call_count)"},{"line_number":619,"context_line":"        self.assertEqual(0, rti_mock.call_count)"},{"line_number":620,"context_line":"        self.assertEqual(0, cd_mock.call_count)"},{"line_number":621,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_378dc37b","line":618,"updated":"2016-09-15 10:21:50.000000000","message":"ditto: assert_not_called()","commit_id":"957276f75b1a579b934449af23cbf08615979dfe"},{"author":{"_account_id":19072,"name":"Xavier","email":"marcusrafael@lsd.ufcg.edu.br","username":"marcusrafael"},"change_message_id":"0bf7e590335c15ce1778cac1d00a2de3dd0d0348","unresolved":false,"context_lines":[{"line_number":627,"context_line":"                       \u0027reboot_to_instance\u0027, autospec\u003dTrue)"},{"line_number":628,"context_line":"    @mock.patch.object(agent_base_vendor, \u0027_notify_conductor_resume_clean\u0027,"},{"line_number":629,"context_line":"                       autospec\u003dTrue)"},{"line_number":630,"context_line":"    def test_heartbeat_maitenance_aborts_deploy(self, ncrc_mock, rti_mock,"},{"line_number":631,"context_line":"                                                cd_mock, err_mock):"},{"line_number":632,"context_line":"        \"\"\"Ensures that heartbeat() fails deploy for a maintenance node.\"\"\""},{"line_number":633,"context_line":"        self.node.maintenance \u003d True"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a629dbe_37146f4b","line":630,"range":{"start_line":630,"start_character":23,"end_line":630,"end_character":33},"updated":"2016-11-11 17:47:25.000000000","message":"s/maitenance/maintenance/","commit_id":"46532ed0abbf7000c6b88c4e2db7b5a5287e3af5"}],"releasenotes/notes/cleaning-maintenance-7ae83b1e4ff992b0.yaml":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"df9c7ca69aba5b637f0ab85af28cf5502aef3cf9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Currently ironic allows entering deployment or cleaning for nodes in"},{"line_number":5,"context_line":"    maintenance mode. However, heartbeats do not cause any actions for such"},{"line_number":6,"context_line":"    nodes, thus deployment or cleaning never finish if the nodes are not moved"},{"line_number":7,"context_line":"    out of maintenance. A new configuration option"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3fa7e38b_905f8ae4","line":4,"updated":"2019-09-17 14:46:00.000000000","message":"s/deployment or cleaning/deployment, cleaning, or rescuing/","commit_id":"fcb793682dc063d6c36ce4555af018759a842ea8"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"df9c7ca69aba5b637f0ab85af28cf5502aef3cf9","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Currently ironic allows entering deployment or cleaning for nodes in"},{"line_number":5,"context_line":"    maintenance mode. However, heartbeats do not cause any actions for such"},{"line_number":6,"context_line":"    nodes, thus deployment or cleaning never finish if the nodes are not moved"},{"line_number":7,"context_line":"    out of maintenance. A new configuration option"},{"line_number":8,"context_line":"    ``[conductor]allow_provisioning_in_maintenance`` (defaulting to ``True``)"},{"line_number":9,"context_line":"    is added to configure this behavior. If it is set to ``False``, deployment"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3fa7e38b_10739a82","line":6,"updated":"2019-09-17 14:46:00.000000000","message":"s/deployment or cleaning/these operations/ ?","commit_id":"fcb793682dc063d6c36ce4555af018759a842ea8"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"df9c7ca69aba5b637f0ab85af28cf5502aef3cf9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    out of maintenance. A new configuration option"},{"line_number":8,"context_line":"    ``[conductor]allow_provisioning_in_maintenance`` (defaulting to ``True``)"},{"line_number":9,"context_line":"    is added to configure this behavior. If it is set to ``False``, deployment"},{"line_number":10,"context_line":"    and cleaning will be prevented from nodes in maintenance mode."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3fa7e38b_b00966de","line":10,"updated":"2019-09-17 14:46:00.000000000","message":"s/deployment and cleaning/deployment, cleaning, and rescuing/","commit_id":"fcb793682dc063d6c36ce4555af018759a842ea8"}],"releasenotes/notes/maintenance-actions-52acea362be3b490.yaml":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"96429b09f2638adcadb3f46668822ea93dd24f79","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Abort cleaning and deployment for nodes in maintenance as soon as the first"},{"line_number":4,"context_line":"    heartbeat is received. This prevents cleaning or deployment from hanging"},{"line_number":5,"context_line":"    for such nodes, as we don\u0027t process heartbeats in maintenance mode."},{"line_number":6,"context_line":"  - When tearing down failed deployment or cleaning, do not touch power state"},{"line_number":7,"context_line":"    if a node is in maintenance mode."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"9a89bdaa_d8452d43","line":5,"range":{"start_line":5,"start_character":23,"end_line":5,"end_character":31},"updated":"2016-09-08 13:14:06.000000000","message":"This may be better as \"ironic does not\".  We likely ought to also indicate that this is agent heartbeats.","commit_id":"b569ed8571c681f3d0dffd286718474f322130a5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"96429b09f2638adcadb3f46668822ea93dd24f79","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - Abort cleaning and deployment for nodes in maintenance as soon as the first"},{"line_number":4,"context_line":"    heartbeat is received. This prevents cleaning or deployment from hanging"},{"line_number":5,"context_line":"    for such nodes, as we don\u0027t process heartbeats in maintenance mode."},{"line_number":6,"context_line":"  - When tearing down failed deployment or cleaning, do not touch power state"},{"line_number":7,"context_line":"    if a node is in maintenance mode."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"9a89bdaa_5843dd12","line":6,"updated":"2016-09-08 13:14:06.000000000","message":"s/down failed/down a failed/\ns/do not/Ironic no longer changes the power state\"","commit_id":"b569ed8571c681f3d0dffd286718474f322130a5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"96429b09f2638adcadb3f46668822ea93dd24f79","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    heartbeat is received. This prevents cleaning or deployment from hanging"},{"line_number":5,"context_line":"    for such nodes, as we don\u0027t process heartbeats in maintenance mode."},{"line_number":6,"context_line":"  - When tearing down failed deployment or cleaning, do not touch power state"},{"line_number":7,"context_line":"    if a node is in maintenance mode."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"9a89bdaa_9893a55a","line":7,"updated":"2016-09-08 13:14:06.000000000","message":"Might be worth adding something like \"Previously, the power state was changed to Off.\"","commit_id":"b569ed8571c681f3d0dffd286718474f322130a5"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"ed3c2b71c48465aff1449f165469275487348fd9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"9a629dbe_971e49b9","line":10,"updated":"2016-11-10 16:34:44.000000000","message":"Can we add something to the release notes about the tradeoff this patch has that we talked about in IRC? Where now, a node going into maintenance will force it to restart cleaning from the beginning, whereas currently it may be able to continue cleaning if unmaintenanced.","commit_id":"7fdccdbddf9c9c44f37dac0178e5d98b8117b6f1"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"c916abf7bcaaa59a1d1a58a1c79fabcf18b72f11","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    the power state if a node is in maintenance mode. Previously, ironic"},{"line_number":9,"context_line":"    powered off nodes in this case."},{"line_number":10,"context_line":"issues:"},{"line_number":11,"context_line":"  - Due to fixes around handling maintenance mode, it\u0027s no longer possible"},{"line_number":12,"context_line":"    to continue cleaning from the same point, if a node goes to maintenance"},{"line_number":13,"context_line":"    in the meantime."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"9a629dbe_03567bcd","line":11,"updated":"2016-11-10 18:01:58.000000000","message":"Maybe \"If a node enters maintenance mode during cleaning, ironic will now place it into \"clean failed\" state. This means it is now required for a node to completely restart cleaning from the beginning if maintenance is set during cleaning, rather than being able to continue in some cases.\"","commit_id":"ce08547121a6a506797f7271c9d91fdf52005497"}]}
