)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ef58e256f16a16e88de08206afae9f87c6d5ecc5","unresolved":false,"context_lines":[{"line_number":7,"context_line":"WIP: Allow RequestGroups without resources"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change adjust RequestGroup parsing to allow individual"},{"line_number":10,"context_line":"groups that do not have a resources entry, _as long as there"},{"line_number":11,"context_line":"is at least one resources somewhere in the entire query_."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This is done in microversion 1.33"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dfbec78f_ebeeee86","line":11,"range":{"start_line":10,"start_character":43,"end_line":11,"end_character":57},"updated":"2019-05-07 10:38:21.000000000","message":"Yes, good, this occurred to me last night. Otherwise you would get what, a successful response with no candidates but with provider summaries?\n\nWhich leads to: we need to make sure the provider summaries include the resourceless providers. I can\u0027t remember if we already include all tree members around the results - if so, we\u0027re probably covered. But... what about sharing providers? Trying to think of a scenario where it would make sense for a sharing provider to supply a trait but no resource...","commit_id":"9cc64b0ef9585ce4fb3d677b407928606cfde09f"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"cb97aa5bbdcdca86ac6059e87ffbdeb86a1268b9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"WIP: Allow RequestGroups without resources"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change adjust RequestGroup parsing to allow individual"},{"line_number":10,"context_line":"groups that do not have a resources entry, _as long as there"},{"line_number":11,"context_line":"is at least one resources somewhere in the entire query_."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This is done in microversion 1.33"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dfbec78f_0050f8d3","line":11,"range":{"start_line":10,"start_character":43,"end_line":11,"end_character":57},"in_reply_to":"dfbec78f_ebeeee86","updated":"2019-05-07 16:43:33.000000000","message":"We have certainly talked about \"include a tree members\" and I thought we implemented it, but not certain.\n\n/me digs...\n\nYeah, here is what I was thinking of: https://review.opendev.org/#/c/559480/\n\nHaven\u0027t checked it to make sure it includes everything.\n\nI can\u0027t think of a sharing provider that provides a trait unless I think of a sharing nest, which I\u0027m pretty sure doesn\u0027t make sense (or rather, _shouldn\u0027t_ make sense, let\u0027s not go there)","commit_id":"9cc64b0ef9585ce4fb3d677b407928606cfde09f"}],"placement/lib.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ef58e256f16a16e88de08206afae9f87c6d5ecc5","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        by_suffix \u003d cls._parse_request_items(req, allow_forbidden)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        if want_version.matches(RESOURCELESS_PROVIDERS_VERSION):"},{"line_number":264,"context_line":"            resources \u003d ["},{"line_number":265,"context_line":"                group for group in by_suffix.values() if group.resources]"},{"line_number":266,"context_line":"            if not resources:"},{"line_number":267,"context_line":"                msg \u003d ("},{"line_number":268,"context_line":"                    \u0027There must be at least one resources or resources{*} \u0027"},{"line_number":269,"context_line":"                    \u0027parameter.\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_8b6c1237","line":266,"range":{"start_line":264,"start_character":0,"end_line":266,"end_character":29},"updated":"2019-05-07 10:38:21.000000000","message":"Nit: if you combine these into an \u0027any\u0027 it\u0027s more efficient because it\u0027ll stop as soon as it finds a hit.\n\nIt could only possibly matter in cases where there\u0027s a crap ton of groups, and this way is more readable, so feel free to ignore.","commit_id":"9cc64b0ef9585ce4fb3d677b407928606cfde09f"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"cb97aa5bbdcdca86ac6059e87ffbdeb86a1268b9","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        by_suffix \u003d cls._parse_request_items(req, allow_forbidden)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        if want_version.matches(RESOURCELESS_PROVIDERS_VERSION):"},{"line_number":264,"context_line":"            resources \u003d ["},{"line_number":265,"context_line":"                group for group in by_suffix.values() if group.resources]"},{"line_number":266,"context_line":"            if not resources:"},{"line_number":267,"context_line":"                msg \u003d ("},{"line_number":268,"context_line":"                    \u0027There must be at least one resources or resources{*} \u0027"},{"line_number":269,"context_line":"                    \u0027parameter.\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_206adcb2","line":266,"range":{"start_line":264,"start_character":0,"end_line":266,"end_character":29},"in_reply_to":"dfbec78f_8b6c1237","updated":"2019-05-07 16:43:33.000000000","message":"Yeah, I might change it. My first draft python brain doesn\u0027t acknowledge the existence of \u0027any\u0027 but second draft does.","commit_id":"9cc64b0ef9585ce4fb3d677b407928606cfde09f"}],"placement/microversion.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ef58e256f16a16e88de08206afae9f87c6d5ecc5","unresolved":false,"context_lines":[{"line_number":81,"context_line":"             # `GET /allocation_candidates` API"},{"line_number":82,"context_line":"    \u00271.32\u0027,  # Support negative member_of queryparams on"},{"line_number":83,"context_line":"             # `GET /resource_providers` and `GET /allocation_candidates`"},{"line_number":84,"context_line":"    \u00271.33\u0027,  # Allow providers that provide no resources (\u0027required\u0027 without"},{"line_number":85,"context_line":"             # \u0027resources\u0027)"},{"line_number":86,"context_line":"]"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_4b761a09","line":84,"updated":"2019-05-07 10:38:21.000000000","message":"etc","commit_id":"9cc64b0ef9585ce4fb3d677b407928606cfde09f"}],"placement/objects/research_context.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"57343b4bd34e4c2bcacb5094331139de25b2db64","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        # in _alloc_candidates_multiple_providers(), so skip."},{"line_number":517,"context_line":"        return provs_with_inv"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    # FIXME(cdent): skip traits filtering entirely, let it happen later."},{"line_number":520,"context_line":"    # We\u0027re experimenting here."},{"line_number":521,"context_line":"    return provs_with_inv"},{"line_number":522,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9fb8cfa7_0ee43d3b","line":519,"updated":"2019-06-11 22:49:40.000000000","message":"This (and not anything related to the \"traits flow down\" concept) is causing the func test failure.","commit_id":"ff4776aee77343d75985607ebbd6cfc166b04046"}],"placement/tests/unit/test_util.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ef58e256f16a16e88de08206afae9f87c6d5ecc5","unresolved":false,"context_lines":[{"line_number":919,"context_line":"        exc \u003d self.assertRaises("},{"line_number":920,"context_line":"            webob.exc.HTTPBadRequest, self.do_parse, qs, version\u003d(1, 32))"},{"line_number":921,"context_line":"        self.assertIn("},{"line_number":922,"context_line":"            \u0027All traits parameters must be associated with resources.\u0027,"},{"line_number":923,"context_line":"            str(exc))"},{"line_number":924,"context_line":""},{"line_number":925,"context_line":"    def test_resource_less_providers_1_33_no_resources(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_2b672650","line":922,"updated":"2019-05-07 10:38:21.000000000","message":"This message needs to change","commit_id":"9cc64b0ef9585ce4fb3d677b407928606cfde09f"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"cb97aa5bbdcdca86ac6059e87ffbdeb86a1268b9","unresolved":false,"context_lines":[{"line_number":919,"context_line":"        exc \u003d self.assertRaises("},{"line_number":920,"context_line":"            webob.exc.HTTPBadRequest, self.do_parse, qs, version\u003d(1, 32))"},{"line_number":921,"context_line":"        self.assertIn("},{"line_number":922,"context_line":"            \u0027All traits parameters must be associated with resources.\u0027,"},{"line_number":923,"context_line":"            str(exc))"},{"line_number":924,"context_line":""},{"line_number":925,"context_line":"    def test_resource_less_providers_1_33_no_resources(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_60a53404","line":922,"in_reply_to":"dfbec78f_2b672650","updated":"2019-05-07 16:43:33.000000000","message":"This is true in \u003c\u003d 1.32\n\nOr are you saying \"in 1.32 it is more than just traits that need a resources\"?","commit_id":"9cc64b0ef9585ce4fb3d677b407928606cfde09f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d4e49cd700a5e2dc8ab6d96d8b18803e2a98932f","unresolved":false,"context_lines":[{"line_number":919,"context_line":"        exc \u003d self.assertRaises("},{"line_number":920,"context_line":"            webob.exc.HTTPBadRequest, self.do_parse, qs, version\u003d(1, 32))"},{"line_number":921,"context_line":"        self.assertIn("},{"line_number":922,"context_line":"            \u0027All traits parameters must be associated with resources.\u0027,"},{"line_number":923,"context_line":"            str(exc))"},{"line_number":924,"context_line":""},{"line_number":925,"context_line":"    def test_resource_less_providers_1_33_no_resources(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_c0d4844a","line":922,"in_reply_to":"dfbec78f_60a53404","updated":"2019-05-16 16:25:16.000000000","message":"Oh, I didn\u0027t see that we\u0027re at 1.32 here, ignore me.","commit_id":"9cc64b0ef9585ce4fb3d677b407928606cfde09f"}]}
