)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"370a40058e6512dc086cfba22b708f402eac447c","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Add a routed networks scheduler pre-filter"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"As explained in the spec, in order to support routed networks, we need"},{"line_number":10,"context_line":"to add a new new scheduler pre-filter with a specific conf option"},{"line_number":11,"context_line":"so we can then look at the nova aggregates related to the segments."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Since this pre-filter is called every time we verify the scheduler,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"cf914849_e8ac9400","line":10,"range":{"start_line":10,"start_character":9,"end_line":10,"end_character":12},"updated":"2021-02-08 12:10:28.000000000","message":"nit: drop one of the \"new\"","commit_id":"3f375d8db9d851cb6d19cf5e1cdffba195894c56"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4fbe1792376a3cd47d544facb11597becb6afe13","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add a routed networks scheduler pre-filter"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"As explained in the spec, in order to support routed networks, we need"},{"line_number":10,"context_line":"to add a new new scheduler pre-filter with a specific conf option"},{"line_number":11,"context_line":"so we can then look at the nova aggregates related to the segments."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Since this pre-filter is called every time we verify the scheduler,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"bd8c961e_d47b89fd","line":10,"range":{"start_line":10,"start_character":9,"end_line":10,"end_character":12},"in_reply_to":"cf914849_e8ac9400","updated":"2021-02-08 14:27:24.000000000","message":"Done","commit_id":"3f375d8db9d851cb6d19cf5e1cdffba195894c56"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b80d5820ff821d6ceb57156fbf89dfe8868e28e3","unresolved":true,"context_lines":[{"line_number":14,"context_line":"that means that when we move instances, we should be also be able"},{"line_number":15,"context_line":"to only support hosts that are in the same related aggregate."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"NOTE(sbauza) : We\u0027re just setting admin_api veriable in the"},{"line_number":18,"context_line":"integrated helpers as it\u0027s used by _get_provider_uuid_by_host()"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Implements: blueprint routed-networks-scheduling"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3b70993d_5540d727","line":17,"range":{"start_line":17,"start_character":44,"end_line":17,"end_character":52},"updated":"2021-02-18 12:23:06.000000000","message":"variable","commit_id":"2b24434cf3a6ebd8d77cc94716232fda812cc316"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"67f9d4c65ad1e1986b64254bd01c30950d1e2dbc","unresolved":false,"context_lines":[{"line_number":14,"context_line":"that means that when we move instances, we should be also be able"},{"line_number":15,"context_line":"to only support hosts that are in the same related aggregate."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"NOTE(sbauza) : We\u0027re just setting admin_api veriable in the"},{"line_number":18,"context_line":"integrated helpers as it\u0027s used by _get_provider_uuid_by_host()"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Implements: blueprint routed-networks-scheduling"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"121719c6_775a95ad","line":17,"range":{"start_line":17,"start_character":44,"end_line":17,"end_character":52},"in_reply_to":"3b70993d_5540d727","updated":"2021-02-18 14:38:13.000000000","message":"Ack","commit_id":"2b24434cf3a6ebd8d77cc94716232fda812cc316"}],"nova/conf/scheduler.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"07e2a916ebb2562c0d9c18d8408d2a10eb972941","unresolved":true,"context_lines":[{"line_number":138,"context_line":"number of CPUs available if using the \"filter_scheduler\" scheduler driver,"},{"line_number":139,"context_line":"otherwise the default will be 1."},{"line_number":140,"context_line":"\"\"\"),"},{"line_number":141,"context_line":"    cfg.BoolOpt(\"query_placement_for_routed_network_aggregates\","},{"line_number":142,"context_line":"                default\u003dFalse,"},{"line_number":143,"context_line":"                help\u003d\"\"\""},{"line_number":144,"context_line":"Enable the scheduler to filter compute hosts affined to routed network segment"}],"source_content_type":"text/x-python","patch_set":15,"id":"86fec630_581c5a38","line":141,"updated":"2021-02-09 18:18:47.000000000","message":"Is there going to be a time where this should be on by default? If so, can we get a TODO and proposed date to toggle this (i.e. the Y release)?","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8abd713f3c255659d824a4ea02d3f86b564f57cd","unresolved":false,"context_lines":[{"line_number":138,"context_line":"number of CPUs available if using the \"filter_scheduler\" scheduler driver,"},{"line_number":139,"context_line":"otherwise the default will be 1."},{"line_number":140,"context_line":"\"\"\"),"},{"line_number":141,"context_line":"    cfg.BoolOpt(\"query_placement_for_routed_network_aggregates\","},{"line_number":142,"context_line":"                default\u003dFalse,"},{"line_number":143,"context_line":"                help\u003d\"\"\""},{"line_number":144,"context_line":"Enable the scheduler to filter compute hosts affined to routed network segment"}],"source_content_type":"text/x-python","patch_set":15,"id":"1ffad6c7_b57bd88e","line":141,"in_reply_to":"61f36902_de613b93","updated":"2021-02-17 14:48:22.000000000","message":"Ack","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"98f43dbbb2bdb4547bb0596fba31006073da3c0e","unresolved":false,"context_lines":[{"line_number":138,"context_line":"number of CPUs available if using the \"filter_scheduler\" scheduler driver,"},{"line_number":139,"context_line":"otherwise the default will be 1."},{"line_number":140,"context_line":"\"\"\"),"},{"line_number":141,"context_line":"    cfg.BoolOpt(\"query_placement_for_routed_network_aggregates\","},{"line_number":142,"context_line":"                default\u003dFalse,"},{"line_number":143,"context_line":"                help\u003d\"\"\""},{"line_number":144,"context_line":"Enable the scheduler to filter compute hosts affined to routed network segment"}],"source_content_type":"text/x-python","patch_set":15,"id":"61f36902_de613b93","line":141,"in_reply_to":"86fec630_581c5a38","updated":"2021-02-16 14:45:48.000000000","message":"Good question, we haven\u0027t discussed this yet. FWIW, I don\u0027t see why we should support it by default as the Neutron API related extension is not default too.\n\nLet\u0027s leave this as it is, and we could discuss about any target during a X-project PTG session with Neutron if we\u0027re asked.","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"}],"nova/network/neutron.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ec77202bb03dd3acc6d8160ecfc270ad12f4eeec","unresolved":true,"context_lines":[{"line_number":3521,"context_line":"        :returns: The list of segment UUIDs of the network or an empty list if"},{"line_number":3522,"context_line":"            Multi Provider Network extension is enabled in Neutron."},{"line_number":3523,"context_line":"        \"\"\""},{"line_number":3524,"context_line":"        if self._has_multi_provider_extension(context):"},{"line_number":3525,"context_line":"            client \u003d _get_ksa_client(context, admin\u003dTrue)"},{"line_number":3526,"context_line":"            resp \u003d self._get_segment_ids_for_network("},{"line_number":3527,"context_line":"                context, client, network_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"31a4729a_d25da88f","line":3524,"range":{"start_line":3524,"start_character":11,"end_line":3524,"end_character":55},"updated":"2021-01-07 18:51:57.000000000","message":"this should be the segments extension\nhttps://github.com/openstack/neutron-lib/blob/master/neutron_lib/api/definitions/segment.py#L29\nnot the multi provider net extionsion \nhttps://github.com/openstack/neutron-lib/blob/master/neutron_lib/api/definitions/multiprovidernet.py","commit_id":"96078059731cc38b52d67df8935c08bbcff3b11a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ec77202bb03dd3acc6d8160ecfc270ad12f4eeec","unresolved":true,"context_lines":[{"line_number":3516,"context_line":"        \"\"\""},{"line_number":3517,"context_line":"        return client.get("},{"line_number":3518,"context_line":"            \u0027/v2.0/segments?network_id\u003d%s\u0026fields\u003did\u0027 % network_id,"},{"line_number":3519,"context_line":"            raise_exc\u003dFalse, global_request_id\u003dcontext.global_id)"},{"line_number":3520,"context_line":""},{"line_number":3521,"context_line":""},{"line_number":3522,"context_line":"def _ensure_requested_network_ordering(accessor, unordered, preferred):"}],"source_content_type":"text/x-python","patch_set":6,"id":"b5254382_eae8e7ff","line":3519,"range":{"start_line":3519,"start_character":29,"end_line":3519,"end_character":64},"updated":"2021-01-07 18:51:57.000000000","message":"is this so we can trace calls to neutron form a call the nova.\n\ne.g. so that they all share the same request id when debugging?","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1f18a686bb48091bf9c224ea47bc516e5c5a7e4f","unresolved":true,"context_lines":[{"line_number":3516,"context_line":"        \"\"\""},{"line_number":3517,"context_line":"        return client.get("},{"line_number":3518,"context_line":"            \u0027/v2.0/segments?network_id\u003d%s\u0026fields\u003did\u0027 % network_id,"},{"line_number":3519,"context_line":"            raise_exc\u003dFalse, global_request_id\u003dcontext.global_id)"},{"line_number":3520,"context_line":""},{"line_number":3521,"context_line":""},{"line_number":3522,"context_line":"def _ensure_requested_network_ordering(accessor, unordered, preferred):"}],"source_content_type":"text/x-python","patch_set":6,"id":"72752d26_b320ff79","line":3519,"range":{"start_line":3519,"start_character":29,"end_line":3519,"end_character":64},"in_reply_to":"b5254382_eae8e7ff","updated":"2021-02-02 16:31:50.000000000","message":"indeed","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"}],"nova/objects/request_spec.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b91642447e8a1fadfae6e417eb5870f1ab3895c3","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                                                         default\u003dNone),"},{"line_number":112,"context_line":"        # NOTE(efried): This field won\u0027t be persisted."},{"line_number":113,"context_line":"        \u0027request_level_params\u0027: fields.ObjectField(\u0027RequestLevelParams\u0027),"},{"line_number":114,"context_line":"        # NOTE(sbauza); This field won\u0027t be persisted."},{"line_number":115,"context_line":"        \u0027requested_networks\u0027: fields.ObjectField(\u0027NetworkRequestList\u0027)"},{"line_number":116,"context_line":"    }"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_2f9ce659","line":114,"updated":"2020-09-04 15:44:58.000000000","message":"I would add a NOTE here that the NetworkRequest objects in this list are not incomplete during move operations. (Basically refer to the detailed comment in https://review.opendev.org/#/c/749068/2/nova/objects/request_spec.py@566 )","commit_id":"96078059731cc38b52d67df8935c08bbcff3b11a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b91642447e8a1fadfae6e417eb5870f1ab3895c3","unresolved":false,"context_lines":[{"line_number":546,"context_line":"            self.user_id \u003d instance.user_id"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    def ensure_network_information(self, instance):"},{"line_number":549,"context_line":"        if not (instance.info_cache and instance.info_cache.network_info):"},{"line_number":550,"context_line":"            return"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"        physnets \u003d set([])"},{"line_number":553,"context_line":"        tunneled \u003d True"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_afd47620","line":550,"range":{"start_line":549,"start_character":0,"end_line":550,"end_character":18},"updated":"2020-09-04 15:44:58.000000000","message":"This guard means that we return here during create. But that is cool a during create the compute.api will set the requested_networks field directly on the request spec.","commit_id":"96078059731cc38b52d67df8935c08bbcff3b11a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ec77202bb03dd3acc6d8160ecfc270ad12f4eeec","unresolved":true,"context_lines":[{"line_number":567,"context_line":"                \u0027tunneled\u0027, False)"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"            # We also want to recreate the original NetworkRequests"},{"line_number":570,"context_line":"            # TODO(sbauza): We miss tag and pci_request_id information that is"},{"line_number":571,"context_line":"            # not stored in the VIF model to fully provide all fields"},{"line_number":572,"context_line":"            # FIXME(sbauza): We can\u0027t also guess whether the user provided us"},{"line_number":573,"context_line":"            # a specific IP address to use for create, and which one."}],"source_content_type":"text/x-python","patch_set":6,"id":"fbc90997_b5a568c9","line":570,"range":{"start_line":570,"start_character":44,"end_line":570,"end_character":58},"updated":"2021-01-07 18:51:57.000000000","message":"adding the request id to the vif model object in the info cache may also have other uses specificity it might allow us to remove our dependence on using pci address for correlation in some move operation when trying to correlate interface to pci requests so extending it at a later date could be useful beyond this feature. so +1 but ya if you dont need it now no point in doing it in this patch.","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1f18a686bb48091bf9c224ea47bc516e5c5a7e4f","unresolved":true,"context_lines":[{"line_number":567,"context_line":"                \u0027tunneled\u0027, False)"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"            # We also want to recreate the original NetworkRequests"},{"line_number":570,"context_line":"            # TODO(sbauza): We miss tag and pci_request_id information that is"},{"line_number":571,"context_line":"            # not stored in the VIF model to fully provide all fields"},{"line_number":572,"context_line":"            # FIXME(sbauza): We can\u0027t also guess whether the user provided us"},{"line_number":573,"context_line":"            # a specific IP address to use for create, and which one."}],"source_content_type":"text/x-python","patch_set":6,"id":"33cc1a55_a2b63e5c","line":570,"range":{"start_line":570,"start_character":44,"end_line":570,"end_character":58},"in_reply_to":"fbc90997_b5a568c9","updated":"2021-02-02 16:31:50.000000000","message":"looks good for another change later.","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ec77202bb03dd3acc6d8160ecfc270ad12f4eeec","unresolved":true,"context_lines":[{"line_number":569,"context_line":"            # We also want to recreate the original NetworkRequests"},{"line_number":570,"context_line":"            # TODO(sbauza): We miss tag and pci_request_id information that is"},{"line_number":571,"context_line":"            # not stored in the VIF model to fully provide all fields"},{"line_number":572,"context_line":"            # FIXME(sbauza): We can\u0027t also guess whether the user provided us"},{"line_number":573,"context_line":"            # a specific IP address to use for create, and which one."},{"line_number":574,"context_line":"            nr_args \u003d {"},{"line_number":575,"context_line":"                \u0027network_id\u0027: vif[\u0027network\u0027][\u0027id\u0027],"},{"line_number":576,"context_line":"                \u0027port_id\u0027: vif[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"3d59669e_942543d5","line":573,"range":{"start_line":572,"start_character":12,"end_line":573,"end_character":69},"updated":"2021-01-07 18:51:57.000000000","message":"nit: im not sure that is relevant currently as i believe we currently require you to pre-create neutron ports and pass the port-id.\n\nthat said i know we want to make port creation by nova work out of the box fully eventually so it will be important to fix eventually so calling it out make sense.\n\nthis wont be needed however until we move port create form the compute node to the conductor or api. while nova creates ports on the compute node its too late for it to be relevant to influence scheduling.","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1f18a686bb48091bf9c224ea47bc516e5c5a7e4f","unresolved":true,"context_lines":[{"line_number":569,"context_line":"            # We also want to recreate the original NetworkRequests"},{"line_number":570,"context_line":"            # TODO(sbauza): We miss tag and pci_request_id information that is"},{"line_number":571,"context_line":"            # not stored in the VIF model to fully provide all fields"},{"line_number":572,"context_line":"            # FIXME(sbauza): We can\u0027t also guess whether the user provided us"},{"line_number":573,"context_line":"            # a specific IP address to use for create, and which one."},{"line_number":574,"context_line":"            nr_args \u003d {"},{"line_number":575,"context_line":"                \u0027network_id\u0027: vif[\u0027network\u0027][\u0027id\u0027],"},{"line_number":576,"context_line":"                \u0027port_id\u0027: vif[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"4a43b7c3_c4368724","line":573,"range":{"start_line":572,"start_character":12,"end_line":573,"end_character":69},"in_reply_to":"3d59669e_942543d5","updated":"2021-02-02 16:31:50.000000000","message":"ack","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"}],"nova/scheduler/request_filter.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b91642447e8a1fadfae6e417eb5870f1ab3895c3","unresolved":false,"context_lines":[{"line_number":271,"context_line":""},{"line_number":272,"context_line":"@trace_request_filter"},{"line_number":273,"context_line":"def routed_networks_filter(ctxt, request_spec):"},{"line_number":274,"context_line":"    \"\"\"Map requested nova availability zones to placement aggregates."},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    This will modify request_spec to request hosts in an aggregate that"},{"line_number":277,"context_line":"    matches the desired AZ of the user\u0027s request."},{"line_number":278,"context_line":"    \"\"\""},{"line_number":279,"context_line":"    if not CONF.scheduler.query_placement_for_routed_network_aggregates:"},{"line_number":280,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_6fd41eea","line":277,"range":{"start_line":274,"start_character":4,"end_line":277,"end_character":49},"updated":"2020-09-04 15:44:58.000000000","message":"copy paste","commit_id":"96078059731cc38b52d67df8935c08bbcff3b11a"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"48d1f0b0fabef041cfa91971726bb42de3c63ffc","unresolved":false,"context_lines":[{"line_number":271,"context_line":""},{"line_number":272,"context_line":"@trace_request_filter"},{"line_number":273,"context_line":"def routed_networks_filter(ctxt, request_spec):"},{"line_number":274,"context_line":"    \"\"\"Map requested nova availability zones to placement aggregates."},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    This will modify request_spec to request hosts in an aggregate that"},{"line_number":277,"context_line":"    matches the desired AZ of the user\u0027s request."},{"line_number":278,"context_line":"    \"\"\""},{"line_number":279,"context_line":"    if not CONF.scheduler.query_placement_for_routed_network_aggregates:"},{"line_number":280,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf82bc38_47477817","line":277,"range":{"start_line":274,"start_character":4,"end_line":277,"end_character":49},"in_reply_to":"9f560f44_6fd41eea","updated":"2020-12-10 16:36:34.000000000","message":"Whoops 😊","commit_id":"96078059731cc38b52d67df8935c08bbcff3b11a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b91642447e8a1fadfae6e417eb5870f1ab3895c3","unresolved":false,"context_lines":[{"line_number":287,"context_line":"    if (not requested_networks or"},{"line_number":288,"context_line":"            requested_networks.auto_allocate or"},{"line_number":289,"context_line":"            requested_networks.no_allocate):"},{"line_number":290,"context_line":"        # NOTE(sbauza): Since it will be allocated late,"},{"line_number":291,"context_line":"        # we just need to not ask for a specific compute."},{"line_number":292,"context_line":"        # For a move operation, we will no longer have the late allocation"},{"line_number":293,"context_line":"        # request."}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_4f6b1a1e","line":290,"range":{"start_line":290,"start_character":24,"end_line":290,"end_character":56},"updated":"2020-09-04 15:44:58.000000000","message":"is it allocated on the compute after scheduling?","commit_id":"96078059731cc38b52d67df8935c08bbcff3b11a"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"48d1f0b0fabef041cfa91971726bb42de3c63ffc","unresolved":false,"context_lines":[{"line_number":287,"context_line":"    if (not requested_networks or"},{"line_number":288,"context_line":"            requested_networks.auto_allocate or"},{"line_number":289,"context_line":"            requested_networks.no_allocate):"},{"line_number":290,"context_line":"        # NOTE(sbauza): Since it will be allocated late,"},{"line_number":291,"context_line":"        # we just need to not ask for a specific compute."},{"line_number":292,"context_line":"        # For a move operation, we will no longer have the late allocation"},{"line_number":293,"context_line":"        # request."}],"source_content_type":"text/x-python","patch_set":2,"id":"29e3ca7a_37aeea4f","line":290,"range":{"start_line":290,"start_character":24,"end_line":290,"end_character":56},"in_reply_to":"9f560f44_4f6b1a1e","updated":"2020-12-10 16:36:34.000000000","message":"Rewritten for better explanation","commit_id":"96078059731cc38b52d67df8935c08bbcff3b11a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b91642447e8a1fadfae6e417eb5870f1ab3895c3","unresolved":false,"context_lines":[{"line_number":302,"context_line":"    report_api \u003d report.SchedulerReportClient()"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    required_aggregates \u003d []"},{"line_number":305,"context_line":"    for requested_network in requested_networks or []:"},{"line_number":306,"context_line":"        network_id \u003d None"},{"line_number":307,"context_line":"        # Check for a specifically requested network ID."},{"line_number":308,"context_line":"        if \"network_id\" in requested_network and requested_network.network_id:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_af63d640","line":305,"range":{"start_line":305,"start_character":29,"end_line":305,"end_character":53},"updated":"2020-09-04 15:44:58.000000000","message":"L287 already guarded against None","commit_id":"96078059731cc38b52d67df8935c08bbcff3b11a"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"48d1f0b0fabef041cfa91971726bb42de3c63ffc","unresolved":false,"context_lines":[{"line_number":302,"context_line":"    report_api \u003d report.SchedulerReportClient()"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    required_aggregates \u003d []"},{"line_number":305,"context_line":"    for requested_network in requested_networks or []:"},{"line_number":306,"context_line":"        network_id \u003d None"},{"line_number":307,"context_line":"        # Check for a specifically requested network ID."},{"line_number":308,"context_line":"        if \"network_id\" in requested_network and requested_network.network_id:"}],"source_content_type":"text/x-python","patch_set":2,"id":"94657d61_89e3b050","line":305,"range":{"start_line":305,"start_character":29,"end_line":305,"end_character":53},"in_reply_to":"9f560f44_af63d640","updated":"2020-12-10 16:36:34.000000000","message":"Good point","commit_id":"96078059731cc38b52d67df8935c08bbcff3b11a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b91642447e8a1fadfae6e417eb5870f1ab3895c3","unresolved":false,"context_lines":[{"line_number":324,"context_line":"                          network_id)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    if not required_aggregates:"},{"line_number":327,"context_line":"        return False"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    request_spec.requested_destination.require_aggregates(required_aggregates)"},{"line_number":330,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_cfbc4a6e","line":327,"updated":"2020-09-04 15:44:58.000000000","message":"I think if L294 returns True then at this point we also need to return True as this function definitely did more if it reached L327 than if it only reached L294. But I can accept to return False from both L294 and L327","commit_id":"96078059731cc38b52d67df8935c08bbcff3b11a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ec77202bb03dd3acc6d8160ecfc270ad12f4eeec","unresolved":true,"context_lines":[{"line_number":313,"context_line":"                \"port\""},{"line_number":314,"context_line":"            ]"},{"line_number":315,"context_line":"            network_id \u003d port[\"network_id\"]"},{"line_number":316,"context_line":"        if network_id:"},{"line_number":317,"context_line":"            aggregates \u003d utils.get_aggregates_for_routed_network("},{"line_number":318,"context_line":"                ctxt, network_api, report_api, network_id)"},{"line_number":319,"context_line":"            if aggregates:"}],"source_content_type":"text/x-python","patch_set":6,"id":"842d1dd7_b70dd730","line":316,"range":{"start_line":316,"start_character":7,"end_line":316,"end_character":22},"updated":"2021-01-07 18:51:57.000000000","message":"nit: port always have networks.\nits a required attribute of the resource.\n\nhttps://github.com/openstack/neutron-lib/blob/master/neutron_lib/api/definitions/port.py#L45","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1f18a686bb48091bf9c224ea47bc516e5c5a7e4f","unresolved":true,"context_lines":[{"line_number":313,"context_line":"                \"port\""},{"line_number":314,"context_line":"            ]"},{"line_number":315,"context_line":"            network_id \u003d port[\"network_id\"]"},{"line_number":316,"context_line":"        if network_id:"},{"line_number":317,"context_line":"            aggregates \u003d utils.get_aggregates_for_routed_network("},{"line_number":318,"context_line":"                ctxt, network_api, report_api, network_id)"},{"line_number":319,"context_line":"            if aggregates:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5e0b1776_725f81ae","line":316,"range":{"start_line":316,"start_character":7,"end_line":316,"end_character":22},"in_reply_to":"842d1dd7_b70dd730","updated":"2021-02-02 16:31:50.000000000","message":"that\u0027s changed by the next rev","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"370a40058e6512dc086cfba22b708f402eac447c","unresolved":true,"context_lines":[{"line_number":279,"context_line":"    if not CONF.scheduler.query_placement_for_routed_network_aggregates:"},{"line_number":280,"context_line":"        return False"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    # NOTE(sbauza): On a create operation with no specific network request, we"},{"line_number":283,"context_line":"    # allocate the network only after scheduling when the nova-compute service"},{"line_number":284,"context_line":"    # calls Neutron. In this case, here we just want to accept any destination"},{"line_number":285,"context_line":"    # as fine."}],"source_content_type":"text/x-python","patch_set":12,"id":"19b60b35_dbf20fbe","line":282,"range":{"start_line":282,"start_character":20,"end_line":282,"end_character":74},"updated":"2021-02-08 12:10:28.000000000","message":"do you mean \"networks\": \"auto\" in the POST /servers request?","commit_id":"3f375d8db9d851cb6d19cf5e1cdffba195894c56"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4fbe1792376a3cd47d544facb11597becb6afe13","unresolved":true,"context_lines":[{"line_number":279,"context_line":"    if not CONF.scheduler.query_placement_for_routed_network_aggregates:"},{"line_number":280,"context_line":"        return False"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    # NOTE(sbauza): On a create operation with no specific network request, we"},{"line_number":283,"context_line":"    # allocate the network only after scheduling when the nova-compute service"},{"line_number":284,"context_line":"    # calls Neutron. In this case, here we just want to accept any destination"},{"line_number":285,"context_line":"    # as fine."}],"source_content_type":"text/x-python","patch_set":12,"id":"bdaa8898_e2ca44ab","line":282,"range":{"start_line":282,"start_character":20,"end_line":282,"end_character":74},"in_reply_to":"19b60b35_dbf20fbe","updated":"2021-02-08 14:27:24.000000000","message":"Indeed, I wanna tell if the user doesn\u0027t want to ask specific NICs when creating an instance.","commit_id":"3f375d8db9d851cb6d19cf5e1cdffba195894c56"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3a663ce81998f6780a9f8f08761fb6127a0b084a","unresolved":false,"context_lines":[{"line_number":279,"context_line":"    if not CONF.scheduler.query_placement_for_routed_network_aggregates:"},{"line_number":280,"context_line":"        return False"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    # NOTE(sbauza): On a create operation with no specific network request, we"},{"line_number":283,"context_line":"    # allocate the network only after scheduling when the nova-compute service"},{"line_number":284,"context_line":"    # calls Neutron. In this case, here we just want to accept any destination"},{"line_number":285,"context_line":"    # as fine."}],"source_content_type":"text/x-python","patch_set":12,"id":"cd8abd20_14a8b3e4","line":282,"range":{"start_line":282,"start_character":20,"end_line":282,"end_character":74},"in_reply_to":"bdaa8898_e2ca44ab","updated":"2021-02-08 17:15:48.000000000","message":"Ack","commit_id":"3f375d8db9d851cb6d19cf5e1cdffba195894c56"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"370a40058e6512dc086cfba22b708f402eac447c","unresolved":true,"context_lines":[{"line_number":309,"context_line":"            if port[\u0027fixed_ips\u0027]:"},{"line_number":310,"context_line":"                # The instance already exists with a related subnet. We need to"},{"line_number":311,"context_line":"                # stick on this subnet."},{"line_number":312,"context_line":"                # FIXME(sbauza): In case of multiple IPs, we could have more"},{"line_number":313,"context_line":"                # subnets than only one so we should look at all of them."},{"line_number":314,"context_line":"                subnet_id \u003d port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]"},{"line_number":315,"context_line":"                aggregates \u003d utils.get_aggregates_for_routed_subnet("}],"source_content_type":"text/x-python","patch_set":12,"id":"9fba37a2_6ac3e09f","line":312,"updated":"2021-02-08 12:10:28.000000000","message":"will there be a follow up to fix this? As far as I see in devstack we have ipv4 and ipv6 subnets created for the precreated networks.","commit_id":"3f375d8db9d851cb6d19cf5e1cdffba195894c56"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3a663ce81998f6780a9f8f08761fb6127a0b084a","unresolved":true,"context_lines":[{"line_number":309,"context_line":"            if port[\u0027fixed_ips\u0027]:"},{"line_number":310,"context_line":"                # The instance already exists with a related subnet. We need to"},{"line_number":311,"context_line":"                # stick on this subnet."},{"line_number":312,"context_line":"                # FIXME(sbauza): In case of multiple IPs, we could have more"},{"line_number":313,"context_line":"                # subnets than only one so we should look at all of them."},{"line_number":314,"context_line":"                subnet_id \u003d port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]"},{"line_number":315,"context_line":"                aggregates \u003d utils.get_aggregates_for_routed_subnet("}],"source_content_type":"text/x-python","patch_set":12,"id":"e3eb4b7a_3d08a1e6","line":312,"in_reply_to":"5d090422_b726e877","updated":"2021-02-08 17:15:48.000000000","message":"For me \"FIXME\" sounds like something is broken here. So at least we can leave a trace in the logs if there are multiple fixed ips which are pointing to different segments indirectly and we are selecting one of them. This could help the troubleshooting if such configuration happens.\n\nThinking further this means a port is connected to multiple network segments. Which feels invalid. We could always ask Sean :)","commit_id":"3f375d8db9d851cb6d19cf5e1cdffba195894c56"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4fbe1792376a3cd47d544facb11597becb6afe13","unresolved":true,"context_lines":[{"line_number":309,"context_line":"            if port[\u0027fixed_ips\u0027]:"},{"line_number":310,"context_line":"                # The instance already exists with a related subnet. We need to"},{"line_number":311,"context_line":"                # stick on this subnet."},{"line_number":312,"context_line":"                # FIXME(sbauza): In case of multiple IPs, we could have more"},{"line_number":313,"context_line":"                # subnets than only one so we should look at all of them."},{"line_number":314,"context_line":"                subnet_id \u003d port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]"},{"line_number":315,"context_line":"                aggregates \u003d utils.get_aggregates_for_routed_subnet("}],"source_content_type":"text/x-python","patch_set":12,"id":"5d090422_b726e877","line":312,"in_reply_to":"9fba37a2_6ac3e09f","updated":"2021-02-08 14:27:24.000000000","message":"I\u0027m not sure about this, that just means that the port is supporting both IPv4 and IPv6 but the both subnets should use the same segments, right?","commit_id":"3f375d8db9d851cb6d19cf5e1cdffba195894c56"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9ec95a5524f6c1c1843401ef4211325248d63214","unresolved":true,"context_lines":[{"line_number":309,"context_line":"            if port[\u0027fixed_ips\u0027]:"},{"line_number":310,"context_line":"                # The instance already exists with a related subnet. We need to"},{"line_number":311,"context_line":"                # stick on this subnet."},{"line_number":312,"context_line":"                # FIXME(sbauza): In case of multiple IPs, we could have more"},{"line_number":313,"context_line":"                # subnets than only one so we should look at all of them."},{"line_number":314,"context_line":"                subnet_id \u003d port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]"},{"line_number":315,"context_line":"                aggregates \u003d utils.get_aggregates_for_routed_subnet("}],"source_content_type":"text/x-python","patch_set":12,"id":"7a9ec0f3_af5105eb","line":312,"in_reply_to":"e3eb4b7a_3d08a1e6","updated":"2021-02-08 18:03:40.000000000","message":"i think this is an ok limiation for now that could be adress later.\n\ni think its valid for a port to have multiple fixed ips possible form different subnets but only if they are form teh same segment.\n\ngibi is correct that a port with multiple segments implies it is connected to multiple l2 broadcast domains/physnets which is not valid for a normal port.\n\n\nthe only possible excption i can think of to the rule that a port can be attached to at most one segment would be if you combined routed networks with vlan aware vms.\n\nhttps://specs.openstack.org/openstack/neutron-specs/specs/newton/vlan-aware-vms.html\n\nin such a configuration each sub port would be attached to at most 1 segment\nthe trunk port would then be connected (via a vswitch) to 2 segment.\none segment would be the native untagged packets and teh second or subsequent subports would be vlan tagged within the guests.\n\n\nwe never discussed vlan aware vms as a usecase in the routed networks spec and i think it is resonable to consider it out of scope at least for this release.\n\n\nhere are some exampls of some valid and invalid configs\n\nvalid: \n   port has  1 fixed ip (ip_allocation\u003ddefered|imediate)\n   port has no fixed ip (ip_allocation\u003ddefered)\n   port has 2+ fixed_ips from same subnet (implcitly this is the same segment)\n   port has 2+ fixed_ips from different subnets on same segment ( different subnets on same segment has no impact on the aggreates list or shduling)\n\n   port has a trunk prot with 2+ fixed_ips on differnt segmement due to each subport having its own ip mapped to different segment. ( technically this could work but we shoudl declare it out of scope. more on this later)\n\ninvalid:\n  port has no fixed_ip (ip_allocation\u003dimediate) this means the neutron network does not have any subnet and its invalide for use with nova. this is blocked in the neutorn api client code so it will fail.\n  port has multiple fixed ips on different segment but is not a trunk port.\n\n\nfor the trunk port case we could technically check if its a turnk port by using\nhttps://docs.openstack.org/api-ref/network/v2/index.html?expanded\u003dlist-trunks-detail\n\nbasically caling /v2.0/trunks/?port-id\u003d$port_id\n\nit will return an empty list if the port is not a trunk port parent port which are the only trunk port ports that can be attached to a vm. i.e. subport can be attached to a vm. i think the performcane overhead of the extra api call per port is likely not worth it right   now and a doc comment would be enough.\n\n\nif we wanted to support this in the future i think we would need to get the segment for each subport and combindne them as an AND condtion in the placement query.\n\ni think its exceedingly unlikely these two feature are going to be used concurrently but its not impossible.\nthose that want l3 routed networks generally dont also want vlan trunking of multiple network over one port but\nthe overlap is non 0.","commit_id":"3f375d8db9d851cb6d19cf5e1cdffba195894c56"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"370a40058e6512dc086cfba22b708f402eac447c","unresolved":true,"context_lines":[{"line_number":326,"context_line":"            aggregates \u003d utils.get_aggregates_for_routed_network("},{"line_number":327,"context_line":"                ctxt, network_api, report_api, network_id)"},{"line_number":328,"context_line":"        if aggregates:"},{"line_number":329,"context_line":"            required_aggregates.extend(aggregates)"},{"line_number":330,"context_line":"            LOG.debug(\u0027routed_networks_filter request filter added \u0027"},{"line_number":331,"context_line":"                      \u0027aggregates %s for network ID %s\u0027,"},{"line_number":332,"context_line":"                      \u0027,\u0027.join(aggregates),"}],"source_content_type":"text/x-python","patch_set":12,"id":"403e0afc_28f56587","line":329,"updated":"2021-02-08 12:10:28.000000000","message":"I think this is an oversimplification unfortunately. \n\nAssume we have two network requests req1 is with net_id\u003d1 and req2 is with port_id\u003d2 in the same boot request\nAssume that the net_id\u003d1 maps to two segments and therefore two aggregates, agg\u003d1, agg\u003d2\nAssume that the port_id\u003d2 maps to a single segment and therefore a single aggregate agg\u003d3\n\nIn this case when selecting the compute host for the instance we need to apply the following rule:\n* host is in either agg1 or agg2 (to satisfy the req1)\nand\n* host is in agg3 (to satisfy the req2)\n\nBut I think the current code now simply list all the agg1,agg2,agg3 in the required_aggregates which means the host needs to be in agg1 or agg2 or agg3. \n\nThe doc of Destination.require_aggregates() states:\n\n        \"\"\"Add a set of aggregates to the list of required aggregates.\n\n        This will take a list of aggregates, which are to be logically OR\u0027d\n        together and add them to the list of required aggregates that will\n        be used to query placement. Aggregate sets provided in sequential calls\n        to this method will be AND\u0027d together.\n\n        For example, the following set of calls:\n            dest.require_aggregates([\u0027foo\u0027, \u0027bar\u0027])\n            dest.require_aggregates([\u0027baz\u0027])\n        will generate the following logical query to placement:\n            \"Candidates should be in \u0027foo\u0027 OR \u0027bar\u0027, but definitely in \u0027baz\u0027\"\n\nSo I think you have to make a Destination.require_aggregates() call for each network request to express the AND relationship of the network requests.\n\nThis also means that some test coverage is missing as the tests did not caught this case.","commit_id":"3f375d8db9d851cb6d19cf5e1cdffba195894c56"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4fbe1792376a3cd47d544facb11597becb6afe13","unresolved":false,"context_lines":[{"line_number":326,"context_line":"            aggregates \u003d utils.get_aggregates_for_routed_network("},{"line_number":327,"context_line":"                ctxt, network_api, report_api, network_id)"},{"line_number":328,"context_line":"        if aggregates:"},{"line_number":329,"context_line":"            required_aggregates.extend(aggregates)"},{"line_number":330,"context_line":"            LOG.debug(\u0027routed_networks_filter request filter added \u0027"},{"line_number":331,"context_line":"                      \u0027aggregates %s for network ID %s\u0027,"},{"line_number":332,"context_line":"                      \u0027,\u0027.join(aggregates),"}],"source_content_type":"text/x-python","patch_set":12,"id":"b181b4aa_980f7283","line":329,"in_reply_to":"403e0afc_28f56587","updated":"2021-02-08 14:27:24.000000000","message":"Ack","commit_id":"3f375d8db9d851cb6d19cf5e1cdffba195894c56"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0684c91a5af5a9006f9077793bddb5a5aa24cd6c","unresolved":true,"context_lines":[{"line_number":279,"context_line":"    if not CONF.scheduler.query_placement_for_routed_network_aggregates:"},{"line_number":280,"context_line":"        return False"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    # NOTE(sbauza): On a create operation with no specific network request, we"},{"line_number":283,"context_line":"    # allocate the network only after scheduling when the nova-compute service"},{"line_number":284,"context_line":"    # calls Neutron. In this case, here we just want to accept any destination"},{"line_number":285,"context_line":"    # as fine."}],"source_content_type":"text/x-python","patch_set":13,"id":"f5265847_c54fd34c","line":282,"updated":"2021-02-09 02:29:54.000000000","message":"im not actully sure this case can happen.\ne.g. i dont think you can do \"openstack server create ...\"  and not specify a network/port.\n\n--- \nlater never mind this can happen\nhttps://docs.openstack.org/api-ref/compute/?expanded\u003dcreate-server-detail#create-server\n\n\"A list of network object. Required parameter when there are multiple networks defined for the tenant. When you do not specify the networks parameter, the server attaches to the only network created for the current tenant. ...\"\n\nso before 2.37 it was allowed ot not be set if the tenant only had one network.\n\"Starting with microversion 2.37, this field is required and the special string values auto and none can be specified for networks\"\n\nrouted networks were first added in newton https://specs.openstack.org/openstack/neutron-specs/specs/newton/routed-networks.html\nwhich had 2.38 https://docs.openstack.org/nova/latest/reference/api-microversion-history.html#maximum-in-newton\n\nso technically this was a required field from the indocuton of the  \"get me a network\" feature\nhttps://docs.openstack.org/nova/latest/reference/api-microversion-history.html#id35\nhttps://specs.openstack.org/openstack/nova-specs/specs/newton/implemented/get-me-a-network.html\n\nso you could argue this should never be empty with l3 netowrk but its still posiable to down version the api so i guess its valid\neven if we shoudl never do this anymore.\n\nit as we approch api microversion 100 i do think we need  to revisit the min micorversion topic or a nova v4 revision at some point.\n\nthe oldest verion of openstack that we have support for downstream vai ELS is Newton at 2.38\noutside fo ELS type support i think suse or E/// support pike which is 2.53\nour oldest non ELS e.g generally avaiable releas downstream is queens which exits standar support in july that is 2.60\n\nif we could bring the min version to 2.38, 2.53 or 2.60 in X that would be nice but right now we dont have a way to signle that as far as i know so we would\nhave to do a v4? to add clinet support anyway thats a unrelated but i think we should think about raising miniums or droping supprot for v2 e.g. the non microversion\nendpoint in the next release or two to narrow our test matix.","commit_id":"f470b0c3255404335b98414861338fdfd49e2d44"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1869f93c53107b306de6d8e1b4b8aed06cd2f9a3","unresolved":true,"context_lines":[{"line_number":279,"context_line":"    if not CONF.scheduler.query_placement_for_routed_network_aggregates:"},{"line_number":280,"context_line":"        return False"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    # NOTE(sbauza): On a create operation with no specific network request, we"},{"line_number":283,"context_line":"    # allocate the network only after scheduling when the nova-compute service"},{"line_number":284,"context_line":"    # calls Neutron. In this case, here we just want to accept any destination"},{"line_number":285,"context_line":"    # as fine."}],"source_content_type":"text/x-python","patch_set":13,"id":"ac64cb8e_46ca3363","line":282,"in_reply_to":"f5265847_c54fd34c","updated":"2021-02-09 09:50:21.000000000","message":"I don\u0027t want to enter the rathole of bumping our API minimum version 😂\nThat being said, yeah, you can end up with something like \"I wanna create an instance without a single f*** about any network, please magically do it\" so yeah, we need this conditional ;)","commit_id":"f470b0c3255404335b98414861338fdfd49e2d44"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"07e2a916ebb2562c0d9c18d8408d2a10eb972941","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":15,"id":"42009d46_b7995536","updated":"2021-02-09 18:18:47.000000000","message":"We\u0027re probably getting enough of these pre-filters now that they probably warrant their own submodule. What do you think about separating them out? That would allow you to move those helper methods that I didn\u0027t like being in \u0027nova.scheduler.utils\u0027 in the previous patch into their own module, say \u0027nova.scheduler.prefilters.routed_networks\u0027?","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8abd713f3c255659d824a4ea02d3f86b564f57cd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"7fb34ea5_0866a214","in_reply_to":"1f25c670_52e9dbfc","updated":"2021-02-17 14:48:22.000000000","message":"Ack","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"98f43dbbb2bdb4547bb0596fba31006073da3c0e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":15,"id":"f51bd37d_ce44236a","in_reply_to":"42009d46_b7995536","updated":"2021-02-16 14:45:48.000000000","message":"This would be interesting, but as a FUP if I have time for this.","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0cc28503d4a1abec01fdba4583558cc585c69aab","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":15,"id":"1f25c670_52e9dbfc","in_reply_to":"f51bd37d_ce44236a","updated":"2021-02-17 12:30:46.000000000","message":"Definitely a FUP","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"07e2a916ebb2562c0d9c18d8408d2a10eb972941","unresolved":true,"context_lines":[{"line_number":270,"context_line":""},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"@trace_request_filter"},{"line_number":273,"context_line":"def routed_networks_filter(ctxt, request_spec):"},{"line_number":274,"context_line":"    \"\"\"Adds requested placement aggregates that match requested networks."},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    This will modify request_spec to request hosts in aggregates that"}],"source_content_type":"text/x-python","patch_set":15,"id":"eb0115e7_f54defb2","line":273,"updated":"2021-02-09 18:18:47.000000000","message":"type hints? 🙏","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"98f43dbbb2bdb4547bb0596fba31006073da3c0e","unresolved":false,"context_lines":[{"line_number":270,"context_line":""},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"@trace_request_filter"},{"line_number":273,"context_line":"def routed_networks_filter(ctxt, request_spec):"},{"line_number":274,"context_line":"    \"\"\"Adds requested placement aggregates that match requested networks."},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    This will modify request_spec to request hosts in aggregates that"}],"source_content_type":"text/x-python","patch_set":15,"id":"2e730368_8a77a072","line":273,"in_reply_to":"eb0115e7_f54defb2","updated":"2021-02-16 14:45:48.000000000","message":"Ack","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"07e2a916ebb2562c0d9c18d8408d2a10eb972941","unresolved":true,"context_lines":[{"line_number":274,"context_line":"    \"\"\"Adds requested placement aggregates that match requested networks."},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    This will modify request_spec to request hosts in aggregates that"},{"line_number":277,"context_line":"    matches segment IDs related to requested networks."},{"line_number":278,"context_line":"    \"\"\""},{"line_number":279,"context_line":"    if not CONF.scheduler.query_placement_for_routed_network_aggregates:"},{"line_number":280,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":15,"id":"859f47bb_bbfc4ce4","line":277,"updated":"2021-02-09 18:18:47.000000000","message":"definition of the parameters would be nice","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"98f43dbbb2bdb4547bb0596fba31006073da3c0e","unresolved":false,"context_lines":[{"line_number":274,"context_line":"    \"\"\"Adds requested placement aggregates that match requested networks."},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    This will modify request_spec to request hosts in aggregates that"},{"line_number":277,"context_line":"    matches segment IDs related to requested networks."},{"line_number":278,"context_line":"    \"\"\""},{"line_number":279,"context_line":"    if not CONF.scheduler.query_placement_for_routed_network_aggregates:"},{"line_number":280,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":15,"id":"a618023b_a632ff65","line":277,"in_reply_to":"859f47bb_bbfc4ce4","updated":"2021-02-16 14:45:48.000000000","message":"Ack","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"07e2a916ebb2562c0d9c18d8408d2a10eb972941","unresolved":true,"context_lines":[{"line_number":285,"context_line":"    # as fine."},{"line_number":286,"context_line":"    # NOTE(sbauza): This could be also going from an old compute reschedule."},{"line_number":287,"context_line":"    if \u0027requested_networks\u0027 not in request_spec:"},{"line_number":288,"context_line":"        return True"},{"line_number":289,"context_line":"    # This object field is not nullable"},{"line_number":290,"context_line":"    requested_networks \u003d request_spec.requested_networks"},{"line_number":291,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"f0f4bac8_2f401c9c","line":288,"updated":"2021-02-09 18:18:47.000000000","message":"style nit: newline after this would be helpful","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"98f43dbbb2bdb4547bb0596fba31006073da3c0e","unresolved":false,"context_lines":[{"line_number":285,"context_line":"    # as fine."},{"line_number":286,"context_line":"    # NOTE(sbauza): This could be also going from an old compute reschedule."},{"line_number":287,"context_line":"    if \u0027requested_networks\u0027 not in request_spec:"},{"line_number":288,"context_line":"        return True"},{"line_number":289,"context_line":"    # This object field is not nullable"},{"line_number":290,"context_line":"    requested_networks \u003d request_spec.requested_networks"},{"line_number":291,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"4dc3f816_bd1d41e2","line":288,"in_reply_to":"f0f4bac8_2f401c9c","updated":"2021-02-16 14:45:48.000000000","message":"Ack","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"07e2a916ebb2562c0d9c18d8408d2a10eb972941","unresolved":true,"context_lines":[{"line_number":290,"context_line":"    requested_networks \u003d request_spec.requested_networks"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    if (\u0027requested_destination\u0027 not in request_spec or"},{"line_number":293,"context_line":"            request_spec.requested_destination is None):"},{"line_number":294,"context_line":"        request_spec.requested_destination \u003d objects.Destination()"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    # Get the clients we need"}],"source_content_type":"text/x-python","patch_set":15,"id":"1b2b399a_7fc73b26","line":293,"updated":"2021-02-09 18:18:47.000000000","message":"style nit:\n\n  # NOTE(sbauza): {insert reason we need to do this}\n  if (\n      \u0027requested_destination\u0027 not in request_spec or\n      not request_spec.requested_destination\n  ):","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"98f43dbbb2bdb4547bb0596fba31006073da3c0e","unresolved":false,"context_lines":[{"line_number":290,"context_line":"    requested_networks \u003d request_spec.requested_networks"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    if (\u0027requested_destination\u0027 not in request_spec or"},{"line_number":293,"context_line":"            request_spec.requested_destination is None):"},{"line_number":294,"context_line":"        request_spec.requested_destination \u003d objects.Destination()"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    # Get the clients we need"}],"source_content_type":"text/x-python","patch_set":15,"id":"62b44820_02831680","line":293,"in_reply_to":"1b2b399a_7fc73b26","updated":"2021-02-16 14:45:48.000000000","message":"Ack","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"07e2a916ebb2562c0d9c18d8408d2a10eb972941","unresolved":true,"context_lines":[{"line_number":302,"context_line":"        # Check for a specifically requested network ID."},{"line_number":303,"context_line":"        if \"port_id\" in requested_network and requested_network.port_id:"},{"line_number":304,"context_line":"            # We have to lookup the port to see which segment(s) to support."},{"line_number":305,"context_line":"            port \u003d network_api.show_port(ctxt, requested_network.port_id)["},{"line_number":306,"context_line":"                \"port\""},{"line_number":307,"context_line":"            ]"},{"line_number":308,"context_line":"            if port[\u0027fixed_ips\u0027]:"}],"source_content_type":"text/x-python","patch_set":15,"id":"9e32cb3d_734d72a3","line":305,"updated":"2021-02-09 18:18:47.000000000","message":"could we pass \u0027fields\u0027 to get only the information we need back? I think you just want \u0027fixed_ips\u0027 and \u0027network_id\u0027?","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"98f43dbbb2bdb4547bb0596fba31006073da3c0e","unresolved":true,"context_lines":[{"line_number":302,"context_line":"        # Check for a specifically requested network ID."},{"line_number":303,"context_line":"        if \"port_id\" in requested_network and requested_network.port_id:"},{"line_number":304,"context_line":"            # We have to lookup the port to see which segment(s) to support."},{"line_number":305,"context_line":"            port \u003d network_api.show_port(ctxt, requested_network.port_id)["},{"line_number":306,"context_line":"                \"port\""},{"line_number":307,"context_line":"            ]"},{"line_number":308,"context_line":"            if port[\u0027fixed_ips\u0027]:"}],"source_content_type":"text/x-python","patch_set":15,"id":"db031b1d_4debc0eb","line":305,"in_reply_to":"9e32cb3d_734d72a3","updated":"2021-02-16 14:45:48.000000000","message":"Sure, we could but honestly, just getting the whole port is also good. Just looks a nit honestly.","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8abd713f3c255659d824a4ea02d3f86b564f57cd","unresolved":true,"context_lines":[{"line_number":302,"context_line":"        # Check for a specifically requested network ID."},{"line_number":303,"context_line":"        if \"port_id\" in requested_network and requested_network.port_id:"},{"line_number":304,"context_line":"            # We have to lookup the port to see which segment(s) to support."},{"line_number":305,"context_line":"            port \u003d network_api.show_port(ctxt, requested_network.port_id)["},{"line_number":306,"context_line":"                \"port\""},{"line_number":307,"context_line":"            ]"},{"line_number":308,"context_line":"            if port[\u0027fixed_ips\u0027]:"}],"source_content_type":"text/x-python","patch_set":15,"id":"f616ebb1_8c9a33d8","line":305,"in_reply_to":"db031b1d_4debc0eb","updated":"2021-02-17 14:48:22.000000000","message":"It\u0027s not a nit though. Getting the entire port is an expensive operation, particularly when we dump most of that information overboard and soon as we get it. Would be a good follow-up IMO","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bc24cf2b3d9b94a379714e64fbb815ae547c84b2","unresolved":true,"context_lines":[{"line_number":302,"context_line":"        # Check for a specifically requested network ID."},{"line_number":303,"context_line":"        if \"port_id\" in requested_network and requested_network.port_id:"},{"line_number":304,"context_line":"            # We have to lookup the port to see which segment(s) to support."},{"line_number":305,"context_line":"            port \u003d network_api.show_port(ctxt, requested_network.port_id)["},{"line_number":306,"context_line":"                \"port\""},{"line_number":307,"context_line":"            ]"},{"line_number":308,"context_line":"            if port[\u0027fixed_ips\u0027]:"}],"source_content_type":"text/x-python","patch_set":15,"id":"65825fb8_121013a0","line":305,"in_reply_to":"f616ebb1_8c9a33d8","updated":"2021-02-17 15:10:28.000000000","message":"i dont really think its that expensive vs just looking up a subset.\nthe api request and parsing is going to be more or less the same.\nthe only saving we will have are a couple of bytes on the wire and a possibel simpler db query in the neutron db.\ne.g. if it can avoid including the extended atibutes but im not sure they do the filed part in the db and not in python.\n\nwe generally dont filter the files we ask for and i got bit by the fact we were already so iim not sure we shoudl uless we start doing it everywhere. to me using the filed is a premature optimisation. it may be a valid on but i dont consider it wrong to not list just the filed we want.","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"07e2a916ebb2562c0d9c18d8408d2a10eb972941","unresolved":true,"context_lines":[{"line_number":317,"context_line":"                # The port was just created without a subnet."},{"line_number":318,"context_line":"                network_id \u003d port[\"network_id\"]"},{"line_number":319,"context_line":"        elif (\"network_id\" in requested_network and"},{"line_number":320,"context_line":"              requested_network.network_id):"},{"line_number":321,"context_line":"            network_id \u003d requested_network.network_id"},{"line_number":322,"context_line":"        if network_id:"},{"line_number":323,"context_line":"            # As the user only requested a network or a port unbound to a"}],"source_content_type":"text/x-python","patch_set":15,"id":"f336cd98_2713a2da","line":320,"updated":"2021-02-09 18:18:47.000000000","message":"style nit:\n\n    elif (\n        \"network_id\" in requested_network and requested_network.network_id\n    ):","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"98f43dbbb2bdb4547bb0596fba31006073da3c0e","unresolved":false,"context_lines":[{"line_number":317,"context_line":"                # The port was just created without a subnet."},{"line_number":318,"context_line":"                network_id \u003d port[\"network_id\"]"},{"line_number":319,"context_line":"        elif (\"network_id\" in requested_network and"},{"line_number":320,"context_line":"              requested_network.network_id):"},{"line_number":321,"context_line":"            network_id \u003d requested_network.network_id"},{"line_number":322,"context_line":"        if network_id:"},{"line_number":323,"context_line":"            # As the user only requested a network or a port unbound to a"}],"source_content_type":"text/x-python","patch_set":15,"id":"051d6ae6_4ae82787","line":320,"in_reply_to":"f336cd98_2713a2da","updated":"2021-02-16 14:45:48.000000000","message":"Ack","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"07e2a916ebb2562c0d9c18d8408d2a10eb972941","unresolved":true,"context_lines":[{"line_number":318,"context_line":"                network_id \u003d port[\"network_id\"]"},{"line_number":319,"context_line":"        elif (\"network_id\" in requested_network and"},{"line_number":320,"context_line":"              requested_network.network_id):"},{"line_number":321,"context_line":"            network_id \u003d requested_network.network_id"},{"line_number":322,"context_line":"        if network_id:"},{"line_number":323,"context_line":"            # As the user only requested a network or a port unbound to a"},{"line_number":324,"context_line":"            # segment, we are free to choose any segment from the network."}],"source_content_type":"text/x-python","patch_set":15,"id":"ad6768e0_021da995","line":321,"updated":"2021-02-09 18:18:47.000000000","message":"style nit: newline under this would be nice","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"98f43dbbb2bdb4547bb0596fba31006073da3c0e","unresolved":false,"context_lines":[{"line_number":318,"context_line":"                network_id \u003d port[\"network_id\"]"},{"line_number":319,"context_line":"        elif (\"network_id\" in requested_network and"},{"line_number":320,"context_line":"              requested_network.network_id):"},{"line_number":321,"context_line":"            network_id \u003d requested_network.network_id"},{"line_number":322,"context_line":"        if network_id:"},{"line_number":323,"context_line":"            # As the user only requested a network or a port unbound to a"},{"line_number":324,"context_line":"            # segment, we are free to choose any segment from the network."}],"source_content_type":"text/x-python","patch_set":15,"id":"4f1980e1_a82d9814","line":321,"in_reply_to":"ad6768e0_021da995","updated":"2021-02-16 14:45:48.000000000","message":"Ack","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"07e2a916ebb2562c0d9c18d8408d2a10eb972941","unresolved":true,"context_lines":[{"line_number":323,"context_line":"            # As the user only requested a network or a port unbound to a"},{"line_number":324,"context_line":"            # segment, we are free to choose any segment from the network."},{"line_number":325,"context_line":"            aggregates \u003d utils.get_aggregates_for_routed_network("},{"line_number":326,"context_line":"                ctxt, network_api, report_api, network_id)"},{"line_number":327,"context_line":"        if aggregates:"},{"line_number":328,"context_line":"            LOG.debug(\u0027routed_networks_filter request filter added \u0027"},{"line_number":329,"context_line":"                      \u0027aggregates %s for network ID %s\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"73bdc6cc_96c78a73","line":326,"updated":"2021-02-09 18:18:47.000000000","message":"ditto (newline)","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"98f43dbbb2bdb4547bb0596fba31006073da3c0e","unresolved":false,"context_lines":[{"line_number":323,"context_line":"            # As the user only requested a network or a port unbound to a"},{"line_number":324,"context_line":"            # segment, we are free to choose any segment from the network."},{"line_number":325,"context_line":"            aggregates \u003d utils.get_aggregates_for_routed_network("},{"line_number":326,"context_line":"                ctxt, network_api, report_api, network_id)"},{"line_number":327,"context_line":"        if aggregates:"},{"line_number":328,"context_line":"            LOG.debug(\u0027routed_networks_filter request filter added \u0027"},{"line_number":329,"context_line":"                      \u0027aggregates %s for network ID %s\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"dfe755ef_e1191387","line":326,"in_reply_to":"73bdc6cc_96c78a73","updated":"2021-02-16 14:45:48.000000000","message":"Ack","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8abd713f3c255659d824a4ea02d3f86b564f57cd","unresolved":true,"context_lines":[{"line_number":295,"context_line":"    # as fine."},{"line_number":296,"context_line":"    # NOTE(sbauza): This could be also going from an old compute reschedule."},{"line_number":297,"context_line":"    if \u0027requested_networks\u0027 not in request_spec:"},{"line_number":298,"context_line":"        return True"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    # This object field is not nullable"},{"line_number":301,"context_line":"    requested_networks \u003d request_spec.requested_networks"}],"source_content_type":"text/x-python","patch_set":16,"id":"9f5c4671_15a8c121","line":298,"updated":"2021-02-17 14:48:22.000000000","message":"It\u0027s weird that you return True here and False above, despite them doing similar things. I know this is only used for tests but what\u0027s the rationale? Shouldn\u0027t the above be True also?","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b80d5820ff821d6ceb57156fbf89dfe8868e28e3","unresolved":false,"context_lines":[{"line_number":295,"context_line":"    # as fine."},{"line_number":296,"context_line":"    # NOTE(sbauza): This could be also going from an old compute reschedule."},{"line_number":297,"context_line":"    if \u0027requested_networks\u0027 not in request_spec:"},{"line_number":298,"context_line":"        return True"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    # This object field is not nullable"},{"line_number":301,"context_line":"    requested_networks \u003d request_spec.requested_networks"}],"source_content_type":"text/x-python","patch_set":16,"id":"7af7ff57_37ab4faf","line":298,"in_reply_to":"304dff2a_77975c34","updated":"2021-02-18 12:23:06.000000000","message":"Ack","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ffdab19f6ed433bf9497ab9ea670db8b79c6bf90","unresolved":true,"context_lines":[{"line_number":295,"context_line":"    # as fine."},{"line_number":296,"context_line":"    # NOTE(sbauza): This could be also going from an old compute reschedule."},{"line_number":297,"context_line":"    if \u0027requested_networks\u0027 not in request_spec:"},{"line_number":298,"context_line":"        return True"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    # This object field is not nullable"},{"line_number":301,"context_line":"    requested_networks \u003d request_spec.requested_networks"}],"source_content_type":"text/x-python","patch_set":16,"id":"304dff2a_77975c34","line":298,"in_reply_to":"9f5c4671_15a8c121","updated":"2021-02-18 11:19:29.000000000","message":"No, False is for saying that we didn\u0027t really use this prefilter even if it was called.\n\nSee the other prefilters above.","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8abd713f3c255659d824a4ea02d3f86b564f57cd","unresolved":true,"context_lines":[{"line_number":323,"context_line":"                # The instance already exists with a related subnet. We need to"},{"line_number":324,"context_line":"                # stick on this subnet."},{"line_number":325,"context_line":"                # FIXME(sbauza): In case of multiple IPs, we could have more"},{"line_number":326,"context_line":"                # subnets than only one so we should look at all of them."},{"line_number":327,"context_line":"                subnet_id \u003d port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]"},{"line_number":328,"context_line":"                aggregates \u003d utils.get_aggregates_for_routed_subnet("},{"line_number":329,"context_line":"                    ctxt, network_api, report_api, subnet_id)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3c129b17_5ecfbc3b","line":326,"updated":"2021-02-17 14:48:22.000000000","message":"Isn\u0027t this really easy to fix here and now? It\u0027s just a loop over \"port[\u0027fixed_ips\u0027]\" and multiple calls to \u0027get_aggregates_for_routed_subnet\u0027, one for each subnet found, right? I assume that\u0027s necessary since we have to be able to access all of the subnets requested on a given host for things to work.","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b80d5820ff821d6ceb57156fbf89dfe8868e28e3","unresolved":true,"context_lines":[{"line_number":323,"context_line":"                # The instance already exists with a related subnet. We need to"},{"line_number":324,"context_line":"                # stick on this subnet."},{"line_number":325,"context_line":"                # FIXME(sbauza): In case of multiple IPs, we could have more"},{"line_number":326,"context_line":"                # subnets than only one so we should look at all of them."},{"line_number":327,"context_line":"                subnet_id \u003d port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]"},{"line_number":328,"context_line":"                aggregates \u003d utils.get_aggregates_for_routed_subnet("},{"line_number":329,"context_line":"                    ctxt, network_api, report_api, subnet_id)"}],"source_content_type":"text/x-python","patch_set":16,"id":"c69c32db_ca65e8c6","line":326,"in_reply_to":"1eec37e1_eff678c9","updated":"2021-02-18 12:23:06.000000000","message":"Hmm, okay so does this really warrant a FIXME in that case? It sounds like we\u0027re never going to fix this because we don\u0027t think there\u0027s a serious issue here? If not, could we replace this with a NOTE saying that it\u0027s unlikely that a port will ever have multiple IPs from different provider networks so we\u0027re choosing to ignore this possibility","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ffdab19f6ed433bf9497ab9ea670db8b79c6bf90","unresolved":true,"context_lines":[{"line_number":323,"context_line":"                # The instance already exists with a related subnet. We need to"},{"line_number":324,"context_line":"                # stick on this subnet."},{"line_number":325,"context_line":"                # FIXME(sbauza): In case of multiple IPs, we could have more"},{"line_number":326,"context_line":"                # subnets than only one so we should look at all of them."},{"line_number":327,"context_line":"                subnet_id \u003d port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]"},{"line_number":328,"context_line":"                aggregates \u003d utils.get_aggregates_for_routed_subnet("},{"line_number":329,"context_line":"                    ctxt, network_api, report_api, subnet_id)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1eec37e1_eff678c9","line":326,"in_reply_to":"3c129b17_5ecfbc3b","updated":"2021-02-18 11:19:29.000000000","message":"We discussed this with Sean and we were both convinced it would be weirdo to have multiple IPs *from the same port* be in different segments at the moment.\nIn general, the multiple IPs are b/c we have IPv4 and IPv6 addresses, but given they are related to the same port, they should be in the same segment.","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8abd713f3c255659d824a4ea02d3f86b564f57cd","unresolved":true,"context_lines":[{"line_number":326,"context_line":"                # subnets than only one so we should look at all of them."},{"line_number":327,"context_line":"                subnet_id \u003d port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]"},{"line_number":328,"context_line":"                aggregates \u003d utils.get_aggregates_for_routed_subnet("},{"line_number":329,"context_line":"                    ctxt, network_api, report_api, subnet_id)"},{"line_number":330,"context_line":"            else:"},{"line_number":331,"context_line":"                # The port was just created without a subnet."},{"line_number":332,"context_line":"                network_id \u003d port[\"network_id\"]"}],"source_content_type":"text/x-python","patch_set":16,"id":"d979ce33_337c251b","line":329,"updated":"2021-02-17 14:48:22.000000000","message":"I noted this at [1] but we\u0027re not handling the exceptions from this, which I think will mean we\u0027ll get a HTTP 5xx error if this fails.\n\n[1] https://review.opendev.org/c/openstack/nova/+/773976/6/nova/exception.py#772","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ffdab19f6ed433bf9497ab9ea670db8b79c6bf90","unresolved":false,"context_lines":[{"line_number":326,"context_line":"                # subnets than only one so we should look at all of them."},{"line_number":327,"context_line":"                subnet_id \u003d port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]"},{"line_number":328,"context_line":"                aggregates \u003d utils.get_aggregates_for_routed_subnet("},{"line_number":329,"context_line":"                    ctxt, network_api, report_api, subnet_id)"},{"line_number":330,"context_line":"            else:"},{"line_number":331,"context_line":"                # The port was just created without a subnet."},{"line_number":332,"context_line":"                network_id \u003d port[\"network_id\"]"}],"source_content_type":"text/x-python","patch_set":16,"id":"75221c80_178d146f","line":329,"in_reply_to":"d979ce33_337c251b","updated":"2021-02-18 11:19:29.000000000","message":"Fixed by the dependent change new revision","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8abd713f3c255659d824a4ea02d3f86b564f57cd","unresolved":true,"context_lines":[{"line_number":345,"context_line":"            LOG.debug(\u0027routed_networks_filter request filter added \u0027"},{"line_number":346,"context_line":"                      \u0027aggregates %s for network ID %s\u0027,"},{"line_number":347,"context_line":"                      \u0027,\u0027.join(aggregates),"},{"line_number":348,"context_line":"                      network_id)"},{"line_number":349,"context_line":"            # NOTE(sbauza): All of the aggregates from this request will be"},{"line_number":350,"context_line":"            # accepted, but they will have a AND relationship with any other"},{"line_number":351,"context_line":"            # requested aggregate, like for another NIC request in this loop."}],"source_content_type":"text/x-python","patch_set":16,"id":"d65ce309_21f08012","line":348,"updated":"2021-02-17 14:48:22.000000000","message":"This reads rather weirdly if there are multiple aggregates. How about:\n\n  LOG.debug(\n      \u0027routed_networks_filter request filter added the following \u0027\n      \u0027aggregates for network ID %s: %s\u0027,\n      network_id, \u0027, \u0027.join(aggregates))\n\ni.e. change the order of the network_id and aggregates arguments in the output","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ffdab19f6ed433bf9497ab9ea670db8b79c6bf90","unresolved":false,"context_lines":[{"line_number":345,"context_line":"            LOG.debug(\u0027routed_networks_filter request filter added \u0027"},{"line_number":346,"context_line":"                      \u0027aggregates %s for network ID %s\u0027,"},{"line_number":347,"context_line":"                      \u0027,\u0027.join(aggregates),"},{"line_number":348,"context_line":"                      network_id)"},{"line_number":349,"context_line":"            # NOTE(sbauza): All of the aggregates from this request will be"},{"line_number":350,"context_line":"            # accepted, but they will have a AND relationship with any other"},{"line_number":351,"context_line":"            # requested aggregate, like for another NIC request in this loop."}],"source_content_type":"text/x-python","patch_set":16,"id":"05e73554_d206845a","line":348,"in_reply_to":"d65ce309_21f08012","updated":"2021-02-18 11:19:29.000000000","message":"Ack","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b80d5820ff821d6ceb57156fbf89dfe8868e28e3","unresolved":true,"context_lines":[{"line_number":323,"context_line":"                # The instance already exists with a related subnet. We need to"},{"line_number":324,"context_line":"                # stick on this subnet."},{"line_number":325,"context_line":"                # FIXME(sbauza): In case of multiple IPs, we could have more"},{"line_number":326,"context_line":"                # subnets than only one so we should look at all of them."},{"line_number":327,"context_line":"                subnet_id \u003d port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]"},{"line_number":328,"context_line":"                aggregates \u003d utils.get_aggregates_for_routed_subnet("},{"line_number":329,"context_line":"                    ctxt, network_api, report_api, subnet_id)"}],"source_content_type":"text/x-python","patch_set":17,"id":"e4179691_1e1fa064","line":326,"updated":"2021-02-18 12:23:06.000000000","message":"Per [1], can we replace this with a NOTE since it seems unlikely we\u0027ll ever \"fix\" this, based on what you\u0027ve said there\n\n[1] https://review.opendev.org/c/openstack/nova/+/749068/16/nova/scheduler/request_filter.py#326","commit_id":"2b24434cf3a6ebd8d77cc94716232fda812cc316"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"67f9d4c65ad1e1986b64254bd01c30950d1e2dbc","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                # The instance already exists with a related subnet. We need to"},{"line_number":324,"context_line":"                # stick on this subnet."},{"line_number":325,"context_line":"                # FIXME(sbauza): In case of multiple IPs, we could have more"},{"line_number":326,"context_line":"                # subnets than only one so we should look at all of them."},{"line_number":327,"context_line":"                subnet_id \u003d port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]"},{"line_number":328,"context_line":"                aggregates \u003d utils.get_aggregates_for_routed_subnet("},{"line_number":329,"context_line":"                    ctxt, network_api, report_api, subnet_id)"}],"source_content_type":"text/x-python","patch_set":17,"id":"87af6459_a00b3754","line":326,"in_reply_to":"e4179691_1e1fa064","updated":"2021-02-18 14:38:13.000000000","message":"Ack","commit_id":"2b24434cf3a6ebd8d77cc94716232fda812cc316"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b80d5820ff821d6ceb57156fbf89dfe8868e28e3","unresolved":true,"context_lines":[{"line_number":325,"context_line":"                # FIXME(sbauza): In case of multiple IPs, we could have more"},{"line_number":326,"context_line":"                # subnets than only one so we should look at all of them."},{"line_number":327,"context_line":"                subnet_id \u003d port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]"},{"line_number":328,"context_line":"                aggregates \u003d utils.get_aggregates_for_routed_subnet("},{"line_number":329,"context_line":"                    ctxt, network_api, report_api, subnet_id)"},{"line_number":330,"context_line":"            else:"},{"line_number":331,"context_line":"                # The port was just created without a subnet."}],"source_content_type":"text/x-python","patch_set":17,"id":"3c980f7a_108f3119","line":328,"updated":"2021-02-18 12:23:06.000000000","message":"As noted in the dependent change, I think we should be catching and transforming this exception rather than subclassing a scheduler-specific exception for a networking-specific failure. Because we pass the message from this exception directly to the user as part of the \u0027NoValidHost\u0027 (the end user can see those, right?) we have to be careful about how much information we give. Something like...\n\n  try:\n      aggregates \u003d utils.get_aggregates_for_routed_subnet(\n          ...)\n  except InvalidRoutedNetworkConfiguration as e:\n      msg \u003d _(\"Failed to get aggregate for routed network\")\n      raise RequestFilterFailed(msg) from e\n\n?","commit_id":"2b24434cf3a6ebd8d77cc94716232fda812cc316"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"67f9d4c65ad1e1986b64254bd01c30950d1e2dbc","unresolved":true,"context_lines":[{"line_number":325,"context_line":"                # FIXME(sbauza): In case of multiple IPs, we could have more"},{"line_number":326,"context_line":"                # subnets than only one so we should look at all of them."},{"line_number":327,"context_line":"                subnet_id \u003d port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]"},{"line_number":328,"context_line":"                aggregates \u003d utils.get_aggregates_for_routed_subnet("},{"line_number":329,"context_line":"                    ctxt, network_api, report_api, subnet_id)"},{"line_number":330,"context_line":"            else:"},{"line_number":331,"context_line":"                # The port was just created without a subnet."}],"source_content_type":"text/x-python","patch_set":17,"id":"371cadb4_0f60611a","line":328,"in_reply_to":"3c980f7a_108f3119","updated":"2021-02-18 14:38:13.000000000","message":"Let\u0027s discuss exception handling for a FUP.","commit_id":"2b24434cf3a6ebd8d77cc94716232fda812cc316"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b80d5820ff821d6ceb57156fbf89dfe8868e28e3","unresolved":true,"context_lines":[{"line_number":339,"context_line":"            # As the user only requested a network or a port unbound to a"},{"line_number":340,"context_line":"            # segment, we are free to choose any segment from the network."},{"line_number":341,"context_line":"            aggregates \u003d utils.get_aggregates_for_routed_network("},{"line_number":342,"context_line":"                ctxt, network_api, report_api, network_id)"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        if aggregates:"},{"line_number":345,"context_line":"            LOG.debug("}],"source_content_type":"text/x-python","patch_set":17,"id":"832082d3_f88294dd","line":342,"updated":"2021-02-18 12:23:06.000000000","message":"Same comment as above.","commit_id":"2b24434cf3a6ebd8d77cc94716232fda812cc316"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8931ee13f40fc4f1c82e3258877defd5b415ce1d","unresolved":true,"context_lines":[{"line_number":348,"context_line":"                \u0027aggregates for network ID %s: %s\u0027,"},{"line_number":349,"context_line":"                network_id, \u0027, \u0027.join(aggregates))"},{"line_number":350,"context_line":"            # NOTE(sbauza): All of the aggregates from this request will be"},{"line_number":351,"context_line":"            # accepted, but they will have a AND relationship with any other"},{"line_number":352,"context_line":"            # requested aggregate, like for another NIC request in this loop."},{"line_number":353,"context_line":"            request_spec.requested_destination.require_aggregates(aggregates)"},{"line_number":354,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"79d5b3c9_a8a795a9","line":351,"range":{"start_line":351,"start_character":43,"end_line":351,"end_character":44},"updated":"2021-02-18 17:55:24.000000000","message":"an","commit_id":"0b75f51d8869bd30ef5b416927702d846fbace40"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c43314d007b60b66f89fe47eb31283cabe85c66f","unresolved":false,"context_lines":[{"line_number":348,"context_line":"                \u0027aggregates for network ID %s: %s\u0027,"},{"line_number":349,"context_line":"                network_id, \u0027, \u0027.join(aggregates))"},{"line_number":350,"context_line":"            # NOTE(sbauza): All of the aggregates from this request will be"},{"line_number":351,"context_line":"            # accepted, but they will have a AND relationship with any other"},{"line_number":352,"context_line":"            # requested aggregate, like for another NIC request in this loop."},{"line_number":353,"context_line":"            request_spec.requested_destination.require_aggregates(aggregates)"},{"line_number":354,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"cb34e5b4_6a03103b","line":351,"range":{"start_line":351,"start_character":43,"end_line":351,"end_character":44},"in_reply_to":"79d5b3c9_a8a795a9","updated":"2021-02-19 14:49:38.000000000","message":"Ack","commit_id":"0b75f51d8869bd30ef5b416927702d846fbace40"}],"nova/scheduler/utils.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ec77202bb03dd3acc6d8160ecfc270ad12f4eeec","unresolved":true,"context_lines":[{"line_number":1379,"context_line":"    # NOTE(sbauza): In case of a network with non-configured routed segments,"},{"line_number":1380,"context_line":"    # we will get an empty list of segment UUIDs, so we won\u0027t enter the loop."},{"line_number":1381,"context_line":"    for segment_id in segment_ids:"},{"line_number":1382,"context_line":"        # TODO(mriedem): Don\u0027t use a private method."},{"line_number":1383,"context_line":"        agg_info \u003d report_client._get_provider_aggregates(context, segment_id)"},{"line_number":1384,"context_line":"        if agg_info is None:"},{"line_number":1385,"context_line":"            raise exception.NovaException(\u0027Failed to find aggregate related \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"d4556dc7_1840fded","line":1382,"range":{"start_line":1382,"start_character":15,"end_line":1382,"end_character":22},"updated":"2021-01-07 18:51:57.000000000","message":"nit: i know this is form  his inital version but maybe update this to you?","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1f18a686bb48091bf9c224ea47bc516e5c5a7e4f","unresolved":false,"context_lines":[{"line_number":1379,"context_line":"    # NOTE(sbauza): In case of a network with non-configured routed segments,"},{"line_number":1380,"context_line":"    # we will get an empty list of segment UUIDs, so we won\u0027t enter the loop."},{"line_number":1381,"context_line":"    for segment_id in segment_ids:"},{"line_number":1382,"context_line":"        # TODO(mriedem): Don\u0027t use a private method."},{"line_number":1383,"context_line":"        agg_info \u003d report_client._get_provider_aggregates(context, segment_id)"},{"line_number":1384,"context_line":"        if agg_info is None:"},{"line_number":1385,"context_line":"            raise exception.NovaException(\u0027Failed to find aggregate related \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"f99addbe_f26f3407","line":1382,"range":{"start_line":1382,"start_character":15,"end_line":1382,"end_character":22},"in_reply_to":"d4556dc7_1840fded","updated":"2021-02-02 16:31:50.000000000","message":"Done","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"}],"nova/tests/fixtures.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b91642447e8a1fadfae6e417eb5870f1ab3895c3","unresolved":false,"context_lines":[{"line_number":1962,"context_line":"            self._security_groups, retrieve_all, **_params)}"},{"line_number":1963,"context_line":""},{"line_number":1964,"context_line":"    def create_port(self, body\u003dNone):"},{"line_number":1965,"context_line":"        print(\u0027create port with body\u0027, body)"},{"line_number":1966,"context_line":"        body \u003d body or {\u0027port\u0027: {}}"},{"line_number":1967,"context_line":"        # TODO(gibi): clean up this spaghetti"},{"line_number":1968,"context_line":"        # NOTE(gibi): create port in the requested network. This is special"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_af4d969a","line":1965,"updated":"2020-09-04 15:44:58.000000000","message":"drop my debug :)","commit_id":"96078059731cc38b52d67df8935c08bbcff3b11a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0684c91a5af5a9006f9077793bddb5a5aa24cd6c","unresolved":true,"context_lines":[{"line_number":1369,"context_line":"    }"},{"line_number":1370,"context_line":""},{"line_number":1371,"context_line":"    network_multisegment \u003d {"},{"line_number":1372,"context_line":"        \u0027id\u0027: \u0027dea5f773-a79f-4d53-8514-3b4b45527ac7\u0027,"},{"line_number":1373,"context_line":"        \u0027name\u0027: \u0027net-multisegment\u0027,"},{"line_number":1374,"context_line":"        \u0027description\u0027: \u0027\u0027,"},{"line_number":1375,"context_line":"        \u0027status\u0027: \u0027ACTIVE\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"c5574eb6_324ec985","line":1372,"range":{"start_line":1372,"start_character":15,"end_line":1372,"end_character":51},"updated":"2021-02-09 02:29:54.000000000","message":"lee reminded me of this but oslo has a uuid sentinal class\nthat will allow you to create namemd uuids for use in test\n\nit would be nice to use that here as a follow up change.\n\ne.g.   \u0027id\u0027: uuidsentinel.multi-segment-net-id,","commit_id":"f470b0c3255404335b98414861338fdfd49e2d44"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0684c91a5af5a9006f9077793bddb5a5aa24cd6c","unresolved":true,"context_lines":[{"line_number":1402,"context_line":""},{"line_number":1403,"context_line":"    segment_id_0 \u003d {"},{"line_number":1404,"context_line":"            \"name\": \"\","},{"line_number":1405,"context_line":"            \"network_id\": network_multisegment[\u0027id\u0027],"},{"line_number":1406,"context_line":"            \"segmentation_id\": 0,"},{"line_number":1407,"context_line":"            \"network_type\": \"flat\","},{"line_number":1408,"context_line":"            \"physical_network\": \"default\","}],"source_content_type":"text/x-python","patch_set":13,"id":"76fcf638_e86d7d02","line":1405,"range":{"start_line":1405,"start_character":26,"end_line":1405,"end_character":52},"updated":"2021-02-09 02:29:54.000000000","message":"then you can just do uuidsentinel.multi-segment-net-id\n\nhere and else where too.\n\nit comes form \"from oslo_utils.fixture import uuidsentinel\"\nwhich is already imported and used elsewhere.\n\nbut that wil allwo us to eventurly stop using random uuids in test and name them all.","commit_id":"f470b0c3255404335b98414861338fdfd49e2d44"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0684c91a5af5a9006f9077793bddb5a5aa24cd6c","unresolved":true,"context_lines":[{"line_number":1427,"context_line":"    segments \u003d [segment_id_0, segment_id_2]"},{"line_number":1428,"context_line":""},{"line_number":1429,"context_line":"    subnet_for_segment_id_0 \u003d {"},{"line_number":1430,"context_line":"        \u0027id\u0027: \u0027380957ee-be6c-4ec7-905f-9f1642291fa9\u0027,"},{"line_number":1431,"context_line":"        \u0027name\u0027: \u0027public-subnet\u0027,"},{"line_number":1432,"context_line":"        \u0027description\u0027: \u0027\u0027,"},{"line_number":1433,"context_line":"        \u0027ip_version\u0027: 4,"}],"source_content_type":"text/x-python","patch_set":13,"id":"a2d1f001_0185387d","line":1430,"range":{"start_line":1430,"start_character":14,"end_line":1430,"end_character":53},"updated":"2021-02-09 02:29:54.000000000","message":"it would be nice to use the uuid sentinel there and throught too\nagain this is just a nit so we could do it in a follow up if we wanted its fine as it is too","commit_id":"f470b0c3255404335b98414861338fdfd49e2d44"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0684c91a5af5a9006f9077793bddb5a5aa24cd6c","unresolved":true,"context_lines":[{"line_number":2196,"context_line":"        # NOTE(gibi): create port in the requested network. This is special"},{"line_number":2197,"context_line":"        # cased now for multi segment network but could be made generic with"},{"line_number":2198,"context_line":"        # some refactor of the fixture"},{"line_number":2199,"context_line":"        if body[\u0027port\u0027].get(\u0027network_id\u0027) \u003d\u003d self.network_multisegment[\u0027id\u0027]:"},{"line_number":2200,"context_line":"            new_port \u003d copy.deepcopy(body[\u0027port\u0027])"},{"line_number":2201,"context_line":"            # NOTE(sbauza): Segment #0 is always used when booting an instance"},{"line_number":2202,"context_line":"            # without a provided port as the first supported host is related"}],"source_content_type":"text/x-python","patch_set":13,"id":"22b2bf59_bc4e4eaa","line":2199,"range":{"start_line":2199,"start_character":45,"end_line":2199,"end_character":76},"updated":"2021-02-09 02:29:54.000000000","message":"this is totally readable but is an example where the uuid sentinel is nice.\nthat said you chose good name so its more or less the same in this case.","commit_id":"f470b0c3255404335b98414861338fdfd49e2d44"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0684c91a5af5a9006f9077793bddb5a5aa24cd6c","unresolved":true,"context_lines":[{"line_number":2304,"context_line":"        #     }"},{"line_number":2305,"context_line":"        #   ]"},{"line_number":2306,"context_line":"        # }"},{"line_number":2307,"context_line":"        segments \u003d ["},{"line_number":2308,"context_line":"            {\"id\": segment[\"id\"]}"},{"line_number":2309,"context_line":"            for segment in self.segments"},{"line_number":2310,"context_line":"            if segment[\"network_id\"] \u003d\u003d network_id"}],"source_content_type":"text/x-python","patch_set":13,"id":"a2a0cea1_196b6667","line":2307,"updated":"2021-02-09 02:29:54.000000000","message":"+1 for including an example of the responce you are faking","commit_id":"f470b0c3255404335b98414861338fdfd49e2d44"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"07e2a916ebb2562c0d9c18d8408d2a10eb972941","unresolved":true,"context_lines":[{"line_number":1566,"context_line":"            security_group[\u0027id\u0027],"},{"line_number":1567,"context_line":"        ],"},{"line_number":1568,"context_line":"        \u0027ip_allocation\u0027: \"immediate\","},{"line_number":1569,"context_line":"    }"},{"line_number":1570,"context_line":""},{"line_number":1571,"context_line":"    port_with_resource_request \u003d {"},{"line_number":1572,"context_line":"        \u0027id\u0027: \u00272f2613ce-95a9-490a-b3c4-5f1c28c1f886\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"83c95a6e_7760fd35","line":1569,"updated":"2021-02-09 18:18:47.000000000","message":"Please don\u0027t add these here. I suspect that you only have a single test using these so in that test we can simply subclass this fixture and modify it. See LibvirtNeutronFixture for an example. Alternatively, simply add these in","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"98f43dbbb2bdb4547bb0596fba31006073da3c0e","unresolved":false,"context_lines":[{"line_number":1566,"context_line":"            security_group[\u0027id\u0027],"},{"line_number":1567,"context_line":"        ],"},{"line_number":1568,"context_line":"        \u0027ip_allocation\u0027: \"immediate\","},{"line_number":1569,"context_line":"    }"},{"line_number":1570,"context_line":""},{"line_number":1571,"context_line":"    port_with_resource_request \u003d {"},{"line_number":1572,"context_line":"        \u0027id\u0027: \u00272f2613ce-95a9-490a-b3c4-5f1c28c1f886\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"808a33ab_93164aaf","line":1569,"in_reply_to":"83c95a6e_7760fd35","updated":"2021-02-16 14:45:48.000000000","message":"Ack","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0cc28503d4a1abec01fdba4583558cc585c69aab","unresolved":true,"context_lines":[{"line_number":1940,"context_line":"        # NOTE(gibi): you cannot add more networks here as that will cause the"},{"line_number":1941,"context_line":"        # tests that use auto allocated network to fail with \u0027Multiple possible"},{"line_number":1942,"context_line":"        # networks found\u0027 error. Instead, add the extra network you need to the"},{"line_number":1943,"context_line":"        # fixture during your test setup."},{"line_number":1944,"context_line":"        self._networks \u003d {"},{"line_number":1945,"context_line":"            self.network_1[\u0027id\u0027]: self.network_1"},{"line_number":1946,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":15,"id":"1e142a81_a8ecc775","line":1943,"updated":"2021-02-17 12:30:46.000000000","message":"I think this comment is still valid","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"07e2a916ebb2562c0d9c18d8408d2a10eb972941","unresolved":true,"context_lines":[{"line_number":2195,"context_line":"        # TODO(gibi): clean up this spaghetti"},{"line_number":2196,"context_line":"        # NOTE(gibi): create port in the requested network. This is special"},{"line_number":2197,"context_line":"        # cased now for multi segment network but could be made generic with"},{"line_number":2198,"context_line":"        # some refactor of the fixture"},{"line_number":2199,"context_line":"        if body[\u0027port\u0027].get(\u0027network_id\u0027) \u003d\u003d self.network_multisegment[\u0027id\u0027]:"},{"line_number":2200,"context_line":"            new_port \u003d copy.deepcopy(body[\u0027port\u0027])"},{"line_number":2201,"context_line":"            # NOTE(sbauza): Segment #0 is always used when booting an instance"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffa9d0dc_209a9495","line":2198,"updated":"2021-02-09 18:18:47.000000000","message":"Personally, I think these should be fixed now. This is fixture is already too complex for its own good and I\u0027ve spent a lot of time in the past detangling stuff. Let\u0027s not re-tangle it","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"98f43dbbb2bdb4547bb0596fba31006073da3c0e","unresolved":false,"context_lines":[{"line_number":2195,"context_line":"        # TODO(gibi): clean up this spaghetti"},{"line_number":2196,"context_line":"        # NOTE(gibi): create port in the requested network. This is special"},{"line_number":2197,"context_line":"        # cased now for multi segment network but could be made generic with"},{"line_number":2198,"context_line":"        # some refactor of the fixture"},{"line_number":2199,"context_line":"        if body[\u0027port\u0027].get(\u0027network_id\u0027) \u003d\u003d self.network_multisegment[\u0027id\u0027]:"},{"line_number":2200,"context_line":"            new_port \u003d copy.deepcopy(body[\u0027port\u0027])"},{"line_number":2201,"context_line":"            # NOTE(sbauza): Segment #0 is always used when booting an instance"}],"source_content_type":"text/x-python","patch_set":15,"id":"71b648e6_77b7b5a9","line":2198,"in_reply_to":"ffa9d0dc_209a9495","updated":"2021-02-16 14:45:48.000000000","message":"Ack","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"07e2a916ebb2562c0d9c18d8408d2a10eb972941","unresolved":true,"context_lines":[{"line_number":2312,"context_line":"        return fake_requests.FakeResponse("},{"line_number":2313,"context_line":"            200, content\u003djsonutils.dumps({\"segments\": segments})"},{"line_number":2314,"context_line":"        )"},{"line_number":2315,"context_line":""},{"line_number":2316,"context_line":""},{"line_number":2317,"context_line":"class _NoopConductor(object):"},{"line_number":2318,"context_line":"    def __getattr__(self, key):"}],"source_content_type":"text/x-python","patch_set":15,"id":"9ef2d9e8_9f89faac","line":2315,"updated":"2021-02-09 18:18:47.000000000","message":"This can stay though","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"98f43dbbb2bdb4547bb0596fba31006073da3c0e","unresolved":false,"context_lines":[{"line_number":2312,"context_line":"        return fake_requests.FakeResponse("},{"line_number":2313,"context_line":"            200, content\u003djsonutils.dumps({\"segments\": segments})"},{"line_number":2314,"context_line":"        )"},{"line_number":2315,"context_line":""},{"line_number":2316,"context_line":""},{"line_number":2317,"context_line":"class _NoopConductor(object):"},{"line_number":2318,"context_line":"    def __getattr__(self, key):"}],"source_content_type":"text/x-python","patch_set":15,"id":"e3c26a13_b750ac92","line":2315,"in_reply_to":"9ef2d9e8_9f89faac","updated":"2021-02-16 14:45:48.000000000","message":"Ack","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b80d5820ff821d6ceb57156fbf89dfe8868e28e3","unresolved":true,"context_lines":[{"line_number":1981,"context_line":"        return {\u0027security_groups\u0027: self._list_resource("},{"line_number":1982,"context_line":"            self._security_groups, retrieve_all, **_params)}"},{"line_number":1983,"context_line":""},{"line_number":1984,"context_line":"    def create_port(self, body\u003dNone, port\u003dNone):"},{"line_number":1985,"context_line":"        body \u003d body or {\u0027port\u0027: {}}"},{"line_number":1986,"context_line":"        if port is None:"},{"line_number":1987,"context_line":"            port \u003d self.port_2"}],"source_content_type":"text/x-python","patch_set":17,"id":"63029aea_be8b5c87","line":1984,"updated":"2021-02-18 12:23:06.000000000","message":"We can\u0027t do this. This is a mock of the neutronclient API. It has to have the same signature as that API or all hell will break loose if e.g. neutronclient ever changes its signature.\n\nCan\u0027t you simply override \u0027port_2\u0027 in your subclass? Heck, you could rename it to e.g. \u0027base_port\u0027 so we know that this is used.","commit_id":"2b24434cf3a6ebd8d77cc94716232fda812cc316"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"67f9d4c65ad1e1986b64254bd01c30950d1e2dbc","unresolved":false,"context_lines":[{"line_number":1981,"context_line":"        return {\u0027security_groups\u0027: self._list_resource("},{"line_number":1982,"context_line":"            self._security_groups, retrieve_all, **_params)}"},{"line_number":1983,"context_line":""},{"line_number":1984,"context_line":"    def create_port(self, body\u003dNone, port\u003dNone):"},{"line_number":1985,"context_line":"        body \u003d body or {\u0027port\u0027: {}}"},{"line_number":1986,"context_line":"        if port is None:"},{"line_number":1987,"context_line":"            port \u003d self.port_2"}],"source_content_type":"text/x-python","patch_set":17,"id":"7c46b4c3_36a96798","line":1984,"in_reply_to":"63029aea_be8b5c87","updated":"2021-02-18 14:38:13.000000000","message":"Shit, you\u0027re right.","commit_id":"2b24434cf3a6ebd8d77cc94716232fda812cc316"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8931ee13f40fc4f1c82e3258877defd5b415ce1d","unresolved":true,"context_lines":[{"line_number":1404,"context_line":"    # Fixtures inheriting from NeutronFixture can redefine the default port"},{"line_number":1405,"context_line":"    # that create_port() is duplicating for creating a new port by using this"},{"line_number":1406,"context_line":"    # variable"},{"line_number":1407,"context_line":"    default_port \u003d port_2"},{"line_number":1408,"context_line":""},{"line_number":1409,"context_line":"    # network_2 does not have security groups enabled - that\u0027s okay since most"},{"line_number":1410,"context_line":"    # of these ports are SR-IOV\u0027y anyway"}],"source_content_type":"text/x-python","patch_set":18,"id":"5bccde03_06cebe21","line":1407,"updated":"2021-02-18 17:55:24.000000000","message":"This should really be deep copied rather than aliased to prevent changes to one affecting the other","commit_id":"0b75f51d8869bd30ef5b416927702d846fbace40"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c43314d007b60b66f89fe47eb31283cabe85c66f","unresolved":false,"context_lines":[{"line_number":1404,"context_line":"    # Fixtures inheriting from NeutronFixture can redefine the default port"},{"line_number":1405,"context_line":"    # that create_port() is duplicating for creating a new port by using this"},{"line_number":1406,"context_line":"    # variable"},{"line_number":1407,"context_line":"    default_port \u003d port_2"},{"line_number":1408,"context_line":""},{"line_number":1409,"context_line":"    # network_2 does not have security groups enabled - that\u0027s okay since most"},{"line_number":1410,"context_line":"    # of these ports are SR-IOV\u0027y anyway"}],"source_content_type":"text/x-python","patch_set":18,"id":"4bc08b2c_904e7c58","line":1407,"in_reply_to":"5bccde03_06cebe21","updated":"2021-02-19 14:49:38.000000000","message":"Ack","commit_id":"0b75f51d8869bd30ef5b416927702d846fbace40"}],"nova/tests/functional/integrated_helpers.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ec77202bb03dd3acc6d8160ecfc270ad12f4eeec","unresolved":true,"context_lines":[{"line_number":487,"context_line":"        return self._wait_for_state_change(server, expected_state)"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    def _unshelve_server(self, server, expected_state\u003d\u0027ACTIVE\u0027):"},{"line_number":490,"context_line":"        \"\"\"Unshelve a server.\"\"\""},{"line_number":491,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], {\u0027unshelve\u0027: None})"},{"line_number":492,"context_line":"        return self._wait_for_state_change(server, expected_state)"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"    def _evacuate_server("}],"source_content_type":"text/x-python","patch_set":6,"id":"ccafb8f0_abe2bedb","line":491,"range":{"start_line":490,"start_character":2,"end_line":491,"end_character":69},"updated":"2021-01-07 18:51:57.000000000","message":"this seams unrelated\n\nis it from a rebase or something\n{} would be the nomal value we use so im not shour why you are changing it to None","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e4931f5258c57042d2480f96a2237eee300c211f","unresolved":true,"context_lines":[{"line_number":487,"context_line":"        return self._wait_for_state_change(server, expected_state)"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    def _unshelve_server(self, server, expected_state\u003d\u0027ACTIVE\u0027):"},{"line_number":490,"context_line":"        \"\"\"Unshelve a server.\"\"\""},{"line_number":491,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], {\u0027unshelve\u0027: None})"},{"line_number":492,"context_line":"        return self._wait_for_state_change(server, expected_state)"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"    def _evacuate_server("}],"source_content_type":"text/x-python","patch_set":6,"id":"561c35d3_d0e712fe","line":491,"range":{"start_line":490,"start_character":2,"end_line":491,"end_character":69},"in_reply_to":"ccafb8f0_abe2bedb","updated":"2021-01-07 18:53:31.000000000","message":"oh thsi is called out in the commit message.\nya i think bocking this was still a bug and we should be reverting that block. {} should work but i understand why you are doing this now so ignore my inital comment.","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b80d5820ff821d6ceb57156fbf89dfe8868e28e3","unresolved":false,"context_lines":[{"line_number":1122,"context_line":"                use_project_id_in_urls\u003dself.USE_PROJECT_ID,"},{"line_number":1123,"context_line":"                stub_keystone\u003dself.STUB_KEYSTONE))"},{"line_number":1124,"context_line":""},{"line_number":1125,"context_line":"        self.admin_api \u003d self.api_fixture.admin_api"},{"line_number":1126,"context_line":"        # if the class needs to run as admin, make the api endpoint"},{"line_number":1127,"context_line":"        # the admin, otherwise it\u0027s safer to run as non admin user."},{"line_number":1128,"context_line":"        if self.ADMIN_API:"}],"source_content_type":"text/x-python","patch_set":17,"id":"fd9bc845_16ea494e","line":1125,"updated":"2021-02-18 12:23:06.000000000","message":"Yes, good idea (y). Eventually I\u0027d like to get rid of \u0027ADMIN_API\u0027 entirely and force people to think about whether their calls really need admin context or not, but this is obviously work for another day/patch","commit_id":"2b24434cf3a6ebd8d77cc94716232fda812cc316"}],"nova/tests/functional/test_routed_networks.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0cc28503d4a1abec01fdba4583558cc585c69aab","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 Justin Santa Barbara"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":16,"id":"26fb9d86_36eccd60","line":1,"updated":"2021-02-17 12:30:46.000000000","message":"hm, this seems wrong, drop this line","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ffdab19f6ed433bf9497ab9ea670db8b79c6bf90","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 Justin Santa Barbara"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":16,"id":"1e723063_b6175c6d","line":1,"in_reply_to":"26fb9d86_36eccd60","updated":"2021-02-18 11:19:29.000000000","message":"LOL, I duplicated test_servers, that\u0027s why ;)","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8abd713f3c255659d824a4ea02d3f86b564f57cd","unresolved":true,"context_lines":[{"line_number":11,"context_line":"#    distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"import copy"},{"line_number":16,"context_line":"import random"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"5bad06c9_c0c6d2df","line":14,"updated":"2021-02-17 14:48:22.000000000","message":"nit: missing newline?","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ffdab19f6ed433bf9497ab9ea670db8b79c6bf90","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"import copy"},{"line_number":16,"context_line":"import random"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9ca76779_f79df3ef","line":14,"in_reply_to":"5bad06c9_c0c6d2df","updated":"2021-02-18 11:19:29.000000000","message":"Ack","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8abd713f3c255659d824a4ea02d3f86b564f57cd","unresolved":true,"context_lines":[{"line_number":220,"context_line":"        # add extra ports and the related network to the neutron fixture"},{"line_number":221,"context_line":"        # specifically for these tests."},{"line_number":222,"context_line":"        self._networks[self.network_multisegment[\u0027id\u0027]] \u003d \\"},{"line_number":223,"context_line":"            self.network_multisegment"},{"line_number":224,"context_line":"        self._ports["},{"line_number":225,"context_line":"            self.port_with_deferred_ip_allocation[\u0027id\u0027]] \u003d \\"},{"line_number":226,"context_line":"            copy.deepcopy(self.port_with_deferred_ip_allocation)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7b422ca4_ec2cce39","line":223,"updated":"2021-02-17 14:48:22.000000000","message":"style nit:\n\n  self._networks[\n      self.network_multisegment[\u0027id\u0027]\n  ] \u003d self.network_multisegment\n\nhere and below","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ffdab19f6ed433bf9497ab9ea670db8b79c6bf90","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        # add extra ports and the related network to the neutron fixture"},{"line_number":221,"context_line":"        # specifically for these tests."},{"line_number":222,"context_line":"        self._networks[self.network_multisegment[\u0027id\u0027]] \u003d \\"},{"line_number":223,"context_line":"            self.network_multisegment"},{"line_number":224,"context_line":"        self._ports["},{"line_number":225,"context_line":"            self.port_with_deferred_ip_allocation[\u0027id\u0027]] \u003d \\"},{"line_number":226,"context_line":"            copy.deepcopy(self.port_with_deferred_ip_allocation)"}],"source_content_type":"text/x-python","patch_set":16,"id":"a60df565_f249bd54","line":223,"in_reply_to":"7b422ca4_ec2cce39","updated":"2021-02-18 11:19:29.000000000","message":"Ack","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0cc28503d4a1abec01fdba4583558cc585c69aab","unresolved":true,"context_lines":[{"line_number":238,"context_line":"            copy.deepcopy(self.subnet_for_segment_id_2)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        # Fake Neutron supporting the segments extension"},{"line_number":241,"context_line":"        self.list_extensions \u003d self._list_neutron_extensions"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    def _list_neutron_extensions(self, *args, **kwargs):"},{"line_number":244,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":16,"id":"d3996c94_28c962ef","line":241,"updated":"2021-02-17 12:30:46.000000000","message":"this can be now simply achieved by defining the below _list_neutron_extensions as list_neutron_extensions to override the base fixture class behavior","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ffdab19f6ed433bf9497ab9ea670db8b79c6bf90","unresolved":false,"context_lines":[{"line_number":238,"context_line":"            copy.deepcopy(self.subnet_for_segment_id_2)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        # Fake Neutron supporting the segments extension"},{"line_number":241,"context_line":"        self.list_extensions \u003d self._list_neutron_extensions"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    def _list_neutron_extensions(self, *args, **kwargs):"},{"line_number":244,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":16,"id":"6f2ce1e5_9fc86070","line":241,"in_reply_to":"1911adb8_9faeb138","updated":"2021-02-18 11:19:29.000000000","message":"I\u0027ll just redefine list_extensions() for this fixture but we could support adding new extensions later.","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8abd713f3c255659d824a4ea02d3f86b564f57cd","unresolved":true,"context_lines":[{"line_number":238,"context_line":"            copy.deepcopy(self.subnet_for_segment_id_2)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        # Fake Neutron supporting the segments extension"},{"line_number":241,"context_line":"        self.list_extensions \u003d self._list_neutron_extensions"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    def _list_neutron_extensions(self, *args, **kwargs):"},{"line_number":244,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":16,"id":"1911adb8_9faeb138","line":241,"in_reply_to":"d3996c94_28c962ef","updated":"2021-02-17 14:48:22.000000000","message":"We could also make \u0027_extensions\u0027 an attribute of the fixture and override that, keeping the same function from the parent. I\u0027d prefer that, personally","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0cc28503d4a1abec01fdba4583558cc585c69aab","unresolved":true,"context_lines":[{"line_number":254,"context_line":"            ]"},{"line_number":255,"context_line":"        }"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    def show_subnet(self, subnet_id, **_params):"},{"line_number":258,"context_line":"        if subnet_id not in self._subnets:"},{"line_number":259,"context_line":"            raise neutron_client_exc.NeutronClientException()"},{"line_number":260,"context_line":"        return {\u0027subnet\u0027: copy.deepcopy(self._subnets[subnet_id])}"}],"source_content_type":"text/x-python","patch_set":16,"id":"a2428bd0_e850e6b0","line":257,"updated":"2021-02-17 12:30:46.000000000","message":"this is pretty generic so it can go to the base fixture","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ffdab19f6ed433bf9497ab9ea670db8b79c6bf90","unresolved":false,"context_lines":[{"line_number":254,"context_line":"            ]"},{"line_number":255,"context_line":"        }"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    def show_subnet(self, subnet_id, **_params):"},{"line_number":258,"context_line":"        if subnet_id not in self._subnets:"},{"line_number":259,"context_line":"            raise neutron_client_exc.NeutronClientException()"},{"line_number":260,"context_line":"        return {\u0027subnet\u0027: copy.deepcopy(self._subnets[subnet_id])}"}],"source_content_type":"text/x-python","patch_set":16,"id":"009d726c_4c6cbd21","line":257,"in_reply_to":"842ab9a6_2f9a57a5","updated":"2021-02-18 11:19:29.000000000","message":"Ack","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8abd713f3c255659d824a4ea02d3f86b564f57cd","unresolved":true,"context_lines":[{"line_number":254,"context_line":"            ]"},{"line_number":255,"context_line":"        }"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    def show_subnet(self, subnet_id, **_params):"},{"line_number":258,"context_line":"        if subnet_id not in self._subnets:"},{"line_number":259,"context_line":"            raise neutron_client_exc.NeutronClientException()"},{"line_number":260,"context_line":"        return {\u0027subnet\u0027: copy.deepcopy(self._subnets[subnet_id])}"}],"source_content_type":"text/x-python","patch_set":16,"id":"842ab9a6_2f9a57a5","line":257,"in_reply_to":"a2428bd0_e850e6b0","updated":"2021-02-17 14:48:22.000000000","message":"+1","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8abd713f3c255659d824a4ea02d3f86b564f57cd","unresolved":true,"context_lines":[{"line_number":262,"context_line":"    def list_segments(self, network_id, **_params):"},{"line_number":263,"context_line":"        segments \u003d ["},{"line_number":264,"context_line":"            {\"id\": segment[\"id\"]}"},{"line_number":265,"context_line":"            for segment in self.segments"},{"line_number":266,"context_line":"            if segment[\"network_id\"] \u003d\u003d network_id"},{"line_number":267,"context_line":"        ]"},{"line_number":268,"context_line":"        return {\"segments\": segments}"}],"source_content_type":"text/x-python","patch_set":16,"id":"528afc7a_0aeed894","line":265,"updated":"2021-02-17 14:48:22.000000000","message":"style nit: these two could go on one line. Also, should subnets be private (_subnets)?","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ffdab19f6ed433bf9497ab9ea670db8b79c6bf90","unresolved":false,"context_lines":[{"line_number":262,"context_line":"    def list_segments(self, network_id, **_params):"},{"line_number":263,"context_line":"        segments \u003d ["},{"line_number":264,"context_line":"            {\"id\": segment[\"id\"]}"},{"line_number":265,"context_line":"            for segment in self.segments"},{"line_number":266,"context_line":"            if segment[\"network_id\"] \u003d\u003d network_id"},{"line_number":267,"context_line":"        ]"},{"line_number":268,"context_line":"        return {\"segments\": segments}"}],"source_content_type":"text/x-python","patch_set":16,"id":"767a9555_0569e3ae","line":265,"in_reply_to":"528afc7a_0aeed894","updated":"2021-02-18 11:19:29.000000000","message":"No, the private objects (_ports, _subnets, _networks) are actually dicts of the relative public objects keyed by their IDs. Here, I just use the public objects I already defined as I don\u0027t want to create a dict in __init__ for the segments.","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8abd713f3c255659d824a4ea02d3f86b564f57cd","unresolved":true,"context_lines":[{"line_number":265,"context_line":"            for segment in self.segments"},{"line_number":266,"context_line":"            if segment[\"network_id\"] \u003d\u003d network_id"},{"line_number":267,"context_line":"        ]"},{"line_number":268,"context_line":"        return {\"segments\": segments}"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def create_port(self, body\u003dNone):"},{"line_number":271,"context_line":"        body \u003d body or {\u0027port\u0027: {}}"}],"source_content_type":"text/x-python","patch_set":16,"id":"f124bbbc_20e9bbe2","line":268,"updated":"2021-02-17 14:48:22.000000000","message":"This could also go into the parent. Even though we have no segments there, this lets others use this API in their own NeutronFixture subclass if they needed to","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ffdab19f6ed433bf9497ab9ea670db8b79c6bf90","unresolved":false,"context_lines":[{"line_number":265,"context_line":"            for segment in self.segments"},{"line_number":266,"context_line":"            if segment[\"network_id\"] \u003d\u003d network_id"},{"line_number":267,"context_line":"        ]"},{"line_number":268,"context_line":"        return {\"segments\": segments}"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def create_port(self, body\u003dNone):"},{"line_number":271,"context_line":"        body \u003d body or {\u0027port\u0027: {}}"}],"source_content_type":"text/x-python","patch_set":16,"id":"55149287_cfe610b1","line":268,"in_reply_to":"f124bbbc_20e9bbe2","updated":"2021-02-18 11:19:29.000000000","message":"Nope, we only define the public segments objects in this fixture, not there in the baseclass. Later, we could decide to define those objects in the baseclass and move this method there, but given we then also need to add the segments extension by default, I\u0027m not sure this is good after all.","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0cc28503d4a1abec01fdba4583558cc585c69aab","unresolved":true,"context_lines":[{"line_number":277,"context_line":"        # NOTE(sbauza): Segment #0 is always used when booting an instance"},{"line_number":278,"context_line":"        # without a provided port as the first supported host is related to it."},{"line_number":279,"context_line":"        # FIXME(sbauza): Do something here to not blindly set the segment"},{"line_number":280,"context_line":"        # without verifying which compute service is used by the instance."},{"line_number":281,"context_line":"        new_port.update(copy.deepcopy("},{"line_number":282,"context_line":"            self.port_with_deferred_ip_allocation_bound_to_segment_0))"},{"line_number":283,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"30ad06eb_ee70159a","line":280,"updated":"2021-02-17 12:30:46.000000000","message":"OK, so these hairy parts of the fixture is local to this specific test set which is a good step forward","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ee71fa3d3ac15b634653b1c118c4299c2ae04a4a","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        # NOTE(sbauza): Segment #0 is always used when booting an instance"},{"line_number":278,"context_line":"        # without a provided port as the first supported host is related to it."},{"line_number":279,"context_line":"        # FIXME(sbauza): Do something here to not blindly set the segment"},{"line_number":280,"context_line":"        # without verifying which compute service is used by the instance."},{"line_number":281,"context_line":"        new_port.update(copy.deepcopy("},{"line_number":282,"context_line":"            self.port_with_deferred_ip_allocation_bound_to_segment_0))"},{"line_number":283,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"8281965a_978a57cb","line":280,"in_reply_to":"30ad06eb_ee70159a","updated":"2021-02-22 16:25:57.000000000","message":"Done","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0cc28503d4a1abec01fdba4583558cc585c69aab","unresolved":true,"context_lines":[{"line_number":281,"context_line":"        new_port.update(copy.deepcopy("},{"line_number":282,"context_line":"            self.port_with_deferred_ip_allocation_bound_to_segment_0))"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"        # Fake to create a new port with some random UUID and MAC address"},{"line_number":285,"context_line":"        new_port.update({"},{"line_number":286,"context_line":"            \u0027id\u0027: str(uuidutils.generate_uuid()),"},{"line_number":287,"context_line":"            \u0027mac_address\u0027: \u002700:\u0027 + \u0027:\u0027.join("}],"source_content_type":"text/x-python","patch_set":16,"id":"81a11e93_8de2bb08","line":284,"updated":"2021-02-17 12:30:46.000000000","message":"from this point this is basically a copy of the base fixture create_port function. Can we reuse that code instead of copying it?","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ffdab19f6ed433bf9497ab9ea670db8b79c6bf90","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        new_port.update(copy.deepcopy("},{"line_number":282,"context_line":"            self.port_with_deferred_ip_allocation_bound_to_segment_0))"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"        # Fake to create a new port with some random UUID and MAC address"},{"line_number":285,"context_line":"        new_port.update({"},{"line_number":286,"context_line":"            \u0027id\u0027: str(uuidutils.generate_uuid()),"},{"line_number":287,"context_line":"            \u0027mac_address\u0027: \u002700:\u0027 + \u0027:\u0027.join("}],"source_content_type":"text/x-python","patch_set":16,"id":"fab5a786_4d5f9363","line":284,"in_reply_to":"3fd0ff0e_ab55d684","updated":"2021-02-18 11:19:29.000000000","message":"Not easily as i need to rewrite a bit create_port() but I can try.","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8abd713f3c255659d824a4ea02d3f86b564f57cd","unresolved":true,"context_lines":[{"line_number":281,"context_line":"        new_port.update(copy.deepcopy("},{"line_number":282,"context_line":"            self.port_with_deferred_ip_allocation_bound_to_segment_0))"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"        # Fake to create a new port with some random UUID and MAC address"},{"line_number":285,"context_line":"        new_port.update({"},{"line_number":286,"context_line":"            \u0027id\u0027: str(uuidutils.generate_uuid()),"},{"line_number":287,"context_line":"            \u0027mac_address\u0027: \u002700:\u0027 + \u0027:\u0027.join("}],"source_content_type":"text/x-python","patch_set":16,"id":"3fd0ff0e_ab55d684","line":284,"in_reply_to":"81a11e93_8de2bb08","updated":"2021-02-17 14:48:22.000000000","message":"Yeah, we should be able to call \u0027super().create_port(...)\u0027","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8abd713f3c255659d824a4ea02d3f86b564f57cd","unresolved":true,"context_lines":[{"line_number":314,"context_line":"        self.neutron \u003d self.useFixture(NeutronRoutedNetworksFixture(self))"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        # TODO(sbauza): Move it to _IntegratedTestBase"},{"line_number":317,"context_line":"        self.admin_api \u003d self.api_fixture.admin_api"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        # let\u0027s create 5 computes with their respective records"},{"line_number":320,"context_line":"        for i in range(1, 6):"}],"source_content_type":"text/x-python","patch_set":16,"id":"5edf6bb9_f4865811","line":317,"updated":"2021-02-17 14:48:22.000000000","message":"This shouldn\u0027t be necessary? You\u0027ve set \u0027ADMIN_API \u003d True\u0027 which means \u0027self.api\u0027 is already aliases to this.\n\nUnless something else here is reliant on self.admin_api being present, in which case this needs a little more detail","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ffdab19f6ed433bf9497ab9ea670db8b79c6bf90","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        self.neutron \u003d self.useFixture(NeutronRoutedNetworksFixture(self))"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        # TODO(sbauza): Move it to _IntegratedTestBase"},{"line_number":317,"context_line":"        self.admin_api \u003d self.api_fixture.admin_api"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        # let\u0027s create 5 computes with their respective records"},{"line_number":320,"context_line":"        for i in range(1, 6):"}],"source_content_type":"text/x-python","patch_set":16,"id":"672509ec_171157de","line":317,"in_reply_to":"5edf6bb9_f4865811","updated":"2021-02-18 11:19:29.000000000","message":"The fixture had a gap with ADMIN_API set to True and where the local variable admin_api was unset (while still used by some helper methods). I\u0027ll fix it directly in the new rev.","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0cc28503d4a1abec01fdba4583558cc585c69aab","unresolved":true,"context_lines":[{"line_number":516,"context_line":"            networks\u003d[{\u0027uuid\u0027: net[\u0027id\u0027]}])"},{"line_number":517,"context_line":"        self.assertEqual(\u0027host2\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"        server \u003d self._shelve_server(server)"},{"line_number":520,"context_line":"        server \u003d self._unshelve_server(server)"},{"line_number":521,"context_line":"        # HostNameWeigherFixture prefers host1 but the port is in a network"},{"line_number":522,"context_line":"        # that has only segments on the others. Since the instance was"}],"source_content_type":"text/x-python","patch_set":16,"id":"5c07d313_b491be97","line":519,"updated":"2021-02-17 12:30:46.000000000","message":"worth a note that this is actually offload the instance as well. So there is a real scheduling at unshelve","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ffdab19f6ed433bf9497ab9ea670db8b79c6bf90","unresolved":false,"context_lines":[{"line_number":516,"context_line":"            networks\u003d[{\u0027uuid\u0027: net[\u0027id\u0027]}])"},{"line_number":517,"context_line":"        self.assertEqual(\u0027host2\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"        server \u003d self._shelve_server(server)"},{"line_number":520,"context_line":"        server \u003d self._unshelve_server(server)"},{"line_number":521,"context_line":"        # HostNameWeigherFixture prefers host1 but the port is in a network"},{"line_number":522,"context_line":"        # that has only segments on the others. Since the instance was"}],"source_content_type":"text/x-python","patch_set":16,"id":"72f581a2_7b7c198f","line":519,"in_reply_to":"5c07d313_b491be97","updated":"2021-02-18 11:19:29.000000000","message":"Ack","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8abd713f3c255659d824a4ea02d3f86b564f57cd","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":16,"id":"14d5087b_f8a752bb","line":525,"updated":"2021-02-17 14:48:22.000000000","message":"We\u0027re missing an error case to prove out what happens if the neutron response is invalid. That should be as simple as mocking the \u0027show_subnet\u0027 or \u0027list_segments\u0027 calls to return \u0027NeutronClientException\u0027. I would expect an end user to see NoValidHost in this case.","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ffdab19f6ed433bf9497ab9ea670db8b79c6bf90","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"bb1aab0c_bc60cb0a","line":525,"in_reply_to":"14d5087b_f8a752bb","updated":"2021-02-18 11:19:29.000000000","message":"Ack","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8931ee13f40fc4f1c82e3258877defd5b415ce1d","unresolved":true,"context_lines":[{"line_number":269,"context_line":"        # without verifying which compute service is used by the instance."},{"line_number":270,"context_line":"        self.default_port \u003d ("},{"line_number":271,"context_line":"            self.port_with_deferred_ip_allocation_bound_to_segment_0"},{"line_number":272,"context_line":"        )"},{"line_number":273,"context_line":"        return super().create_port(body)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"954069e2_9fbdb474","line":272,"updated":"2021-02-18 17:55:24.000000000","message":"nit: could do this at the top-level also","commit_id":"0b75f51d8869bd30ef5b416927702d846fbace40"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c43314d007b60b66f89fe47eb31283cabe85c66f","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        # without verifying which compute service is used by the instance."},{"line_number":270,"context_line":"        self.default_port \u003d ("},{"line_number":271,"context_line":"            self.port_with_deferred_ip_allocation_bound_to_segment_0"},{"line_number":272,"context_line":"        )"},{"line_number":273,"context_line":"        return super().create_port(body)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"d2cb1be7_62457ddc","line":272,"in_reply_to":"954069e2_9fbdb474","updated":"2021-02-19 14:49:38.000000000","message":"Sure, but given the FIXME, I think we should leave it here since a smarter engineer could find a way to define the port by looking up at the accepted host.","commit_id":"0b75f51d8869bd30ef5b416927702d846fbace40"}],"nova/tests/functional/test_servers.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ec77202bb03dd3acc6d8160ecfc270ad12f4eeec","unresolved":true,"context_lines":[{"line_number":8104,"context_line":"        # Simulate the placement setup neutron does for multi segment networks"},{"line_number":8105,"context_line":"        segment_ids \u003d ["},{"line_number":8106,"context_line":"            s[\"id\"]"},{"line_number":8107,"context_line":"            for s in self.neutron.get_segment_ids_for_network("},{"line_number":8108,"context_line":"                context\u003dNone,"},{"line_number":8109,"context_line":"                client\u003dNone,"},{"line_number":8110,"context_line":"                network_id\u003dself.neutron.network_multisegment[\"id\"],"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a7ac15b_b456e7a8","line":8107,"range":{"start_line":8107,"start_character":16,"end_line":8107,"end_character":17},"updated":"2021-01-07 18:51:57.000000000","message":"nit: segment","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1f18a686bb48091bf9c224ea47bc516e5c5a7e4f","unresolved":false,"context_lines":[{"line_number":8104,"context_line":"        # Simulate the placement setup neutron does for multi segment networks"},{"line_number":8105,"context_line":"        segment_ids \u003d ["},{"line_number":8106,"context_line":"            s[\"id\"]"},{"line_number":8107,"context_line":"            for s in self.neutron.get_segment_ids_for_network("},{"line_number":8108,"context_line":"                context\u003dNone,"},{"line_number":8109,"context_line":"                client\u003dNone,"},{"line_number":8110,"context_line":"                network_id\u003dself.neutron.network_multisegment[\"id\"],"}],"source_content_type":"text/x-python","patch_set":6,"id":"d069fe9b_1e11fab4","line":8107,"range":{"start_line":8107,"start_character":16,"end_line":8107,"end_character":17},"in_reply_to":"5a7ac15b_b456e7a8","updated":"2021-02-02 16:31:50.000000000","message":"Done","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ec77202bb03dd3acc6d8160ecfc270ad12f4eeec","unresolved":true,"context_lines":[{"line_number":8204,"context_line":""},{"line_number":8205,"context_line":"        # HostNameWeigherFixture prefers host1 but the port is in a network"},{"line_number":8206,"context_line":"        # that has only segments on host2 and host3"},{"line_number":8207,"context_line":"        self.assertEqual(\u0027host2\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":8208,"context_line":""},{"line_number":8209,"context_line":"    def test_boot_with_immediate_port(self):"},{"line_number":8210,"context_line":"        # FIXME(gibi): Immediate port should be assigned to a network segment"}],"source_content_type":"text/x-python","patch_set":6,"id":"570c2b89_30029678","line":8207,"range":{"start_line":8207,"start_character":8,"end_line":8207,"end_character":65},"updated":"2021-01-07 18:51:57.000000000","message":"it might be more robust to assert server[\u0027OS-EXT-SRV-ATTR:host\u0027] !\u003d host1\nas that removes the dependency on how the filter works.\n\nthis works however and you have commented on the dependency so its just a nit.","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1f18a686bb48091bf9c224ea47bc516e5c5a7e4f","unresolved":true,"context_lines":[{"line_number":8204,"context_line":""},{"line_number":8205,"context_line":"        # HostNameWeigherFixture prefers host1 but the port is in a network"},{"line_number":8206,"context_line":"        # that has only segments on host2 and host3"},{"line_number":8207,"context_line":"        self.assertEqual(\u0027host2\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":8208,"context_line":""},{"line_number":8209,"context_line":"    def test_boot_with_immediate_port(self):"},{"line_number":8210,"context_line":"        # FIXME(gibi): Immediate port should be assigned to a network segment"}],"source_content_type":"text/x-python","patch_set":6,"id":"40924893_ed5c0cab","line":8207,"range":{"start_line":8207,"start_character":8,"end_line":8207,"end_character":65},"in_reply_to":"570c2b89_30029678","updated":"2021-02-02 16:31:50.000000000","message":"changed in later rev.","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ec77202bb03dd3acc6d8160ecfc270ad12f4eeec","unresolved":true,"context_lines":[{"line_number":8207,"context_line":"        self.assertEqual(\u0027host2\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":8208,"context_line":""},{"line_number":8209,"context_line":"    def test_boot_with_immediate_port(self):"},{"line_number":8210,"context_line":"        # FIXME(gibi): Immediate port should be assigned to a network segment"},{"line_number":8211,"context_line":"        # by neutron during port create. So the scheduler should only select"},{"line_number":8212,"context_line":"        # a host that is connected to that network segment"},{"line_number":8213,"context_line":"        # The current neutron fixture does not behave like this so this test"},{"line_number":8214,"context_line":"        # cannot verify that the behavior is correct."}],"source_content_type":"text/x-python","patch_set":6,"id":"924c7578_611473d1","line":8211,"range":{"start_line":8210,"start_character":23,"end_line":8211,"end_character":40},"updated":"2021-01-07 18:51:57.000000000","message":"imideite porst are only used with non routed networks.\n\nnetworks dont have segment by default so in general imediate ports and segments are mutally exclucive since a network cant be mixed routed subnets and non routed subnets.\n\ni think this should just be remvoed as i dont think this case can happen.","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1f18a686bb48091bf9c224ea47bc516e5c5a7e4f","unresolved":true,"context_lines":[{"line_number":8207,"context_line":"        self.assertEqual(\u0027host2\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":8208,"context_line":""},{"line_number":8209,"context_line":"    def test_boot_with_immediate_port(self):"},{"line_number":8210,"context_line":"        # FIXME(gibi): Immediate port should be assigned to a network segment"},{"line_number":8211,"context_line":"        # by neutron during port create. So the scheduler should only select"},{"line_number":8212,"context_line":"        # a host that is connected to that network segment"},{"line_number":8213,"context_line":"        # The current neutron fixture does not behave like this so this test"},{"line_number":8214,"context_line":"        # cannot verify that the behavior is correct."}],"source_content_type":"text/x-python","patch_set":6,"id":"7853268e_aef11f92","line":8211,"range":{"start_line":8210,"start_character":23,"end_line":8211,"end_character":40},"in_reply_to":"924c7578_611473d1","updated":"2021-02-02 16:31:50.000000000","message":"changed in later rev.","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ec77202bb03dd3acc6d8160ecfc270ad12f4eeec","unresolved":true,"context_lines":[{"line_number":8235,"context_line":"        # HostNameWeigherFixture prefers host1 but the port is in a network"},{"line_number":8236,"context_line":"        # that has only segments on host2 and host3"},{"line_number":8237,"context_line":"        self.assertEqual(\u0027host2\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":8238,"context_line":"        # FIXME(gibi): assert that nova creates the port in deferred mode"},{"line_number":8239,"context_line":""},{"line_number":8240,"context_line":"    def test_migrate(self):"},{"line_number":8241,"context_line":"        net \u003d self.neutron.network_multisegment"}],"source_content_type":"text/x-python","patch_set":6,"id":"d29b6bca_39dacab1","line":8238,"range":{"start_line":8238,"start_character":8,"end_line":8238,"end_character":73},"updated":"2021-01-07 18:51:57.000000000","message":"the mode is set by neutorn i belive so would this not just be asserting the behavior fo the fixture.\nso that test would be better in the fixture tests.","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1f18a686bb48091bf9c224ea47bc516e5c5a7e4f","unresolved":true,"context_lines":[{"line_number":8235,"context_line":"        # HostNameWeigherFixture prefers host1 but the port is in a network"},{"line_number":8236,"context_line":"        # that has only segments on host2 and host3"},{"line_number":8237,"context_line":"        self.assertEqual(\u0027host2\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":8238,"context_line":"        # FIXME(gibi): assert that nova creates the port in deferred mode"},{"line_number":8239,"context_line":""},{"line_number":8240,"context_line":"    def test_migrate(self):"},{"line_number":8241,"context_line":"        net \u003d self.neutron.network_multisegment"}],"source_content_type":"text/x-python","patch_set":6,"id":"30e8312c_b7d1e032","line":8238,"range":{"start_line":8238,"start_character":8,"end_line":8238,"end_character":73},"in_reply_to":"d29b6bca_39dacab1","updated":"2021-02-02 16:31:50.000000000","message":"changed in later rev.","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ec77202bb03dd3acc6d8160ecfc270ad12f4eeec","unresolved":true,"context_lines":[{"line_number":8243,"context_line":"            name\u003d\u0027server-with-routed-net\u0027,"},{"line_number":8244,"context_line":"            networks\u003d[{\u0027uuid\u0027: net[\u0027id\u0027]}])"},{"line_number":8245,"context_line":"        server \u003d self._migrate_server(server)"},{"line_number":8246,"context_line":"        # HostNameWeigherFixture prefers host1 but the port is in a network"},{"line_number":8247,"context_line":"        # that has only segments on host2 and host3 and host2 is avoided"},{"line_number":8248,"context_line":"        self.assertEqual(\u0027host3\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":8249,"context_line":""},{"line_number":8250,"context_line":"    def test_live_migrate(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fdc7d6f1_2360b38a","line":8247,"range":{"start_line":8246,"start_character":8,"end_line":8247,"end_character":72},"updated":"2021-01-07 18:51:57.000000000","message":"and due to that preference it will booth on host2 and migrate to host 3?\n\nthat would be incorrect behaviour as it would be changing network segments which should not be allowed by the pre-filter.","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1f18a686bb48091bf9c224ea47bc516e5c5a7e4f","unresolved":true,"context_lines":[{"line_number":8243,"context_line":"            name\u003d\u0027server-with-routed-net\u0027,"},{"line_number":8244,"context_line":"            networks\u003d[{\u0027uuid\u0027: net[\u0027id\u0027]}])"},{"line_number":8245,"context_line":"        server \u003d self._migrate_server(server)"},{"line_number":8246,"context_line":"        # HostNameWeigherFixture prefers host1 but the port is in a network"},{"line_number":8247,"context_line":"        # that has only segments on host2 and host3 and host2 is avoided"},{"line_number":8248,"context_line":"        self.assertEqual(\u0027host3\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":8249,"context_line":""},{"line_number":8250,"context_line":"    def test_live_migrate(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7ca0d6f4_14c4fde6","line":8247,"range":{"start_line":8246,"start_character":8,"end_line":8247,"end_character":72},"in_reply_to":"fdc7d6f1_2360b38a","updated":"2021-02-02 16:31:50.000000000","message":"changed in later rev.","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ec77202bb03dd3acc6d8160ecfc270ad12f4eeec","unresolved":true,"context_lines":[{"line_number":8247,"context_line":"        # that has only segments on host2 and host3 and host2 is avoided"},{"line_number":8248,"context_line":"        self.assertEqual(\u0027host3\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":8249,"context_line":""},{"line_number":8250,"context_line":"    def test_live_migrate(self):"},{"line_number":8251,"context_line":"        net \u003d self.neutron.network_multisegment"},{"line_number":8252,"context_line":"        server \u003d self._create_server("},{"line_number":8253,"context_line":"            name\u003d\u0027server-with-routed-net\u0027,"},{"line_number":8254,"context_line":"            networks\u003d[{\u0027uuid\u0027: net[\u0027id\u0027]}])"},{"line_number":8255,"context_line":"        self._live_migrate(server)"},{"line_number":8256,"context_line":"        server \u003d self.api.get_server(server[\u0027id\u0027])"},{"line_number":8257,"context_line":"        # HostNameWeigherFixture prefers host1 but the port is in a network"},{"line_number":8258,"context_line":"        # that has only segments on host2 and host3 and host2 is avoided"},{"line_number":8259,"context_line":"        self.assertEqual(\u0027host3\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":8260,"context_line":""},{"line_number":8261,"context_line":"    def test_evacuate(self):"},{"line_number":8262,"context_line":"        net \u003d self.neutron.network_multisegment"}],"source_content_type":"text/x-python","patch_set":6,"id":"88c3a6a1_12d50cc3","line":8259,"range":{"start_line":8250,"start_character":1,"end_line":8259,"end_character":65},"updated":"2021-01-07 18:51:57.000000000","message":"as above ths should not work since its corrsing segments which si not allowed since each segment is mapped to a subnet and crossign segments woudl require the port ip to change which is not allowed.","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1f18a686bb48091bf9c224ea47bc516e5c5a7e4f","unresolved":true,"context_lines":[{"line_number":8247,"context_line":"        # that has only segments on host2 and host3 and host2 is avoided"},{"line_number":8248,"context_line":"        self.assertEqual(\u0027host3\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":8249,"context_line":""},{"line_number":8250,"context_line":"    def test_live_migrate(self):"},{"line_number":8251,"context_line":"        net \u003d self.neutron.network_multisegment"},{"line_number":8252,"context_line":"        server \u003d self._create_server("},{"line_number":8253,"context_line":"            name\u003d\u0027server-with-routed-net\u0027,"},{"line_number":8254,"context_line":"            networks\u003d[{\u0027uuid\u0027: net[\u0027id\u0027]}])"},{"line_number":8255,"context_line":"        self._live_migrate(server)"},{"line_number":8256,"context_line":"        server \u003d self.api.get_server(server[\u0027id\u0027])"},{"line_number":8257,"context_line":"        # HostNameWeigherFixture prefers host1 but the port is in a network"},{"line_number":8258,"context_line":"        # that has only segments on host2 and host3 and host2 is avoided"},{"line_number":8259,"context_line":"        self.assertEqual(\u0027host3\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":8260,"context_line":""},{"line_number":8261,"context_line":"    def test_evacuate(self):"},{"line_number":8262,"context_line":"        net \u003d self.neutron.network_multisegment"}],"source_content_type":"text/x-python","patch_set":6,"id":"8fce8923_231cd1fe","line":8259,"range":{"start_line":8250,"start_character":1,"end_line":8259,"end_character":65},"in_reply_to":"88c3a6a1_12d50cc3","updated":"2021-02-02 16:31:50.000000000","message":"changed in later rev.","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ec77202bb03dd3acc6d8160ecfc270ad12f4eeec","unresolved":true,"context_lines":[{"line_number":8258,"context_line":"        # that has only segments on host2 and host3 and host2 is avoided"},{"line_number":8259,"context_line":"        self.assertEqual(\u0027host3\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":8260,"context_line":""},{"line_number":8261,"context_line":"    def test_evacuate(self):"},{"line_number":8262,"context_line":"        net \u003d self.neutron.network_multisegment"},{"line_number":8263,"context_line":"        server \u003d self._create_server("},{"line_number":8264,"context_line":"            name\u003d\u0027server-with-routed-net\u0027,"},{"line_number":8265,"context_line":"            networks\u003d[{\u0027uuid\u0027: net[\u0027id\u0027]}])"},{"line_number":8266,"context_line":""},{"line_number":8267,"context_line":"        # The instance landed on host2 as the segment was related."},{"line_number":8268,"context_line":"        self.admin_api.put_service_force_down(self.compute2_service_id, True)"},{"line_number":8269,"context_line":"        server \u003d self._evacuate_server(server)"},{"line_number":8270,"context_line":"        # HostNameWeigherFixture prefers host1 but the port is in a network"},{"line_number":8271,"context_line":"        # that has only segments on host2 and host3 and host2 is avoided"},{"line_number":8272,"context_line":"        self.assertEqual(\u0027host3\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":8273,"context_line":""},{"line_number":8274,"context_line":"    def test_unshelve_after_shelve(self):"},{"line_number":8275,"context_line":"        net \u003d self.neutron.network_multisegment"}],"source_content_type":"text/x-python","patch_set":6,"id":"39dbf794_9cc6ff4f","line":8272,"range":{"start_line":8261,"start_character":1,"end_line":8272,"end_character":65},"updated":"2021-01-07 18:51:57.000000000","message":"again this also should fail because we do not have a second host with the correct  network.\n\ncan you just add a compute 4 placing it in the same segment as host 2\nthat will allow this and the above test to work.","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1f18a686bb48091bf9c224ea47bc516e5c5a7e4f","unresolved":true,"context_lines":[{"line_number":8258,"context_line":"        # that has only segments on host2 and host3 and host2 is avoided"},{"line_number":8259,"context_line":"        self.assertEqual(\u0027host3\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":8260,"context_line":""},{"line_number":8261,"context_line":"    def test_evacuate(self):"},{"line_number":8262,"context_line":"        net \u003d self.neutron.network_multisegment"},{"line_number":8263,"context_line":"        server \u003d self._create_server("},{"line_number":8264,"context_line":"            name\u003d\u0027server-with-routed-net\u0027,"},{"line_number":8265,"context_line":"            networks\u003d[{\u0027uuid\u0027: net[\u0027id\u0027]}])"},{"line_number":8266,"context_line":""},{"line_number":8267,"context_line":"        # The instance landed on host2 as the segment was related."},{"line_number":8268,"context_line":"        self.admin_api.put_service_force_down(self.compute2_service_id, True)"},{"line_number":8269,"context_line":"        server \u003d self._evacuate_server(server)"},{"line_number":8270,"context_line":"        # HostNameWeigherFixture prefers host1 but the port is in a network"},{"line_number":8271,"context_line":"        # that has only segments on host2 and host3 and host2 is avoided"},{"line_number":8272,"context_line":"        self.assertEqual(\u0027host3\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":8273,"context_line":""},{"line_number":8274,"context_line":"    def test_unshelve_after_shelve(self):"},{"line_number":8275,"context_line":"        net \u003d self.neutron.network_multisegment"}],"source_content_type":"text/x-python","patch_set":6,"id":"6f139b69_42872a35","line":8272,"range":{"start_line":8261,"start_character":1,"end_line":8272,"end_character":65},"in_reply_to":"39dbf794_9cc6ff4f","updated":"2021-02-02 16:31:50.000000000","message":"changed in later rev.","commit_id":"eea4b27fdb5ceac8ef7a6384ff0bae49b211c436"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"370a40058e6512dc086cfba22b708f402eac447c","unresolved":true,"context_lines":[{"line_number":8349,"context_line":"        # HostNameWeigherFixture prefers host1 but the port is in a network"},{"line_number":8350,"context_line":"        # that has only segments on host2, host3 and host4"},{"line_number":8351,"context_line":"        self.assertEqual(\u0027host2\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":8352,"context_line":"        # FIXME(gibi): assert that nova creates the port in deferred mode"},{"line_number":8353,"context_line":""},{"line_number":8354,"context_line":"    def test_migrate(self):"},{"line_number":8355,"context_line":"        net \u003d self.neutron.network_multisegment"}],"source_content_type":"text/x-python","patch_set":12,"id":"476d7e78_97e6874a","line":8352,"updated":"2021-02-08 12:10:28.000000000","message":"I think it at least needs to be asserted but maybe we need some implementation too","commit_id":"3f375d8db9d851cb6d19cf5e1cdffba195894c56"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4fbe1792376a3cd47d544facb11597becb6afe13","unresolved":true,"context_lines":[{"line_number":8349,"context_line":"        # HostNameWeigherFixture prefers host1 but the port is in a network"},{"line_number":8350,"context_line":"        # that has only segments on host2, host3 and host4"},{"line_number":8351,"context_line":"        self.assertEqual(\u0027host2\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":8352,"context_line":"        # FIXME(gibi): assert that nova creates the port in deferred mode"},{"line_number":8353,"context_line":""},{"line_number":8354,"context_line":"    def test_migrate(self):"},{"line_number":8355,"context_line":"        net \u003d self.neutron.network_multisegment"}],"source_content_type":"text/x-python","patch_set":12,"id":"6f1aa081_ee6cc3ef","line":8352,"in_reply_to":"476d7e78_97e6874a","updated":"2021-02-08 14:27:24.000000000","message":"I\u0027m not sure how to make it asserted as we already fixture the create_port() method in https://review.opendev.org/c/openstack/nova/+/749068/12/nova/tests/fixtures.py#2155","commit_id":"3f375d8db9d851cb6d19cf5e1cdffba195894c56"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3a663ce81998f6780a9f8f08761fb6127a0b084a","unresolved":false,"context_lines":[{"line_number":8349,"context_line":"        # HostNameWeigherFixture prefers host1 but the port is in a network"},{"line_number":8350,"context_line":"        # that has only segments on host2, host3 and host4"},{"line_number":8351,"context_line":"        self.assertEqual(\u0027host2\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":8352,"context_line":"        # FIXME(gibi): assert that nova creates the port in deferred mode"},{"line_number":8353,"context_line":""},{"line_number":8354,"context_line":"    def test_migrate(self):"},{"line_number":8355,"context_line":"        net \u003d self.neutron.network_multisegment"}],"source_content_type":"text/x-python","patch_set":12,"id":"aa043982_1e089a00","line":8352,"in_reply_to":"6f1aa081_ee6cc3ef","updated":"2021-02-08 17:15:48.000000000","message":"Ack","commit_id":"3f375d8db9d851cb6d19cf5e1cdffba195894c56"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"370a40058e6512dc086cfba22b708f402eac447c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":12,"id":"3e89c6aa_67251bcf","line":8411,"updated":"2021-02-08 12:10:28.000000000","message":"So I think we need a test where multiple network requests are provided in a single boot request, as I think the current prefilter logic does not handle that.","commit_id":"3f375d8db9d851cb6d19cf5e1cdffba195894c56"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4fbe1792376a3cd47d544facb11597becb6afe13","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"6f276700_9e9fb0ee","line":8411,"in_reply_to":"3e89c6aa_67251bcf","updated":"2021-02-08 14:27:24.000000000","message":"Ack","commit_id":"3f375d8db9d851cb6d19cf5e1cdffba195894c56"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3a663ce81998f6780a9f8f08761fb6127a0b084a","unresolved":true,"context_lines":[{"line_number":8173,"context_line":"        weights \u003d {\u0027host1\u0027: 500, \u0027host2\u0027: 400, \u0027host3\u0027: 300, \u0027host4\u0027: 200,"},{"line_number":8174,"context_line":"                   \u0027host5\u0027: 100}"},{"line_number":8175,"context_line":"        self.useFixture(nova_fixtures.HostNameWeigherFixture(weights\u003dweights))"},{"line_number":8176,"context_line":"        super(RoutedNetworkTests, self).setUp()"},{"line_number":8177,"context_line":""},{"line_number":8178,"context_line":"        self._start_compute(\u0027host1\u0027)"},{"line_number":8179,"context_line":"        self.compute1 \u003d self._start_compute(\u0027host1\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"a394010d_c2a0f22c","line":8176,"range":{"start_line":8176,"start_character":14,"end_line":8176,"end_character":38},"updated":"2021-02-08 17:15:48.000000000","message":"you don\u0027t need to use the old super format","commit_id":"f470b0c3255404335b98414861338fdfd49e2d44"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1869f93c53107b306de6d8e1b4b8aed06cd2f9a3","unresolved":false,"context_lines":[{"line_number":8173,"context_line":"        weights \u003d {\u0027host1\u0027: 500, \u0027host2\u0027: 400, \u0027host3\u0027: 300, \u0027host4\u0027: 200,"},{"line_number":8174,"context_line":"                   \u0027host5\u0027: 100}"},{"line_number":8175,"context_line":"        self.useFixture(nova_fixtures.HostNameWeigherFixture(weights\u003dweights))"},{"line_number":8176,"context_line":"        super(RoutedNetworkTests, self).setUp()"},{"line_number":8177,"context_line":""},{"line_number":8178,"context_line":"        self._start_compute(\u0027host1\u0027)"},{"line_number":8179,"context_line":"        self.compute1 \u003d self._start_compute(\u0027host1\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ca46c359_3d300f65","line":8176,"range":{"start_line":8176,"start_character":14,"end_line":8176,"end_character":38},"in_reply_to":"33a9945d_f691ed67","updated":"2021-02-09 09:50:21.000000000","message":"Ack","commit_id":"f470b0c3255404335b98414861338fdfd49e2d44"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0684c91a5af5a9006f9077793bddb5a5aa24cd6c","unresolved":true,"context_lines":[{"line_number":8173,"context_line":"        weights \u003d {\u0027host1\u0027: 500, \u0027host2\u0027: 400, \u0027host3\u0027: 300, \u0027host4\u0027: 200,"},{"line_number":8174,"context_line":"                   \u0027host5\u0027: 100}"},{"line_number":8175,"context_line":"        self.useFixture(nova_fixtures.HostNameWeigherFixture(weights\u003dweights))"},{"line_number":8176,"context_line":"        super(RoutedNetworkTests, self).setUp()"},{"line_number":8177,"context_line":""},{"line_number":8178,"context_line":"        self._start_compute(\u0027host1\u0027)"},{"line_number":8179,"context_line":"        self.compute1 \u003d self._start_compute(\u0027host1\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"33a9945d_f691ed67","line":8176,"range":{"start_line":8176,"start_character":14,"end_line":8176,"end_character":38},"in_reply_to":"a394010d_c2a0f22c","updated":"2021-02-09 02:29:54.000000000","message":"yep with python 3 you can just do super()\nand the interpreter does reflection to determin the class.","commit_id":"f470b0c3255404335b98414861338fdfd49e2d44"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0684c91a5af5a9006f9077793bddb5a5aa24cd6c","unresolved":true,"context_lines":[{"line_number":8175,"context_line":"        self.useFixture(nova_fixtures.HostNameWeigherFixture(weights\u003dweights))"},{"line_number":8176,"context_line":"        super(RoutedNetworkTests, self).setUp()"},{"line_number":8177,"context_line":""},{"line_number":8178,"context_line":"        self._start_compute(\u0027host1\u0027)"},{"line_number":8179,"context_line":"        self.compute1 \u003d self._start_compute(\u0027host1\u0027)"},{"line_number":8180,"context_line":"        self.compute1_rp_uuid \u003d self._get_provider_uuid_by_host(\u0027host1\u0027)"},{"line_number":8181,"context_line":"        self.compute1_service_id \u003d self.admin_api.get_services("}],"source_content_type":"text/x-python","patch_set":13,"id":"0d4ff3b3_8727dce4","line":8178,"range":{"start_line":8178,"start_character":0,"end_line":8178,"end_character":3},"updated":"2021-02-09 02:29:54.000000000","message":"you dont need this line right\nthe next line where you save the result is enough.\n\nalso you copy pasted this for the other nodes so same applies ther.","commit_id":"f470b0c3255404335b98414861338fdfd49e2d44"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1869f93c53107b306de6d8e1b4b8aed06cd2f9a3","unresolved":false,"context_lines":[{"line_number":8175,"context_line":"        self.useFixture(nova_fixtures.HostNameWeigherFixture(weights\u003dweights))"},{"line_number":8176,"context_line":"        super(RoutedNetworkTests, self).setUp()"},{"line_number":8177,"context_line":""},{"line_number":8178,"context_line":"        self._start_compute(\u0027host1\u0027)"},{"line_number":8179,"context_line":"        self.compute1 \u003d self._start_compute(\u0027host1\u0027)"},{"line_number":8180,"context_line":"        self.compute1_rp_uuid \u003d self._get_provider_uuid_by_host(\u0027host1\u0027)"},{"line_number":8181,"context_line":"        self.compute1_service_id \u003d self.admin_api.get_services("}],"source_content_type":"text/x-python","patch_set":13,"id":"74600f76_3c4b7bd1","line":8178,"range":{"start_line":8178,"start_character":0,"end_line":8178,"end_character":3},"in_reply_to":"0d4ff3b3_8727dce4","updated":"2021-02-09 09:50:21.000000000","message":"Ack","commit_id":"f470b0c3255404335b98414861338fdfd49e2d44"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3a663ce81998f6780a9f8f08761fb6127a0b084a","unresolved":true,"context_lines":[{"line_number":8372,"context_line":"        # two different segments not intertwined."},{"line_number":8373,"context_line":"        port0 \u003d self.neutron.port_on_segment_id_0"},{"line_number":8374,"context_line":"        port1 \u003d self.neutron.port_on_segment_id_2"},{"line_number":8375,"context_line":"        # Here we ask for a server with 2 NICs on both segments."},{"line_number":8376,"context_line":"        server \u003d self._create_server("},{"line_number":8377,"context_line":"            name\u003d\u0027server-with-routed-net\u0027,"},{"line_number":8378,"context_line":"            networks\u003d[{\u0027port\u0027: port0[\u0027id\u0027]}, {\u0027port\u0027: port1[\u0027id\u0027]}])"}],"source_content_type":"text/x-python","patch_set":13,"id":"6f63b2e0_8581c194","line":8375,"range":{"start_line":8375,"start_character":40,"end_line":8375,"end_character":54},"updated":"2021-02-08 17:15:48.000000000","message":"nit: 1 NICs on each segment","commit_id":"f470b0c3255404335b98414861338fdfd49e2d44"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1869f93c53107b306de6d8e1b4b8aed06cd2f9a3","unresolved":false,"context_lines":[{"line_number":8372,"context_line":"        # two different segments not intertwined."},{"line_number":8373,"context_line":"        port0 \u003d self.neutron.port_on_segment_id_0"},{"line_number":8374,"context_line":"        port1 \u003d self.neutron.port_on_segment_id_2"},{"line_number":8375,"context_line":"        # Here we ask for a server with 2 NICs on both segments."},{"line_number":8376,"context_line":"        server \u003d self._create_server("},{"line_number":8377,"context_line":"            name\u003d\u0027server-with-routed-net\u0027,"},{"line_number":8378,"context_line":"            networks\u003d[{\u0027port\u0027: port0[\u0027id\u0027]}, {\u0027port\u0027: port1[\u0027id\u0027]}])"}],"source_content_type":"text/x-python","patch_set":13,"id":"ac6cde4c_463b9137","line":8375,"range":{"start_line":8375,"start_character":40,"end_line":8375,"end_character":54},"in_reply_to":"6f63b2e0_8581c194","updated":"2021-02-09 09:50:21.000000000","message":"Ack","commit_id":"f470b0c3255404335b98414861338fdfd49e2d44"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3a663ce81998f6780a9f8f08761fb6127a0b084a","unresolved":true,"context_lines":[{"line_number":8379,"context_line":""},{"line_number":8380,"context_line":"        # host2 should win with the weigher but as we asked for both segments,"},{"line_number":8381,"context_line":"        # only host5 supports them."},{"line_number":8382,"context_line":"        self.assertEqual(\u0027host5\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":8383,"context_line":""},{"line_number":8384,"context_line":"    def test_migrate(self):"},{"line_number":8385,"context_line":"        net \u003d self.neutron.network_multisegment"}],"source_content_type":"text/x-python","patch_set":13,"id":"6574f8ff_142e6873","line":8382,"updated":"2021-02-08 17:15:48.000000000","message":"awesome!","commit_id":"f470b0c3255404335b98414861338fdfd49e2d44"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0684c91a5af5a9006f9077793bddb5a5aa24cd6c","unresolved":true,"context_lines":[{"line_number":8379,"context_line":""},{"line_number":8380,"context_line":"        # host2 should win with the weigher but as we asked for both segments,"},{"line_number":8381,"context_line":"        # only host5 supports them."},{"line_number":8382,"context_line":"        self.assertEqual(\u0027host5\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":8383,"context_line":""},{"line_number":8384,"context_line":"    def test_migrate(self):"},{"line_number":8385,"context_line":"        net \u003d self.neutron.network_multisegment"}],"source_content_type":"text/x-python","patch_set":13,"id":"7930909e_440fd7c9","line":8382,"in_reply_to":"6574f8ff_142e6873","updated":"2021-02-09 02:29:54.000000000","message":"yep this is really good test coverage","commit_id":"f470b0c3255404335b98414861338fdfd49e2d44"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"07e2a916ebb2562c0d9c18d8408d2a10eb972941","unresolved":true,"context_lines":[{"line_number":8161,"context_line":"            server, qos_normal_port, qos_sriov_port)"},{"line_number":8162,"context_line":""},{"line_number":8163,"context_line":""},{"line_number":8164,"context_line":"class RoutedNetworkTests(integrated_helpers.ProviderUsageBaseTestCase):"},{"line_number":8165,"context_line":"    compute_driver \u003d \u0027fake.MediumFakeDriver\u0027"},{"line_number":8166,"context_line":""},{"line_number":8167,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"abd955b8_6a6d6b7f","line":8164,"updated":"2021-02-09 18:18:47.000000000","message":"Any reason to use this and not \u0027integrated_helpers._IntegratedTestBase\u0027. I\u0027d like to remove \u0027ProviderUsageBaseTestCase\u0027 eventually and you don\u0027t seem to be relying on any of the placement\u0027y things here.\n\nAlso, if you do end up creating a prefilter submodule, this would be a good candidate for a new \u0027nova.tests.functional.scheduler.test_router_networks\u0027 module instead of cramming more stuff in here","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"98f43dbbb2bdb4547bb0596fba31006073da3c0e","unresolved":false,"context_lines":[{"line_number":8161,"context_line":"            server, qos_normal_port, qos_sriov_port)"},{"line_number":8162,"context_line":""},{"line_number":8163,"context_line":""},{"line_number":8164,"context_line":"class RoutedNetworkTests(integrated_helpers.ProviderUsageBaseTestCase):"},{"line_number":8165,"context_line":"    compute_driver \u003d \u0027fake.MediumFakeDriver\u0027"},{"line_number":8166,"context_line":""},{"line_number":8167,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"c3533a42_2e58ffb6","line":8164,"in_reply_to":"abd955b8_6a6d6b7f","updated":"2021-02-16 14:45:48.000000000","message":"Ack","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"90ba0c2c9387b9433ea2130b64ad4da1f7bb4d57","unresolved":true,"context_lines":[{"line_number":8177,"context_line":""},{"line_number":8178,"context_line":"        # let\u0027s create 5 computes with their respective records"},{"line_number":8179,"context_line":"        for i in range(1, 6):"},{"line_number":8180,"context_line":"            setattr(self, \u0027compute%s\u0027 % i, self._start_compute(\u0027host%s\u0027 % i))"},{"line_number":8181,"context_line":"            setattr(self, \u0027compute%s_rp_uuid\u0027 % i,"},{"line_number":8182,"context_line":"                    self._get_provider_uuid_by_host(\u0027host%s\u0027 % i))"},{"line_number":8183,"context_line":"            setattr(self, \u0027compute%s_service_id\u0027 % i,"}],"source_content_type":"text/x-python","patch_set":15,"id":"f6cbb40d_ea319f0a","line":8180,"range":{"start_line":8180,"start_character":12,"end_line":8180,"end_character":19},"updated":"2021-02-09 10:09:11.000000000","message":"personally i would have prefered if you stored the compute agents in a dict by name instead\nof using setattr but this works too and is nicer then the copy and past before so i ok with this.\n\nsame for the rps and compute services but thats a minor nit.","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"98f43dbbb2bdb4547bb0596fba31006073da3c0e","unresolved":true,"context_lines":[{"line_number":8177,"context_line":""},{"line_number":8178,"context_line":"        # let\u0027s create 5 computes with their respective records"},{"line_number":8179,"context_line":"        for i in range(1, 6):"},{"line_number":8180,"context_line":"            setattr(self, \u0027compute%s\u0027 % i, self._start_compute(\u0027host%s\u0027 % i))"},{"line_number":8181,"context_line":"            setattr(self, \u0027compute%s_rp_uuid\u0027 % i,"},{"line_number":8182,"context_line":"                    self._get_provider_uuid_by_host(\u0027host%s\u0027 % i))"},{"line_number":8183,"context_line":"            setattr(self, \u0027compute%s_service_id\u0027 % i,"}],"source_content_type":"text/x-python","patch_set":15,"id":"43632c0a_8b203b80","line":8180,"range":{"start_line":8180,"start_character":12,"end_line":8180,"end_character":19},"in_reply_to":"f6cbb40d_ea319f0a","updated":"2021-02-16 14:45:48.000000000","message":"Yeah, but this would be a huge dict (or maybe 3), that\u0027s why I preferred to use setattr.","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"}],"nova/tests/unit/scheduler/test_request_filter.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"370a40058e6512dc086cfba22b708f402eac447c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":12,"id":"db70b2c1_c082312f","line":558,"updated":"2021-02-08 12:10:28.000000000","message":"we need to cover the scenario when more than one network request is in the RequestSpec","commit_id":"3f375d8db9d851cb6d19cf5e1cdffba195894c56"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4fbe1792376a3cd47d544facb11597becb6afe13","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"977ac554_3cf1f853","line":558,"in_reply_to":"db70b2c1_c082312f","updated":"2021-02-08 14:27:24.000000000","message":"Ack","commit_id":"3f375d8db9d851cb6d19cf5e1cdffba195894c56"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3a663ce81998f6780a9f8f08761fb6127a0b084a","unresolved":true,"context_lines":[{"line_number":571,"context_line":"                        self.context, reqspec))"},{"line_number":572,"context_line":"        # require_aggregates() has a specific semantics here where multiple"},{"line_number":573,"context_line":"        # aggregates provided in the same call have their UUIDs being joined."},{"line_number":574,"context_line":"        self.assertEqual([\u0027,\u0027.join([uuids.agg1, uuids.agg2]), uuids.agg3],"},{"line_number":575,"context_line":"                         reqspec.requested_destination.aggregates)"},{"line_number":576,"context_line":"        mock_get_aggs_network.assert_has_calls(["},{"line_number":577,"context_line":"            mock.call(self.context, mock.ANY, mock.ANY, uuids.net1),"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aba7623_d47afb9a","line":574,"updated":"2021-02-08 17:15:48.000000000","message":"yepp this is the placement semantic to query aggregates with both OR (\u0026member_of\u003din:uuids.agg1,uuids.agg2) and AND (\u0026member_of\u003duuids.agg3) semantics.","commit_id":"f470b0c3255404335b98414861338fdfd49e2d44"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"07e2a916ebb2562c0d9c18d8408d2a10eb972941","unresolved":true,"context_lines":[{"line_number":497,"context_line":"    @mock.patch(\u0027nova.scheduler.utils.get_aggregates_for_routed_subnet\u0027)"},{"line_number":498,"context_line":"    @mock.patch(\u0027nova.network.neutron.API.show_port\u0027)"},{"line_number":499,"context_line":"    def test_routed_networks_filter_with_requested_port_immediate("},{"line_number":500,"context_line":"            self, mock_show_port, mock_get_aggs_subnet):"},{"line_number":501,"context_line":"        req_net \u003d objects.NetworkRequest(port_id\u003duuids.port1)"},{"line_number":502,"context_line":"        reqspec \u003d objects.RequestSpec("},{"line_number":503,"context_line":"            requested_networks\u003dobjects.NetworkRequestList(objects\u003d[req_net]))"}],"source_content_type":"text/x-python","patch_set":15,"id":"58cb0f74_0f0e5bda","line":500,"range":{"start_line":500,"start_character":8,"end_line":500,"end_character":56},"updated":"2021-02-09 18:18:47.000000000","message":"style nit:\n\n  def test_routed_networks_filter_with_requested_port_immediate(\n      self, mock_show_port, mock_get_aggs_subnet,\n  ):\n\nhere and below","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"98f43dbbb2bdb4547bb0596fba31006073da3c0e","unresolved":false,"context_lines":[{"line_number":497,"context_line":"    @mock.patch(\u0027nova.scheduler.utils.get_aggregates_for_routed_subnet\u0027)"},{"line_number":498,"context_line":"    @mock.patch(\u0027nova.network.neutron.API.show_port\u0027)"},{"line_number":499,"context_line":"    def test_routed_networks_filter_with_requested_port_immediate("},{"line_number":500,"context_line":"            self, mock_show_port, mock_get_aggs_subnet):"},{"line_number":501,"context_line":"        req_net \u003d objects.NetworkRequest(port_id\u003duuids.port1)"},{"line_number":502,"context_line":"        reqspec \u003d objects.RequestSpec("},{"line_number":503,"context_line":"            requested_networks\u003dobjects.NetworkRequestList(objects\u003d[req_net]))"}],"source_content_type":"text/x-python","patch_set":15,"id":"c00f9596_e8d8f916","line":500,"range":{"start_line":500,"start_character":8,"end_line":500,"end_character":56},"in_reply_to":"58cb0f74_0f0e5bda","updated":"2021-02-16 14:45:48.000000000","message":"Ack","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8abd713f3c255659d824a4ea02d3f86b564f57cd","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":16,"id":"c9d00bac_acb9bf50","line":583,"updated":"2021-02-17 14:48:22.000000000","message":"Missing two error cases here for the \u0027list_segments\u0027 failure and the \u0027show_subnet\u0027 failure","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ffdab19f6ed433bf9497ab9ea670db8b79c6bf90","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"ebe7f064_d3fc1bf4","line":583,"in_reply_to":"c9d00bac_acb9bf50","updated":"2021-02-18 11:19:29.000000000","message":"Those tests have to be related to the utils helper methods. Given the prefilter directly passes those exceptions, only the functional test should be OK.","commit_id":"2a285ef6a20258c56dbf802984e7bc38207b0879"}],"releasenotes/notes/routed_networks_filter-3d274e827449a144.yaml":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"370a40058e6512dc086cfba22b708f402eac447c","unresolved":true,"context_lines":[{"line_number":8,"context_line":"    would be accepted."},{"line_number":9,"context_line":"    In order to support this behaviour, operators need to turn on the"},{"line_number":10,"context_line":"    `[scheduler]/query_placement_for_routed_network_aggregates` configuration"},{"line_number":11,"context_line":"    option which is on False by default."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    .. _`routed networks`: https://docs.openstack.org/neutron/latest/admin/config-routed-networks.html"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"3de35058_4f2a0195","line":11,"range":{"start_line":11,"start_character":20,"end_line":11,"end_character":22},"updated":"2021-02-08 12:10:28.000000000","message":"nit: do we need \u0027\u0027on\u0027 here?","commit_id":"3f375d8db9d851cb6d19cf5e1cdffba195894c56"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4fbe1792376a3cd47d544facb11597becb6afe13","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    would be accepted."},{"line_number":9,"context_line":"    In order to support this behaviour, operators need to turn on the"},{"line_number":10,"context_line":"    `[scheduler]/query_placement_for_routed_network_aggregates` configuration"},{"line_number":11,"context_line":"    option which is on False by default."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    .. _`routed networks`: https://docs.openstack.org/neutron/latest/admin/config-routed-networks.html"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"bd350a8a_b1669c9a","line":11,"range":{"start_line":11,"start_character":20,"end_line":11,"end_character":22},"in_reply_to":"3de35058_4f2a0195","updated":"2021-02-08 14:27:24.000000000","message":"Done","commit_id":"3f375d8db9d851cb6d19cf5e1cdffba195894c56"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"07e2a916ebb2562c0d9c18d8408d2a10eb972941","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The scheduler can know verify if the requested networks or the port are"},{"line_number":5,"context_line":"    related to Neutron `routed networks`_ with some specific segments to use."},{"line_number":6,"context_line":"    In this case, the routed networks prefilter will require the related"},{"line_number":7,"context_line":"    aggregates to the Placement API, so only hosts within the asked aggregates"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"bb7a248a_f3f80483","line":4,"range":{"start_line":4,"start_character":22,"end_line":4,"end_character":26},"updated":"2021-02-09 18:18:47.000000000","message":"now","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"98f43dbbb2bdb4547bb0596fba31006073da3c0e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The scheduler can know verify if the requested networks or the port are"},{"line_number":5,"context_line":"    related to Neutron `routed networks`_ with some specific segments to use."},{"line_number":6,"context_line":"    In this case, the routed networks prefilter will require the related"},{"line_number":7,"context_line":"    aggregates to the Placement API, so only hosts within the asked aggregates"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"6587f25e_9b31b9b9","line":4,"range":{"start_line":4,"start_character":22,"end_line":4,"end_character":26},"in_reply_to":"bb7a248a_f3f80483","updated":"2021-02-16 14:45:48.000000000","message":"Ack","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"07e2a916ebb2562c0d9c18d8408d2a10eb972941","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    The scheduler can know verify if the requested networks or the port are"},{"line_number":5,"context_line":"    related to Neutron `routed networks`_ with some specific segments to use."},{"line_number":6,"context_line":"    In this case, the routed networks prefilter will require the related"},{"line_number":7,"context_line":"    aggregates to the Placement API, so only hosts within the asked aggregates"},{"line_number":8,"context_line":"    would be accepted."},{"line_number":9,"context_line":"    In order to support this behaviour, operators need to turn on the"},{"line_number":10,"context_line":"    `[scheduler]/query_placement_for_routed_network_aggregates` configuration"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"bd612fa7_6aafbeb6","line":7,"range":{"start_line":7,"start_character":15,"end_line":7,"end_character":35},"updated":"2021-02-09 18:18:47.000000000","message":"to be reported in placement ?","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"98f43dbbb2bdb4547bb0596fba31006073da3c0e","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    The scheduler can know verify if the requested networks or the port are"},{"line_number":5,"context_line":"    related to Neutron `routed networks`_ with some specific segments to use."},{"line_number":6,"context_line":"    In this case, the routed networks prefilter will require the related"},{"line_number":7,"context_line":"    aggregates to the Placement API, so only hosts within the asked aggregates"},{"line_number":8,"context_line":"    would be accepted."},{"line_number":9,"context_line":"    In order to support this behaviour, operators need to turn on the"},{"line_number":10,"context_line":"    `[scheduler]/query_placement_for_routed_network_aggregates` configuration"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"73768e16_bd6769f1","line":7,"range":{"start_line":7,"start_character":15,"end_line":7,"end_character":35},"in_reply_to":"bd612fa7_6aafbeb6","updated":"2021-02-16 14:45:48.000000000","message":"Ack","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"07e2a916ebb2562c0d9c18d8408d2a10eb972941","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    In this case, the routed networks prefilter will require the related"},{"line_number":7,"context_line":"    aggregates to the Placement API, so only hosts within the asked aggregates"},{"line_number":8,"context_line":"    would be accepted."},{"line_number":9,"context_line":"    In order to support this behaviour, operators need to turn on the"},{"line_number":10,"context_line":"    `[scheduler]/query_placement_for_routed_network_aggregates` configuration"},{"line_number":11,"context_line":"    option which is False by default."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":15,"id":"9e94b16a_7e8a8f18","line":9,"range":{"start_line":9,"start_character":58,"end_line":9,"end_character":65},"updated":"2021-02-09 18:18:47.000000000","message":"set","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"98f43dbbb2bdb4547bb0596fba31006073da3c0e","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    In this case, the routed networks prefilter will require the related"},{"line_number":7,"context_line":"    aggregates to the Placement API, so only hosts within the asked aggregates"},{"line_number":8,"context_line":"    would be accepted."},{"line_number":9,"context_line":"    In order to support this behaviour, operators need to turn on the"},{"line_number":10,"context_line":"    `[scheduler]/query_placement_for_routed_network_aggregates` configuration"},{"line_number":11,"context_line":"    option which is False by default."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":15,"id":"2c825900_8c2f90d1","line":9,"range":{"start_line":9,"start_character":58,"end_line":9,"end_character":65},"in_reply_to":"9e94b16a_7e8a8f18","updated":"2021-02-16 14:45:48.000000000","message":"Ack","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"07e2a916ebb2562c0d9c18d8408d2a10eb972941","unresolved":true,"context_lines":[{"line_number":7,"context_line":"    aggregates to the Placement API, so only hosts within the asked aggregates"},{"line_number":8,"context_line":"    would be accepted."},{"line_number":9,"context_line":"    In order to support this behaviour, operators need to turn on the"},{"line_number":10,"context_line":"    `[scheduler]/query_placement_for_routed_network_aggregates` configuration"},{"line_number":11,"context_line":"    option which is False by default."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    .. _`routed networks`: https://docs.openstack.org/neutron/latest/admin/config-routed-networks.html"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"acf7c4c4_407d6578","line":10,"range":{"start_line":10,"start_character":4,"end_line":10,"end_character":63},"updated":"2021-02-09 18:18:47.000000000","message":"``[scheduler] query_placement_for_routed_network_aggregates``\n\n(double backticks)","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"98f43dbbb2bdb4547bb0596fba31006073da3c0e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    aggregates to the Placement API, so only hosts within the asked aggregates"},{"line_number":8,"context_line":"    would be accepted."},{"line_number":9,"context_line":"    In order to support this behaviour, operators need to turn on the"},{"line_number":10,"context_line":"    `[scheduler]/query_placement_for_routed_network_aggregates` configuration"},{"line_number":11,"context_line":"    option which is False by default."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    .. _`routed networks`: https://docs.openstack.org/neutron/latest/admin/config-routed-networks.html"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"9a31c318_2d7376fe","line":10,"range":{"start_line":10,"start_character":4,"end_line":10,"end_character":63},"in_reply_to":"acf7c4c4_407d6578","updated":"2021-02-16 14:45:48.000000000","message":"Ack","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"07e2a916ebb2562c0d9c18d8408d2a10eb972941","unresolved":true,"context_lines":[{"line_number":8,"context_line":"    would be accepted."},{"line_number":9,"context_line":"    In order to support this behaviour, operators need to turn on the"},{"line_number":10,"context_line":"    `[scheduler]/query_placement_for_routed_network_aggregates` configuration"},{"line_number":11,"context_line":"    option which is False by default."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    .. _`routed networks`: https://docs.openstack.org/neutron/latest/admin/config-routed-networks.html"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"b2909a31_449f0bde","line":11,"range":{"start_line":11,"start_character":11,"end_line":11,"end_character":37},"updated":"2021-02-09 18:18:47.000000000","message":"which defaults to ``False``.","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"98f43dbbb2bdb4547bb0596fba31006073da3c0e","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    would be accepted."},{"line_number":9,"context_line":"    In order to support this behaviour, operators need to turn on the"},{"line_number":10,"context_line":"    `[scheduler]/query_placement_for_routed_network_aggregates` configuration"},{"line_number":11,"context_line":"    option which is False by default."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    .. _`routed networks`: https://docs.openstack.org/neutron/latest/admin/config-routed-networks.html"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"ccb68c92_6ba4a470","line":11,"range":{"start_line":11,"start_character":11,"end_line":11,"end_character":37},"in_reply_to":"b2909a31_449f0bde","updated":"2021-02-16 14:45:48.000000000","message":"Ack","commit_id":"385e7c234628007d764f9a504f0d2c809ff499eb"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b80d5820ff821d6ceb57156fbf89dfe8868e28e3","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    The scheduler can now verify if the requested networks or the port are"},{"line_number":5,"context_line":"    related to Neutron `routed networks`_ with some specific segments to use."},{"line_number":6,"context_line":"    In this case, the routed networks prefilter will require the related"},{"line_number":7,"context_line":"    aggregates to be reported in Placement, so only hosts within the asked aggregates"},{"line_number":8,"context_line":"    would be accepted."},{"line_number":9,"context_line":"    In order to support this behaviour, operators need to set the"},{"line_number":10,"context_line":"    ``[scheduler]/query_placement_for_routed_network_aggregates`` configuration"}],"source_content_type":"text/x-yaml","patch_set":17,"id":"1eefef49_49d6b069","line":7,"range":{"start_line":7,"start_character":75,"end_line":7,"end_character":85},"updated":"2021-02-18 12:23:06.000000000","message":"nit: wrapping (\u003c 80 chars)","commit_id":"2b24434cf3a6ebd8d77cc94716232fda812cc316"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"67f9d4c65ad1e1986b64254bd01c30950d1e2dbc","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    The scheduler can now verify if the requested networks or the port are"},{"line_number":5,"context_line":"    related to Neutron `routed networks`_ with some specific segments to use."},{"line_number":6,"context_line":"    In this case, the routed networks prefilter will require the related"},{"line_number":7,"context_line":"    aggregates to be reported in Placement, so only hosts within the asked aggregates"},{"line_number":8,"context_line":"    would be accepted."},{"line_number":9,"context_line":"    In order to support this behaviour, operators need to set the"},{"line_number":10,"context_line":"    ``[scheduler]/query_placement_for_routed_network_aggregates`` configuration"}],"source_content_type":"text/x-yaml","patch_set":17,"id":"5eed4de5_1279a036","line":7,"range":{"start_line":7,"start_character":75,"end_line":7,"end_character":85},"in_reply_to":"1eefef49_49d6b069","updated":"2021-02-18 14:38:13.000000000","message":"Ack","commit_id":"2b24434cf3a6ebd8d77cc94716232fda812cc316"}]}
