)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"f94892041ec09f0d41b01a4430c0f05bebe3ad69","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"fa70fff3_f55a752a","updated":"2026-07-17 15:01:36.000000000","message":"different fix landed in the meanwhile https://review.opendev.org/c/openstack/keystone/+/996623 You may want to abandon the change","commit_id":"ab7f4deb973fd57b21e1bc35f0cb904376a0adb9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"64b90991ec1454084d3d500d35572b64cd811fcb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"e9ca0d73_aa6d150f","updated":"2026-06-15 21:48:54.000000000","message":"from my limited understanding of this code this sort of make sesne to me\n\ni was a litel surprised that you ware geting a exception.NotFound there but i guess for any provider other then the sql one you are calling an externa rest api so getinga NOTFOUNT expcation at that point make sense\n\ni can also see how this woudl be a runtime issue not just a test instablity so mofiying the api module to be robust to that also checks out.","commit_id":"ab7f4deb973fd57b21e1bc35f0cb904376a0adb9"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"c28a82c1149540f69122acaae40967506cb3e0d5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5a2d5f7a_26586207","updated":"2026-07-08 10:36:03.000000000","message":"need to land it finally to help racing tests","commit_id":"ab7f4deb973fd57b21e1bc35f0cb904376a0adb9"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"340cf9617b97ec1d30af7f9824d7b00f2b951668","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"cec29141_0ab14e60","updated":"2026-07-14 06:56:23.000000000","message":"recheck","commit_id":"ab7f4deb973fd57b21e1bc35f0cb904376a0adb9"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"f03290c6850e606260eab5c0f3c368276c6e4f54","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"ed5822df_7cc82366","updated":"2026-07-09 07:13:53.000000000","message":"recheck infra timeouts","commit_id":"ab7f4deb973fd57b21e1bc35f0cb904376a0adb9"}],"keystone/api/credentials.py":[{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"a07df24692e8888d9d5f2766b79a0e1928e4f05b","unresolved":true,"context_lines":[{"line_number":185,"context_line":"            except exception.NotFound:"},{"line_number":186,"context_line":"                # The credential was returned by the listing query but"},{"line_number":187,"context_line":"                # disappeared before the per-row policy check could run."},{"line_number":188,"context_line":"                # This is a benign TOCTOU race against a concurrent"},{"line_number":189,"context_line":"                # delete; skip the row instead of failing the whole"},{"line_number":190,"context_line":"                # listing with HTTP 404."},{"line_number":191,"context_line":"                LOG.warning("}],"source_content_type":"text/x-python","patch_set":1,"id":"642bbfe2_ebde1bbe","line":188,"updated":"2026-06-10 16:19:47.000000000","message":"a typo \"benign\"","commit_id":"ab7f4deb973fd57b21e1bc35f0cb904376a0adb9"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"f8b559e60aba2a3f39232e6126df010f8ed1ad0f","unresolved":true,"context_lines":[{"line_number":185,"context_line":"            except exception.NotFound:"},{"line_number":186,"context_line":"                # The credential was returned by the listing query but"},{"line_number":187,"context_line":"                # disappeared before the per-row policy check could run."},{"line_number":188,"context_line":"                # This is a benign TOCTOU race against a concurrent"},{"line_number":189,"context_line":"                # delete; skip the row instead of failing the whole"},{"line_number":190,"context_line":"                # listing with HTTP 404."},{"line_number":191,"context_line":"                LOG.warning("}],"source_content_type":"text/x-python","patch_set":1,"id":"fca8b364_0d46f485","line":188,"in_reply_to":"642bbfe2_ebde1bbe","updated":"2026-06-10 16:35:05.000000000","message":"I don\u0027t think there is a typo. The comment says that this race condition is not harmful when a concurrent delete is happening","commit_id":"ab7f4deb973fd57b21e1bc35f0cb904376a0adb9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"64b90991ec1454084d3d500d35572b64cd811fcb","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            except exception.NotFound:"},{"line_number":186,"context_line":"                # The credential was returned by the listing query but"},{"line_number":187,"context_line":"                # disappeared before the per-row policy check could run."},{"line_number":188,"context_line":"                # This is a benign TOCTOU race against a concurrent"},{"line_number":189,"context_line":"                # delete; skip the row instead of failing the whole"},{"line_number":190,"context_line":"                # listing with HTTP 404."},{"line_number":191,"context_line":"                LOG.warning("}],"source_content_type":"text/x-python","patch_set":1,"id":"b6d558fe_fde884a4","line":188,"in_reply_to":"c9524c92_0824a027","updated":"2026-06-15 21:48:54.000000000","message":"TOCTOU is the new one for me :) but yes `benign` is correct\n\nhttps://en.wikipedia.org/wiki/Time-of-check_to_time-of-use\n\nim familiar with the concept just never seen the abviation","commit_id":"ab7f4deb973fd57b21e1bc35f0cb904376a0adb9"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"f16d4d78f93e8d24b6677625beb484ed5ecbd4c3","unresolved":true,"context_lines":[{"line_number":185,"context_line":"            except exception.NotFound:"},{"line_number":186,"context_line":"                # The credential was returned by the listing query but"},{"line_number":187,"context_line":"                # disappeared before the per-row policy check could run."},{"line_number":188,"context_line":"                # This is a benign TOCTOU race against a concurrent"},{"line_number":189,"context_line":"                # delete; skip the row instead of failing the whole"},{"line_number":190,"context_line":"                # listing with HTTP 404."},{"line_number":191,"context_line":"                LOG.warning("}],"source_content_type":"text/x-python","patch_set":1,"id":"c9524c92_0824a027","line":188,"in_reply_to":"fca8b364_0d46f485","updated":"2026-06-11 17:14:14.000000000","message":"right, a new word in the vocabulary","commit_id":"ab7f4deb973fd57b21e1bc35f0cb904376a0adb9"}],"keystone/tests/unit/test_v3_credential.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"64b90991ec1454084d3d500d35572b64cd811fcb","unresolved":true,"context_lines":[{"line_number":145,"context_line":"        r \u003d self.get(\u0027/credentials\u0027)"},{"line_number":146,"context_line":"        self.assertValidCredentialListResponse(r, ref\u003dself.credential)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def test_list_credentials_skips_concurrently_deleted(self):"},{"line_number":149,"context_line":"        \"\"\"Call ``GET /credentials`` while a row is concurrently deleted."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        The list handler iterates over the result of ``list_credentials``"}],"source_content_type":"text/x-python","patch_set":1,"id":"0b39d0d5_2b6387c1","line":148,"updated":"2026-06-15 21:48:54.000000000","message":"you could also mock the logger and assert the warning was logged\n```suggestion\n    @mock.patch(\"keystone.api.credentials.LOG.warning\")\n    def test_list_credentials_skips_concurrently_deleted(self, mock_log):\n    \n       ...\n       mock_log.assert_called_with(...)\n```","commit_id":"ab7f4deb973fd57b21e1bc35f0cb904376a0adb9"}]}
