)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7e2c539c6131a2630f2449ab809f13c56928e0a7","unresolved":true,"context_lines":[{"line_number":18,"context_line":"Reject create server with smartnic in port if minimal compute"},{"line_number":19,"context_line":"service version less than 57"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Reject create server with port that request multi devices"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Implements: blueprint sriov-smartnic-support"},{"line_number":24,"context_line":"Change-Id: Ia705a0341fb067e746a3b91ec4fc6d149bcaffb8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"16b2004d_6b99efa1","line":21,"updated":"2021-07-14 13:37:46.000000000","message":"Could you please describe here how it can happen that a device profile name in the port results in multiple devices? Are these devices PCI devices?","commit_id":"9556d09fbb072f20c3efb4a6eb8fc4ee9e5355bb"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"e2024aebcee1a5c70fac88a91eb70e17df74cb79","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Reject create server with smartnic in port if minimal compute"},{"line_number":19,"context_line":"service version less than 57"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Reject create server with port that request multi devices"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Implements: blueprint sriov-smartnic-support"},{"line_number":24,"context_line":"Change-Id: Ia705a0341fb067e746a3b91ec4fc6d149bcaffb8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"479423c0_036b7fe8","line":21,"in_reply_to":"16b2004d_6b99efa1","updated":"2021-07-15 12:10:42.000000000","message":"There is possible a malformed configurations. A device profile defined a request which want more than one device, like:\n\nthe \"resources:\" key could be more than one, and the \"resources\" \u0027s device number also could more than one.\n\n { \"resources:CUSTOM_ACCELERATOR_FPGA\": \"2\",\n      \"resources:CUSTOM_LOCAL_MEMORY\": \"1\",\n      \"trait:CUSTOM_INTEL_PAC_ARRIA10\": \"required\",\n   }\n\nwe need to block such a request for a port, that\u0027s malformed request for a neutron port.","commit_id":"9556d09fbb072f20c3efb4a6eb8fc4ee9e5355bb"}],"nova/accelerator/cyborg.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"b9c6d93407d4b3cf14a2679af164c7ad2553411b","unresolved":true,"context_lines":[{"line_number":100,"context_line":"       :param dp_groups: list of reqeust groups in a device profile."},{"line_number":101,"context_line":"    \"\"\""},{"line_number":102,"context_line":"    devices_amount \u003d 0"},{"line_number":103,"context_line":"    for _ignore, dp_group in enumerate(dp_groups):"},{"line_number":104,"context_line":"        for key, val in dp_group.items():"},{"line_number":105,"context_line":"            match \u003d schedutils.ResourceRequest.XS_KEYPAT.match(key)"},{"line_number":106,"context_line":"            if not match:"}],"source_content_type":"text/x-python","patch_set":25,"id":"54c408e2_b72814a7","line":103,"range":{"start_line":103,"start_character":8,"end_line":103,"end_character":15},"updated":"2021-07-01 07:36:52.000000000","message":"you can just write \u0027_\u0027","commit_id":"ab94b812ff4714be8ef9bf870f4fd9111facaf58"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"20c4dc24b8b50c3e043d4e6c46ab4c983449248f","unresolved":false,"context_lines":[{"line_number":100,"context_line":"       :param dp_groups: list of reqeust groups in a device profile."},{"line_number":101,"context_line":"    \"\"\""},{"line_number":102,"context_line":"    devices_amount \u003d 0"},{"line_number":103,"context_line":"    for _ignore, dp_group in enumerate(dp_groups):"},{"line_number":104,"context_line":"        for key, val in dp_group.items():"},{"line_number":105,"context_line":"            match \u003d schedutils.ResourceRequest.XS_KEYPAT.match(key)"},{"line_number":106,"context_line":"            if not match:"}],"source_content_type":"text/x-python","patch_set":25,"id":"6e31b3b5_2da9d123","line":103,"range":{"start_line":103,"start_character":8,"end_line":103,"end_character":15},"in_reply_to":"54c408e2_b72814a7","updated":"2021-07-02 03:03:56.000000000","message":"It\u0027s gonna shadow i18N","commit_id":"ab94b812ff4714be8ef9bf870f4fd9111facaf58"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7e2c539c6131a2630f2449ab809f13c56928e0a7","unresolved":true,"context_lines":[{"line_number":97,"context_line":"    \"\"\"Get requested devices amount for the groups of"},{"line_number":98,"context_line":"       a device_profile."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"       :param dp_groups: list of reqeust groups in a device profile."},{"line_number":101,"context_line":"    \"\"\""},{"line_number":102,"context_line":"    devices_amount \u003d 0"},{"line_number":103,"context_line":"    for _ignore, dp_group in enumerate(dp_groups):"}],"source_content_type":"text/x-python","patch_set":29,"id":"6d99a04a_12cca8cc","line":100,"range":{"start_line":100,"start_character":33,"end_line":100,"end_character":40},"updated":"2021-07-14 13:37:46.000000000","message":"nit: request","commit_id":"9556d09fbb072f20c3efb4a6eb8fc4ee9e5355bb"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"e2024aebcee1a5c70fac88a91eb70e17df74cb79","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    \"\"\"Get requested devices amount for the groups of"},{"line_number":98,"context_line":"       a device_profile."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"       :param dp_groups: list of reqeust groups in a device profile."},{"line_number":101,"context_line":"    \"\"\""},{"line_number":102,"context_line":"    devices_amount \u003d 0"},{"line_number":103,"context_line":"    for _ignore, dp_group in enumerate(dp_groups):"}],"source_content_type":"text/x-python","patch_set":29,"id":"c55f3730_b43f45e6","line":100,"range":{"start_line":100,"start_character":33,"end_line":100,"end_character":40},"in_reply_to":"6d99a04a_12cca8cc","updated":"2021-07-15 12:10:42.000000000","message":"Done","commit_id":"9556d09fbb072f20c3efb4a6eb8fc4ee9e5355bb"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7e2c539c6131a2630f2449ab809f13c56928e0a7","unresolved":true,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"           :param dp_name: string: device profile name"},{"line_number":151,"context_line":"                Expected to be valid, not None or \u0027\u0027."},{"line_number":152,"context_line":"           :param owner: string: Port UUID that create the arq"},{"line_number":153,"context_line":"                Expected to be valid or None."},{"line_number":154,"context_line":"           :returns: [objects.RequestGroup]"},{"line_number":155,"context_line":"           :raises: DeviceProfileError"}],"source_content_type":"text/x-python","patch_set":29,"id":"25162a86_2847b6d9","line":152,"updated":"2021-07-14 13:37:46.000000000","message":"owner is now not a param here but in get_device_request_groups","commit_id":"9556d09fbb072f20c3efb4a6eb8fc4ee9e5355bb"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"e2024aebcee1a5c70fac88a91eb70e17df74cb79","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"           :param dp_name: string: device profile name"},{"line_number":151,"context_line":"                Expected to be valid, not None or \u0027\u0027."},{"line_number":152,"context_line":"           :param owner: string: Port UUID that create the arq"},{"line_number":153,"context_line":"                Expected to be valid or None."},{"line_number":154,"context_line":"           :returns: [objects.RequestGroup]"},{"line_number":155,"context_line":"           :raises: DeviceProfileError"}],"source_content_type":"text/x-python","patch_set":29,"id":"6c9aa153_f993784d","line":152,"in_reply_to":"25162a86_2847b6d9","updated":"2021-07-15 12:10:42.000000000","message":"Done","commit_id":"9556d09fbb072f20c3efb4a6eb8fc4ee9e5355bb"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7e2c539c6131a2630f2449ab809f13c56928e0a7","unresolved":true,"context_lines":[{"line_number":151,"context_line":"                Expected to be valid, not None or \u0027\u0027."},{"line_number":152,"context_line":"           :param owner: string: Port UUID that create the arq"},{"line_number":153,"context_line":"                Expected to be valid or None."},{"line_number":154,"context_line":"           :returns: [objects.RequestGroup]"},{"line_number":155,"context_line":"           :raises: DeviceProfileError"},{"line_number":156,"context_line":"               Expected to be valid, not None or \u0027\u0027."},{"line_number":157,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":29,"id":"f2b195e6_576a496c","line":154,"updated":"2021-07-14 13:37:46.000000000","message":"This is not true any more","commit_id":"9556d09fbb072f20c3efb4a6eb8fc4ee9e5355bb"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"e2024aebcee1a5c70fac88a91eb70e17df74cb79","unresolved":false,"context_lines":[{"line_number":151,"context_line":"                Expected to be valid, not None or \u0027\u0027."},{"line_number":152,"context_line":"           :param owner: string: Port UUID that create the arq"},{"line_number":153,"context_line":"                Expected to be valid or None."},{"line_number":154,"context_line":"           :returns: [objects.RequestGroup]"},{"line_number":155,"context_line":"           :raises: DeviceProfileError"},{"line_number":156,"context_line":"               Expected to be valid, not None or \u0027\u0027."},{"line_number":157,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":29,"id":"656152a2_ce6b02e0","line":154,"in_reply_to":"f2b195e6_576a496c","updated":"2021-07-15 12:10:42.000000000","message":"Done","commit_id":"9556d09fbb072f20c3efb4a6eb8fc4ee9e5355bb"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c723c410c930c8cfbc23c60c3e3e433e23f8f0f1","unresolved":true,"context_lines":[{"line_number":165,"context_line":"    def get_device_request_groups(self, dp_groups, owner):"},{"line_number":166,"context_line":"        \"\"\"Get list of profile group objects from the device profile."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"           :param dp_groups: device groups of a device profile."},{"line_number":169,"context_line":"           :returns: [objects.RequestGroup]"},{"line_number":170,"context_line":"           :raises: DeviceProfileError"},{"line_number":171,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":31,"id":"0a1bc302_58d07171","line":168,"updated":"2021-08-04 10:28:34.000000000","message":":param owner: is missing","commit_id":"851c9bfd7cf9bf093156da1b84b8c0f0104f9491"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"0926966eb16d38e96d920a1034927197dbc6f809","unresolved":false,"context_lines":[{"line_number":165,"context_line":"    def get_device_request_groups(self, dp_groups, owner):"},{"line_number":166,"context_line":"        \"\"\"Get list of profile group objects from the device profile."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"           :param dp_groups: device groups of a device profile."},{"line_number":169,"context_line":"           :returns: [objects.RequestGroup]"},{"line_number":170,"context_line":"           :raises: DeviceProfileError"},{"line_number":171,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":31,"id":"6ca3890e_94b8c7ed","line":168,"in_reply_to":"0a1bc302_58d07171","updated":"2021-08-05 08:03:48.000000000","message":"Done","commit_id":"851c9bfd7cf9bf093156da1b84b8c0f0104f9491"}],"nova/api/openstack/compute/migrate_server.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"b9c6d93407d4b3cf14a2679af164c7ad2553411b","unresolved":true,"context_lines":[{"line_number":121,"context_line":"                                                         strict\u003dTrue)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        try:"},{"line_number":124,"context_line":"            self.compute_api.live_migrate(context, instance, block_migration,"},{"line_number":125,"context_line":"                                          disk_over_commit, host, force,"},{"line_number":126,"context_line":"                                          async_)"},{"line_number":127,"context_line":"        except (exception.NoValidHost,"}],"source_content_type":"text/x-python","patch_set":25,"id":"882fb601_e3b3b7e5","line":124,"updated":"2021-07-01 07:36:52.000000000","message":"I think you should catch ForbiddenPortsWithAccelerator here also.","commit_id":"ab94b812ff4714be8ef9bf870f4fd9111facaf58"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"20c4dc24b8b50c3e043d4e6c46ab4c983449248f","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                                                         strict\u003dTrue)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        try:"},{"line_number":124,"context_line":"            self.compute_api.live_migrate(context, instance, block_migration,"},{"line_number":125,"context_line":"                                          disk_over_commit, host, force,"},{"line_number":126,"context_line":"                                          async_)"},{"line_number":127,"context_line":"        except (exception.NoValidHost,"}],"source_content_type":"text/x-python","patch_set":25,"id":"cf4cd724_d3c250b6","line":124,"in_reply_to":"882fb601_e3b3b7e5","updated":"2021-07-02 03:03:56.000000000","message":"Done","commit_id":"ab94b812ff4714be8ef9bf870f4fd9111facaf58"}],"nova/api/openstack/compute/shelve.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"b9c6d93407d4b3cf14a2679af164c7ad2553411b","unresolved":true,"context_lines":[{"line_number":67,"context_line":"    @wsgi.response(202)"},{"line_number":68,"context_line":"    @wsgi.expected_errors((404, 409))"},{"line_number":69,"context_line":"    @wsgi.action(\u0027shelveOffload\u0027)"},{"line_number":70,"context_line":"    def _shelve_offload(self, req, id, body):"},{"line_number":71,"context_line":"        \"\"\"Force removal of a shelved instance from the compute node.\"\"\""},{"line_number":72,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":73,"context_line":"        context.can(shelve_policies.POLICY_ROOT % \u0027shelve_offload\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"f2beda7d_0743425b","line":70,"updated":"2021-07-01 07:36:52.000000000","message":"ditto","commit_id":"ab94b812ff4714be8ef9bf870f4fd9111facaf58"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"20c4dc24b8b50c3e043d4e6c46ab4c983449248f","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    @wsgi.response(202)"},{"line_number":68,"context_line":"    @wsgi.expected_errors((404, 409))"},{"line_number":69,"context_line":"    @wsgi.action(\u0027shelveOffload\u0027)"},{"line_number":70,"context_line":"    def _shelve_offload(self, req, id, body):"},{"line_number":71,"context_line":"        \"\"\"Force removal of a shelved instance from the compute node.\"\"\""},{"line_number":72,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":73,"context_line":"        context.can(shelve_policies.POLICY_ROOT % \u0027shelve_offload\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"df19ad36_2e131438","line":70,"in_reply_to":"f2beda7d_0743425b","updated":"2021-07-02 03:03:56.000000000","message":"Done","commit_id":"ab94b812ff4714be8ef9bf870f4fd9111facaf58"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7e2c539c6131a2630f2449ab809f13c56928e0a7","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.network_api \u003d neutron.API()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @wsgi.response(202)"},{"line_number":40,"context_line":"    @wsgi.expected_errors((404, 403, 409, 400))"},{"line_number":41,"context_line":"    @wsgi.action(\u0027shelve\u0027)"},{"line_number":42,"context_line":"    def _shelve(self, req, id, body):"},{"line_number":43,"context_line":"        \"\"\"Move an instance into shelved mode.\"\"\""}],"source_content_type":"text/x-python","patch_set":29,"id":"0537e545_2032da73","line":40,"updated":"2021-07-14 13:37:46.000000000","message":"OK, as per [1] we don\u0027t need a new API microversion for this.\n\n[1] https://docs.openstack.org/nova/latest/contributor/microversions.html#f2","commit_id":"9556d09fbb072f20c3efb4a6eb8fc4ee9e5355bb"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"e2024aebcee1a5c70fac88a91eb70e17df74cb79","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.network_api \u003d neutron.API()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @wsgi.response(202)"},{"line_number":40,"context_line":"    @wsgi.expected_errors((404, 403, 409, 400))"},{"line_number":41,"context_line":"    @wsgi.action(\u0027shelve\u0027)"},{"line_number":42,"context_line":"    def _shelve(self, req, id, body):"},{"line_number":43,"context_line":"        \"\"\"Move an instance into shelved mode.\"\"\""}],"source_content_type":"text/x-python","patch_set":29,"id":"9ddcfabf_24ed248d","line":40,"in_reply_to":"0537e545_2032da73","updated":"2021-07-15 12:10:42.000000000","message":"The microversion code is for upgrading scenario: while there is compute node stay older version, we reject the smartnic request, until upgrading finished. I hope you talk the same \"API microversion\" as I do.","commit_id":"9556d09fbb072f20c3efb4a6eb8fc4ee9e5355bb"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c723c410c930c8cfbc23c60c3e3e433e23f8f0f1","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.network_api \u003d neutron.API()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @wsgi.response(202)"},{"line_number":40,"context_line":"    @wsgi.expected_errors((404, 403, 409, 400))"},{"line_number":41,"context_line":"    @wsgi.action(\u0027shelve\u0027)"},{"line_number":42,"context_line":"    def _shelve(self, req, id, body):"},{"line_number":43,"context_line":"        \"\"\"Move an instance into shelved mode.\"\"\""}],"source_content_type":"text/x-python","patch_set":29,"id":"bd0c82d9_3f154e93","line":40,"in_reply_to":"9ddcfabf_24ed248d","updated":"2021-08-04 10:28:34.000000000","message":"I talk about the fact that you introduced a new response code to the API. In general that would require a API microversion bump. But for 400 it does not need a new microversion as per our doc:\n\n\"The exception to not needing a microversion when returning a previously unspecified error code is the 400, 403, 404 and 415 cases. This is considered OK to return even if previously unspecified in the code since it’s implied given keystone authentication can fail with a 403 and API validation can fail with a 400 for invalid json request body. Request to url/resource that does not exist always fails with 404. Invalid content types are handled before API methods are called which results in a 415.\" [1]","commit_id":"9556d09fbb072f20c3efb4a6eb8fc4ee9e5355bb"}],"nova/compute/api.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3807535ed1445a56c069434528a435757253c20d","unresolved":true,"context_lines":[{"line_number":346,"context_line":"                vnic_type \u003d vif[\u0027vnic_type\u0027]"},{"line_number":347,"context_line":"                if vnic_type in (network_model.VNIC_TYPE_ACCELERATOR_DIRECT,"},{"line_number":348,"context_line":"                    network_model.VNIC_TYPE_ACCELERATOR_DIRECT_PHYSICAL):"},{"line_number":349,"context_line":"                    raise exception.ForbiddenWithAccelerators()"},{"line_number":350,"context_line":"            return func(self, context, instance, *args, **kwargs)"},{"line_number":351,"context_line":"        return wrapper"},{"line_number":352,"context_line":"    return inner"}],"source_content_type":"text/x-python","patch_set":8,"id":"985a331c_f914f161","line":349,"updated":"2021-05-28 08:51:13.000000000","message":"we raise same exception with minimum version check. it is ok, but we are better to have different message for the end user.","commit_id":"d94598d9487422ebde46863db600b22ecedad3c5"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"492630aff0e7724e1c30aff9643ed9790673a963","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                vnic_type \u003d vif[\u0027vnic_type\u0027]"},{"line_number":347,"context_line":"                if vnic_type in (network_model.VNIC_TYPE_ACCELERATOR_DIRECT,"},{"line_number":348,"context_line":"                    network_model.VNIC_TYPE_ACCELERATOR_DIRECT_PHYSICAL):"},{"line_number":349,"context_line":"                    raise exception.ForbiddenWithAccelerators()"},{"line_number":350,"context_line":"            return func(self, context, instance, *args, **kwargs)"},{"line_number":351,"context_line":"        return wrapper"},{"line_number":352,"context_line":"    return inner"}],"source_content_type":"text/x-python","patch_set":8,"id":"fce50745_075ce864","line":349,"in_reply_to":"985a331c_f914f161","updated":"2021-06-08 07:27:52.000000000","message":"Done","commit_id":"d94598d9487422ebde46863db600b22ecedad3c5"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"0b84630db41c968fa5a594e14d9e83c3385692b2","unresolved":true,"context_lines":[{"line_number":1065,"context_line":"            affinity_policy\u003dpci_numa_affinity_policy)"},{"line_number":1066,"context_line":"        network_metadata, port_resource_requests \u003d result"},{"line_number":1067,"context_line":""},{"line_number":1068,"context_line":"        self._check_support_vnic_accelerator(context, requested_networks)"},{"line_number":1069,"context_line":""},{"line_number":1070,"context_line":"        # Creating servers with ports that have resource requests, like QoS"},{"line_number":1071,"context_line":"        # minimum bandwidth rules, is only supported in a requested minimum"}],"source_content_type":"text/x-python","patch_set":19,"id":"252a74e0_d9ab35d8","line":1068,"range":{"start_line":1068,"start_character":13,"end_line":1068,"end_character":44},"updated":"2021-06-25 02:40:58.000000000","message":"According to spec, it will raise 400 when the compute version don\u0027t support port whose vnic type is acclerator-direct. Here it raises a 403.","commit_id":"66fbc2ad8cfe4745ae9d7974b56d648e46f58808"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"b9c6d93407d4b3cf14a2679af164c7ad2553411b","unresolved":true,"context_lines":[{"line_number":994,"context_line":"                            context,"},{"line_number":995,"context_line":"                            [\u0027nova-compute\u0027]))"},{"line_number":996,"context_line":"                    if min_version \u003c SUPPORT_VNIC_TYPE_ACCELERATOR:"},{"line_number":997,"context_line":"                        raise exception.ForbiddenPortsWithAccelerator()"},{"line_number":998,"context_line":""},{"line_number":999,"context_line":"    def _validate_and_build_base_options("},{"line_number":1000,"context_line":"        self, context, flavor, boot_meta, image_href, image_id, kernel_id,"}],"source_content_type":"text/x-python","patch_set":25,"id":"d260fc84_737ca92c","line":997,"updated":"2021-07-01 07:36:52.000000000","message":"I prefer a better exception message for this version check. Probably the upgrade doesn\u0027t finish yet, after finish those type accelerator can be support.","commit_id":"ab94b812ff4714be8ef9bf870f4fd9111facaf58"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"20c4dc24b8b50c3e043d4e6c46ab4c983449248f","unresolved":false,"context_lines":[{"line_number":994,"context_line":"                            context,"},{"line_number":995,"context_line":"                            [\u0027nova-compute\u0027]))"},{"line_number":996,"context_line":"                    if min_version \u003c SUPPORT_VNIC_TYPE_ACCELERATOR:"},{"line_number":997,"context_line":"                        raise exception.ForbiddenPortsWithAccelerator()"},{"line_number":998,"context_line":""},{"line_number":999,"context_line":"    def _validate_and_build_base_options("},{"line_number":1000,"context_line":"        self, context, flavor, boot_meta, image_href, image_id, kernel_id,"}],"source_content_type":"text/x-python","patch_set":25,"id":"f59265b8_2b33a8a3","line":997,"in_reply_to":"d260fc84_737ca92c","updated":"2021-07-02 03:03:56.000000000","message":"Done","commit_id":"ab94b812ff4714be8ef9bf870f4fd9111facaf58"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"b9c6d93407d4b3cf14a2679af164c7ad2553411b","unresolved":true,"context_lines":[{"line_number":4250,"context_line":""},{"line_number":4251,"context_line":"    @check_instance_lock"},{"line_number":4252,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.SHELVED])"},{"line_number":4253,"context_line":"    def shelve_offload(self, context, instance, clean_shutdown\u003dTrue):"},{"line_number":4254,"context_line":"        \"\"\"Remove a shelved instance from the hypervisor.\"\"\""},{"line_number":4255,"context_line":"        instance.task_state \u003d task_states.SHELVING_OFFLOADING"},{"line_number":4256,"context_line":"        instance.save(expected_task_state\u003d[None])"}],"source_content_type":"text/x-python","patch_set":25,"id":"d7f4312d_d553a2c0","line":4253,"updated":"2021-07-01 07:36:52.000000000","message":"we should reject shelve offload also","commit_id":"ab94b812ff4714be8ef9bf870f4fd9111facaf58"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"20c4dc24b8b50c3e043d4e6c46ab4c983449248f","unresolved":false,"context_lines":[{"line_number":4250,"context_line":""},{"line_number":4251,"context_line":"    @check_instance_lock"},{"line_number":4252,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.SHELVED])"},{"line_number":4253,"context_line":"    def shelve_offload(self, context, instance, clean_shutdown\u003dTrue):"},{"line_number":4254,"context_line":"        \"\"\"Remove a shelved instance from the hypervisor.\"\"\""},{"line_number":4255,"context_line":"        instance.task_state \u003d task_states.SHELVING_OFFLOADING"},{"line_number":4256,"context_line":"        instance.save(expected_task_state\u003d[None])"}],"source_content_type":"text/x-python","patch_set":25,"id":"9d76c455_fe24e685","line":4253,"in_reply_to":"d7f4312d_d553a2c0","updated":"2021-07-02 03:03:56.000000000","message":"Done","commit_id":"ab94b812ff4714be8ef9bf870f4fd9111facaf58"}],"nova/network/neutron.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"b9c6d93407d4b3cf14a2679af164c7ad2553411b","unresolved":true,"context_lines":[{"line_number":2167,"context_line":"                        device_profile)"},{"line_number":2168,"context_line":"                    dev_num \u003d cyborg.get_device_amount_of_dp_groups(dp_groups)"},{"line_number":2169,"context_line":"                    if dev_num \u003e 1:"},{"line_number":2170,"context_line":"                        err_msg \u003d \u0027reqeust multiple devices for single port.\u0027"},{"line_number":2171,"context_line":"                        raise exception.DeviceProfileError(name\u003ddevice_profile,"},{"line_number":2172,"context_line":"                            msg\u003derr_msg)"},{"line_number":2173,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"0ea1f37b_e3a38fda","line":2170,"range":{"start_line":2170,"start_character":35,"end_line":2170,"end_character":43},"updated":"2021-07-01 07:36:52.000000000","message":"type, \u0027request\u0027","commit_id":"ab94b812ff4714be8ef9bf870f4fd9111facaf58"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"20c4dc24b8b50c3e043d4e6c46ab4c983449248f","unresolved":false,"context_lines":[{"line_number":2167,"context_line":"                        device_profile)"},{"line_number":2168,"context_line":"                    dev_num \u003d cyborg.get_device_amount_of_dp_groups(dp_groups)"},{"line_number":2169,"context_line":"                    if dev_num \u003e 1:"},{"line_number":2170,"context_line":"                        err_msg \u003d \u0027reqeust multiple devices for single port.\u0027"},{"line_number":2171,"context_line":"                        raise exception.DeviceProfileError(name\u003ddevice_profile,"},{"line_number":2172,"context_line":"                            msg\u003derr_msg)"},{"line_number":2173,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"f563b311_aee785d6","line":2170,"range":{"start_line":2170,"start_character":35,"end_line":2170,"end_character":43},"in_reply_to":"0ea1f37b_e3a38fda","updated":"2021-07-02 03:03:56.000000000","message":"Done","commit_id":"ab94b812ff4714be8ef9bf870f4fd9111facaf58"}],"nova/tests/unit/network/test_neutron.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"b9c6d93407d4b3cf14a2679af164c7ad2553411b","unresolved":true,"context_lines":[{"line_number":5943,"context_line":"        mock_get_physnet_tunneled_info.side_effect \u003d ["},{"line_number":5944,"context_line":"            (\u0027physnet1\u0027, False), (\u0027physnet2\u0027, False)"},{"line_number":5945,"context_line":"         ]"},{"line_number":5946,"context_line":""},{"line_number":5947,"context_line":"        rg \u003d objects.RequestGroup(requester_id\u003d\u0027request_group_1\u0027)"},{"line_number":5948,"context_line":"        rg.add_resource(rclass\u003d\u0027CUSTOM_NIC_TRAIT\u0027, amount\u003d1)"},{"line_number":5949,"context_line":"        mock_get_rg.return_value \u003d [rg]"}],"source_content_type":"text/x-python","patch_set":25,"id":"913a0a90_6cb0bc31","line":5946,"updated":"2021-07-01 07:36:52.000000000","message":"unrelated change","commit_id":"ab94b812ff4714be8ef9bf870f4fd9111facaf58"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"20c4dc24b8b50c3e043d4e6c46ab4c983449248f","unresolved":false,"context_lines":[{"line_number":5943,"context_line":"        mock_get_physnet_tunneled_info.side_effect \u003d ["},{"line_number":5944,"context_line":"            (\u0027physnet1\u0027, False), (\u0027physnet2\u0027, False)"},{"line_number":5945,"context_line":"         ]"},{"line_number":5946,"context_line":""},{"line_number":5947,"context_line":"        rg \u003d objects.RequestGroup(requester_id\u003d\u0027request_group_1\u0027)"},{"line_number":5948,"context_line":"        rg.add_resource(rclass\u003d\u0027CUSTOM_NIC_TRAIT\u0027, amount\u003d1)"},{"line_number":5949,"context_line":"        mock_get_rg.return_value \u003d [rg]"}],"source_content_type":"text/x-python","patch_set":25,"id":"4fbceb4d_27f07238","line":5946,"in_reply_to":"913a0a90_6cb0bc31","updated":"2021-07-02 03:03:56.000000000","message":"Done","commit_id":"ab94b812ff4714be8ef9bf870f4fd9111facaf58"}],"releasenotes/notes/smartnic-support-0339efe4b68075fe.yaml":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7e2c539c6131a2630f2449ab809f13c56928e0a7","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":"    Adds support for smartnic, include vnic type \u0027accelerator-direct\u0027 and"},{"line_number":5,"context_line":"    \u0027accelerator-direct-physical\u0027. A smartnic is managed by cyborg, while"},{"line_number":6,"context_line":"    set neutron port vnic typa as \u0027accelerator-direct\u0027, enable passthrough"},{"line_number":7,"context_line":"    a smatnic VF to VM. Please note only VF(\u0027accelerator-direct\u0027 ) is"},{"line_number":8,"context_line":"    supported in this release, specified \u0027accelerator-direct-physical\u0027 will"},{"line_number":9,"context_line":"    fail to create ARQ from cyborg."}],"source_content_type":"text/x-yaml","patch_set":29,"id":"06e882b0_4a6c2d34","line":9,"range":{"start_line":4,"start_character":4,"end_line":9,"end_character":35},"updated":"2021-07-14 13:37:46.000000000","message":"Add support for smartnic via Cyborg device profiles in Neutron ports with vnic type ``accelerator-direct``. When such port is used Cyborg will manage the smartnic and Nova will pass through the smartnic VF to the server. Note that while vnic type ``accelerator-direct-physical`` also exists in Neutron it is not yet supported by Nova and the server create request will fail with such port.","commit_id":"9556d09fbb072f20c3efb4a6eb8fc4ee9e5355bb"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"e2024aebcee1a5c70fac88a91eb70e17df74cb79","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":"    Adds support for smartnic, include vnic type \u0027accelerator-direct\u0027 and"},{"line_number":5,"context_line":"    \u0027accelerator-direct-physical\u0027. A smartnic is managed by cyborg, while"},{"line_number":6,"context_line":"    set neutron port vnic typa as \u0027accelerator-direct\u0027, enable passthrough"},{"line_number":7,"context_line":"    a smatnic VF to VM. Please note only VF(\u0027accelerator-direct\u0027 ) is"},{"line_number":8,"context_line":"    supported in this release, specified \u0027accelerator-direct-physical\u0027 will"},{"line_number":9,"context_line":"    fail to create ARQ from cyborg."}],"source_content_type":"text/x-yaml","patch_set":29,"id":"27bcbfa9_fccc207a","line":9,"range":{"start_line":4,"start_character":4,"end_line":9,"end_character":35},"in_reply_to":"06e882b0_4a6c2d34","updated":"2021-07-15 12:10:42.000000000","message":"Done","commit_id":"9556d09fbb072f20c3efb4a6eb8fc4ee9e5355bb"}]}
