)]}'
{"nova/objects/request_spec.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e62561053a2b3a7742755c00abea8b2f489c5d3a","unresolved":false,"context_lines":[{"line_number":540,"context_line":"                # NOTE(takashin): Do not override the \u0027retry\u0027 field"},{"line_number":541,"context_line":"                # which is not persisted. It is not lazy-loadable field."},{"line_number":542,"context_line":"                # If it is not set, set default None."},{"line_number":543,"context_line":"                spec.obj_set_defaults(\u0027retry\u0027)"},{"line_number":544,"context_line":"            elif key in spec_obj:"},{"line_number":545,"context_line":"                setattr(spec, key, getattr(spec_obj, key))"},{"line_number":546,"context_line":"        spec._context \u003d context"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_0b252bab","line":543,"updated":"2019-03-12 19:32:57.000000000","message":"I\u0027m not sure if Dan wanted the others:\n\n   (\u0027requested_destination\u0027, \u0027requested_resources\u0027, \u0027network_metadata\u0027)\n\nhandled similarly in here or not.","commit_id":"9844239fdaf4da08bef05941463c6570c082238d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a885ced90021dfe0439295e216dd19abffc5d642","unresolved":false,"context_lines":[{"line_number":540,"context_line":"                # NOTE(takashin): Do not override the \u0027retry\u0027 field"},{"line_number":541,"context_line":"                # which is not persisted. It is not lazy-loadable field."},{"line_number":542,"context_line":"                # If it is not set, set default None."},{"line_number":543,"context_line":"                spec.obj_set_defaults(\u0027retry\u0027)"},{"line_number":544,"context_line":"            elif key in spec_obj:"},{"line_number":545,"context_line":"                setattr(spec, key, getattr(spec_obj, key))"},{"line_number":546,"context_line":"        spec._context \u003d context"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_97ff7033","line":543,"in_reply_to":"5fc1f717_0b252bab","updated":"2019-06-18 16:15:38.000000000","message":"Yeah, I think we should.","commit_id":"9844239fdaf4da08bef05941463c6570c082238d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6db6e2b867c1dee05228529785f28e1c8ed15e80","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    # Version 1.11: Added is_bfv"},{"line_number":53,"context_line":"    # Version 1.12: Added requested_resources"},{"line_number":54,"context_line":"    # Version 1.13: Add default\u003dNone in retry and ignore_hosts"},{"line_number":55,"context_line":"    #               Add default\u003dNone and nullable\u003dTrue in network_metadata"},{"line_number":56,"context_line":"    VERSION \u003d \u00271.13\u0027"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":17,"id":"9fb8cfa7_57a7b850","line":55,"updated":"2019-06-18 16:19:52.000000000","message":"We shouldn\u0027t need to bump the version to change the default, AFAIK. Did you do this because you think it\u0027s necessary or because the hash changed in the test? Even if the latter, I don\u0027t think it matters to anything on the other side of RPC what the default is, so we could probably just cheat on the hash (if needed). But, see below.","commit_id":"01d23a73668aeab1a41b5a1b1365ea972823c03f"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"b23284728b67069664b061bb468cf62259bdec26","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    # Version 1.11: Added is_bfv"},{"line_number":53,"context_line":"    # Version 1.12: Added requested_resources"},{"line_number":54,"context_line":"    # Version 1.13: Add default\u003dNone in retry and ignore_hosts"},{"line_number":55,"context_line":"    #               Add default\u003dNone and nullable\u003dTrue in network_metadata"},{"line_number":56,"context_line":"    VERSION \u003d \u00271.13\u0027"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":17,"id":"9fb8cfa7_96820900","line":55,"in_reply_to":"9fb8cfa7_57a7b850","updated":"2019-06-19 02:54:00.000000000","message":"Done","commit_id":"01d23a73668aeab1a41b5a1b1365ea972823c03f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6db6e2b867c1dee05228529785f28e1c8ed15e80","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        \u0027instance_uuid\u0027: fields.UUIDField(),"},{"line_number":93,"context_line":"        \u0027security_groups\u0027: fields.ObjectField(\u0027SecurityGroupList\u0027),"},{"line_number":94,"context_line":"        \u0027network_metadata\u0027: fields.ObjectField(\u0027NetworkMetadata\u0027,"},{"line_number":95,"context_line":"                                               nullable\u003dTrue, default\u003dNone),"},{"line_number":96,"context_line":"        \u0027is_bfv\u0027: fields.BooleanField(),"},{"line_number":97,"context_line":"        # NOTE(gibi): Eventually we want to store every resource request as"},{"line_number":98,"context_line":"        # RequestGroup objects here. However currently the flavor based"}],"source_content_type":"text/x-python","patch_set":17,"id":"9fb8cfa7_d77088df","line":95,"updated":"2019-06-18 16:19:52.000000000","message":"Erm, I don\u0027t really like this having to go to nullable and didn\u0027t think about it when looking at the earlier patchset.\n\nI tend to think we should not make this nullable just so we can handle it with set_default. Either we can make the default be an empty object, or just not do the set_default thing on this field and continue to handle it like we were before and skip it.","commit_id":"01d23a73668aeab1a41b5a1b1365ea972823c03f"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"b23284728b67069664b061bb468cf62259bdec26","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        \u0027instance_uuid\u0027: fields.UUIDField(),"},{"line_number":93,"context_line":"        \u0027security_groups\u0027: fields.ObjectField(\u0027SecurityGroupList\u0027),"},{"line_number":94,"context_line":"        \u0027network_metadata\u0027: fields.ObjectField(\u0027NetworkMetadata\u0027,"},{"line_number":95,"context_line":"                                               nullable\u003dTrue, default\u003dNone),"},{"line_number":96,"context_line":"        \u0027is_bfv\u0027: fields.BooleanField(),"},{"line_number":97,"context_line":"        # NOTE(gibi): Eventually we want to store every resource request as"},{"line_number":98,"context_line":"        # RequestGroup objects here. However currently the flavor based"}],"source_content_type":"text/x-python","patch_set":17,"id":"9fb8cfa7_b6870d10","line":95,"in_reply_to":"9fb8cfa7_d77088df","updated":"2019-06-19 02:54:00.000000000","message":"Done","commit_id":"01d23a73668aeab1a41b5a1b1365ea972823c03f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a90aba1ea2947d9e6e802ac544263144df7864cf","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            return"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        if attrname \u003d\u003d \u0027network_metadata\u0027:"},{"line_number":135,"context_line":"            self.network_metadata \u003d objects.NetworkMetadata("},{"line_number":136,"context_line":"                physnets\u003dset(), tunneled\u003dFalse)"},{"line_number":137,"context_line":"            return"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"9fb8cfa7_4a505d33","side":"PARENT","line":135,"updated":"2019-06-19 13:50:13.000000000","message":"This creates a new object every time it gets run, whereas the new code on L92 creates one object at import time and lets everything else use that one object.","commit_id":"65ffb498b84f5ef9ec11d840422f1982a06c8945"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a90aba1ea2947d9e6e802ac544263144df7864cf","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        \u0027instance_uuid\u0027: fields.UUIDField(),"},{"line_number":91,"context_line":"        \u0027security_groups\u0027: fields.ObjectField(\u0027SecurityGroupList\u0027),"},{"line_number":92,"context_line":"        \u0027network_metadata\u0027: fields.ObjectField(\u0027NetworkMetadata\u0027,"},{"line_number":93,"context_line":"                                               default\u003dobjects.NetworkMetadata("},{"line_number":94,"context_line":"                                                   physnets\u003dset(),"},{"line_number":95,"context_line":"                                                   tunneled\u003dFalse)),"},{"line_number":96,"context_line":"        \u0027is_bfv\u0027: fields.BooleanField(),"},{"line_number":97,"context_line":"        # NOTE(gibi): Eventually we want to store every resource request as"},{"line_number":98,"context_line":"        # RequestGroup objects here. However currently the flavor based"}],"source_content_type":"text/x-python","patch_set":18,"id":"9fb8cfa7_aa7559ce","line":95,"range":{"start_line":93,"start_character":47,"end_line":95,"end_character":66},"updated":"2019-06-19 13:50:13.000000000","message":"Unfortunately, I don\u0027t think we can do this. Just like mutable default arguments on method calls, this will end up with every object in the system using _the_same_ NetworkMetadata object as default, which could cause some cross-thread conflicts at times. I think we need to, as I said, go back to handling this field in the way it was before (i.e. old L135).","commit_id":"b75f05939b17affc694e5f09380123cb8b497cec"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"1c69bb126bf614200e28d3abbd6df1b189a81f00","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        \u0027instance_uuid\u0027: fields.UUIDField(),"},{"line_number":91,"context_line":"        \u0027security_groups\u0027: fields.ObjectField(\u0027SecurityGroupList\u0027),"},{"line_number":92,"context_line":"        \u0027network_metadata\u0027: fields.ObjectField(\u0027NetworkMetadata\u0027,"},{"line_number":93,"context_line":"                                               default\u003dobjects.NetworkMetadata("},{"line_number":94,"context_line":"                                                   physnets\u003dset(),"},{"line_number":95,"context_line":"                                                   tunneled\u003dFalse)),"},{"line_number":96,"context_line":"        \u0027is_bfv\u0027: fields.BooleanField(),"},{"line_number":97,"context_line":"        # NOTE(gibi): Eventually we want to store every resource request as"},{"line_number":98,"context_line":"        # RequestGroup objects here. However currently the flavor based"}],"source_content_type":"text/x-python","patch_set":18,"id":"9fb8cfa7_3177623d","line":95,"range":{"start_line":93,"start_character":47,"end_line":95,"end_character":66},"in_reply_to":"9fb8cfa7_aa7559ce","updated":"2019-06-24 02:25:00.000000000","message":"Done","commit_id":"b75f05939b17affc694e5f09380123cb8b497cec"}],"nova/tests/functional/regressions/test_bug_1815153.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e62561053a2b3a7742755c00abea8b2f489c5d3a","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        # Live migrate a server with a target host."},{"line_number":155,"context_line":"        # If requested_destination is reset, the server is moved to a host"},{"line_number":156,"context_line":"        # that is not a requested target host."},{"line_number":157,"context_line":"        # If requested_destination is not reset, the server comes back to"},{"line_number":158,"context_line":"        # the original (source) host because the target host is down."},{"line_number":159,"context_line":"        self.api.post_server_action("},{"line_number":160,"context_line":"            server[\u0027id\u0027], {\u0027os-migrateLive\u0027: {\u0027host\u0027: target_host,"},{"line_number":161,"context_line":"                                              \u0027block_migration\u0027: \u0027auto\u0027}})"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_4b7ed4af","line":158,"range":{"start_line":157,"start_character":49,"end_line":158,"end_character":36},"updated":"2019-03-12 19:32:57.000000000","message":"I\u0027m not sure what this means - wouldn\u0027t we get a NoValidHost error from the scheduler since you can\u0027t live migrate to the source host. I guess you\u0027re saying scheduling fails so the live migration fails and the server is not moved, i.e. the instance remains on the source host. We can\u0027t read a fault from the API because the instance is not in ERROR status, but the migration record should have an error status. Anyway, I\u0027m just clarifying.","commit_id":"9844239fdaf4da08bef05941463c6570c082238d"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"22f943f2f006a78f24da0069c99a0c911a82eb66","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        # Live migrate a server with a target host."},{"line_number":155,"context_line":"        # If requested_destination is reset, the server is moved to a host"},{"line_number":156,"context_line":"        # that is not a requested target host."},{"line_number":157,"context_line":"        # If requested_destination is not reset, the server comes back to"},{"line_number":158,"context_line":"        # the original (source) host because the target host is down."},{"line_number":159,"context_line":"        self.api.post_server_action("},{"line_number":160,"context_line":"            server[\u0027id\u0027], {\u0027os-migrateLive\u0027: {\u0027host\u0027: target_host,"},{"line_number":161,"context_line":"                                              \u0027block_migration\u0027: \u0027auto\u0027}})"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_7a8b6067","line":158,"range":{"start_line":157,"start_character":49,"end_line":158,"end_character":36},"in_reply_to":"5fc1f717_4b7ed4af","updated":"2019-03-25 06:58:33.000000000","message":"Done","commit_id":"9844239fdaf4da08bef05941463c6570c082238d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"4cd3a84afff7dfb1a048fc702d1a3e15299519c2","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        # If requested_destination is not reset, the server comes back to"},{"line_number":158,"context_line":"        # the original (source) host because the target host is down."},{"line_number":159,"context_line":"        self.api.post_server_action("},{"line_number":160,"context_line":"            server[\u0027id\u0027], {\u0027os-migrateLive\u0027: {\u0027host\u0027: target_host,"},{"line_number":161,"context_line":"                                              \u0027block_migration\u0027: \u0027auto\u0027}})"},{"line_number":162,"context_line":"        expected_params \u003d {\u0027OS-EXT-SRV-ATTR:host\u0027: original_host,"},{"line_number":163,"context_line":"                           \u0027status\u0027: \u0027ACTIVE\u0027}"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_fb5fd10b","line":160,"range":{"start_line":160,"start_character":47,"end_line":160,"end_character":66},"updated":"2019-03-06 07:57:48.000000000","message":"I thought what you are adding is the case that no target_host is provided? as your changes in doc string?","commit_id":"9844239fdaf4da08bef05941463c6570c082238d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"2b8fcdd6d1df7bdb6cdfff8435201b6417126ec5","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        # If requested_destination is not reset, the server comes back to"},{"line_number":158,"context_line":"        # the original (source) host because the target host is down."},{"line_number":159,"context_line":"        self.api.post_server_action("},{"line_number":160,"context_line":"            server[\u0027id\u0027], {\u0027os-migrateLive\u0027: {\u0027host\u0027: target_host,"},{"line_number":161,"context_line":"                                              \u0027block_migration\u0027: \u0027auto\u0027}})"},{"line_number":162,"context_line":"        expected_params \u003d {\u0027OS-EXT-SRV-ATTR:host\u0027: original_host,"},{"line_number":163,"context_line":"                           \u0027status\u0027: \u0027ACTIVE\u0027}"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_db7535fc","line":160,"range":{"start_line":160,"start_character":47,"end_line":160,"end_character":66},"in_reply_to":"5fc1f717_bb2f09f5","updated":"2019-03-06 08:23:46.000000000","message":"Oh, I see, the comment seems makes sense","commit_id":"9844239fdaf4da08bef05941463c6570c082238d"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"3ff5147cb910747a6515b75352868ccdfc757094","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        # If requested_destination is not reset, the server comes back to"},{"line_number":158,"context_line":"        # the original (source) host because the target host is down."},{"line_number":159,"context_line":"        self.api.post_server_action("},{"line_number":160,"context_line":"            server[\u0027id\u0027], {\u0027os-migrateLive\u0027: {\u0027host\u0027: target_host,"},{"line_number":161,"context_line":"                                              \u0027block_migration\u0027: \u0027auto\u0027}})"},{"line_number":162,"context_line":"        expected_params \u003d {\u0027OS-EXT-SRV-ATTR:host\u0027: original_host,"},{"line_number":163,"context_line":"                           \u0027status\u0027: \u0027ACTIVE\u0027}"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_bb2f09f5","line":160,"range":{"start_line":160,"start_character":47,"end_line":160,"end_character":66},"in_reply_to":"5fc1f717_fb5fd10b","updated":"2019-03-06 08:20:42.000000000","message":"I added \"Live migration with a target host without a force flag\" case.\nIn that case, requested_destination is set in a request spec.","commit_id":"9844239fdaf4da08bef05941463c6570c082238d"}]}
