)]}'
{"nova/exception.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0eb8da7ce11c396c8d6f62ede46c680e0a866864","unresolved":false,"context_lines":[{"line_number":2475,"context_line":""},{"line_number":2476,"context_line":""},{"line_number":2477,"context_line":"class RequestGroupSuffixConflict(NovaException):"},{"line_number":2478,"context_line":"    msg_fmt \u003d _(\"Duplicate request group suffix %(suffix)s!\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_ad3f3784","line":2478,"range":{"start_line":2478,"start_character":58,"end_line":2478,"end_character":59},"updated":"2019-12-09 16:23:01.000000000","message":"Can you drop this. It\u0027s already an exception. We don\u0027t need to shout","commit_id":"2e3985c30309b8e3f855035212ff4c3770f54eb4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cd9ab3db012befd1f2b8d41c27d4b2bfebe2037","unresolved":false,"context_lines":[{"line_number":2475,"context_line":""},{"line_number":2476,"context_line":""},{"line_number":2477,"context_line":"class RequestGroupSuffixConflict(NovaException):"},{"line_number":2478,"context_line":"    msg_fmt \u003d _(\"Duplicate request group suffix %(suffix)s!\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_f3650c1e","line":2478,"range":{"start_line":2478,"start_character":58,"end_line":2478,"end_character":59},"in_reply_to":"3fa7e38b_ad3f3784","updated":"2019-12-09 18:13:53.000000000","message":"done","commit_id":"2e3985c30309b8e3f855035212ff4c3770f54eb4"}],"nova/scheduler/utils.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"896c9d6f7b00034d60250cc5e45a74fb82e36b7e","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        requester_id is already set, use it. But ensure that it is unique"},{"line_number":317,"context_line":"        in combination with suffixes from the flavor."},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        Otherwise, if the request group has no requester_id, we will generate"},{"line_number":320,"context_line":"        one **and** set it in the request group."},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        :param request_group: the RequestGroup to be added"},{"line_number":323,"context_line":"        :raise: RequestGroupSuffixConflict if request_group.requester_id"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_980e9ae2","line":320,"range":{"start_line":319,"start_character":8,"end_line":320,"end_character":48},"updated":"2019-12-03 00:38:12.000000000","message":"Per [1], just fail instead; require all externally-created request groups to have a requester_id.\n\n[1] https://review.opendev.org/#/c/696418/1/nova/scheduler/utils.py@321","commit_id":"1767293ccbfa94a2a7b0c9953d391420503e00c4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"896c9d6f7b00034d60250cc5e45a74fb82e36b7e","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        :raise: RequestGroupSuffixConflict if request_group.requester_id"},{"line_number":324,"context_line":"            already exists in this ResourceRequest."},{"line_number":325,"context_line":"        \"\"\""},{"line_number":326,"context_line":"        if (\u0027requester_id\u0027 in request_group and"},{"line_number":327,"context_line":"                request_group.requester_id is not None):"},{"line_number":328,"context_line":"            if request_group.requester_id in self._rg_by_id:"},{"line_number":329,"context_line":"                raise exception.RequestGroupSuffixConflict("}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_381e860d","line":326,"range":{"start_line":326,"start_character":12,"end_line":326,"end_character":47},"updated":"2019-12-03 00:38:12.000000000","message":"per [1] this condition shouldn\u0027t be needed\n\n[1] https://review.opendev.org/#/c/696418/1/nova/scheduler/utils.py@327","commit_id":"1767293ccbfa94a2a7b0c9953d391420503e00c4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"84d6d26d56c6b0c7b6ec21ed30b0d0991d36aebb","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        A group coming from \"outside\" (ports, device profiles) must be"},{"line_number":315,"context_line":"        associated with a requester_id, such as a port UUID. We use this"},{"line_number":316,"context_line":"        requester_id as the group suffix (but ensure that it is unique in"},{"line_number":317,"context_line":"        combination with suffixes from the flavor)."},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        Groups coming from \"outside\" are not allowed to be no-ops. That is,"},{"line_number":320,"context_line":"        they must provide resources and/or required/forbidden traits/aggregates"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_0a056215","line":317,"updated":"2019-12-03 17:14:00.000000000","message":"Now just realized that for neutron it is easy as the resource request of each port is mapped to exactly one request group today. Does  cyborg has the same limitation? A device profile always means a single request group?","commit_id":"fb97b55aa246cba5e98d4fd3ca56417d57af46f8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5ae1b05a4c2b4db3443ea49ada48b846dfc87095","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        A group coming from \"outside\" (ports, device profiles) must be"},{"line_number":315,"context_line":"        associated with a requester_id, such as a port UUID. We use this"},{"line_number":316,"context_line":"        requester_id as the group suffix (but ensure that it is unique in"},{"line_number":317,"context_line":"        combination with suffixes from the flavor)."},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        Groups coming from \"outside\" are not allowed to be no-ops. That is,"},{"line_number":320,"context_line":"        they must provide resources and/or required/forbidden traits/aggregates"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_d657f026","line":317,"in_reply_to":"3fa7e38b_0a056215","updated":"2019-12-03 19:43:08.000000000","message":"No, but cyborg isn\u0027t going to name request groups based on the device profile; they\u0027re generating a name [1] for each device profile *group* [2], and those do correspond to individual request groups.\n\n[1] https://review.opendev.org/#/c/631243/43/nova/accelerator/cyborg.py@56\n[2] https://review.opendev.org/#/c/631243/43/nova/accelerator/cyborg.py@21","commit_id":"fb97b55aa246cba5e98d4fd3ca56417d57af46f8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"84d6d26d56c6b0c7b6ec21ed30b0d0991d36aebb","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        # NOTE(efried): Deliberately check False-ness rather than None-ness"},{"line_number":329,"context_line":"        # here, since both would result in the unsuffixed request group being"},{"line_number":330,"context_line":"        # used, and that\u0027s bad."},{"line_number":331,"context_line":"        if not request_group.requester_id:"},{"line_number":332,"context_line":"            # NOTE(efried): An \"outside\" RequestGroup is created by a"},{"line_number":333,"context_line":"            # programmatic agent and that agent is responsible for guaranteeing"},{"line_number":334,"context_line":"            # the presence of a unique requester_id. This is in contrast to"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_f0ef941a","line":331,"updated":"2019-12-03 17:14:00.000000000","message":"My Object Oriented self tells me that this should be enforced by the __init__ of the RequestGroup now but I know that versioned object is a bit of wild west so I\u0027m not pushing it.","commit_id":"fb97b55aa246cba5e98d4fd3ca56417d57af46f8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5ae1b05a4c2b4db3443ea49ada48b846dfc87095","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        # NOTE(efried): Deliberately check False-ness rather than None-ness"},{"line_number":329,"context_line":"        # here, since both would result in the unsuffixed request group being"},{"line_number":330,"context_line":"        # used, and that\u0027s bad."},{"line_number":331,"context_line":"        if not request_group.requester_id:"},{"line_number":332,"context_line":"            # NOTE(efried): An \"outside\" RequestGroup is created by a"},{"line_number":333,"context_line":"            # programmatic agent and that agent is responsible for guaranteeing"},{"line_number":334,"context_line":"            # the presence of a unique requester_id. This is in contrast to"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_5631c009","line":331,"in_reply_to":"3fa7e38b_f0ef941a","updated":"2019-12-03 19:43:08.000000000","message":"Well, the point here is that requester_id is technically allowed to be \u0027\u0027 as well.","commit_id":"fb97b55aa246cba5e98d4fd3ca56417d57af46f8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"84d6d26d56c6b0c7b6ec21ed30b0d0991d36aebb","unresolved":false,"context_lines":[{"line_number":334,"context_line":"            # the presence of a unique requester_id. This is in contrast to"},{"line_number":335,"context_line":"            # flavor extra_specs where a human is responsible for the group"},{"line_number":336,"context_line":"            # suffix."},{"line_number":337,"context_line":"            raise ValueError(\u0027Missing requester_id in RequestGroup! This is \u0027"},{"line_number":338,"context_line":"                             \u0027probably a programmer error.\u0027)"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"        if request_group.is_empty():"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_7047244e","line":337,"updated":"2019-12-03 17:14:00.000000000","message":"I would add the data in RequestGroup to the message to help identifying the source of the bad group.","commit_id":"fb97b55aa246cba5e98d4fd3ca56417d57af46f8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5ae1b05a4c2b4db3443ea49ada48b846dfc87095","unresolved":false,"context_lines":[{"line_number":334,"context_line":"            # the presence of a unique requester_id. This is in contrast to"},{"line_number":335,"context_line":"            # flavor extra_specs where a human is responsible for the group"},{"line_number":336,"context_line":"            # suffix."},{"line_number":337,"context_line":"            raise ValueError(\u0027Missing requester_id in RequestGroup! This is \u0027"},{"line_number":338,"context_line":"                             \u0027probably a programmer error.\u0027)"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"        if request_group.is_empty():"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_d90ac31c","line":337,"in_reply_to":"3fa7e38b_7047244e","updated":"2019-12-03 19:43:08.000000000","message":"Done.\n\nOh, this should be translated too, I suppose.\n\nThis renders like:\n\nValueError: Missing requester_id in RequestGroup! This is probably a programmer error. RequestGroup(aggregates\u003d[],forbidden_aggregates\u003dset([]),forbidden_traits\u003dset([]),in_tree\u003dNone,provider_uuids\u003d[],requester_id\u003dNone,required_traits\u003dset([\u0027CUSTOM_BAR\u0027]),resources\u003d{},use_same_provider\u003dTrue)","commit_id":"fb97b55aa246cba5e98d4fd3ca56417d57af46f8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"84d6d26d56c6b0c7b6ec21ed30b0d0991d36aebb","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        if request_group.is_empty():"},{"line_number":341,"context_line":"            # NOTE(efried): It is up to the calling code to enforce a nonempty"},{"line_number":342,"context_line":"            # RequestGroup with suitable logic and exceptions."},{"line_number":343,"context_line":"            raise ValueError(\u0027Refusing to add a no-op RequestGroup. This is a \u0027"},{"line_number":344,"context_line":"                             \u0027probably a programmer error.\u0027)"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        if request_group.requester_id in self._rg_by_id:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_f0531415","line":343,"updated":"2019-12-03 17:14:00.000000000","message":"I would add the requester_id to the message to help troubleshootability.","commit_id":"fb97b55aa246cba5e98d4fd3ca56417d57af46f8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5ae1b05a4c2b4db3443ea49ada48b846dfc87095","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        if request_group.is_empty():"},{"line_number":341,"context_line":"            # NOTE(efried): It is up to the calling code to enforce a nonempty"},{"line_number":342,"context_line":"            # RequestGroup with suitable logic and exceptions."},{"line_number":343,"context_line":"            raise ValueError(\u0027Refusing to add a no-op RequestGroup. This is a \u0027"},{"line_number":344,"context_line":"                             \u0027probably a programmer error.\u0027)"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        if request_group.requester_id in self._rg_by_id:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_19229ba4","line":343,"in_reply_to":"3fa7e38b_f0531415","updated":"2019-12-03 19:43:08.000000000","message":"Done","commit_id":"fb97b55aa246cba5e98d4fd3ca56417d57af46f8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0eb8da7ce11c396c8d6f62ede46c680e0a866864","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        The string suffix is used as the RequestGroup.requester_id to"},{"line_number":82,"context_line":"        facilitate mapping of requests to allocation candidates using the"},{"line_number":83,"context_line":"        ``mappings`` piece of the response added in Placement microversion 1.34"},{"line_number":84,"context_line":"        https://docs.openstack.org/placement/train/specs/train/implemented/placement-resource-provider-request-group-mapping-in-allocation-candidates.html  # noqa"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        For image metadata, traits are extracted from the ``traits_required``"},{"line_number":87,"context_line":"        property, if present."}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_cd5dd3ec","line":84,"range":{"start_line":84,"start_character":155,"end_line":84,"end_character":162},"updated":"2019-12-09 16:23:01.000000000","message":"Do you actually need this? It\u0027s usually clever enough to detect this","commit_id":"2e3985c30309b8e3f855035212ff4c3770f54eb4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7cd9ab3db012befd1f2b8d41c27d4b2bfebe2037","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        The string suffix is used as the RequestGroup.requester_id to"},{"line_number":82,"context_line":"        facilitate mapping of requests to allocation candidates using the"},{"line_number":83,"context_line":"        ``mappings`` piece of the response added in Placement microversion 1.34"},{"line_number":84,"context_line":"        https://docs.openstack.org/placement/train/specs/train/implemented/placement-resource-provider-request-group-mapping-in-allocation-candidates.html  # noqa"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        For image metadata, traits are extracted from the ``traits_required``"},{"line_number":87,"context_line":"        property, if present."}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_13a54848","line":84,"range":{"start_line":84,"start_character":155,"end_line":84,"end_character":162},"in_reply_to":"3fa7e38b_cd5dd3ec","updated":"2019-12-09 18:13:53.000000000","message":"Interesting. I actually tried to make pep break on a regular text line exceeding 80c and couldn\u0027t. Removed (here and on L75).","commit_id":"2e3985c30309b8e3f855035212ff4c3770f54eb4"}]}
