)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":30742,"name":"Soniya Murlidhar Vyas","email":"svyas@redhat.com","username":"svyas"},"change_message_id":"4ed66cb69d7e94d7f98de71cd507a1c9fa3f0f41","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add config option to wait for object storage quota sync"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes: 1967567"},{"line_number":10,"context_line":"Change-Id: I39d0dcc6e629f278fdff718980b376d392e30084"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"bf1a1a7f_3f108146","line":9,"updated":"2022-07-21 07:30:41.000000000","message":"Can you please update this to Closes-bug?","commit_id":"20da3c0b50bbf034788de44f06013fac98cfb3d3"},{"author":{"_account_id":35087,"name":"Bas de Bruijne","email":"bas.debruijne@canonical.com","username":"basdbruijne"},"change_message_id":"7d662dd06506db026e931f80ed7089287aa5b195","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add config option to wait for object storage quota sync"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes: 1967567"},{"line_number":10,"context_line":"Change-Id: I39d0dcc6e629f278fdff718980b376d392e30084"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"55171580_214bea30","line":9,"in_reply_to":"bf1a1a7f_3f108146","updated":"2022-07-22 13:00:12.000000000","message":"Done","commit_id":"20da3c0b50bbf034788de44f06013fac98cfb3d3"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"d0bdd5ad4bea4c4981e002d13eba59cb14b70e8b","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add waiter for object creation, fixes out-of-sync object quota cache for ceph"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes-bug: 1967567"},{"line_number":10,"context_line":"Change-Id: I39d0dcc6e629f278fdff718980b376d392e30084"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"b14abe04_ebaabc8c","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":19},"updated":"2022-07-27 11:56:04.000000000","message":"Just a nit: Closes-bug -\u003e Closes-Bug \nI guess this is the reason why Launchpad did not catch the review [1].\n\n[1] https://bugs.launchpad.net/tempest/+bug/1967567","commit_id":"93b1ee3be90ceec8b2c65c10948e1f6392c6ddb5"},{"author":{"_account_id":35087,"name":"Bas de Bruijne","email":"bas.debruijne@canonical.com","username":"basdbruijne"},"change_message_id":"1f176013d78a80cb0dd2c398f76ec3cfe8cae1d0","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add waiter for object creation, fixes out-of-sync object quota cache for ceph"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes-bug: 1967567"},{"line_number":10,"context_line":"Change-Id: I39d0dcc6e629f278fdff718980b376d392e30084"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"a21de54a_72be3c01","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":19},"in_reply_to":"b14abe04_ebaabc8c","updated":"2022-07-27 11:56:36.000000000","message":"Done","commit_id":"93b1ee3be90ceec8b2c65c10948e1f6392c6ddb5"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"39d1bb21b84bd957ec57fcf875d90302e640df38","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Bas de Bruijne \u003cbas.debruijne@canonical.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2022-07-28 08:24:55 -0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add waiter for object creation, fixes out-of-sync object quota cache for ceph"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes-Bug: 1967567"},{"line_number":10,"context_line":"Change-Id: I39d0dcc6e629f278fdff718980b376d392e30084"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"d8554153_fe5f5ec6","line":7,"range":{"start_line":7,"start_character":33,"end_line":7,"end_character":77},"updated":"2022-07-29 12:51:32.000000000","message":"this could go to the body of the commit message, we would avoid the too long title, the usual format is:\nhttps://docs.openstack.org/contributors/common/git.html#commit-messages","commit_id":"057b32e151e65fd353a0dbcbda2f0f383fb1b37c"},{"author":{"_account_id":35087,"name":"Bas de Bruijne","email":"bas.debruijne@canonical.com","username":"basdbruijne"},"change_message_id":"62e6673d64c2ed444bfd2c97001e31c10f29132c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Bas de Bruijne \u003cbas.debruijne@canonical.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2022-07-28 08:24:55 -0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add waiter for object creation, fixes out-of-sync object quota cache for ceph"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes-Bug: 1967567"},{"line_number":10,"context_line":"Change-Id: I39d0dcc6e629f278fdff718980b376d392e30084"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"04006bb5_25311981","line":7,"range":{"start_line":7,"start_character":33,"end_line":7,"end_character":77},"in_reply_to":"d8554153_fe5f5ec6","updated":"2022-07-29 14:00:08.000000000","message":"Done","commit_id":"057b32e151e65fd353a0dbcbda2f0f383fb1b37c"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"39d1bb21b84bd957ec57fcf875d90302e640df38","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add waiter for object creation, fixes out-of-sync object quota cache for ceph"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes-Bug: 1967567"},{"line_number":10,"context_line":"Change-Id: I39d0dcc6e629f278fdff718980b376d392e30084"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"a9286108_1d41f49f","line":9,"range":{"start_line":9,"start_character":12,"end_line":9,"end_character":19},"updated":"2022-07-29 12:51:32.000000000","message":"#1967567","commit_id":"057b32e151e65fd353a0dbcbda2f0f383fb1b37c"},{"author":{"_account_id":35087,"name":"Bas de Bruijne","email":"bas.debruijne@canonical.com","username":"basdbruijne"},"change_message_id":"62e6673d64c2ed444bfd2c97001e31c10f29132c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add waiter for object creation, fixes out-of-sync object quota cache for ceph"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes-Bug: 1967567"},{"line_number":10,"context_line":"Change-Id: I39d0dcc6e629f278fdff718980b376d392e30084"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"11b5c107_8620d8e5","line":9,"range":{"start_line":9,"start_character":12,"end_line":9,"end_character":19},"in_reply_to":"a9286108_1d41f49f","updated":"2022-07-29 14:00:08.000000000","message":"Done","commit_id":"057b32e151e65fd353a0dbcbda2f0f383fb1b37c"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":30742,"name":"Soniya Murlidhar Vyas","email":"svyas@redhat.com","username":"svyas"},"change_message_id":"4ed66cb69d7e94d7f98de71cd507a1c9fa3f0f41","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f848f5bf_1cfda421","updated":"2022-07-21 07:30:41.000000000","message":"Just a small nit for the commit message otherwise everything seems fine.\nAdding the waiter to the tempest.api.object_storage.test_container_quotas.ContainerQuotasTest is working.\nFollowing are the results of the test:-\n\n1. https://703ade5833a01ef32aca-c392e4904ca041b2375209c5c066ffc0.ssl.cf5.rackcdn.com/850311/2/check/tempest-multinode-full-py3/e0ca010/testr_results.html\n2. https://86b5072c67a3df3e68d5-4edda77aff6f00cc876f5cc0df654845.ssl.cf1.rackcdn.com/850311/2/check/tempest-full-wallaby-py3/d6791e7/testr_results.html\n3. https://6600eef21a966152195b-0eba497f6d920dc56b743164f19e1ba5.ssl.cf5.rackcdn.com/850311/2/check/tempest-full-yoga/1018b80/testr_results.html\n4. https://478169e15542245e1fb2-1337eb6e44995ec1645c493c10c5a993.ssl.cf1.rackcdn.com/850311/2/check/tempest-full-xena/7fb256e/testr_results.html\n\nLooking at the above results, we can merge this change ","commit_id":"20da3c0b50bbf034788de44f06013fac98cfb3d3"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"93a953a079d7265f5d77ff4c15b1f278afc9c48d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"cf79d8ea_83edb6b0","updated":"2022-07-21 10:28:55.000000000","message":"More detailed commit message would be great. \nExcept that looks good to me! ","commit_id":"20da3c0b50bbf034788de44f06013fac98cfb3d3"},{"author":{"_account_id":11075,"name":"Benny Kopilov","email":"bkopilov@redhat.com","username":"bkopilov"},"change_message_id":"91470792f19a39c6ee67a9183a2828fe8ae3a237","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"21460864_c49170b3","updated":"2022-07-21 19:32:03.000000000","message":"Adding more reviewers.  ","commit_id":"a63a6f905a5ef8a8420ec20c78e597215d19c822"},{"author":{"_account_id":11075,"name":"Benny Kopilov","email":"bkopilov@redhat.com","username":"bkopilov"},"change_message_id":"f9baa2ace1085890458161f3e703b22c5c2f80a7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"97888b66_7d1075ca","updated":"2022-07-21 19:30:09.000000000","message":"Please see waiters in tempest and update the code , the location plus the code itself.\n-1 because it should not be like that . sorry.","commit_id":"a63a6f905a5ef8a8420ec20c78e597215d19c822"},{"author":{"_account_id":35087,"name":"Bas de Bruijne","email":"bas.debruijne@canonical.com","username":"basdbruijne"},"change_message_id":"7d662dd06506db026e931f80ed7089287aa5b195","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"486ae88f_b99ebda2","in_reply_to":"531448c7_ba2f6b87","updated":"2022-07-22 13:00:12.000000000","message":"Done","commit_id":"a63a6f905a5ef8a8420ec20c78e597215d19c822"},{"author":{"_account_id":35087,"name":"Bas de Bruijne","email":"bas.debruijne@canonical.com","username":"basdbruijne"},"change_message_id":"99288a04709515074edb624430e648a95a4245ed","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"531448c7_ba2f6b87","in_reply_to":"97888b66_7d1075ca","updated":"2022-07-22 11:08:27.000000000","message":"No worries, thanks for the review.\n\nI\u0027ll have an update later today.","commit_id":"a63a6f905a5ef8a8420ec20c78e597215d19c822"},{"author":{"_account_id":33717,"name":"Luciano Lo Giudice","email":"luciano.logiudice@canonical.com","username":"lmlg"},"change_message_id":"9049b7d6f4d4f987066c88061d484205099f6aa4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"16366ee3_62bed5e4","updated":"2022-07-27 17:57:00.000000000","message":"LGTM.","commit_id":"43c6e394d2f7b1591858f5d151af07b1de57bc08"},{"author":{"_account_id":35087,"name":"Bas de Bruijne","email":"bas.debruijne@canonical.com","username":"basdbruijne"},"change_message_id":"a6fd50e726b6e1e1025d4e5624e35bf13f540526","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"78669ce4_b759ceac","in_reply_to":"16366ee3_62bed5e4","updated":"2022-07-28 11:26:47.000000000","message":"Thanks, Luciano. Can you give it another +1 now that I\u0027ve rebased the patch?","commit_id":"43c6e394d2f7b1591858f5d151af07b1de57bc08"},{"author":{"_account_id":33717,"name":"Luciano Lo Giudice","email":"luciano.logiudice@canonical.com","username":"lmlg"},"change_message_id":"0a0583945af7014abe2f5555df05528ec0ec1544","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"8e95f49a_b39e01ef","updated":"2022-07-28 13:48:38.000000000","message":"charm-recheck","commit_id":"057b32e151e65fd353a0dbcbda2f0f383fb1b37c"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"39d1bb21b84bd957ec57fcf875d90302e640df38","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"2bb4813b_3111caf0","updated":"2022-07-29 12:51:32.000000000","message":"it\u0027s a good idea, i have a few suggestions though","commit_id":"057b32e151e65fd353a0dbcbda2f0f383fb1b37c"},{"author":{"_account_id":35087,"name":"Bas de Bruijne","email":"bas.debruijne@canonical.com","username":"basdbruijne"},"change_message_id":"7b732d64e8c304dcf8678a339cb06cbb6eb9b23f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"719baba4_4d9f3541","updated":"2022-08-01 16:30:45.000000000","message":"\u003e Patch Set 12: Code-Review+1\n\u003e \n\u003e Adding a new config option should have a release note no?\n\nI don\u0027t see any mentions of added configs in releasenotes/source`, but I\u0027m happy do add one now. Are the conventions for releasenotes documented somewhere? Do I just add it to releasenotes/source/unreleased.rst?","commit_id":"c9f9a038e0b343b5c87fcb80accbc676f92a580e"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"9b202a4a25e8a61cc06923a1952e6632b1fb7c55","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"6d918075_cbab5e76","updated":"2022-08-10 09:41:34.000000000","message":"let\u0027s go","commit_id":"c9f9a038e0b343b5c87fcb80accbc676f92a580e"},{"author":{"_account_id":11075,"name":"Benny Kopilov","email":"bkopilov@redhat.com","username":"bkopilov"},"change_message_id":"98791f4a6bfb64dca875312d0c59ee49f3a88e8b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"a1bd7fd3_94a085d6","updated":"2022-07-31 19:18:14.000000000","message":"only comment related to interval param that can be removed ","commit_id":"c9f9a038e0b343b5c87fcb80accbc676f92a580e"}],"tempest/api/object_storage/base.py":[{"author":{"_account_id":11075,"name":"Benny Kopilov","email":"bkopilov@redhat.com","username":"bkopilov"},"change_message_id":"f9baa2ace1085890458161f3e703b22c5c2f80a7","unresolved":true,"context_lines":[{"line_number":133,"context_line":"        raise err"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    @classmethod"},{"line_number":136,"context_line":"    def wait_for_object(cls, container_name, object_name):"},{"line_number":137,"context_line":"        for _ in range(CONF.object_storage.build_timeout // 2 + 1):"},{"line_number":138,"context_line":"            try:"},{"line_number":139,"context_line":"                return cls.object_client.get_object("}],"source_content_type":"text/x-python","patch_set":5,"id":"8c23eb5d_dedede71","line":136,"range":{"start_line":136,"start_character":4,"end_line":136,"end_character":7},"updated":"2022-07-21 19:30:09.000000000","message":"The waiter code should be moved to tempest/common/waiters , it should support others too (api and scenario )","commit_id":"a63a6f905a5ef8a8420ec20c78e597215d19c822"},{"author":{"_account_id":35087,"name":"Bas de Bruijne","email":"bas.debruijne@canonical.com","username":"basdbruijne"},"change_message_id":"7d662dd06506db026e931f80ed7089287aa5b195","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        raise err"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    @classmethod"},{"line_number":136,"context_line":"    def wait_for_object(cls, container_name, object_name):"},{"line_number":137,"context_line":"        for _ in range(CONF.object_storage.build_timeout // 2 + 1):"},{"line_number":138,"context_line":"            try:"},{"line_number":139,"context_line":"                return cls.object_client.get_object("}],"source_content_type":"text/x-python","patch_set":5,"id":"0cb80ba8_85e68e00","line":136,"range":{"start_line":136,"start_character":4,"end_line":136,"end_character":7},"in_reply_to":"8c23eb5d_dedede71","updated":"2022-07-22 13:00:12.000000000","message":"Done","commit_id":"a63a6f905a5ef8a8420ec20c78e597215d19c822"},{"author":{"_account_id":11075,"name":"Benny Kopilov","email":"bkopilov@redhat.com","username":"bkopilov"},"change_message_id":"f9baa2ace1085890458161f3e703b22c5c2f80a7","unresolved":true,"context_lines":[{"line_number":143,"context_line":"        raise lib_exc.TimeoutException("},{"line_number":144,"context_line":"            \"Failed to create object %s within the required time (%s s).\" %"},{"line_number":145,"context_line":"            (object_name, CONF.object_storage.build_timeout))"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    @classmethod"},{"line_number":148,"context_line":"    def delete_containers(cls, container_client\u003dNone, object_client\u003dNone):"},{"line_number":149,"context_line":"        if container_client is None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"d4c08864_a0bc5ae5","line":146,"updated":"2022-07-21 19:30:09.000000000","message":"Please check how waiters implemented in tempestin the code , basically you pass the client and args... see it there.","commit_id":"a63a6f905a5ef8a8420ec20c78e597215d19c822"},{"author":{"_account_id":35087,"name":"Bas de Bruijne","email":"bas.debruijne@canonical.com","username":"basdbruijne"},"change_message_id":"7d662dd06506db026e931f80ed7089287aa5b195","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        raise lib_exc.TimeoutException("},{"line_number":144,"context_line":"            \"Failed to create object %s within the required time (%s s).\" %"},{"line_number":145,"context_line":"            (object_name, CONF.object_storage.build_timeout))"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    @classmethod"},{"line_number":148,"context_line":"    def delete_containers(cls, container_client\u003dNone, object_client\u003dNone):"},{"line_number":149,"context_line":"        if container_client is None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7c005e55_aa9c4d07","line":146,"in_reply_to":"d4c08864_a0bc5ae5","updated":"2022-07-22 13:00:12.000000000","message":"Done","commit_id":"a63a6f905a5ef8a8420ec20c78e597215d19c822"},{"author":{"_account_id":11075,"name":"Benny Kopilov","email":"bkopilov@redhat.com","username":"bkopilov"},"change_message_id":"f2b5260f839f26be5b09818b2cf5f4b81a8fdefe","unresolved":true,"context_lines":[{"line_number":119,"context_line":"            data \u003d data_utils.random_bytes()"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        err \u003d Exception()"},{"line_number":122,"context_line":"        for _ in range(5):"},{"line_number":123,"context_line":"            try:"},{"line_number":124,"context_line":"                cls.object_client.create_object(container_name,"},{"line_number":125,"context_line":"                                                object_name,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5048198f_e2e923aa","line":122,"updated":"2022-07-31 19:17:46.000000000","message":"Yes we need a waiter here ...maybe in other patch we need to fix the loop here...\n- Do we really need 5 times and hardcoded sleep of 2 seconds ??\n\nBut its not related to the fix but i think that the waiter can fix the issue in the loop too.","commit_id":"c9f9a038e0b343b5c87fcb80accbc676f92a580e"},{"author":{"_account_id":35087,"name":"Bas de Bruijne","email":"bas.debruijne@canonical.com","username":"basdbruijne"},"change_message_id":"7b732d64e8c304dcf8678a339cb06cbb6eb9b23f","unresolved":false,"context_lines":[{"line_number":119,"context_line":"            data \u003d data_utils.random_bytes()"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        err \u003d Exception()"},{"line_number":122,"context_line":"        for _ in range(5):"},{"line_number":123,"context_line":"            try:"},{"line_number":124,"context_line":"                cls.object_client.create_object(container_name,"},{"line_number":125,"context_line":"                                                object_name,"}],"source_content_type":"text/x-python","patch_set":12,"id":"ce534cc1_f859d832","line":122,"in_reply_to":"5048198f_e2e923aa","updated":"2022-08-01 16:30:45.000000000","message":"Agreed, is there a central todo list where these things are tracked?","commit_id":"c9f9a038e0b343b5c87fcb80accbc676f92a580e"}],"tempest/api/object_storage/test_container_quotas.py":[{"author":{"_account_id":11075,"name":"Benny Kopilov","email":"bkopilov@redhat.com","username":"bkopilov"},"change_message_id":"c2f11601f2dc25eb69c0b389acbff1c0e445f3e1","unresolved":true,"context_lines":[{"line_number":99,"context_line":"        nbefore \u003d self._get_object_count()"},{"line_number":100,"context_line":"        self.assertEqual(nbefore, QUOTA_COUNT)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        time.sleep(CONF.object_storage.quota_cache_timeout)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self.assertRaises(lib_exc.OverLimit,"},{"line_number":105,"context_line":"                          self.object_client.create_object,"}],"source_content_type":"text/x-python","patch_set":1,"id":"6553fcad_b7833fff","line":102,"range":{"start_line":102,"start_character":13,"end_line":102,"end_character":18},"updated":"2022-07-19 15:45:31.000000000","message":"Question,  Can we have a waiter for create_object ? something that verify that objet really created.\nswift stat for example ?\nor swift list .... \nNot sure if setting timeout is the best approach here.","commit_id":"29828aafc01b435c50796cc4be72ef6da4772105"},{"author":{"_account_id":11075,"name":"Benny Kopilov","email":"bkopilov@redhat.com","username":"bkopilov"},"change_message_id":"5a607cab665735070c3cb97dfc77fec7b8c09d83","unresolved":true,"context_lines":[{"line_number":99,"context_line":"        nbefore \u003d self._get_object_count()"},{"line_number":100,"context_line":"        self.assertEqual(nbefore, QUOTA_COUNT)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        time.sleep(CONF.object_storage.quota_cache_timeout)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self.assertRaises(lib_exc.OverLimit,"},{"line_number":105,"context_line":"                          self.object_client.create_object,"}],"source_content_type":"text/x-python","patch_set":1,"id":"feed3518_40d2dadb","line":102,"range":{"start_line":102,"start_character":13,"end_line":102,"end_character":18},"in_reply_to":"3145f020_9b2f2450","updated":"2022-07-20 12:54:56.000000000","message":"How to you know the timeout that needed till ceph unit sync ?\nDo you mean that we see the object date before its really updated on the backend side ?","commit_id":"29828aafc01b435c50796cc4be72ef6da4772105"},{"author":{"_account_id":11075,"name":"Benny Kopilov","email":"bkopilov@redhat.com","username":"bkopilov"},"change_message_id":"7628f9f7cea50c088355516063af7b39608e0236","unresolved":true,"context_lines":[{"line_number":99,"context_line":"        nbefore \u003d self._get_object_count()"},{"line_number":100,"context_line":"        self.assertEqual(nbefore, QUOTA_COUNT)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        time.sleep(CONF.object_storage.quota_cache_timeout)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self.assertRaises(lib_exc.OverLimit,"},{"line_number":105,"context_line":"                          self.object_client.create_object,"}],"source_content_type":"text/x-python","patch_set":1,"id":"534347c1_52fc59a7","line":102,"range":{"start_line":102,"start_character":13,"end_line":102,"end_character":18},"in_reply_to":"35d0706d_8a68aad4","updated":"2022-07-19 21:18:14.000000000","message":"So the problem i can see in the code that might be:\nWe run a loop to create X objects without validations, means when you reach to the line #104 probably the object was not created yet somehow and not populated back, at that moment the test may fail... \nin case we have a loop and it run without waiter , we may endup in case when we exit the loop but the resources were not up and running yet.\n\nI would recommend if its doable: after each creation \nfor loop:\n self.object_client.create_object(self.container_name..)\n wait_for_object_xxxx ---\u003e here we can verify that object shown ..\n for example:\n list_container_objects will return status  (i dont have a setup at the moment to check the output) but its the concept.\nI will slow down the creation and prevent a case that action was not completed and we jump to the next line....\n\n\nWhat do you think ?\n\nBenny","commit_id":"29828aafc01b435c50796cc4be72ef6da4772105"},{"author":{"_account_id":35087,"name":"Bas de Bruijne","email":"bas.debruijne@canonical.com","username":"basdbruijne"},"change_message_id":"95ebb91040e7b43748b627ccf9b67b902a5667e1","unresolved":true,"context_lines":[{"line_number":99,"context_line":"        nbefore \u003d self._get_object_count()"},{"line_number":100,"context_line":"        self.assertEqual(nbefore, QUOTA_COUNT)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        time.sleep(CONF.object_storage.quota_cache_timeout)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self.assertRaises(lib_exc.OverLimit,"},{"line_number":105,"context_line":"                          self.object_client.create_object,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3145f020_9b2f2450","line":102,"range":{"start_line":102,"start_character":13,"end_line":102,"end_character":18},"in_reply_to":"534347c1_52fc59a7","updated":"2022-07-20 12:44:07.000000000","message":"Thanks for the explanation, I see what you mean.\n\nI am not sure that this approach would actually solve the problem we are having. It assumes that before the object quota is synced between the different Ceph units, the objects would also not show up in `list_container_objects`. This may or may not be true, but it\u0027s worth the try.\n\nI will do some experimentation with it.","commit_id":"29828aafc01b435c50796cc4be72ef6da4772105"},{"author":{"_account_id":35087,"name":"Bas de Bruijne","email":"bas.debruijne@canonical.com","username":"basdbruijne"},"change_message_id":"91340b4b4bf2cad54433fc0d677a8c4d7e663ae8","unresolved":true,"context_lines":[{"line_number":99,"context_line":"        nbefore \u003d self._get_object_count()"},{"line_number":100,"context_line":"        self.assertEqual(nbefore, QUOTA_COUNT)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        time.sleep(CONF.object_storage.quota_cache_timeout)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self.assertRaises(lib_exc.OverLimit,"},{"line_number":105,"context_line":"                          self.object_client.create_object,"}],"source_content_type":"text/x-python","patch_set":1,"id":"35d0706d_8a68aad4","line":102,"range":{"start_line":102,"start_character":13,"end_line":102,"end_character":18},"in_reply_to":"6553fcad_b7833fff","updated":"2022-07-19 19:27:45.000000000","message":"This is specifically a problem we run into when using HA ceph as storage backend. With HA ceph, you can upload more objects than the quota as long as you do it within to time where the quota syncs. More context is in [0] and [1].\n\nRegarding your question, I\u0027m sure how a waiter for `create_object` could be used in this case, can you elaborate on that?. Ceph would not remove the object again after the quote is synced, so keeping track of the objects would not give us the right information.\n\nAn alternative approach would be to temporarily reduce the quota sync to, say, 1 second and reverse it at the end of the test. But that could introduce some problems on a production cloud.\n\n[0] https://bugs.launchpad.net/charm-ceph-radosgw/+bug/1967567\n[1] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1417775","commit_id":"29828aafc01b435c50796cc4be72ef6da4772105"},{"author":{"_account_id":11075,"name":"Benny Kopilov","email":"bkopilov@redhat.com","username":"bkopilov"},"change_message_id":"f6fa7645f380e15d98c5d570c926922906bda59c","unresolved":true,"context_lines":[{"line_number":99,"context_line":"        nbefore \u003d self._get_object_count()"},{"line_number":100,"context_line":"        self.assertEqual(nbefore, QUOTA_COUNT)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        time.sleep(CONF.object_storage.quota_cache_timeout)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self.assertRaises(lib_exc.OverLimit,"},{"line_number":105,"context_line":"                          self.object_client.create_object,"}],"source_content_type":"text/x-python","patch_set":1,"id":"c2cf25e7_92551594","line":102,"range":{"start_line":102,"start_character":13,"end_line":102,"end_character":18},"in_reply_to":"73ce295c_21ee2ea7","updated":"2022-07-20 14:19:13.000000000","message":"Its not the only place we have issues with the swift code ... (again not sure if it will solve your problem - keep us updated .\nbut from cinder for example , when we create a volume we get back success 20X reply but the resource was not really active yet....\n\ni guess we should have something helpfull in swift to verify that resource is up ...","commit_id":"29828aafc01b435c50796cc4be72ef6da4772105"},{"author":{"_account_id":35087,"name":"Bas de Bruijne","email":"bas.debruijne@canonical.com","username":"basdbruijne"},"change_message_id":"dad34f2d5c44e504e3c2e5089d560eb11cc9a36a","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        nbefore \u003d self._get_object_count()"},{"line_number":100,"context_line":"        self.assertEqual(nbefore, QUOTA_COUNT)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        time.sleep(CONF.object_storage.quota_cache_timeout)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self.assertRaises(lib_exc.OverLimit,"},{"line_number":105,"context_line":"                          self.object_client.create_object,"}],"source_content_type":"text/x-python","patch_set":1,"id":"de953efd_1892fdda","line":102,"range":{"start_line":102,"start_character":13,"end_line":102,"end_character":18},"in_reply_to":"c2cf25e7_92551594","updated":"2022-07-21 19:25:21.000000000","message":"Thanks for your input Benny, your suggestion does indeed solve the problem.\n\nLet me know what you think of the new proposal.","commit_id":"29828aafc01b435c50796cc4be72ef6da4772105"},{"author":{"_account_id":35087,"name":"Bas de Bruijne","email":"bas.debruijne@canonical.com","username":"basdbruijne"},"change_message_id":"3fcb95f296e3c610e170281c227bf49484f20168","unresolved":true,"context_lines":[{"line_number":99,"context_line":"        nbefore \u003d self._get_object_count()"},{"line_number":100,"context_line":"        self.assertEqual(nbefore, QUOTA_COUNT)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        time.sleep(CONF.object_storage.quota_cache_timeout)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self.assertRaises(lib_exc.OverLimit,"},{"line_number":105,"context_line":"                          self.object_client.create_object,"}],"source_content_type":"text/x-python","patch_set":1,"id":"73ce295c_21ee2ea7","line":102,"range":{"start_line":102,"start_character":13,"end_line":102,"end_character":18},"in_reply_to":"feed3518_40d2dadb","updated":"2022-07-20 14:02:51.000000000","message":"The ceph quota sync interval is set by the operator, the default is 600 seconds. [0] has some more information under the `Quota Cache` header. I think we can retrieve the quota sync interval through the radosgw cli, but I thought a tempest config would suffice.\n\nI assume that we can see the object data of all the ceph units before the quota is synced, though it is possible that this is not the case and your suggested approach works. It is also possible that listing the objects will force a quota sync, in which case your suggestion also works.\n\n[0] https://github.com/dang/ceph/blob/4327d1bd2dcc6d8af5f17d7c0677bc5f27d3139a/doc/radosgw/admin.rst","commit_id":"29828aafc01b435c50796cc4be72ef6da4772105"},{"author":{"_account_id":11075,"name":"Benny Kopilov","email":"bkopilov@redhat.com","username":"bkopilov"},"change_message_id":"f9baa2ace1085890458161f3e703b22c5c2f80a7","unresolved":true,"context_lines":[{"line_number":91,"context_line":"        for _ in range(QUOTA_COUNT):"},{"line_number":92,"context_line":"            name \u003d data_utils.rand_name(name\u003d\"TestObject\")"},{"line_number":93,"context_line":"            self.object_client.create_object(self.container_name, name, \"\")"},{"line_number":94,"context_line":"            self.wait_for_object(self.container_name, name)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        nbefore \u003d self._get_object_count()"},{"line_number":97,"context_line":"        self.assertEqual(nbefore, QUOTA_COUNT)"}],"source_content_type":"text/x-python","patch_set":5,"id":"e67890ff_fe723650","line":94,"updated":"2022-07-21 19:30:09.000000000","message":"Yes exactly , thats the right way to move on ...","commit_id":"a63a6f905a5ef8a8420ec20c78e597215d19c822"},{"author":{"_account_id":35087,"name":"Bas de Bruijne","email":"bas.debruijne@canonical.com","username":"basdbruijne"},"change_message_id":"7d662dd06506db026e931f80ed7089287aa5b195","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        for _ in range(QUOTA_COUNT):"},{"line_number":92,"context_line":"            name \u003d data_utils.rand_name(name\u003d\"TestObject\")"},{"line_number":93,"context_line":"            self.object_client.create_object(self.container_name, name, \"\")"},{"line_number":94,"context_line":"            self.wait_for_object(self.container_name, name)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        nbefore \u003d self._get_object_count()"},{"line_number":97,"context_line":"        self.assertEqual(nbefore, QUOTA_COUNT)"}],"source_content_type":"text/x-python","patch_set":5,"id":"e61ae5ea_6e028fef","line":94,"in_reply_to":"e67890ff_fe723650","updated":"2022-07-22 13:00:12.000000000","message":"Done","commit_id":"a63a6f905a5ef8a8420ec20c78e597215d19c822"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"39d1bb21b84bd957ec57fcf875d90302e640df38","unresolved":true,"context_lines":[{"line_number":92,"context_line":"        for _ in range(QUOTA_COUNT):"},{"line_number":93,"context_line":"            name \u003d data_utils.rand_name(name\u003d\"TestObject\")"},{"line_number":94,"context_line":"            self.object_client.create_object(self.container_name, name, \"\")"},{"line_number":95,"context_line":"            waiters.wait_for_object_create(self.object_client,"},{"line_number":96,"context_line":"                                           self.container_name,"},{"line_number":97,"context_line":"                                           name)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        nbefore \u003d self._get_object_count()"},{"line_number":100,"context_line":"        self.assertEqual(nbefore, QUOTA_COUNT)"}],"source_content_type":"text/x-python","patch_set":11,"id":"d55fe41e_d28ccf81","line":97,"range":{"start_line":95,"start_character":12,"end_line":97,"end_character":48},"updated":"2022-07-29 12:51:32.000000000","message":"does this need to be here when we added the same waiter to the create_object method?","commit_id":"057b32e151e65fd353a0dbcbda2f0f383fb1b37c"},{"author":{"_account_id":35087,"name":"Bas de Bruijne","email":"bas.debruijne@canonical.com","username":"basdbruijne"},"change_message_id":"9466aa3e1fe964751513215666a43a893b3f0651","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        for _ in range(QUOTA_COUNT):"},{"line_number":93,"context_line":"            name \u003d data_utils.rand_name(name\u003d\"TestObject\")"},{"line_number":94,"context_line":"            self.object_client.create_object(self.container_name, name, \"\")"},{"line_number":95,"context_line":"            waiters.wait_for_object_create(self.object_client,"},{"line_number":96,"context_line":"                                           self.container_name,"},{"line_number":97,"context_line":"                                           name)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        nbefore \u003d self._get_object_count()"},{"line_number":100,"context_line":"        self.assertEqual(nbefore, QUOTA_COUNT)"}],"source_content_type":"text/x-python","patch_set":11,"id":"e567a8bd_47ff52b9","line":97,"range":{"start_line":95,"start_character":12,"end_line":97,"end_character":48},"in_reply_to":"d55fe41e_d28ccf81","updated":"2022-07-29 13:58:14.000000000","message":"This test uses `self.object_client.create_object`, instead of `self.create_object`, where the waiter is added.","commit_id":"057b32e151e65fd353a0dbcbda2f0f383fb1b37c"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"9b202a4a25e8a61cc06923a1952e6632b1fb7c55","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        for _ in range(QUOTA_COUNT):"},{"line_number":93,"context_line":"            name \u003d data_utils.rand_name(name\u003d\"TestObject\")"},{"line_number":94,"context_line":"            self.object_client.create_object(self.container_name, name, \"\")"},{"line_number":95,"context_line":"            waiters.wait_for_object_create(self.object_client,"},{"line_number":96,"context_line":"                                           self.container_name,"},{"line_number":97,"context_line":"                                           name)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        nbefore \u003d self._get_object_count()"},{"line_number":100,"context_line":"        self.assertEqual(nbefore, QUOTA_COUNT)"}],"source_content_type":"text/x-python","patch_set":11,"id":"cfc36199_4265555c","line":97,"range":{"start_line":95,"start_character":12,"end_line":97,"end_character":48},"in_reply_to":"e567a8bd_47ff52b9","updated":"2022-08-10 09:41:34.000000000","message":"oh, right, i missed that","commit_id":"057b32e151e65fd353a0dbcbda2f0f383fb1b37c"}],"tempest/common/waiters.py":[{"author":{"_account_id":33717,"name":"Luciano Lo Giudice","email":"luciano.logiudice@canonical.com","username":"lmlg"},"change_message_id":"9cbdafd34884af02e3c159b72ec396b5ca08639a","unresolved":true,"context_lines":[{"line_number":596,"context_line":"    raise lib_exc.TimeoutException()"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"def wait_for_object_create(object_client, container_name, object_name):"},{"line_number":600,"context_line":"    \"\"\"Waits for created object to become available\"\"\""},{"line_number":601,"context_line":"    start_time \u003d int(time.time())"},{"line_number":602,"context_line":"    while int(time.time()) - start_time \u003c object_client.build_timeout:"}],"source_content_type":"text/x-python","patch_set":8,"id":"810f3129_1e444c7e","line":599,"updated":"2022-07-27 17:33:09.000000000","message":"The waiting method for this call is a (very) busy loop, which I think can be improved quite a bit by just adding a sleep backoff in the except path (I don\u0027t think tenacity is among the dependencies for tempest, which does this for you easily).\n\nAlso, any particular reason for the cast to `int` ? `time.time` returns a floating point number, and it should work just fine.","commit_id":"1d184852ab3bd2c9f46120c624ec46dccd74799d"},{"author":{"_account_id":35087,"name":"Bas de Bruijne","email":"bas.debruijne@canonical.com","username":"basdbruijne"},"change_message_id":"8a79e74bd40245e8984e2ba284b49d9f822fc7e4","unresolved":false,"context_lines":[{"line_number":596,"context_line":"    raise lib_exc.TimeoutException()"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"def wait_for_object_create(object_client, container_name, object_name):"},{"line_number":600,"context_line":"    \"\"\"Waits for created object to become available\"\"\""},{"line_number":601,"context_line":"    start_time \u003d int(time.time())"},{"line_number":602,"context_line":"    while int(time.time()) - start_time \u003c object_client.build_timeout:"}],"source_content_type":"text/x-python","patch_set":8,"id":"08696a56_3da9d66f","line":599,"in_reply_to":"810f3129_1e444c7e","updated":"2022-07-27 17:56:45.000000000","message":"I followed the conventions from the other waiters, but your points make sense. Please see the fixes in the new patch.","commit_id":"1d184852ab3bd2c9f46120c624ec46dccd74799d"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"39d1bb21b84bd957ec57fcf875d90302e640df38","unresolved":true,"context_lines":[{"line_number":617,"context_line":"def wait_for_object_create(object_client, container_name, object_name,"},{"line_number":618,"context_line":"                           interval\u003d1):"},{"line_number":619,"context_line":"    \"\"\"Waits for created object to become available\"\"\""},{"line_number":620,"context_line":"    start_time \u003d time.time()"},{"line_number":621,"context_line":"    while time.time() - start_time \u003c object_client.build_timeout:"},{"line_number":622,"context_line":"        try:"},{"line_number":623,"context_line":"            return object_client.get_object(container_name, object_name)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9050d5c7_d70a8505","line":620,"range":{"start_line":620,"start_character":17,"end_line":620,"end_character":28},"updated":"2022-07-29 12:51:32.000000000","message":"int(time.time()) to keep it consistent with other waiters","commit_id":"057b32e151e65fd353a0dbcbda2f0f383fb1b37c"},{"author":{"_account_id":35087,"name":"Bas de Bruijne","email":"bas.debruijne@canonical.com","username":"basdbruijne"},"change_message_id":"9466aa3e1fe964751513215666a43a893b3f0651","unresolved":false,"context_lines":[{"line_number":617,"context_line":"def wait_for_object_create(object_client, container_name, object_name,"},{"line_number":618,"context_line":"                           interval\u003d1):"},{"line_number":619,"context_line":"    \"\"\"Waits for created object to become available\"\"\""},{"line_number":620,"context_line":"    start_time \u003d time.time()"},{"line_number":621,"context_line":"    while time.time() - start_time \u003c object_client.build_timeout:"},{"line_number":622,"context_line":"        try:"},{"line_number":623,"context_line":"            return object_client.get_object(container_name, object_name)"}],"source_content_type":"text/x-python","patch_set":11,"id":"e65e7c27_82f9f1c6","line":620,"range":{"start_line":620,"start_character":17,"end_line":620,"end_character":28},"in_reply_to":"9050d5c7_d70a8505","updated":"2022-07-29 13:58:14.000000000","message":"I had `int(time.time())` in my initial commit but @Luciano Lo Giudice suggested to remove it (https://review.opendev.org/c/openstack/tempest/+/850311/8..11/tempest/common/waiters.py#b599).","commit_id":"057b32e151e65fd353a0dbcbda2f0f383fb1b37c"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"39d1bb21b84bd957ec57fcf875d90302e640df38","unresolved":true,"context_lines":[{"line_number":618,"context_line":"                           interval\u003d1):"},{"line_number":619,"context_line":"    \"\"\"Waits for created object to become available\"\"\""},{"line_number":620,"context_line":"    start_time \u003d time.time()"},{"line_number":621,"context_line":"    while time.time() - start_time \u003c object_client.build_timeout:"},{"line_number":622,"context_line":"        try:"},{"line_number":623,"context_line":"            return object_client.get_object(container_name, object_name)"},{"line_number":624,"context_line":"        except lib_exc.NotFound:"}],"source_content_type":"text/x-python","patch_set":11,"id":"eaba924e_ec531fe1","line":621,"range":{"start_line":621,"start_character":10,"end_line":621,"end_character":22},"updated":"2022-07-29 12:51:32.000000000","message":"int(time.time())","commit_id":"057b32e151e65fd353a0dbcbda2f0f383fb1b37c"},{"author":{"_account_id":35087,"name":"Bas de Bruijne","email":"bas.debruijne@canonical.com","username":"basdbruijne"},"change_message_id":"9466aa3e1fe964751513215666a43a893b3f0651","unresolved":false,"context_lines":[{"line_number":618,"context_line":"                           interval\u003d1):"},{"line_number":619,"context_line":"    \"\"\"Waits for created object to become available\"\"\""},{"line_number":620,"context_line":"    start_time \u003d time.time()"},{"line_number":621,"context_line":"    while time.time() - start_time \u003c object_client.build_timeout:"},{"line_number":622,"context_line":"        try:"},{"line_number":623,"context_line":"            return object_client.get_object(container_name, object_name)"},{"line_number":624,"context_line":"        except lib_exc.NotFound:"}],"source_content_type":"text/x-python","patch_set":11,"id":"58be0348_5c4cec04","line":621,"range":{"start_line":621,"start_character":10,"end_line":621,"end_character":22},"in_reply_to":"eaba924e_ec531fe1","updated":"2022-07-29 13:58:14.000000000","message":"Done","commit_id":"057b32e151e65fd353a0dbcbda2f0f383fb1b37c"},{"author":{"_account_id":11075,"name":"Benny Kopilov","email":"bkopilov@redhat.com","username":"bkopilov"},"change_message_id":"f2b5260f839f26be5b09818b2cf5f4b81a8fdefe","unresolved":true,"context_lines":[{"line_number":622,"context_line":"        try:"},{"line_number":623,"context_line":"            return object_client.get_object(container_name, object_name)"},{"line_number":624,"context_line":"        except lib_exc.NotFound:"},{"line_number":625,"context_line":"            time.sleep(interval)"},{"line_number":626,"context_line":"    message \u003d (\u0027Object %s failed to create within the required time (%s s).\u0027 %"},{"line_number":627,"context_line":"               (object_name, object_client.build_timeout))"},{"line_number":628,"context_line":"    raise lib_exc.TimeoutException(message)"}],"source_content_type":"text/x-python","patch_set":12,"id":"4aacb8a2_0c9d05b1","line":625,"updated":"2022-07-31 19:17:46.000000000","message":"Why do we set the interval here as a param ?","commit_id":"c9f9a038e0b343b5c87fcb80accbc676f92a580e"},{"author":{"_account_id":35087,"name":"Bas de Bruijne","email":"bas.debruijne@canonical.com","username":"basdbruijne"},"change_message_id":"7b732d64e8c304dcf8678a339cb06cbb6eb9b23f","unresolved":false,"context_lines":[{"line_number":622,"context_line":"        try:"},{"line_number":623,"context_line":"            return object_client.get_object(container_name, object_name)"},{"line_number":624,"context_line":"        except lib_exc.NotFound:"},{"line_number":625,"context_line":"            time.sleep(interval)"},{"line_number":626,"context_line":"    message \u003d (\u0027Object %s failed to create within the required time (%s s).\u0027 %"},{"line_number":627,"context_line":"               (object_name, object_client.build_timeout))"},{"line_number":628,"context_line":"    raise lib_exc.TimeoutException(message)"}],"source_content_type":"text/x-python","patch_set":12,"id":"98e336c6_8aac7f38","line":625,"in_reply_to":"4aacb8a2_0c9d05b1","updated":"2022-08-01 16:30:45.000000000","message":"I was following the conventions of the other waiters, which either have the sleep timeout from the kwargs or from tempest config. I don\u0027t think a tempest config is necessary here.","commit_id":"c9f9a038e0b343b5c87fcb80accbc676f92a580e"}]}
