)]}'
{"nova/cmd/manage.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0311bc46c814bd215f749e802a4723480256ea3c","unresolved":false,"context_lines":[{"line_number":1887,"context_line":"                        }"},{"line_number":1888,"context_line":"                    }"},{"line_number":1889,"context_line":"                }"},{"line_number":1890,"context_line":"                neutron.update_port(port[\u0027id\u0027], body\u003dbody)"},{"line_number":1891,"context_line":"        except neutron_client_exc.NeutronClientException as e:"},{"line_number":1892,"context_line":"            # One of the port operation failed so we failed to roll back."},{"line_number":1893,"context_line":"            # There are partial updates in neutron. Human intervention needed!"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_05ee3c21","line":1890,"updated":"2019-06-28 14:33:11.000000000","message":"We could add a backoff retry on this if we\u0027re paranoid. If neutron is down then the port update shouldn\u0027t have worked in the first place, but if we\u0027re just hitting some glitch then a retry might fix it.","commit_id":"874bd49c3e20899b94b154d7b04aca16121a4201"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0311bc46c814bd215f749e802a4723480256ea3c","unresolved":false,"context_lines":[{"line_number":1888,"context_line":"                    }"},{"line_number":1889,"context_line":"                }"},{"line_number":1890,"context_line":"                neutron.update_port(port[\u0027id\u0027], body\u003dbody)"},{"line_number":1891,"context_line":"        except neutron_client_exc.NeutronClientException as e:"},{"line_number":1892,"context_line":"            # One of the port operation failed so we failed to roll back."},{"line_number":1893,"context_line":"            # There are partial updates in neutron. Human intervention needed!"},{"line_number":1894,"context_line":"            # If there are rollback operations that succeeded above the do we"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_c57ee468","line":1891,"updated":"2019-06-28 14:33:11.000000000","message":"You\u0027d want to handle this within the loop so you try to rollback all the port updates before failing.","commit_id":"874bd49c3e20899b94b154d7b04aca16121a4201"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c6c44deb5653971c6f9893ae3dc197d5787f48bd","unresolved":false,"context_lines":[{"line_number":1896,"context_line":"            # (yes, I\u0027m crazy)"},{"line_number":1897,"context_line":"            raise exception.UnableToRollbackPortUpdates("},{"line_number":1898,"context_line":"                error\u003de.message,"},{"line_number":1899,"context_line":"                cli\u003dself._port_update_to_openstack_cli(ports_to_update))"},{"line_number":1900,"context_line":""},{"line_number":1901,"context_line":"    def _heal_missing_alloc(self, ctxt, instance, node_cache):"},{"line_number":1902,"context_line":"        node_uuid \u003d self._get_compute_node_uuid("}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_27d1f123","line":1899,"range":{"start_line":1899,"start_character":55,"end_line":1899,"end_character":70},"updated":"2019-07-01 10:59:21.000000000","message":"this should instruct the admin to delete the content of the allocation key port_to_update still contains the rp_uuid as values.","commit_id":"874bd49c3e20899b94b154d7b04aca16121a4201"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ad25d2276f1e19adc9c5248a88a42ecde21791e7","unresolved":false,"context_lines":[{"line_number":2087,"context_line":"        filters \u003d {\u0027deleted\u0027: False}"},{"line_number":2088,"context_line":"        if instance_uuid:"},{"line_number":2089,"context_line":"            filters[\u0027uuid\u0027] \u003d instance_uuid"},{"line_number":2090,"context_line":"        instances \u003d objects.InstanceList.get_by_filters("},{"line_number":2091,"context_line":"            ctxt, filters\u003dfilters, sort_key\u003d\u0027created_at\u0027, sort_dir\u003d\u0027asc\u0027,"},{"line_number":2092,"context_line":"            limit\u003dmax_count, expected_attrs\u003d[\u0027flavor\u0027])"},{"line_number":2093,"context_line":"        while instances:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_65fa98bd","line":2090,"updated":"2019-06-28 14:37:52.000000000","message":"Unrelated, but two thoughts related to this:\n\n1. _heal_allocations_for_instance filters out instances who are undergoing some task_state transition - we could just filter those instances out in the DB query here I\u0027d think by adding task_state\u003dNone to the filter. Maybe it\u0027s nice to log the instances we couldn\u0027t process though?\n\n2. The more complex the healing code gets, the more I wonder if we should set a task_state on the instance (or lock it) while performing any heal processing on it so that something (the user, a periodic in the compute service, etc) doesn\u0027t mess with the instance while we\u0027re healing it.\n\nAnyway, thoughts for later hardening.","commit_id":"874bd49c3e20899b94b154d7b04aca16121a4201"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1a012915b3790e36c5fa69887b19e4a9f3ad8f9d","unresolved":false,"context_lines":[{"line_number":2087,"context_line":"        filters \u003d {\u0027deleted\u0027: False}"},{"line_number":2088,"context_line":"        if instance_uuid:"},{"line_number":2089,"context_line":"            filters[\u0027uuid\u0027] \u003d instance_uuid"},{"line_number":2090,"context_line":"        instances \u003d objects.InstanceList.get_by_filters("},{"line_number":2091,"context_line":"            ctxt, filters\u003dfilters, sort_key\u003d\u0027created_at\u0027, sort_dir\u003d\u0027asc\u0027,"},{"line_number":2092,"context_line":"            limit\u003dmax_count, expected_attrs\u003d[\u0027flavor\u0027])"},{"line_number":2093,"context_line":"        while instances:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_85522c66","line":2090,"in_reply_to":"9fb8cfa7_65fa98bd","updated":"2019-06-28 14:55:55.000000000","message":"Similarly, I wonder why I didn\u0027t just filter out instances where node\u003dNone here as well...","commit_id":"874bd49c3e20899b94b154d7b04aca16121a4201"}]}
