)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"38f236dc7671a8f0ee60fdfabf427c9d4fa461d4","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"1. In order to deal with existing corrupted RequestSpecs in the DB,"},{"line_number":30,"context_line":"   this change simply makes conductor overwrite RequestSpec.ignore_hosts"},{"line_number":31,"context_line":"   during evacuate before calling the scheduler so the current instance"},{"line_number":32,"context_line":"   host (which should be down otherwise we cannot evacuate from it)"},{"line_number":33,"context_line":"   rather than append."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"   This evacuate code dealing with ignore_hosts goes back to Mitaka:"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5fc1f717_036ae7eb","line":33,"range":{"start_line":31,"start_character":62,"end_line":33,"end_character":22},"updated":"2019-03-25 15:55:11.000000000","message":"grammar","commit_id":"03e8d196183829269521f6ddbd38f3edbacaefa3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bd6948cd70da341e224cb8e5bf2176fc32fae2c0","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"1. In order to deal with existing corrupted RequestSpecs in the DB,"},{"line_number":30,"context_line":"   this change simply makes conductor overwrite RequestSpec.ignore_hosts"},{"line_number":31,"context_line":"   during evacuate before calling the scheduler so the current instance"},{"line_number":32,"context_line":"   host (which should be down otherwise we cannot evacuate from it)"},{"line_number":33,"context_line":"   rather than append."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"   This evacuate code dealing with ignore_hosts goes back to Mitaka:"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5fc1f717_7e190278","line":33,"range":{"start_line":31,"start_character":62,"end_line":33,"end_character":22},"in_reply_to":"5fc1f717_036ae7eb","updated":"2019-03-25 15:59:35.000000000","message":"Done","commit_id":"03e8d196183829269521f6ddbd38f3edbacaefa3"}],"nova/conductor/manager.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"170c8fb36bdd81b2a85abd9deeec02e676968f48","unresolved":false,"context_lines":[{"line_number":1007,"context_line":"                if recreate:"},{"line_number":1008,"context_line":"                    # NOTE(sbauza): Augment the RequestSpec object by excluding"},{"line_number":1009,"context_line":"                    # the source host for avoiding the scheduler to pick it"},{"line_number":1010,"context_line":"                    request_spec.ignore_hosts \u003d [instance.host]"},{"line_number":1011,"context_line":"                    # NOTE(sbauza): Force_hosts/nodes needs to be reset"},{"line_number":1012,"context_line":"                    # if we want to make sure that the next destination"},{"line_number":1013,"context_line":"                    # is not forced to be the original host"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_3e6da331","line":1010,"updated":"2019-03-26 14:23:48.000000000","message":"so we don\u0027t persist the existing ignored hosts. Fine.","commit_id":"391ea45fa36aac2aaad6af21f5c2af2086f393c0"}],"nova/objects/request_spec.py":[{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"c20840c4c513e236ac1c4e82a4fe7cf56f05a73c","unresolved":false,"context_lines":[{"line_number":601,"context_line":"            if \u0027instance_group\u0027 in spec and spec.instance_group:"},{"line_number":602,"context_line":"                spec.instance_group.members \u003d None"},{"line_number":603,"context_line":"                spec.instance_group.hosts \u003d None"},{"line_number":604,"context_line":"            # NOTE(mriedem): Don\u0027t persist retries, requested_destination,"},{"line_number":605,"context_line":"            # requested_resources or ignored hosts since those are per-request"},{"line_number":606,"context_line":"            for excluded in (\u0027retry\u0027, \u0027requested_destination\u0027,"},{"line_number":607,"context_line":"                             \u0027requested_resources\u0027, \u0027ignore_hosts\u0027):"},{"line_number":608,"context_line":"                if excluded in spec and getattr(spec, excluded):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_5e052610","line":605,"range":{"start_line":604,"start_character":29,"end_line":605,"end_character":78},"updated":"2019-03-25 16:02:21.000000000","message":"Maybe make it more generic so we don\u0027t have to update it next time we add one?  \"Don\u0027t persist these since they are per-request\"","commit_id":"03e8d196183829269521f6ddbd38f3edbacaefa3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"22af793199bbfb127cd3ea8127f0f5b59b29702e","unresolved":false,"context_lines":[{"line_number":601,"context_line":"            if \u0027instance_group\u0027 in spec and spec.instance_group:"},{"line_number":602,"context_line":"                spec.instance_group.members \u003d None"},{"line_number":603,"context_line":"                spec.instance_group.hosts \u003d None"},{"line_number":604,"context_line":"            # NOTE(mriedem): Don\u0027t persist retries, requested_destination,"},{"line_number":605,"context_line":"            # requested_resources or ignored hosts since those are per-request"},{"line_number":606,"context_line":"            for excluded in (\u0027retry\u0027, \u0027requested_destination\u0027,"},{"line_number":607,"context_line":"                             \u0027requested_resources\u0027, \u0027ignore_hosts\u0027):"},{"line_number":608,"context_line":"                if excluded in spec and getattr(spec, excluded):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_b93c64c8","line":605,"range":{"start_line":604,"start_character":29,"end_line":605,"end_character":78},"in_reply_to":"5fc1f717_5e052610","updated":"2019-03-25 16:22:02.000000000","message":"That has come up, but we have a weird mix of how these are used between this method and _from_db_object, i.e. note you\u0027ve got the 4 in a set here, but network_metadata is on its own here but part of a subset of this in _from_db_object and in _from_db_object retry and ignore_hosts are separate because they don\u0027t have default\u003dNone in the field definition...\n\nSo I don\u0027t think it\u0027s very easy to make this all generic right now until at least retry and ignore_hosts have default\u003dNone in their field definition, which is not backportable.","commit_id":"03e8d196183829269521f6ddbd38f3edbacaefa3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b5363000bed36cf9fd872e2fd13a4683f4fc1a4a","unresolved":false,"context_lines":[{"line_number":601,"context_line":"            if \u0027instance_group\u0027 in spec and spec.instance_group:"},{"line_number":602,"context_line":"                spec.instance_group.members \u003d None"},{"line_number":603,"context_line":"                spec.instance_group.hosts \u003d None"},{"line_number":604,"context_line":"            # NOTE(mriedem): Don\u0027t persist retries, requested_destination,"},{"line_number":605,"context_line":"            # requested_resources or ignored hosts since those are per-request"},{"line_number":606,"context_line":"            for excluded in (\u0027retry\u0027, \u0027requested_destination\u0027,"},{"line_number":607,"context_line":"                             \u0027requested_resources\u0027, \u0027ignore_hosts\u0027):"},{"line_number":608,"context_line":"                if excluded in spec and getattr(spec, excluded):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_550ae078","line":605,"range":{"start_line":604,"start_character":29,"end_line":605,"end_character":78},"in_reply_to":"5fc1f717_8a9583e6","updated":"2019-03-25 19:38:12.000000000","message":"OK, I\u0027d still consider that follow up fodder so this change doesn\u0027t get cluttered up, which I intend on backporting.","commit_id":"03e8d196183829269521f6ddbd38f3edbacaefa3"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e4593316bbdbfd0c1291d0afd9a95ea25b12745e","unresolved":false,"context_lines":[{"line_number":601,"context_line":"            if \u0027instance_group\u0027 in spec and spec.instance_group:"},{"line_number":602,"context_line":"                spec.instance_group.members \u003d None"},{"line_number":603,"context_line":"                spec.instance_group.hosts \u003d None"},{"line_number":604,"context_line":"            # NOTE(mriedem): Don\u0027t persist retries, requested_destination,"},{"line_number":605,"context_line":"            # requested_resources or ignored hosts since those are per-request"},{"line_number":606,"context_line":"            for excluded in (\u0027retry\u0027, \u0027requested_destination\u0027,"},{"line_number":607,"context_line":"                             \u0027requested_resources\u0027, \u0027ignore_hosts\u0027):"},{"line_number":608,"context_line":"                if excluded in spec and getattr(spec, excluded):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_8a9583e6","line":605,"range":{"start_line":604,"start_character":29,"end_line":605,"end_character":78},"in_reply_to":"5fc1f717_b93c64c8","updated":"2019-03-25 18:51:31.000000000","message":"Just to replicate the IRC convo here, changing (or adding) a default\u003d value on an object shouldn\u0027t affect the backportability. It doesn\u0027t affect the wire format of the object, and nothing on the other end of an RPC conversation should break if a different default is used for a field with no value specified.","commit_id":"03e8d196183829269521f6ddbd38f3edbacaefa3"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"170c8fb36bdd81b2a85abd9deeec02e676968f48","unresolved":false,"context_lines":[{"line_number":537,"context_line":"            elif key in (\u0027retry\u0027, \u0027ignore_hosts\u0027):"},{"line_number":538,"context_line":"                # NOTE(takashin): Do not override the \u0027retry\u0027 or \u0027ignore_hosts\u0027"},{"line_number":539,"context_line":"                # fields which are not persisted. They are not lazy-loadable"},{"line_number":540,"context_line":"                # fields. If they are not set, set None."},{"line_number":541,"context_line":"                if not spec.obj_attr_is_set(key):"},{"line_number":542,"context_line":"                    setattr(spec, key, None)"},{"line_number":543,"context_line":"            elif key in spec_obj:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_de681ff6","line":540,"updated":"2019-03-26 14:23:48.000000000","message":"we still need the above because of existing records for RequestSpecs. Cool with me.","commit_id":"391ea45fa36aac2aaad6af21f5c2af2086f393c0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"08df5eaf032063f0d43990386ddfb5fe2e9ffe16","unresolved":false,"context_lines":[{"line_number":539,"context_line":"                # fields which are not persisted. They are not lazy-loadable"},{"line_number":540,"context_line":"                # fields. If they are not set, set None."},{"line_number":541,"context_line":"                if not spec.obj_attr_is_set(key):"},{"line_number":542,"context_line":"                    setattr(spec, key, None)"},{"line_number":543,"context_line":"            elif key in spec_obj:"},{"line_number":544,"context_line":"                setattr(spec, key, getattr(spec_obj, key))"},{"line_number":545,"context_line":"        spec._context \u003d context"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_38ceb25b","line":542,"range":{"start_line":542,"start_character":39,"end_line":542,"end_character":43},"updated":"2019-04-01 13:42:30.000000000","message":"nit: this is fine but ignore_hosts probably should default to []. that said i think this will also work.\nbecause of \nhttps://review.openstack.org/#/c/647512/4/nova/conductor/manager.py\nso i dont have an issue with defaulting it to None since the field is declared nullable and therefor any code that uses it should be able to deal with None.\n\nhttps://github.com/openstack/nova/blob/95a87bce9fa7575c172a7d06344fd3cd070db587/nova/objects/request_spec.py#L70","commit_id":"391ea45fa36aac2aaad6af21f5c2af2086f393c0"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"a2829795ff89b148744e43a4935402f45e82550c","unresolved":false,"context_lines":[{"line_number":539,"context_line":"                # fields which are not persisted. They are not lazy-loadable"},{"line_number":540,"context_line":"                # fields. If they are not set, set None."},{"line_number":541,"context_line":"                if not spec.obj_attr_is_set(key):"},{"line_number":542,"context_line":"                    setattr(spec, key, None)"},{"line_number":543,"context_line":"            elif key in spec_obj:"},{"line_number":544,"context_line":"                setattr(spec, key, getattr(spec_obj, key))"},{"line_number":545,"context_line":"        spec._context \u003d context"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_e98e1a78","line":542,"range":{"start_line":542,"start_character":39,"end_line":542,"end_character":43},"in_reply_to":"5fc1f717_38ceb25b","updated":"2019-04-01 14:57:02.000000000","message":"Right, if the field is nullable, that\u0027s fine.","commit_id":"391ea45fa36aac2aaad6af21f5c2af2086f393c0"}],"nova/virt/fake.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"be487176eadaf0995da023bd1e8fa9435831b2ab","unresolved":false,"context_lines":[{"line_number":611,"context_line":"    def confirm_migration(self, context, migration, instance, network_info):"},{"line_number":612,"context_line":"        # Confirm migration cleans up the guest from the source host so just"},{"line_number":613,"context_line":"        # destroy the guest to remove it from the list of tracked instances."},{"line_number":614,"context_line":"        self.destroy(context, instance, network_info)"},{"line_number":615,"context_line":""},{"line_number":616,"context_line":"    def pre_live_migration(self, context, instance, block_device_info,"},{"line_number":617,"context_line":"                           network_info, disk_info, migrate_data):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_f61432eb","line":614,"updated":"2019-03-25 21:48:16.000000000","message":"Hmm, this must be causing test_boot_from_volume_larger_than_local_gb to fail:\n\n    2019-03-25 17:44:30,235 INFO [nova.compute.manager] Shelve offloading\n    2019-03-25 17:44:30,365 INFO [nova.compute.manager] Successfully reverted task state from shelving on failure for instance.\n    2019-03-25 17:44:30,368 ERROR [oslo_messaging.rpc.server] Exception during message handling\n    Traceback (most recent call last):\n      File \"/home/osboxes/git/nova/.tox/functional/lib/python2.7/site-packages/oslo_messaging/rpc/server.py\", line 166, in _process_incoming\n        res \u003d self.dispatcher.dispatch(message)\n      File \"/home/osboxes/git/nova/.tox/functional/lib/python2.7/site-packages/oslo_messaging/rpc/dispatcher.py\", line 265, in dispatch\n        return self._do_dispatch(endpoint, method, ctxt, args)\n      File \"/home/osboxes/git/nova/.tox/functional/lib/python2.7/site-packages/oslo_messaging/rpc/dispatcher.py\", line 194, in _do_dispatch\n        result \u003d func(ctxt, **new_args)\n      File \"nova/exception_wrapper.py\", line 79, in wrapped\n        function_name, call_dict, binary, tb)\n      File \"/home/osboxes/git/nova/.tox/functional/lib/python2.7/site-packages/oslo_utils/excutils.py\", line 220, in __exit__\n        self.force_reraise()\n      File \"/home/osboxes/git/nova/.tox/functional/lib/python2.7/site-packages/oslo_utils/excutils.py\", line 196, in force_reraise\n        six.reraise(self.type_, self.value, self.tb)\n      File \"nova/exception_wrapper.py\", line 69, in wrapped\n        return f(self, context, *args, **kw)\n      File \"nova/compute/manager.py\", line 186, in decorated_function\n        \"Error: %s\", e, instance\u003dinstance)\n      File \"/home/osboxes/git/nova/.tox/functional/lib/python2.7/site-packages/oslo_utils/excutils.py\", line 220, in __exit__\n        self.force_reraise()\n      File \"/home/osboxes/git/nova/.tox/functional/lib/python2.7/site-packages/oslo_utils/excutils.py\", line 196, in force_reraise\n        six.reraise(self.type_, self.value, self.tb)\n      File \"nova/compute/manager.py\", line 156, in decorated_function\n        return function(self, context, *args, **kwargs)\n      File \"nova/compute/utils.py\", line 1323, in decorated_function\n        return function(self, context, *args, **kwargs)\n      File \"nova/compute/manager.py\", line 202, in decorated_function\n        return function(self, context, *args, **kwargs)\n      File \"nova/compute/manager.py\", line 5061, in shelve_offload_instance\n        do_shelve_offload_instance()\n      File \"/home/osboxes/git/nova/.tox/functional/lib/python2.7/site-packages/oslo_concurrency/lockutils.py\", line 328, in inner\n        return f(*args, **kwargs)\n      File \"nova/compute/manager.py\", line 5060, in do_shelve_offload_instance\n        self._shelve_offload_instance(context, instance, clean_shutdown)\n      File \"nova/compute/manager.py\", line 5075, in _shelve_offload_instance\n        self._power_off_instance(context, instance, clean_shutdown)\n      File \"nova/compute/manager.py\", line 2567, in _power_off_instance\n        self.driver.power_off(instance, timeout, retry_interval)\n      File \"nova/virt/fake.py\", line 270, in power_off\n        raise exception.InstanceNotFound(instance_id\u003dinstance.uuid)\n    InstanceNotFound: Instance 7706fbc0-29be-4802-8fa4-b9985c26142b could not be found.","commit_id":"6edc46a90574382bc86765f4c619a8296584c70c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"170c8fb36bdd81b2a85abd9deeec02e676968f48","unresolved":false,"context_lines":[{"line_number":613,"context_line":"        # destroy the guest to remove it from the list of tracked instances"},{"line_number":614,"context_line":"        # unless it is a same-host resize."},{"line_number":615,"context_line":"        if migration.source_compute !\u003d migration.dest_compute:"},{"line_number":616,"context_line":"            self.destroy(context, instance, network_info)"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"    def pre_live_migration(self, context, instance, block_device_info,"},{"line_number":619,"context_line":"                           network_info, disk_info, migrate_data):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_7e100b5a","line":616,"updated":"2019-03-26 14:23:48.000000000","message":"A bit unrelated to the change, but looking at PS3, I understand why you modified it.\n\nWe could have had a specific change for the above but I\u0027m fine with squashing it.","commit_id":"391ea45fa36aac2aaad6af21f5c2af2086f393c0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f4a6784c759083f46e6af4dcf3b972aa89c693b9","unresolved":false,"context_lines":[{"line_number":613,"context_line":"        # destroy the guest to remove it from the list of tracked instances"},{"line_number":614,"context_line":"        # unless it is a same-host resize."},{"line_number":615,"context_line":"        if migration.source_compute !\u003d migration.dest_compute:"},{"line_number":616,"context_line":"            self.destroy(context, instance, network_info)"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"    def pre_live_migration(self, context, instance, block_device_info,"},{"line_number":619,"context_line":"                           network_info, disk_info, migrate_data):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_a2be4d62","line":616,"in_reply_to":"5fc1f717_7e100b5a","updated":"2019-03-26 19:45:51.000000000","message":"It\u0027s needed for the functional test as noted in the commit message.","commit_id":"391ea45fa36aac2aaad6af21f5c2af2086f393c0"}]}
