)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"afab645ab5e02d5be74ee0d5d01fbfa45df463e7","unresolved":true,"context_lines":[{"line_number":10,"context_line":"a cyborg ARQ is created based on the device profile."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Implements: blueprint sriov-smartnic-support"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I9ca54d63ebda626f41159b13bbe40549a714f0a1"},{"line_number":15,"context_line":"Co-Authored-By: Shaohe Feng \u003cshaohe.feng@intel.com\u003e"},{"line_number":16,"context_line":"Co-Authored-By: Xinran Wang \u003cxin-ran.wang@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"8c77b0c6_bdfb528e","line":13,"updated":"2021-03-09 15:50:22.000000000","message":"this does not really explain what you are doing in the patch.\n\nthis patch factors out the ARQ generation form create_arqs_and_match_resource_providers\nand adds get_arq_by_uuid  and adds get_arq_device_rp_uuid which uses get_arq_by_uuid.\nget_arq_device_rp_uuid is not used however.","commit_id":"d15d5080aa4c01b7b89e9f3dbc302df8d08da68e"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"7a7ad7c099404d1dafb23717b8f1c01629b8aff3","unresolved":false,"context_lines":[{"line_number":10,"context_line":"a cyborg ARQ is created based on the device profile."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Implements: blueprint sriov-smartnic-support"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I9ca54d63ebda626f41159b13bbe40549a714f0a1"},{"line_number":15,"context_line":"Co-Authored-By: Shaohe Feng \u003cshaohe.feng@intel.com\u003e"},{"line_number":16,"context_line":"Co-Authored-By: Xinran Wang \u003cxin-ran.wang@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"90931654_05a2315a","line":13,"in_reply_to":"8c77b0c6_bdfb528e","updated":"2021-03-10 08:41:35.000000000","message":"simple descriptions added.","commit_id":"d15d5080aa4c01b7b89e9f3dbc302df8d08da68e"}],"nova/accelerator/cyborg.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d87487975e2d230f3bb732b8a684773279651aa3","unresolved":true,"context_lines":[{"line_number":278,"context_line":"                    arq[\u0027state\u0027] in [\u0027Bound\u0027, \u0027BindFailed\u0027, \u0027Deleting\u0027]]"},{"line_number":279,"context_line":"        return arqs"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def get_arq(self, arq_uuid):"},{"line_number":282,"context_line":"        \"\"\"Get ARQs by uuid."},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"            The format of the returned data structure is as below:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9150bb7d_d17528ef","line":281,"range":{"start_line":281,"start_character":8,"end_line":281,"end_character":15},"updated":"2021-01-21 05:42:17.000000000","message":"how about name it as \u0027get_arg_by_uuid\u0027","commit_id":"1c985a282557ffb480e7e4cab2d54097405b4fd4"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"7d14507615f19ac75352f37da40de01a6829c721","unresolved":false,"context_lines":[{"line_number":278,"context_line":"                    arq[\u0027state\u0027] in [\u0027Bound\u0027, \u0027BindFailed\u0027, \u0027Deleting\u0027]]"},{"line_number":279,"context_line":"        return arqs"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def get_arq(self, arq_uuid):"},{"line_number":282,"context_line":"        \"\"\"Get ARQs by uuid."},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"            The format of the returned data structure is as below:"}],"source_content_type":"text/x-python","patch_set":1,"id":"213e3af2_3852ec9d","line":281,"range":{"start_line":281,"start_character":8,"end_line":281,"end_character":15},"in_reply_to":"9150bb7d_d17528ef","updated":"2021-01-21 07:17:50.000000000","message":"done.","commit_id":"1c985a282557ffb480e7e4cab2d54097405b4fd4"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"3d18318dd336b56b68e3269efc6f1e8bce8e0687","unresolved":true,"context_lines":[{"line_number":175,"context_line":"            raise exception.AcceleratorRequestOpFailed(op\u003d_(\u0027create\u0027), msg\u003dmsg)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        if not rg_rp_map:"},{"line_number":178,"context_line":"            # arq for port  don\u0027t have rp map before scehdule to a host"},{"line_number":179,"context_line":"            return arqs"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        for arq in arqs:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9067c75d_07953e76","line":178,"range":{"start_line":178,"start_character":26,"end_line":178,"end_character":27},"updated":"2021-02-25 06:44:57.000000000","message":"extra space","commit_id":"ac5d9f8d43e3dbe028ff03443f260a1fb5e4b386"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"3d18318dd336b56b68e3269efc6f1e8bce8e0687","unresolved":true,"context_lines":[{"line_number":175,"context_line":"            raise exception.AcceleratorRequestOpFailed(op\u003d_(\u0027create\u0027), msg\u003dmsg)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        if not rg_rp_map:"},{"line_number":178,"context_line":"            # arq for port  don\u0027t have rp map before scehdule to a host"},{"line_number":179,"context_line":"            return arqs"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        for arq in arqs:"}],"source_content_type":"text/x-python","patch_set":3,"id":"33b01c35_f17fcde6","line":178,"range":{"start_line":178,"start_character":53,"end_line":178,"end_character":62},"updated":"2021-02-25 06:44:57.000000000","message":"typo","commit_id":"ac5d9f8d43e3dbe028ff03443f260a1fb5e4b386"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"3d18318dd336b56b68e3269efc6f1e8bce8e0687","unresolved":true,"context_lines":[{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        arq \u003d resp.json()"},{"line_number":311,"context_line":"        if not arq:"},{"line_number":312,"context_line":"            err_msg \u003d _(\"Cyborg can\u0027t find  accelerator requests for \""},{"line_number":313,"context_line":"                        \"\u0027ARQ %s\") % arq_uuid"},{"line_number":314,"context_line":"            raise exception.AcceleratorRequestOpFailed("},{"line_number":315,"context_line":"                op\u003d_(\u0027get\u0027), msg\u003derr_msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"8bb38f11_b4cd2769","line":312,"range":{"start_line":312,"start_character":42,"end_line":312,"end_character":43},"updated":"2021-02-25 06:44:57.000000000","message":"extra space","commit_id":"ac5d9f8d43e3dbe028ff03443f260a1fb5e4b386"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f2fa81d5133c36849cccacc67e94739718aafb90","unresolved":true,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        return resp.json().get(\u0027arqs\u0027)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def create_arqs_and_match_resource_providers("},{"line_number":160,"context_line":"            self, dp_name, rg_rp_map\u003dNone):"},{"line_number":161,"context_line":"        \"\"\"Create ARQs, match them with request groups and thereby"},{"line_number":162,"context_line":"          determine their corresponding RPs."}],"source_content_type":"text/x-python","patch_set":4,"id":"43afb494_53d8f144","line":159,"range":{"start_line":159,"start_character":8,"end_line":159,"end_character":48},"updated":"2021-02-24 10:59:18.000000000","message":"can we split this into two function:\n1) create_arq\n2) update_resource_provider\n\nthis way both function can have just the necessary parameters and you don\u0027t have to return from the middle.","commit_id":"951c57f483a5d891773d1a3c1c3de28a50d25047"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"251c3c5fdd6916b7e071460deac46b6857529b42","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        return resp.json().get(\u0027arqs\u0027)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def create_arqs_and_match_resource_providers("},{"line_number":160,"context_line":"            self, dp_name, rg_rp_map\u003dNone):"},{"line_number":161,"context_line":"        \"\"\"Create ARQs, match them with request groups and thereby"},{"line_number":162,"context_line":"          determine their corresponding RPs."}],"source_content_type":"text/x-python","patch_set":4,"id":"352dd855_b2c81fbc","line":159,"range":{"start_line":159,"start_character":8,"end_line":159,"end_character":48},"in_reply_to":"43afb494_53d8f144","updated":"2021-02-25 06:58:42.000000000","message":"Done","commit_id":"951c57f483a5d891773d1a3c1c3de28a50d25047"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"3d18318dd336b56b68e3269efc6f1e8bce8e0687","unresolved":true,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        return resp.json().get(\u0027arqs\u0027)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def create_arqs_and_match_resource_providers("},{"line_number":160,"context_line":"            self, dp_name, rg_rp_map\u003dNone):"},{"line_number":161,"context_line":"        \"\"\"Create ARQs, match them with request groups and thereby"},{"line_number":162,"context_line":"          determine their corresponding RPs."}],"source_content_type":"text/x-python","patch_set":4,"id":"4fa5e753_1e5cd443","line":159,"range":{"start_line":159,"start_character":8,"end_line":159,"end_character":48},"in_reply_to":"43afb494_53d8f144","updated":"2021-02-25 06:44:57.000000000","message":"We provide create_arqs() function in this file too. Nova can call it for creating arq only and can call this func for 2 steps in one single call.\nIHMO, we can keep this as it is. But seperate into 2 function are also ok for me.","commit_id":"951c57f483a5d891773d1a3c1c3de28a50d25047"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f2fa81d5133c36849cccacc67e94739718aafb90","unresolved":true,"context_lines":[{"line_number":175,"context_line":"            raise exception.AcceleratorRequestOpFailed(op\u003d_(\u0027create\u0027), msg\u003dmsg)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        if not rg_rp_map:"},{"line_number":178,"context_line":"            # arq for port  don\u0027t have rp map before scehdule to a host"},{"line_number":179,"context_line":"            return arqs"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        for arq in arqs:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3217ccac_24629448","line":178,"range":{"start_line":178,"start_character":26,"end_line":178,"end_character":28},"updated":"2021-02-24 10:59:18.000000000","message":"nit: drop on of the spaces","commit_id":"951c57f483a5d891773d1a3c1c3de28a50d25047"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f2fa81d5133c36849cccacc67e94739718aafb90","unresolved":true,"context_lines":[{"line_number":175,"context_line":"            raise exception.AcceleratorRequestOpFailed(op\u003d_(\u0027create\u0027), msg\u003dmsg)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        if not rg_rp_map:"},{"line_number":178,"context_line":"            # arq for port  don\u0027t have rp map before scehdule to a host"},{"line_number":179,"context_line":"            return arqs"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        for arq in arqs:"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2e77e5_10c3e39e","line":178,"range":{"start_line":178,"start_character":53,"end_line":178,"end_character":61},"updated":"2021-02-24 10:59:18.000000000","message":"schedule","commit_id":"951c57f483a5d891773d1a3c1c3de28a50d25047"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"251c3c5fdd6916b7e071460deac46b6857529b42","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            raise exception.AcceleratorRequestOpFailed(op\u003d_(\u0027create\u0027), msg\u003dmsg)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        if not rg_rp_map:"},{"line_number":178,"context_line":"            # arq for port  don\u0027t have rp map before scehdule to a host"},{"line_number":179,"context_line":"            return arqs"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        for arq in arqs:"}],"source_content_type":"text/x-python","patch_set":4,"id":"e2d9b981_d9b8977d","line":178,"range":{"start_line":178,"start_character":26,"end_line":178,"end_character":28},"in_reply_to":"3217ccac_24629448","updated":"2021-02-25 06:58:42.000000000","message":"Done","commit_id":"951c57f483a5d891773d1a3c1c3de28a50d25047"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"251c3c5fdd6916b7e071460deac46b6857529b42","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            raise exception.AcceleratorRequestOpFailed(op\u003d_(\u0027create\u0027), msg\u003dmsg)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        if not rg_rp_map:"},{"line_number":178,"context_line":"            # arq for port  don\u0027t have rp map before scehdule to a host"},{"line_number":179,"context_line":"            return arqs"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        for arq in arqs:"}],"source_content_type":"text/x-python","patch_set":4,"id":"cc2589c9_c0599ef0","line":178,"range":{"start_line":178,"start_character":53,"end_line":178,"end_character":61},"in_reply_to":"ba2e77e5_10c3e39e","updated":"2021-02-25 06:58:42.000000000","message":"Done. with an alternative implementation: a crate_arq and keep the original one untouched.","commit_id":"951c57f483a5d891773d1a3c1c3de28a50d25047"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f2fa81d5133c36849cccacc67e94739718aafb90","unresolved":true,"context_lines":[{"line_number":193,"context_line":"        dp_group_id \u003d arq[\u0027device_profile_group_id\u0027]"},{"line_number":194,"context_line":"        requester_id \u003d ("},{"line_number":195,"context_line":"            get_device_profile_group_requester_id(dp_group_id))"},{"line_number":196,"context_line":"        return rg_rp_map[requester_id][0]"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def bind_arqs(self, bindings):"},{"line_number":199,"context_line":"        \"\"\"Initiate Cyborg bindings."}],"source_content_type":"text/x-python","patch_set":4,"id":"0c37dcbc_9c3838ba","line":196,"range":{"start_line":196,"start_character":38,"end_line":196,"end_character":41},"updated":"2021-02-24 10:59:18.000000000","message":"a comment would be nice explaining why there is always a single item in this list","commit_id":"951c57f483a5d891773d1a3c1c3de28a50d25047"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"3d18318dd336b56b68e3269efc6f1e8bce8e0687","unresolved":true,"context_lines":[{"line_number":193,"context_line":"        dp_group_id \u003d arq[\u0027device_profile_group_id\u0027]"},{"line_number":194,"context_line":"        requester_id \u003d ("},{"line_number":195,"context_line":"            get_device_profile_group_requester_id(dp_group_id))"},{"line_number":196,"context_line":"        return rg_rp_map[requester_id][0]"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def bind_arqs(self, bindings):"},{"line_number":199,"context_line":"        \"\"\"Initiate Cyborg bindings."}],"source_content_type":"text/x-python","patch_set":4,"id":"c75889c0_7b6a07b2","line":196,"range":{"start_line":196,"start_character":38,"end_line":196,"end_character":41},"in_reply_to":"0c37dcbc_9c3838ba","updated":"2021-02-25 06:44:57.000000000","message":"Because each time we call this, only one arq passed in this function, which means we get the rp uuid of this arq. Meanwhile, arq and rp uuid are 1:1 mapping. so it returns always the first one.","commit_id":"951c57f483a5d891773d1a3c1c3de28a50d25047"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"ba283edf39c2d1ba37fbd5e15d071595c6df32a6","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        dp_group_id \u003d arq[\u0027device_profile_group_id\u0027]"},{"line_number":194,"context_line":"        requester_id \u003d ("},{"line_number":195,"context_line":"            get_device_profile_group_requester_id(dp_group_id))"},{"line_number":196,"context_line":"        return rg_rp_map[requester_id][0]"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def bind_arqs(self, bindings):"},{"line_number":199,"context_line":"        \"\"\"Initiate Cyborg bindings."}],"source_content_type":"text/x-python","patch_set":4,"id":"9fcc3558_6ecdfb10","line":196,"range":{"start_line":196,"start_character":38,"end_line":196,"end_character":41},"in_reply_to":"259e52f0_017ce1e6","updated":"2021-03-05 07:08:09.000000000","message":"comments added for that.","commit_id":"951c57f483a5d891773d1a3c1c3de28a50d25047"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"251c3c5fdd6916b7e071460deac46b6857529b42","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        dp_group_id \u003d arq[\u0027device_profile_group_id\u0027]"},{"line_number":194,"context_line":"        requester_id \u003d ("},{"line_number":195,"context_line":"            get_device_profile_group_requester_id(dp_group_id))"},{"line_number":196,"context_line":"        return rg_rp_map[requester_id][0]"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def bind_arqs(self, bindings):"},{"line_number":199,"context_line":"        \"\"\"Initiate Cyborg bindings."}],"source_content_type":"text/x-python","patch_set":4,"id":"f198f383_df48f03a","line":196,"range":{"start_line":196,"start_character":38,"end_line":196,"end_character":41},"in_reply_to":"c75889c0_7b6a07b2","updated":"2021-02-25 06:58:42.000000000","message":"Done","commit_id":"951c57f483a5d891773d1a3c1c3de28a50d25047"},{"author":{"_account_id":25738,"name":"Xinran WANG","email":"xin-ran.wang@intel.com","username":"Xinran"},"change_message_id":"7be44d52c4c20c6efbe157a4b8571496d8066b6c","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        dp_group_id \u003d arq[\u0027device_profile_group_id\u0027]"},{"line_number":194,"context_line":"        requester_id \u003d ("},{"line_number":195,"context_line":"            get_device_profile_group_requester_id(dp_group_id))"},{"line_number":196,"context_line":"        return rg_rp_map[requester_id][0]"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def bind_arqs(self, bindings):"},{"line_number":199,"context_line":"        \"\"\"Initiate Cyborg bindings."}],"source_content_type":"text/x-python","patch_set":4,"id":"259e52f0_017ce1e6","line":196,"range":{"start_line":196,"start_character":38,"end_line":196,"end_character":41},"in_reply_to":"f04eecea_c140440b","updated":"2021-03-05 06:37:08.000000000","message":"yes, for one arq, there always a single placement resource request group returned from cyborg to be included in the allocation candidate query.","commit_id":"951c57f483a5d891773d1a3c1c3de28a50d25047"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f3c04edabe2a2a33e858f7abfa90dfb5dce054f8","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        dp_group_id \u003d arq[\u0027device_profile_group_id\u0027]"},{"line_number":194,"context_line":"        requester_id \u003d ("},{"line_number":195,"context_line":"            get_device_profile_group_requester_id(dp_group_id))"},{"line_number":196,"context_line":"        return rg_rp_map[requester_id][0]"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def bind_arqs(self, bindings):"},{"line_number":199,"context_line":"        \"\"\"Initiate Cyborg bindings."}],"source_content_type":"text/x-python","patch_set":4,"id":"f04eecea_c140440b","line":196,"range":{"start_line":196,"start_character":38,"end_line":196,"end_character":41},"in_reply_to":"f198f383_df48f03a","updated":"2021-03-04 10:55:39.000000000","message":"So there is one arq_uuid I see that, but I guess there is one more condition that makes one arq mapped to a single RP. Does cyborg has the same limitation than neutron? Is there always a single placement resource request group returned from cyborg to be included in the allocation candidate query? If yes then the picture is complete: One arq is passed to this function, one arq always associated with one placement request group and in placement one prefixed request group is always mapped to one RP.","commit_id":"951c57f483a5d891773d1a3c1c3de28a50d25047"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f3c04edabe2a2a33e858f7abfa90dfb5dce054f8","unresolved":true,"context_lines":[{"line_number":160,"context_line":"        \"\"\"Create ARQs by  dp_name.\"\"\""},{"line_number":161,"context_line":"        LOG.info(\u0027Creating ARQs for device profile %s\u0027, dp_name)"},{"line_number":162,"context_line":"        arqs \u003d self._create_arqs(dp_name)"},{"line_number":163,"context_line":"        if not arqs or len(arqs) \u003d\u003d 0:"},{"line_number":164,"context_line":"            msg \u003d _(\u0027device profile name %s\u0027) % dp_name"},{"line_number":165,"context_line":"            raise exception.AcceleratorRequestOpFailed(op\u003d_(\u0027create\u0027), msg\u003dmsg)"},{"line_number":166,"context_line":"        return arqs"}],"source_content_type":"text/x-python","patch_set":10,"id":"9c5db1fe_6fe84f5e","line":163,"range":{"start_line":163,"start_character":11,"end_line":163,"end_character":38},"updated":"2021-03-04 10:55:39.000000000","message":"this is equivalent to the condition:\n\n   if not arqs:\n\nboth bool(None) and bool([]) are evaluated to False","commit_id":"848524288778f73c998b2aba81f9b94893c4078c"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5ddc6882ba7215aec71938105451d2b762b24281","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        \"\"\"Create ARQs by  dp_name.\"\"\""},{"line_number":161,"context_line":"        LOG.info(\u0027Creating ARQs for device profile %s\u0027, dp_name)"},{"line_number":162,"context_line":"        arqs \u003d self._create_arqs(dp_name)"},{"line_number":163,"context_line":"        if not arqs or len(arqs) \u003d\u003d 0:"},{"line_number":164,"context_line":"            msg \u003d _(\u0027device profile name %s\u0027) % dp_name"},{"line_number":165,"context_line":"            raise exception.AcceleratorRequestOpFailed(op\u003d_(\u0027create\u0027), msg\u003dmsg)"},{"line_number":166,"context_line":"        return arqs"}],"source_content_type":"text/x-python","patch_set":10,"id":"959a17c8_eb751797","line":163,"range":{"start_line":163,"start_character":11,"end_line":163,"end_character":38},"in_reply_to":"9c5db1fe_6fe84f5e","updated":"2021-03-05 07:06:06.000000000","message":"Done","commit_id":"848524288778f73c998b2aba81f9b94893c4078c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f3c04edabe2a2a33e858f7abfa90dfb5dce054f8","unresolved":true,"context_lines":[{"line_number":194,"context_line":"        dp_group_id \u003d arq[\u0027device_profile_group_id\u0027]"},{"line_number":195,"context_line":"        requester_id \u003d ("},{"line_number":196,"context_line":"            get_device_profile_group_requester_id(dp_group_id))"},{"line_number":197,"context_line":"        # arq and rp uuid 1:1 mapping"},{"line_number":198,"context_line":"        return rg_rp_map[requester_id][0]"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def bind_arqs(self, bindings):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1c292411_6093cb4b","line":197,"updated":"2021-03-04 10:55:39.000000000","message":"Could you please describe why 1:1 mapping is true? See my comment in PS4","commit_id":"848524288778f73c998b2aba81f9b94893c4078c"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5ddc6882ba7215aec71938105451d2b762b24281","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        dp_group_id \u003d arq[\u0027device_profile_group_id\u0027]"},{"line_number":195,"context_line":"        requester_id \u003d ("},{"line_number":196,"context_line":"            get_device_profile_group_requester_id(dp_group_id))"},{"line_number":197,"context_line":"        # arq and rp uuid 1:1 mapping"},{"line_number":198,"context_line":"        return rg_rp_map[requester_id][0]"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def bind_arqs(self, bindings):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3650f4de_23b3b531","line":197,"in_reply_to":"1c292411_6093cb4b","updated":"2021-03-05 07:06:06.000000000","message":"Comments added. and that 1:1 map is always True if find the resource provider from arq.","commit_id":"848524288778f73c998b2aba81f9b94893c4078c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f3c04edabe2a2a33e858f7abfa90dfb5dce054f8","unresolved":true,"context_lines":[{"line_number":310,"context_line":"                op\u003d_(\u0027get\u0027), msg\u003derr_msg)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        arq \u003d resp.json()"},{"line_number":313,"context_line":"        if not arq:"},{"line_number":314,"context_line":"            err_msg \u003d _(\"Cyborg can\u0027t find  accelerator requests for \""},{"line_number":315,"context_line":"                        \"\u0027ARQ %s\") % arq_uuid"},{"line_number":316,"context_line":"            raise exception.AcceleratorRequestOpFailed("}],"source_content_type":"text/x-python","patch_set":10,"id":"bad5b13e_9ce36930","line":313,"updated":"2021-03-04 10:55:39.000000000","message":"I\u0027m wondering why cyborg returns an emtpy result for the request GET //v2/accelerator_requests/{arq_uuid} request when the ARQ does not exists. I think cyborg should return HTTP 404 in this case.","commit_id":"848524288778f73c998b2aba81f9b94893c4078c"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5ddc6882ba7215aec71938105451d2b762b24281","unresolved":false,"context_lines":[{"line_number":310,"context_line":"                op\u003d_(\u0027get\u0027), msg\u003derr_msg)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        arq \u003d resp.json()"},{"line_number":313,"context_line":"        if not arq:"},{"line_number":314,"context_line":"            err_msg \u003d _(\"Cyborg can\u0027t find  accelerator requests for \""},{"line_number":315,"context_line":"                        \"\u0027ARQ %s\") % arq_uuid"},{"line_number":316,"context_line":"            raise exception.AcceleratorRequestOpFailed("}],"source_content_type":"text/x-python","patch_set":10,"id":"c02adfd3_ebf8f421","line":313,"in_reply_to":"bad5b13e_9ce36930","updated":"2021-03-05 07:06:06.000000000","message":"Cyborg does returned 404, so the  line 307 would catch that error. this is dup junk. Good Catch.","commit_id":"848524288778f73c998b2aba81f9b94893c4078c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e6db6806c160574f6d846670dd1d6d47be2d1269","unresolved":true,"context_lines":[{"line_number":203,"context_line":"            arq[\u0027device_rp_uuid\u0027] \u003d rg_rp_map[requester_id][0]"},{"line_number":204,"context_line":"        return arqs"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def get_arq_device_rp_uuid(self, arq_uuid, rg_rp_map, owner\u003dNone):"},{"line_number":207,"context_line":"        \"\"\"Query the ARQ by uuid saved in request_net."},{"line_number":208,"context_line":"        \"\"\""},{"line_number":209,"context_line":"        arq \u003d self.get_arq_by_uuid(arq_uuid)"}],"source_content_type":"text/x-python","patch_set":17,"id":"6ec85df5_3f5de3f4","line":206,"updated":"2021-05-28 08:42:08.000000000","message":"better to check whether anywhere else still use this method.","commit_id":"63f014dc27f33bbb08962bf91d1fcab3943af957"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"77e3242da5dfd19d8320b1778d413792f68e225f","unresolved":true,"context_lines":[{"line_number":206,"context_line":"    def get_arq_device_rp_uuid(self, arq_uuid, rg_rp_map, owner\u003dNone):"},{"line_number":207,"context_line":"        \"\"\"Query the ARQ by uuid saved in request_net."},{"line_number":208,"context_line":"        \"\"\""},{"line_number":209,"context_line":"        arq \u003d self.get_arq_by_uuid(arq_uuid)"},{"line_number":210,"context_line":"        dp_group_id \u003d arq[\u0027device_profile_group_id\u0027]"},{"line_number":211,"context_line":"        requester_id \u003d ("},{"line_number":212,"context_line":"            get_device_profile_group_requester_id(dp_group_id, owner))"}],"source_content_type":"text/x-python","patch_set":17,"id":"251ccde4_ce48cb9f","line":209,"updated":"2021-05-28 06:26:30.000000000","message":"you create arq at conductor get_arq_device_rp_uuid, then it should include the \u0027device_profile_group_id\u0027. so that means you needn\u0027t request cyborg again.","commit_id":"63f014dc27f33bbb08962bf91d1fcab3943af957"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4c65ee5190e3eba3de45161c43df1a59c8f0a789","unresolved":true,"context_lines":[{"line_number":203,"context_line":"            arq[\u0027device_rp_uuid\u0027] \u003d rg_rp_map[requester_id][0]"},{"line_number":204,"context_line":"        return arqs"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def get_arq_device_rp_uuid(self, arq, rg_rp_map, owner\u003dNone):"},{"line_number":207,"context_line":"        \"\"\"Query the ARQ by uuid saved in request_net."},{"line_number":208,"context_line":"        \"\"\""},{"line_number":209,"context_line":"        dp_group_id \u003d arq[\u0027device_profile_group_id\u0027]"},{"line_number":210,"context_line":"        requester_id \u003d ("},{"line_number":211,"context_line":"            get_device_profile_group_requester_id(dp_group_id, owner))"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        # ARQ and rp is 1:1 mapping"},{"line_number":214,"context_line":"        # One arq always associated with one placement request group and"},{"line_number":215,"context_line":"        # in placement one prefixed request group is always mapped to one RP."},{"line_number":216,"context_line":"        return rg_rp_map[requester_id][0]"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def bind_arqs(self, bindings):"},{"line_number":219,"context_line":"        \"\"\"Initiate Cyborg bindings."}],"source_content_type":"text/x-python","patch_set":22,"id":"779e7af2_71dc73c9","line":216,"range":{"start_line":206,"start_character":0,"end_line":216,"end_character":41},"updated":"2021-06-16 07:19:10.000000000","message":"nit, this feels like a helper method, can be moved out of the cyborg client.","commit_id":"f06722f7e59ef538171ecb28a283d484b2c15353"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac6dbd123bc56824892d428962888503e053529e","unresolved":true,"context_lines":[{"line_number":59,"context_line":"    return _CyborgClient(context)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def get_device_profile_group_requester_id(dp_group_id, owner\u003dNone):"},{"line_number":63,"context_line":"    \"\"\"Return the value to use in objects.RequestGroup.requester_id."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    The requester_id is used to match device profile groups from"}],"source_content_type":"text/x-python","patch_set":33,"id":"07627089_35d7f326","line":62,"range":{"start_line":62,"start_character":55,"end_line":62,"end_character":65},"updated":"2021-07-12 16:26:45.000000000","message":"as far as I see all the callers providing the owner parameter so you don\u0027t have to make it optional","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"94b492f773873eceb9f05da4ae9e73228be18ec6","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    return _CyborgClient(context)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def get_device_profile_group_requester_id(dp_group_id, owner\u003dNone):"},{"line_number":63,"context_line":"    \"\"\"Return the value to use in objects.RequestGroup.requester_id."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    The requester_id is used to match device profile groups from"}],"source_content_type":"text/x-python","patch_set":33,"id":"b83481ed_f68b3615","line":62,"range":{"start_line":62,"start_character":55,"end_line":62,"end_character":65},"in_reply_to":"07627089_35d7f326","updated":"2021-07-13 06:48:30.000000000","message":"Done. nice catch! thanks.","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac6dbd123bc56824892d428962888503e053529e","unresolved":true,"context_lines":[{"line_number":63,"context_line":"    \"\"\"Return the value to use in objects.RequestGroup.requester_id."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    The requester_id is used to match device profile groups from"},{"line_number":66,"context_line":"    Cyborg to the request groups in request spec. The request group should"},{"line_number":67,"context_line":"    be unique for each dp in flavor and in  port."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    :param dp_group_id: The index of the request group in the device profile."}],"source_content_type":"text/x-python","patch_set":33,"id":"a39507f9_9fc679a7","line":66,"range":{"start_line":66,"start_character":50,"end_line":66,"end_character":67},"updated":"2021-07-12 16:26:45.000000000","message":"do you mean the request group id or the requester id?","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"94b492f773873eceb9f05da4ae9e73228be18ec6","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    \"\"\"Return the value to use in objects.RequestGroup.requester_id."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    The requester_id is used to match device profile groups from"},{"line_number":66,"context_line":"    Cyborg to the request groups in request spec. The request group should"},{"line_number":67,"context_line":"    be unique for each dp in flavor and in  port."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    :param dp_group_id: The index of the request group in the device profile."}],"source_content_type":"text/x-python","patch_set":33,"id":"35de9669_0de2e6be","line":66,"range":{"start_line":66,"start_character":50,"end_line":66,"end_character":67},"in_reply_to":"a39507f9_9fc679a7","updated":"2021-07-13 06:48:30.000000000","message":"Done. the request group id","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac6dbd123bc56824892d428962888503e053529e","unresolved":true,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    The requester_id is used to match device profile groups from"},{"line_number":66,"context_line":"    Cyborg to the request groups in request spec. The request group should"},{"line_number":67,"context_line":"    be unique for each dp in flavor and in  port."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    :param dp_group_id: The index of the request group in the device profile."},{"line_number":70,"context_line":"    :owner: The port UUID if the dp request by port."}],"source_content_type":"text/x-python","patch_set":33,"id":"17bc6a0d_05342685","line":67,"range":{"start_line":67,"start_character":26,"end_line":67,"end_character":35},"updated":"2021-07-12 16:26:45.000000000","message":"nit: in the flavor","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac6dbd123bc56824892d428962888503e053529e","unresolved":true,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    The requester_id is used to match device profile groups from"},{"line_number":66,"context_line":"    Cyborg to the request groups in request spec. The request group should"},{"line_number":67,"context_line":"    be unique for each dp in flavor and in  port."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    :param dp_group_id: The index of the request group in the device profile."},{"line_number":70,"context_line":"    :owner: The port UUID if the dp request by port."}],"source_content_type":"text/x-python","patch_set":33,"id":"c11053d1_02f19cd1","line":67,"range":{"start_line":67,"start_character":40,"end_line":67,"end_character":48},"updated":"2021-07-12 16:26:45.000000000","message":"nit: in the port","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"94b492f773873eceb9f05da4ae9e73228be18ec6","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    The requester_id is used to match device profile groups from"},{"line_number":66,"context_line":"    Cyborg to the request groups in request spec. The request group should"},{"line_number":67,"context_line":"    be unique for each dp in flavor and in  port."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    :param dp_group_id: The index of the request group in the device profile."},{"line_number":70,"context_line":"    :owner: The port UUID if the dp request by port."}],"source_content_type":"text/x-python","patch_set":33,"id":"8737b493_fe254ace","line":67,"range":{"start_line":67,"start_character":26,"end_line":67,"end_character":35},"in_reply_to":"17bc6a0d_05342685","updated":"2021-07-13 06:48:30.000000000","message":"Done","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"94b492f773873eceb9f05da4ae9e73228be18ec6","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    The requester_id is used to match device profile groups from"},{"line_number":66,"context_line":"    Cyborg to the request groups in request spec. The request group should"},{"line_number":67,"context_line":"    be unique for each dp in flavor and in  port."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    :param dp_group_id: The index of the request group in the device profile."},{"line_number":70,"context_line":"    :owner: The port UUID if the dp request by port."}],"source_content_type":"text/x-python","patch_set":33,"id":"ee39118d_b25063c5","line":67,"range":{"start_line":67,"start_character":40,"end_line":67,"end_character":48},"in_reply_to":"c11053d1_02f19cd1","updated":"2021-07-13 06:48:30.000000000","message":"Done","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac6dbd123bc56824892d428962888503e053529e","unresolved":true,"context_lines":[{"line_number":67,"context_line":"    be unique for each dp in flavor and in  port."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    :param dp_group_id: The index of the request group in the device profile."},{"line_number":70,"context_line":"    :owner: The port UUID if the dp request by port."},{"line_number":71,"context_line":"    \"\"\""},{"line_number":72,"context_line":"    req_id \u003d (\"device_profile_\" + str(dp_group_id) +"},{"line_number":73,"context_line":"        (str(owner) if owner else \u0027\u0027))"}],"source_content_type":"text/x-python","patch_set":33,"id":"f7a3de8e_3dbef93c","line":70,"range":{"start_line":70,"start_character":4,"end_line":70,"end_character":11},"updated":"2021-07-12 16:26:45.000000000","message":":param owner:","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac6dbd123bc56824892d428962888503e053529e","unresolved":true,"context_lines":[{"line_number":67,"context_line":"    be unique for each dp in flavor and in  port."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    :param dp_group_id: The index of the request group in the device profile."},{"line_number":70,"context_line":"    :owner: The port UUID if the dp request by port."},{"line_number":71,"context_line":"    \"\"\""},{"line_number":72,"context_line":"    req_id \u003d (\"device_profile_\" + str(dp_group_id) +"},{"line_number":73,"context_line":"        (str(owner) if owner else \u0027\u0027))"}],"source_content_type":"text/x-python","patch_set":33,"id":"3e54d05e_06e239b5","line":70,"range":{"start_line":70,"start_character":44,"end_line":70,"end_character":52},"updated":"2021-07-12 16:26:45.000000000","message":"nit: requested by a port.","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"94b492f773873eceb9f05da4ae9e73228be18ec6","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    be unique for each dp in flavor and in  port."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    :param dp_group_id: The index of the request group in the device profile."},{"line_number":70,"context_line":"    :owner: The port UUID if the dp request by port."},{"line_number":71,"context_line":"    \"\"\""},{"line_number":72,"context_line":"    req_id \u003d (\"device_profile_\" + str(dp_group_id) +"},{"line_number":73,"context_line":"        (str(owner) if owner else \u0027\u0027))"}],"source_content_type":"text/x-python","patch_set":33,"id":"d060d5cb_8d1bc3bb","line":70,"range":{"start_line":70,"start_character":44,"end_line":70,"end_character":52},"in_reply_to":"3e54d05e_06e239b5","updated":"2021-07-13 06:48:30.000000000","message":"Done","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"94b492f773873eceb9f05da4ae9e73228be18ec6","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    be unique for each dp in flavor and in  port."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    :param dp_group_id: The index of the request group in the device profile."},{"line_number":70,"context_line":"    :owner: The port UUID if the dp request by port."},{"line_number":71,"context_line":"    \"\"\""},{"line_number":72,"context_line":"    req_id \u003d (\"device_profile_\" + str(dp_group_id) +"},{"line_number":73,"context_line":"        (str(owner) if owner else \u0027\u0027))"}],"source_content_type":"text/x-python","patch_set":33,"id":"f8eb2f4b_29853a66","line":70,"range":{"start_line":70,"start_character":4,"end_line":70,"end_character":11},"in_reply_to":"f7a3de8e_3dbef93c","updated":"2021-07-13 06:48:30.000000000","message":"Done","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac6dbd123bc56824892d428962888503e053529e","unresolved":true,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        return resp.json().get(\u0027device_profiles\u0027)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def get_device_profile_groups(self, dp_name, owner):"},{"line_number":129,"context_line":"        \"\"\"Get list of profile group objects from the device profile."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"           Cyborg API returns: {\"device_profiles\": [\u003cdevice_profile\u003e]}"}],"source_content_type":"text/x-python","patch_set":33,"id":"4a728db0_a77b67e4","line":128,"range":{"start_line":128,"start_character":49,"end_line":128,"end_character":54},"updated":"2021-07-12 16:26:45.000000000","message":"This param is introduced here but then removed later in this series in https://review.opendev.org/c/openstack/nova/+/779913/27/nova/accelerator/cyborg.py \n\nSo I guess this param is not needed here.","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"94b492f773873eceb9f05da4ae9e73228be18ec6","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        return resp.json().get(\u0027device_profiles\u0027)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def get_device_profile_groups(self, dp_name, owner):"},{"line_number":129,"context_line":"        \"\"\"Get list of profile group objects from the device profile."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"           Cyborg API returns: {\"device_profiles\": [\u003cdevice_profile\u003e]}"}],"source_content_type":"text/x-python","patch_set":33,"id":"e1e5e733_e1cedcc3","line":128,"range":{"start_line":128,"start_character":49,"end_line":128,"end_character":54},"in_reply_to":"4a728db0_a77b67e4","updated":"2021-07-13 06:48:30.000000000","message":"Patch \"smartnic support - create arqs\"  depend on this param. the caller: https://review.opendev.org/c/openstack/nova/+/758944/43/nova/network/neutron.py#2138\n\ncyborg.get_device_profile_request_groups - \u003e  get_device_profile_groups\n(owner is a port_id to identify equest group for different port)\n\nThe later change is a refactor for supporting count the device in the request groups, then we could reject the the malformed request. The \u0027owner\u0027 used by the second child function.\n\nhttps://review.opendev.org/c/openstack/nova/+/779913/28/nova/accelerator/cyborg.py#93","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8643fad9e9ea8260e8c5d69fab587c5e3ce283eb","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        return resp.json().get(\u0027device_profiles\u0027)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def get_device_profile_groups(self, dp_name, owner):"},{"line_number":129,"context_line":"        \"\"\"Get list of profile group objects from the device profile."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"           Cyborg API returns: {\"device_profiles\": [\u003cdevice_profile\u003e]}"}],"source_content_type":"text/x-python","patch_set":33,"id":"43607781_8012dbb9","line":128,"range":{"start_line":128,"start_character":49,"end_line":128,"end_character":54},"in_reply_to":"e1e5e733_e1cedcc3","updated":"2021-07-13 09:42:52.000000000","message":"Thanks I see that the caller is adapted too at  https://review.opendev.org/c/openstack/nova/+/779913/28/nova/network/neutron.py#2164","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac6dbd123bc56824892d428962888503e053529e","unresolved":true,"context_lines":[{"line_number":175,"context_line":"        return resp.json().get(\u0027arqs\u0027)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def create_arqs(self, dp_name):"},{"line_number":178,"context_line":"        \"\"\"Create ARQs by  dp_name.\"\"\""},{"line_number":179,"context_line":"        LOG.info(\u0027Creating ARQs for device profile %s\u0027, dp_name)"},{"line_number":180,"context_line":"        arqs \u003d self._create_arqs(dp_name)"},{"line_number":181,"context_line":"        if not arqs:"}],"source_content_type":"text/x-python","patch_set":33,"id":"8c7aab18_371daec4","line":178,"range":{"start_line":178,"start_character":25,"end_line":178,"end_character":27},"updated":"2021-07-12 16:26:45.000000000","message":"nit: remove double space","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"94b492f773873eceb9f05da4ae9e73228be18ec6","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        return resp.json().get(\u0027arqs\u0027)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def create_arqs(self, dp_name):"},{"line_number":178,"context_line":"        \"\"\"Create ARQs by  dp_name.\"\"\""},{"line_number":179,"context_line":"        LOG.info(\u0027Creating ARQs for device profile %s\u0027, dp_name)"},{"line_number":180,"context_line":"        arqs \u003d self._create_arqs(dp_name)"},{"line_number":181,"context_line":"        if not arqs:"}],"source_content_type":"text/x-python","patch_set":33,"id":"3c065e6e_4a8f44da","line":178,"range":{"start_line":178,"start_character":25,"end_line":178,"end_character":27},"in_reply_to":"8c7aab18_371daec4","updated":"2021-07-13 06:48:30.000000000","message":"Done","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac6dbd123bc56824892d428962888503e053529e","unresolved":true,"context_lines":[{"line_number":184,"context_line":"        return arqs"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def create_arqs_and_match_resource_providers("},{"line_number":187,"context_line":"            self, dp_name, rg_rp_map\u003dNone, owner\u003dNone):"},{"line_number":188,"context_line":"        \"\"\"Create ARQs and match them with request groups and thereby"},{"line_number":189,"context_line":"          determine their corresponding RPs."},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"856ac9cc_ebe50927","line":187,"range":{"start_line":187,"start_character":43,"end_line":187,"end_character":53},"updated":"2021-07-12 16:26:45.000000000","message":"Is this parameter ever used by the caller? I only see one caller in the conductor in _create_and_bind_arqs() but it does not pass owner.","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac6dbd123bc56824892d428962888503e053529e","unresolved":true,"context_lines":[{"line_number":184,"context_line":"        return arqs"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def create_arqs_and_match_resource_providers("},{"line_number":187,"context_line":"            self, dp_name, rg_rp_map\u003dNone, owner\u003dNone):"},{"line_number":188,"context_line":"        \"\"\"Create ARQs and match them with request groups and thereby"},{"line_number":189,"context_line":"          determine their corresponding RPs."},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"1a2739d9_35e34796","line":187,"range":{"start_line":187,"start_character":27,"end_line":187,"end_character":42},"updated":"2021-07-12 16:26:45.000000000","message":"why do you need to make this optional? As far as I see this map is always provided by every caller.","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"94b492f773873eceb9f05da4ae9e73228be18ec6","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        return arqs"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def create_arqs_and_match_resource_providers("},{"line_number":187,"context_line":"            self, dp_name, rg_rp_map\u003dNone, owner\u003dNone):"},{"line_number":188,"context_line":"        \"\"\"Create ARQs and match them with request groups and thereby"},{"line_number":189,"context_line":"          determine their corresponding RPs."},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"8eefe804_72f78b57","line":187,"range":{"start_line":187,"start_character":27,"end_line":187,"end_character":42},"in_reply_to":"1a2739d9_35e34796","updated":"2021-07-13 06:48:30.000000000","message":"Done","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"94b492f773873eceb9f05da4ae9e73228be18ec6","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        return arqs"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def create_arqs_and_match_resource_providers("},{"line_number":187,"context_line":"            self, dp_name, rg_rp_map\u003dNone, owner\u003dNone):"},{"line_number":188,"context_line":"        \"\"\"Create ARQs and match them with request groups and thereby"},{"line_number":189,"context_line":"          determine their corresponding RPs."},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"f5bb0bbf_79f54241","line":187,"range":{"start_line":187,"start_character":43,"end_line":187,"end_character":53},"in_reply_to":"856ac9cc_ebe50927","updated":"2021-07-13 06:48:30.000000000","message":"nice catch, this code is refactored out in later patch set. so we don\u0027t need this \u0027owner\u0027 any more.","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8643fad9e9ea8260e8c5d69fab587c5e3ce283eb","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        return arqs"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def create_arqs_and_match_resource_providers("},{"line_number":187,"context_line":"            self, dp_name, rg_rp_map\u003dNone, owner\u003dNone):"},{"line_number":188,"context_line":"        \"\"\"Create ARQs and match them with request groups and thereby"},{"line_number":189,"context_line":"          determine their corresponding RPs."},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"21854554_2e50bc18","line":187,"range":{"start_line":187,"start_character":43,"end_line":187,"end_character":53},"in_reply_to":"f5bb0bbf_79f54241","updated":"2021-07-13 09:42:52.000000000","message":"OK, I see that at the end of the series this is called without owner so you calling get_device_profile_group_requester_id with owner\u003dNone make sense.","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac6dbd123bc56824892d428962888503e053529e","unresolved":true,"context_lines":[{"line_number":207,"context_line":"            arq[\u0027device_rp_uuid\u0027] \u003d rg_rp_map[requester_id][0]"},{"line_number":208,"context_line":"        return arqs"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def get_arq_device_rp_uuid(self, arq, rg_rp_map, owner\u003dNone):"},{"line_number":211,"context_line":"        \"\"\"Query the ARQ by uuid saved in request_net."},{"line_number":212,"context_line":"        \"\"\""},{"line_number":213,"context_line":"        dp_group_id \u003d arq[\u0027device_profile_group_id\u0027]"}],"source_content_type":"text/x-python","patch_set":33,"id":"173c9a1c_78d67be3","line":210,"range":{"start_line":210,"start_character":53,"end_line":210,"end_character":63},"updated":"2021-07-12 16:26:45.000000000","message":"I see one caller from nova.conductor.manager.ComputeTaskManager._create_arqs_for_ports() and that caller always provides the owner parameter so you don\u0027t have to make this parameter optional.","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"94b492f773873eceb9f05da4ae9e73228be18ec6","unresolved":false,"context_lines":[{"line_number":207,"context_line":"            arq[\u0027device_rp_uuid\u0027] \u003d rg_rp_map[requester_id][0]"},{"line_number":208,"context_line":"        return arqs"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def get_arq_device_rp_uuid(self, arq, rg_rp_map, owner\u003dNone):"},{"line_number":211,"context_line":"        \"\"\"Query the ARQ by uuid saved in request_net."},{"line_number":212,"context_line":"        \"\"\""},{"line_number":213,"context_line":"        dp_group_id \u003d arq[\u0027device_profile_group_id\u0027]"}],"source_content_type":"text/x-python","patch_set":33,"id":"f440e515_e9180260","line":210,"range":{"start_line":210,"start_character":53,"end_line":210,"end_character":63},"in_reply_to":"173c9a1c_78d67be3","updated":"2021-07-13 06:48:30.000000000","message":"Nice catch indeed.","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac6dbd123bc56824892d428962888503e053529e","unresolved":true,"context_lines":[{"line_number":359,"context_line":"        This Cyborg API call is NOT idempotent, i.e., if called more than"},{"line_number":360,"context_line":"        once, the 2nd and later calls will throw errors."},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        Cyborg ensure existed ARQs are deleted before return a error."},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        If this fails, an error is logged but no exception is raised"},{"line_number":365,"context_line":"        because this cleans up Cyborg resources, but should otherwise"}],"source_content_type":"text/x-python","patch_set":33,"id":"748daf65_2466339b","line":362,"range":{"start_line":362,"start_character":8,"end_line":362,"end_character":69},"updated":"2021-07-12 16:26:45.000000000","message":"I guess you want to say that either Cyborg deletes the ARQs without error, or returns 404 if the ARQ is already deleted. So such 404 error can be ignored.","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8643fad9e9ea8260e8c5d69fab587c5e3ce283eb","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        This Cyborg API call is NOT idempotent, i.e., if called more than"},{"line_number":360,"context_line":"        once, the 2nd and later calls will throw errors."},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        Cyborg ensure existed ARQs are deleted before return a error."},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        If this fails, an error is logged but no exception is raised"},{"line_number":365,"context_line":"        because this cleans up Cyborg resources, but should otherwise"}],"source_content_type":"text/x-python","patch_set":33,"id":"ece8b1b9_1100f7f3","line":362,"range":{"start_line":362,"start_character":8,"end_line":362,"end_character":69},"in_reply_to":"39b35d28_26635564","updated":"2021-07-13 09:42:52.000000000","message":"looks good now","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"94b492f773873eceb9f05da4ae9e73228be18ec6","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        This Cyborg API call is NOT idempotent, i.e., if called more than"},{"line_number":360,"context_line":"        once, the 2nd and later calls will throw errors."},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        Cyborg ensure existed ARQs are deleted before return a error."},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        If this fails, an error is logged but no exception is raised"},{"line_number":365,"context_line":"        because this cleans up Cyborg resources, but should otherwise"}],"source_content_type":"text/x-python","patch_set":33,"id":"39b35d28_26635564","line":362,"range":{"start_line":362,"start_character":8,"end_line":362,"end_character":69},"in_reply_to":"748daf65_2466339b","updated":"2021-07-13 06:48:30.000000000","message":"Cyborg deletes the ARQs without error, or returns 404 if there is ARQ\nwhich already deleted. In either way, existed ARQs in arq_uuids wil be\ndeleted. Such 404 error can be ignored safely.","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"}],"nova/tests/unit/accelerator/test_cyborg.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f3c04edabe2a2a33e858f7abfa90dfb5dce054f8","unresolved":true,"context_lines":[{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    @mock.patch(\u0027nova.accelerator.cyborg._CyborgClient.\u0027"},{"line_number":222,"context_line":"                \u0027_create_arqs\u0027)"},{"line_number":223,"context_line":"    def test_create_arq_without_rp_map(self, mock_create_arqs):"},{"line_number":224,"context_line":"        # Happy path"},{"line_number":225,"context_line":"        arqs, rg_rp_map \u003d self._get_arqs_and_request_groups()"},{"line_number":226,"context_line":"        dp_name \u003d arqs[0][\"device_profile_name\"]"}],"source_content_type":"text/x-python","patch_set":10,"id":"e0502a72_f6289d8f","line":223,"range":{"start_line":223,"start_character":23,"end_line":223,"end_character":38},"updated":"2021-03-04 10:55:39.000000000","message":"now rp map is not relevant to this test","commit_id":"848524288778f73c998b2aba81f9b94893c4078c"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5ddc6882ba7215aec71938105451d2b762b24281","unresolved":false,"context_lines":[{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    @mock.patch(\u0027nova.accelerator.cyborg._CyborgClient.\u0027"},{"line_number":222,"context_line":"                \u0027_create_arqs\u0027)"},{"line_number":223,"context_line":"    def test_create_arq_without_rp_map(self, mock_create_arqs):"},{"line_number":224,"context_line":"        # Happy path"},{"line_number":225,"context_line":"        arqs, rg_rp_map \u003d self._get_arqs_and_request_groups()"},{"line_number":226,"context_line":"        dp_name \u003d arqs[0][\"device_profile_name\"]"}],"source_content_type":"text/x-python","patch_set":10,"id":"2affdda4_9a0758ee","line":223,"range":{"start_line":223,"start_character":23,"end_line":223,"end_character":38},"in_reply_to":"e0502a72_f6289d8f","updated":"2021-03-05 07:06:06.000000000","message":"Done","commit_id":"848524288778f73c998b2aba81f9b94893c4078c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac6dbd123bc56824892d428962888503e053529e","unresolved":true,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    @mock.patch(\u0027nova.accelerator.cyborg._CyborgClient.\u0027"},{"line_number":102,"context_line":"                \u0027_get_device_profile_list\u0027)"},{"line_number":103,"context_line":"    def _test_get_device_profile_groups(self, mock_get_dp_list, owner):"},{"line_number":104,"context_line":"        mock_get_dp_list.return_value \u003d [{"},{"line_number":105,"context_line":"            \"groups\": [{"},{"line_number":106,"context_line":"                    \"resources:FPGA\": \"1\","}],"source_content_type":"text/x-python","patch_set":33,"id":"e07433e6_282aee4f","line":103,"range":{"start_line":103,"start_character":64,"end_line":103,"end_character":69},"updated":"2021-07-12 16:26:45.000000000","message":"this parameter is unused by the test function","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"94b492f773873eceb9f05da4ae9e73228be18ec6","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    @mock.patch(\u0027nova.accelerator.cyborg._CyborgClient.\u0027"},{"line_number":102,"context_line":"                \u0027_get_device_profile_list\u0027)"},{"line_number":103,"context_line":"    def _test_get_device_profile_groups(self, mock_get_dp_list, owner):"},{"line_number":104,"context_line":"        mock_get_dp_list.return_value \u003d [{"},{"line_number":105,"context_line":"            \"groups\": [{"},{"line_number":106,"context_line":"                    \"resources:FPGA\": \"1\","}],"source_content_type":"text/x-python","patch_set":33,"id":"81a1703b_4d6accfc","line":103,"range":{"start_line":103,"start_character":64,"end_line":103,"end_character":69},"in_reply_to":"e07433e6_282aee4f","updated":"2021-07-13 06:48:30.000000000","message":"Done. Added code for generating the expected request id and then assert it.","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac6dbd123bc56824892d428962888503e053529e","unresolved":true,"context_lines":[{"line_number":115,"context_line":"        expected_groups \u003d [rg]"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        actual_groups \u003d self.client.get_device_profile_groups(\u0027mydp\u0027,"},{"line_number":118,"context_line":"                                                              owner\u003dNone)"},{"line_number":119,"context_line":"        self.assertEqual(len(expected_groups), len(actual_groups))"},{"line_number":120,"context_line":"        self.assertEqual(expected_groups[0].__dict__,"},{"line_number":121,"context_line":"                         actual_groups[0].__dict__)"}],"source_content_type":"text/x-python","patch_set":33,"id":"9c325142_b5e70003","line":118,"range":{"start_line":118,"start_character":62,"end_line":118,"end_character":72},"updated":"2021-07-12 16:26:45.000000000","message":"I guess you wanted to say owner\u003downer here to use the new owner parameter.\n\nBtw, this also show that the asserts below does not really test anything about the owner handling as it test case passes even if the uuids.port is not passed in to get_device_profile_groups()","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"94b492f773873eceb9f05da4ae9e73228be18ec6","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        expected_groups \u003d [rg]"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        actual_groups \u003d self.client.get_device_profile_groups(\u0027mydp\u0027,"},{"line_number":118,"context_line":"                                                              owner\u003dNone)"},{"line_number":119,"context_line":"        self.assertEqual(len(expected_groups), len(actual_groups))"},{"line_number":120,"context_line":"        self.assertEqual(expected_groups[0].__dict__,"},{"line_number":121,"context_line":"                         actual_groups[0].__dict__)"}],"source_content_type":"text/x-python","patch_set":33,"id":"75f1e147_3efacbca","line":118,"range":{"start_line":118,"start_character":62,"end_line":118,"end_character":72},"in_reply_to":"9c325142_b5e70003","updated":"2021-07-13 06:48:30.000000000","message":"fixed.","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"94b492f773873eceb9f05da4ae9e73228be18ec6","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    def test_get_device_profile_groups_no_owner(self):"},{"line_number":124,"context_line":"        self._test_get_device_profile_groups(owner\u003dNone)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def _test_get_device_profile_groups_port_owner(self):"},{"line_number":127,"context_line":"        self._test_get_device_profile_groups(owner\u003duuids.port)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    @mock.patch(\u0027nova.accelerator.cyborg._CyborgClient.\u0027"}],"source_content_type":"text/x-python","patch_set":33,"id":"20720289_54b1b3a4","line":126,"range":{"start_line":126,"start_character":8,"end_line":126,"end_character":9},"updated":"2021-07-13 06:48:30.000000000","message":"Here is why: this test is shaded.","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac6dbd123bc56824892d428962888503e053529e","unresolved":true,"context_lines":[{"line_number":231,"context_line":"    @mock.patch(\u0027nova.accelerator.cyborg._CyborgClient.\u0027"},{"line_number":232,"context_line":"                \u0027_create_arqs\u0027)"},{"line_number":233,"context_line":"    def test_create_arqs(self, mock_create_arqs):"},{"line_number":234,"context_line":"        # Happy path"},{"line_number":235,"context_line":"        arqs, rg_rp_map \u003d self._get_arqs_and_request_groups()"},{"line_number":236,"context_line":"        dp_name \u003d arqs[0][\"device_profile_name\"]"},{"line_number":237,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"f75b805a_8aff56bd","line":234,"updated":"2021-07-12 16:26:45.000000000","message":"Do we have one unit test of the error case when cyborg returns no arqs?","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8643fad9e9ea8260e8c5d69fab587c5e3ce283eb","unresolved":false,"context_lines":[{"line_number":231,"context_line":"    @mock.patch(\u0027nova.accelerator.cyborg._CyborgClient.\u0027"},{"line_number":232,"context_line":"                \u0027_create_arqs\u0027)"},{"line_number":233,"context_line":"    def test_create_arqs(self, mock_create_arqs):"},{"line_number":234,"context_line":"        # Happy path"},{"line_number":235,"context_line":"        arqs, rg_rp_map \u003d self._get_arqs_and_request_groups()"},{"line_number":236,"context_line":"        dp_name \u003d arqs[0][\"device_profile_name\"]"},{"line_number":237,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"de41a3b8_0a67eac4","line":234,"in_reply_to":"53c8b643_c91bb463","updated":"2021-07-13 09:42:52.000000000","message":"yepp, thanks.","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"94b492f773873eceb9f05da4ae9e73228be18ec6","unresolved":false,"context_lines":[{"line_number":231,"context_line":"    @mock.patch(\u0027nova.accelerator.cyborg._CyborgClient.\u0027"},{"line_number":232,"context_line":"                \u0027_create_arqs\u0027)"},{"line_number":233,"context_line":"    def test_create_arqs(self, mock_create_arqs):"},{"line_number":234,"context_line":"        # Happy path"},{"line_number":235,"context_line":"        arqs, rg_rp_map \u003d self._get_arqs_and_request_groups()"},{"line_number":236,"context_line":"        dp_name \u003d arqs[0][\"device_profile_name\"]"},{"line_number":237,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"53c8b643_c91bb463","line":234,"in_reply_to":"f75b805a_8aff56bd","updated":"2021-07-13 06:48:30.000000000","message":"I guess this is what you are looking for:\ntest_create_arqs_failure\n\nhttps://review.opendev.org/c/openstack/nova/+/771362/33/nova/tests/unit/accelerator/test_cyborg.py#208","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac6dbd123bc56824892d428962888503e053529e","unresolved":true,"context_lines":[{"line_number":242,"context_line":"        self.assertEqual(arqs, ret_arqs)"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    @mock.patch(\u0027nova.accelerator.cyborg._CyborgClient.\u0027"},{"line_number":245,"context_line":"                \u0027get_arq_by_uuid\u0027)"},{"line_number":246,"context_line":"    def test_get_arq_device_rp_uuid(self, mock_get_arq):"},{"line_number":247,"context_line":"        arqs, rg_rp_map \u003d self._get_arqs_and_request_groups()"},{"line_number":248,"context_line":"        mock_get_arq.return_value \u003d arqs[0]"}],"source_content_type":"text/x-python","patch_set":33,"id":"d18eff4c_89bf7c89","line":245,"updated":"2021-07-12 16:26:45.000000000","message":"This is not necessary, the get_arq_device_rp_uuid() function does not call cyborg.","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"94b492f773873eceb9f05da4ae9e73228be18ec6","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        self.assertEqual(arqs, ret_arqs)"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    @mock.patch(\u0027nova.accelerator.cyborg._CyborgClient.\u0027"},{"line_number":245,"context_line":"                \u0027get_arq_by_uuid\u0027)"},{"line_number":246,"context_line":"    def test_get_arq_device_rp_uuid(self, mock_get_arq):"},{"line_number":247,"context_line":"        arqs, rg_rp_map \u003d self._get_arqs_and_request_groups()"},{"line_number":248,"context_line":"        mock_get_arq.return_value \u003d arqs[0]"}],"source_content_type":"text/x-python","patch_set":33,"id":"9205c6e9_42c9d316","line":245,"in_reply_to":"d18eff4c_89bf7c89","updated":"2021-07-13 06:48:30.000000000","message":"Done","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac6dbd123bc56824892d428962888503e053529e","unresolved":true,"context_lines":[{"line_number":245,"context_line":"                \u0027get_arq_by_uuid\u0027)"},{"line_number":246,"context_line":"    def test_get_arq_device_rp_uuid(self, mock_get_arq):"},{"line_number":247,"context_line":"        arqs, rg_rp_map \u003d self._get_arqs_and_request_groups()"},{"line_number":248,"context_line":"        mock_get_arq.return_value \u003d arqs[0]"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        rp_uuid \u003d self.client.get_arq_device_rp_uuid(arqs[0], rg_rp_map)"},{"line_number":251,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"8040c274_58e55869","line":248,"updated":"2021-07-12 16:26:45.000000000","message":"This is not necessary, the get_arq_device_rp_uuid() function does not call cyborg.","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"94b492f773873eceb9f05da4ae9e73228be18ec6","unresolved":false,"context_lines":[{"line_number":245,"context_line":"                \u0027get_arq_by_uuid\u0027)"},{"line_number":246,"context_line":"    def test_get_arq_device_rp_uuid(self, mock_get_arq):"},{"line_number":247,"context_line":"        arqs, rg_rp_map \u003d self._get_arqs_and_request_groups()"},{"line_number":248,"context_line":"        mock_get_arq.return_value \u003d arqs[0]"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        rp_uuid \u003d self.client.get_arq_device_rp_uuid(arqs[0], rg_rp_map)"},{"line_number":251,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"608ead29_8dbf83fb","line":248,"in_reply_to":"8040c274_58e55869","updated":"2021-07-13 06:48:30.000000000","message":"Done","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac6dbd123bc56824892d428962888503e053529e","unresolved":true,"context_lines":[{"line_number":437,"context_line":"        resp \u003d fake_requests.FakeResponse(200, content)"},{"line_number":438,"context_line":"        mock_cyborg_get.return_value \u003d resp"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        self.client.get_arq_by_uuid(arq_uuids[0])"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"        mock_cyborg_get.assert_called_once_with("},{"line_number":443,"context_line":"            \"%s/%s\" % (self.client.ARQ_URL, arq_uuids[0]))"}],"source_content_type":"text/x-python","patch_set":33,"id":"4633cc8f_34ce6c19","line":440,"updated":"2021-07-12 16:26:45.000000000","message":"you can also assert that the returned value is correct","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"94b492f773873eceb9f05da4ae9e73228be18ec6","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        resp \u003d fake_requests.FakeResponse(200, content)"},{"line_number":438,"context_line":"        mock_cyborg_get.return_value \u003d resp"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        self.client.get_arq_by_uuid(arq_uuids[0])"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"        mock_cyborg_get.assert_called_once_with("},{"line_number":443,"context_line":"            \"%s/%s\" % (self.client.ARQ_URL, arq_uuids[0]))"}],"source_content_type":"text/x-python","patch_set":33,"id":"6df2af28_a60ebfe0","line":440,"in_reply_to":"4633cc8f_34ce6c19","updated":"2021-07-13 06:48:30.000000000","message":"Done","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac6dbd123bc56824892d428962888503e053529e","unresolved":true,"context_lines":[{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    @mock.patch(\u0027nova.accelerator.cyborg.LOG.error\u0027)"},{"line_number":446,"context_line":"    @mock.patch(\u0027nova.accelerator.cyborg._CyborgClient._call_cyborg\u0027)"},{"line_number":447,"context_line":"    def test_get_arq_by_uuid_exception(self, mock_call_cyborg, mock_log):"},{"line_number":448,"context_line":"        mock_call_cyborg.return_value \u003d (None, \u0027Some error\u0027)"},{"line_number":449,"context_line":"        _, bound_arqs \u003d self._get_bound_arqs()"},{"line_number":450,"context_line":"        arq_uuids \u003d [arq[\u0027uuid\u0027] for arq in bound_arqs]"}],"source_content_type":"text/x-python","patch_set":33,"id":"06829190_c72dbd59","line":447,"range":{"start_line":447,"start_character":63,"end_line":447,"end_character":71},"updated":"2021-07-12 16:26:45.000000000","message":"this is unused, you can drop it","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"94b492f773873eceb9f05da4ae9e73228be18ec6","unresolved":false,"context_lines":[{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    @mock.patch(\u0027nova.accelerator.cyborg.LOG.error\u0027)"},{"line_number":446,"context_line":"    @mock.patch(\u0027nova.accelerator.cyborg._CyborgClient._call_cyborg\u0027)"},{"line_number":447,"context_line":"    def test_get_arq_by_uuid_exception(self, mock_call_cyborg, mock_log):"},{"line_number":448,"context_line":"        mock_call_cyborg.return_value \u003d (None, \u0027Some error\u0027)"},{"line_number":449,"context_line":"        _, bound_arqs \u003d self._get_bound_arqs()"},{"line_number":450,"context_line":"        arq_uuids \u003d [arq[\u0027uuid\u0027] for arq in bound_arqs]"}],"source_content_type":"text/x-python","patch_set":33,"id":"c61dabe6_6c570b8c","line":447,"range":{"start_line":447,"start_character":63,"end_line":447,"end_character":71},"in_reply_to":"06829190_c72dbd59","updated":"2021-07-13 06:48:30.000000000","message":"Done","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac6dbd123bc56824892d428962888503e053529e","unresolved":true,"context_lines":[{"line_number":454,"context_line":"                arq_uuids[0])"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    @mock.patch(\u0027keystoneauth1.adapter.Adapter.get\u0027)"},{"line_number":457,"context_line":"    def test_get_arq_by_uuid_not_find(self, mock_cyborg_get):"},{"line_number":458,"context_line":"        _, bound_arqs \u003d self._get_bound_arqs()"},{"line_number":459,"context_line":"        arq_uuids \u003d [arq[\u0027uuid\u0027] for arq in bound_arqs]"},{"line_number":460,"context_line":"        content \u003d jsonutils.dumps({})"}],"source_content_type":"text/x-python","patch_set":33,"id":"d4f35125_3ee9b195","line":457,"range":{"start_line":457,"start_character":8,"end_line":457,"end_character":37},"updated":"2021-07-12 16:26:45.000000000","message":"nit: test_get_arq_by_uuid_not_found","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"94b492f773873eceb9f05da4ae9e73228be18ec6","unresolved":false,"context_lines":[{"line_number":454,"context_line":"                arq_uuids[0])"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    @mock.patch(\u0027keystoneauth1.adapter.Adapter.get\u0027)"},{"line_number":457,"context_line":"    def test_get_arq_by_uuid_not_find(self, mock_cyborg_get):"},{"line_number":458,"context_line":"        _, bound_arqs \u003d self._get_bound_arqs()"},{"line_number":459,"context_line":"        arq_uuids \u003d [arq[\u0027uuid\u0027] for arq in bound_arqs]"},{"line_number":460,"context_line":"        content \u003d jsonutils.dumps({})"}],"source_content_type":"text/x-python","patch_set":33,"id":"65cb7c0b_d98f8927","line":457,"range":{"start_line":457,"start_character":8,"end_line":457,"end_character":37},"in_reply_to":"d4f35125_3ee9b195","updated":"2021-07-13 06:48:30.000000000","message":"Done","commit_id":"dc04f8cd0c0bcb52b3288c507c968b412c35c80f"}]}
