)]}'
{"nova/conductor/manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e395426f59248b7fb99f8da54dfdc97179339614","unresolved":false,"context_lines":[{"line_number":1346,"context_line":"        # placement aggregates, we need to modify the request spec with the"},{"line_number":1347,"context_line":"        # requested network segment IDs prior to calling the scheduler."},{"line_number":1348,"context_line":"        request_spec \u003d request_specs[0]"},{"line_number":1349,"context_line":"        if CONF.scheduler.query_placement_for_routed_network_aggregates:"},{"line_number":1350,"context_line":"            scheduler_utils.modify_req_spec_for_routed_networks("},{"line_number":1351,"context_line":"                context, self.network_api, self.report_client,"},{"line_number":1352,"context_line":"                request_spec, requested_networks)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_52eb65af","line":1349,"updated":"2019-05-03 21:01:15.000000000","message":"Yeah normally this happens in a request filter in the scheduler, but we don\u0027t have the requested networks there, neither is it awesome to call neutron APIs or placement APIs from what is essentially a scheduler filter.","commit_id":"dadce377e504c2a9e61f378fa413b03c247cd7bb"}],"nova/network/neutronv2/api.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"be480ddc6aec818f961d71f6eaffb47f6b66acfd","unresolved":false,"context_lines":[{"line_number":3393,"context_line":"    def get_segment_ids_for_network(self, context, network_id):"},{"line_number":3394,"context_line":"        \"\"\"todo: docstring\"\"\""},{"line_number":3395,"context_line":"        client \u003d _get_ksa_client(context, admin\u003dTrue)"},{"line_number":3396,"context_line":"        resp \u003d client.get(\u0027/v2.0/segments?network_id\u003d%sfields\u003did\u0027 %"},{"line_number":3397,"context_line":"                          network_id, raise_exc\u003dFalse)"},{"line_number":3398,"context_line":"        if resp:"},{"line_number":3399,"context_line":"            return [segment[\u0027id\u0027] for segment in resp.json()[\u0027segments\u0027]]"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfbec78f_5121169f","line":3396,"range":{"start_line":3396,"start_character":27,"end_line":3396,"end_character":40},"updated":"2019-05-03 20:03:49.000000000","message":"what if the plugin does not support segments then this will raise an exception","commit_id":"06a12809da7bcb99d8f494fb3ee982cd4fe0e526"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e395426f59248b7fb99f8da54dfdc97179339614","unresolved":false,"context_lines":[{"line_number":3393,"context_line":"    def get_segment_ids_for_network(self, context, network_id):"},{"line_number":3394,"context_line":"        \"\"\"todo: docstring\"\"\""},{"line_number":3395,"context_line":"        client \u003d _get_ksa_client(context, admin\u003dTrue)"},{"line_number":3396,"context_line":"        resp \u003d client.get(\u0027/v2.0/segments?network_id\u003d%sfields\u003did\u0027 %"},{"line_number":3397,"context_line":"                          network_id, raise_exc\u003dFalse)"},{"line_number":3398,"context_line":"        if resp:"},{"line_number":3399,"context_line":"            return [segment[\u0027id\u0027] for segment in resp.json()[\u0027segments\u0027]]"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfbec78f_ece2ad2f","line":3396,"range":{"start_line":3396,"start_character":27,"end_line":3396,"end_character":40},"in_reply_to":"dfbec78f_5121169f","updated":"2019-05-03 21:01:15.000000000","message":"\u003e what if the plugin does not support segments then this will raise\n \u003e an exception\n\nAck that\u0027s the multi-provider extension right?\n\nhttps://developer.openstack.org/api-ref/network/v2/index.html?expanded\u003dlist-extensions-detail#multiple-provider-extension","commit_id":"06a12809da7bcb99d8f494fb3ee982cd4fe0e526"},{"author":{"_account_id":10962,"name":"David Bingham","email":"dbingham@godaddy.com","username":"wwriverrat"},"change_message_id":"a4e5b86ed6c37c4cdea4bfb29cf1a55e8f3265de","unresolved":false,"context_lines":[{"line_number":3393,"context_line":"    def get_segment_ids_for_network(self, context, network_id):"},{"line_number":3394,"context_line":"        \"\"\"todo: docstring\"\"\""},{"line_number":3395,"context_line":"        client \u003d _get_ksa_client(context, admin\u003dTrue)"},{"line_number":3396,"context_line":"        resp \u003d client.get(\u0027/v2.0/segments?network_id\u003d%sfields\u003did\u0027 %"},{"line_number":3397,"context_line":"                          network_id, raise_exc\u003dFalse)"},{"line_number":3398,"context_line":"        if resp:"},{"line_number":3399,"context_line":"            return [segment[\u0027id\u0027] for segment in resp.json()[\u0027segments\u0027]]"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfbec78f_b1d6524f","line":3396,"range":{"start_line":3396,"start_character":27,"end_line":3396,"end_character":40},"in_reply_to":"dfbec78f_5121169f","updated":"2019-05-03 20:15:16.000000000","message":"Just thinking out loud...\n\nWould likely need to verify if there is a path to this function that doesnt already check CONF.scheduler.query_placement_for_routed_network_aggregates. If not add another in this function.\n\nMight also need some Plugin specific documentation stating not to enable this feature for plugin-X (or even base plugin). I guess also the plugin itself might stub out the /v2.0/segments to return a 400-like response with some \"not supported\" response message.","commit_id":"06a12809da7bcb99d8f494fb3ee982cd4fe0e526"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e395426f59248b7fb99f8da54dfdc97179339614","unresolved":false,"context_lines":[{"line_number":3393,"context_line":"    def get_segment_ids_for_network(self, context, network_id):"},{"line_number":3394,"context_line":"        \"\"\"todo: docstring\"\"\""},{"line_number":3395,"context_line":"        client \u003d _get_ksa_client(context, admin\u003dTrue)"},{"line_number":3396,"context_line":"        resp \u003d client.get(\u0027/v2.0/segments?network_id\u003d%sfields\u003did\u0027 %"},{"line_number":3397,"context_line":"                          network_id, raise_exc\u003dFalse)"},{"line_number":3398,"context_line":"        if resp:"},{"line_number":3399,"context_line":"            return [segment[\u0027id\u0027] for segment in resp.json()[\u0027segments\u0027]]"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfbec78f_0cc5c18e","line":3396,"range":{"start_line":3396,"start_character":27,"end_line":3396,"end_character":40},"in_reply_to":"dfbec78f_b1d6524f","updated":"2019-05-03 21:01:15.000000000","message":"\u003e Just thinking out loud...\n \u003e \n \u003e Would likely need to verify if there is a path to this function\n \u003e that doesnt already check CONF.scheduler.query_placement_for_routed_network_aggregates.\n \u003e If not add another in this function.\n \u003e \n \u003e Might also need some Plugin specific documentation stating not to\n \u003e enable this feature for plugin-X (or even base plugin). I guess\n \u003e also the plugin itself might stub out the /v2.0/segments to return\n \u003e a 400-like response with some \"not supported\" response message.\n\nJust need to use the _has_multi_provider_extension method in here.","commit_id":"06a12809da7bcb99d8f494fb3ee982cd4fe0e526"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"296f1494750f082bfc01593e23e73a096404937a","unresolved":false,"context_lines":[{"line_number":3393,"context_line":"    def get_segment_ids_for_network(self, context, network_id):"},{"line_number":3394,"context_line":"        \"\"\"todo: docstring\"\"\""},{"line_number":3395,"context_line":"        client \u003d _get_ksa_client(context, admin\u003dTrue)"},{"line_number":3396,"context_line":"        resp \u003d client.get(\u0027/v2.0/segments?network_id\u003d%sfields\u003did\u0027 %"},{"line_number":3397,"context_line":"                          network_id, raise_exc\u003dFalse)"},{"line_number":3398,"context_line":"        if resp:"},{"line_number":3399,"context_line":"            return [segment[\u0027id\u0027] for segment in resp.json()[\u0027segments\u0027]]"}],"source_content_type":"text/x-python","patch_set":3,"id":"1fa4df85_b38872c6","line":3396,"range":{"start_line":3396,"start_character":27,"end_line":3396,"end_character":40},"in_reply_to":"dfbec78f_ce278eb6","updated":"2020-02-26 13:56:02.000000000","message":"Done","commit_id":"06a12809da7bcb99d8f494fb3ee982cd4fe0e526"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"feff9f95aa017677ac6430c9e3cb4066ef76b983","unresolved":false,"context_lines":[{"line_number":3393,"context_line":"    def get_segment_ids_for_network(self, context, network_id):"},{"line_number":3394,"context_line":"        \"\"\"todo: docstring\"\"\""},{"line_number":3395,"context_line":"        client \u003d _get_ksa_client(context, admin\u003dTrue)"},{"line_number":3396,"context_line":"        resp \u003d client.get(\u0027/v2.0/segments?network_id\u003d%sfields\u003did\u0027 %"},{"line_number":3397,"context_line":"                          network_id, raise_exc\u003dFalse)"},{"line_number":3398,"context_line":"        if resp:"},{"line_number":3399,"context_line":"            return [segment[\u0027id\u0027] for segment in resp.json()[\u0027segments\u0027]]"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfbec78f_ce278eb6","line":3396,"range":{"start_line":3396,"start_character":27,"end_line":3396,"end_character":40},"in_reply_to":"dfbec78f_ece2ad2f","updated":"2019-05-05 14:45:38.000000000","message":"yes, that is correct. seems like the plumbing already exists - https://github.com/openstack/nova/blob/master/nova/network/neutronv2/api.py#L1271","commit_id":"06a12809da7bcb99d8f494fb3ee982cd4fe0e526"}],"nova/scheduler/manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df29b748287c35cd51c130057380c382802baeef","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            # Only process the Placement request spec filters when Placement"},{"line_number":130,"context_line":"            # is used."},{"line_number":131,"context_line":"            try:"},{"line_number":132,"context_line":"                request_filter.process_reqspec(ctxt, spec_obj)"},{"line_number":133,"context_line":"            except exception.RequestFilterFailed as e:"},{"line_number":134,"context_line":"                raise exception.NoValidHost(reason\u003de.message)"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_12abadd6","line":132,"updated":"2019-05-02 22:17:21.000000000","message":"Normally we\u0027d process the request spec here for the routed network segment aggregates, but that\u0027s a bit too late for conductor (which has the requested networks and such) and too early for shoving the required aggregates into the requested_resources as an unnumbered request group - which is what resources_from_request_spec generates below based on the request_spec.flavor. So either we need to be able to add an unnumbered request group to the request spec\u0027s requested_resources list (but placement requires resources to be specified on that same group today), or we need to hack the \u0027resources\u0027 variable below to shove in our required aggregates.","commit_id":"f1abf6306c4008e46f215839a0031920fbba8630"}]}
