)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"91537d714bca8a7ae328346c08a059c1d5d3bdc0","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"common: fix wait_until_true to support native thread"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This reworks the function wait_unti_true to wotk with native and"},{"line_number":10,"context_line":"greenthreads"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Related-bug: #2087939"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":27,"id":"e2446b87_9a5379c1","line":9,"range":{"start_line":9,"start_character":26,"end_line":9,"end_character":40},"updated":"2025-01-24 20:51:16.000000000","message":"wait_until_true","commit_id":"f1fde1ffb8fefaab3c03ca2b2457fd764924d7f8"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"91537d714bca8a7ae328346c08a059c1d5d3bdc0","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"common: fix wait_until_true to support native thread"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This reworks the function wait_unti_true to wotk with native and"},{"line_number":10,"context_line":"greenthreads"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Related-bug: #2087939"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":27,"id":"0467445b_99e8a26a","line":9,"range":{"start_line":9,"start_character":44,"end_line":9,"end_character":48},"updated":"2025-01-24 20:51:16.000000000","message":"work","commit_id":"f1fde1ffb8fefaab3c03ca2b2457fd764924d7f8"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a408a62fa04f513c7ca828413d4094849c700802","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"common: fix wait_until_true to support native thread"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This reworks the function wait_unti_true to wotk with native and"},{"line_number":10,"context_line":"greenthreads"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Related-bug: #2087939"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":27,"id":"6220a465_13824fd2","line":9,"range":{"start_line":9,"start_character":44,"end_line":9,"end_character":48},"in_reply_to":"0467445b_99e8a26a","updated":"2025-01-26 21:08:45.000000000","message":"Done","commit_id":"f1fde1ffb8fefaab3c03ca2b2457fd764924d7f8"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a408a62fa04f513c7ca828413d4094849c700802","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"common: fix wait_until_true to support native thread"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This reworks the function wait_unti_true to wotk with native and"},{"line_number":10,"context_line":"greenthreads"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Related-bug: #2087939"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":27,"id":"57bde2c3_61d207cb","line":9,"range":{"start_line":9,"start_character":26,"end_line":9,"end_character":40},"in_reply_to":"e2446b87_9a5379c1","updated":"2025-01-26 21:08:45.000000000","message":"Done","commit_id":"f1fde1ffb8fefaab3c03ca2b2457fd764924d7f8"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5518a7d1d380efa9b06d477c760d646e53af5e74","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"13c335c9_b2519581","updated":"2024-12-17 15:07:52.000000000","message":"The threading version should work too in an eventlet environment, so I would suggest to implement UTs testing both (mocking if the env is patched or not)","commit_id":"c4f73542b7559c3cae1cf9f5e0e2fca8bd7c2d83"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"5e802c3a16139a35eb6d2c0831b06da7c504bdb0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"bb985744_ed60d906","updated":"2024-12-23 09:48:57.000000000","message":"recheck maybe related...","commit_id":"c2e89b089175010bd63590a583212754f83b61d8"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"abf8cfdab0375945963da318b103a605c1fb70aa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"bc3fbcbe_6aa843bf","updated":"2024-12-19 07:46:47.000000000","message":"recheck unrelated test_rebuild_server_with_manual_disk_config","commit_id":"c2e89b089175010bd63590a583212754f83b61d8"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"5550131a3147c104eb1268fdc9e3e519e231a610","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"f9ff5719_d841b13a","updated":"2024-12-30 10:17:26.000000000","message":"recheck unrelated","commit_id":"dc1bcb08f7efda36bf0aa2a6194bfaa8bed37efb"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"8690d9ffa619f2fa698c1196c567c25bf1e82dcb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"f231e16a_7a9704ed","updated":"2024-12-23 13:41:12.000000000","message":"recheck unrelated neutron-ovn-grenade-multinode-skip-level, permission denied","commit_id":"dc1bcb08f7efda36bf0aa2a6194bfaa8bed37efb"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"526f2a5c9fa80f25748a1ae3c7930b9a9db0f80f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"7a4ff4eb_14ffc9b5","updated":"2024-12-31 08:55:18.000000000","message":"recheck unrelated, fullstack timeout","commit_id":"dc1bcb08f7efda36bf0aa2a6194bfaa8bed37efb"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"31ca0603c33c7e7e59941d716da1b7d2a87954de","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"b3a48a19_ec438ce8","updated":"2024-12-31 13:57:45.000000000","message":"recheck unrelated ovn","commit_id":"a23c94e7d593831e999d576e1ff59f161f0baec5"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"2287aebadb1dadb52b21c4c3ae1a5c11717d0dd6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"152c6c55_3cb2b187","updated":"2025-01-24 18:13:40.000000000","message":"recheck grenade issue","commit_id":"f1fde1ffb8fefaab3c03ca2b2457fd764924d7f8"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a408a62fa04f513c7ca828413d4094849c700802","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"381cc865_1718ee33","updated":"2025-01-26 21:08:45.000000000","message":"Thanks Pierre, fixed.","commit_id":"ed3d20b7a78b4dbc2772dec8e25804ae54adc708"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"4d0af5aa1d6372f751d12589ec91d44183f32a32","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"c145ea97_1dde37ca","updated":"2025-01-27 07:54:37.000000000","message":"the unit test failures seem related,","commit_id":"ed3d20b7a78b4dbc2772dec8e25804ae54adc708"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a1de445ec535ca0132d4efd350494658b8816936","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"fd899869_6a128053","in_reply_to":"c145ea97_1dde37ca","updated":"2025-01-27 08:11:48.000000000","message":"Yes I just fixed it. thank you","commit_id":"ed3d20b7a78b4dbc2772dec8e25804ae54adc708"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"13cb256eae89ce12d4afe84605b4725fd90b4c45","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"74e10a7f_7b751a07","updated":"2025-01-27 20:00:57.000000000","message":"recheck parent change gate failure","commit_id":"ec9f2577c85e198e11a527319ee7a92958a4e5ac"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"5adc325fc71cbccfd8a79c1b4d2f86fc05db50fb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"5540491a_f5da39b3","updated":"2025-01-28 07:39:04.000000000","message":"recheck test_list_pagination_with_href_links","commit_id":"ec9f2577c85e198e11a527319ee7a92958a4e5ac"}],"neutron/common/utils.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5518a7d1d380efa9b06d477c760d646e53af5e74","unresolved":true,"context_lines":[{"line_number":734,"context_line":"    :param exception: Exception instance to raise on timeout. If None is passed"},{"line_number":735,"context_line":"                      (default) then WaitTimeout exception is raised."},{"line_number":736,"context_line":"    \"\"\""},{"line_number":737,"context_line":"    if IS_MONKEY_PATCHED:"},{"line_number":738,"context_line":"        # TODO(sahid): Once eventlet removed, this part can be"},{"line_number":739,"context_line":"        # deleted."},{"line_number":740,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3c409b79_f8f4acf4","line":737,"range":{"start_line":737,"start_character":4,"end_line":737,"end_character":25},"updated":"2024-12-17 15:07:52.000000000","message":"We should not rely on a global variable but actually checking if the libraries have been patched. Something like this: https://github.com/openstack/oslo.messaging/blob/master/oslo_messaging/_metrics/client.py#L29-L30\n\nPlease create a new file neutron.common.utils.eventlet_utils (that will be needed during the eventlet deprecation) and add a method, something like is_monkey_patched. This method should accept a name of a library but you can leave \"threading\" by default.","commit_id":"c4f73542b7559c3cae1cf9f5e0e2fca8bd7c2d83"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"334ef521ac22186c67e6b5e07da64adb4564ac9b","unresolved":false,"context_lines":[{"line_number":734,"context_line":"    :param exception: Exception instance to raise on timeout. If None is passed"},{"line_number":735,"context_line":"                      (default) then WaitTimeout exception is raised."},{"line_number":736,"context_line":"    \"\"\""},{"line_number":737,"context_line":"    if IS_MONKEY_PATCHED:"},{"line_number":738,"context_line":"        # TODO(sahid): Once eventlet removed, this part can be"},{"line_number":739,"context_line":"        # deleted."},{"line_number":740,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ae75dc6_2fdbae08","line":737,"range":{"start_line":737,"start_character":4,"end_line":737,"end_character":25},"in_reply_to":"3c409b79_f8f4acf4","updated":"2024-12-17 20:58:03.000000000","message":"Done","commit_id":"c4f73542b7559c3cae1cf9f5e0e2fca8bd7c2d83"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"31e2c4b3a4125678ae59731356a2d2a1a4da9c46","unresolved":true,"context_lines":[{"line_number":724,"context_line":"    return inner"},{"line_number":725,"context_line":""},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"def wait_until_true(predicate, timeout\u003d60, sleep\u003d1, exception\u003dNone):"},{"line_number":728,"context_line":"    \"\"\"Wait until callable predicate is evaluated as True"},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"    :param predicate: Callable deciding whether waiting should continue."}],"source_content_type":"text/x-python","patch_set":9,"id":"7ca2893c_c5b8d127","line":727,"updated":"2025-01-08 16:50:52.000000000","message":"I\u0027m not sure which one is the better impl.\n\nhttps://review.opendev.org/c/openstack/neutron/+/937843/7/neutron/common/utils.py","commit_id":"daabd5d6616b77fe89b6be1a62a8910f89ec754e"}],"neutron/tests/unit/common/test_utils.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"63683acca743c57665e15193da08164e81433b0e","unresolved":true,"context_lines":[{"line_number":170,"context_line":"                               any_order\u003dTrue)"},{"line_number":171,"context_line":"        self.assertTrue(logger.called)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def test_wait_until_true_eventlet(self):"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        class FalseException(Exception):"},{"line_number":176,"context_line":"            pass"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        self.assertRaises("},{"line_number":179,"context_line":"            FalseException,"},{"line_number":180,"context_line":"            utils.wait_until_true,"},{"line_number":181,"context_line":"            lambda: False, timeout\u003d1, exception\u003dFalseException)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def test_wait_until_true_threading(self):"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        class FalseException(Exception):"},{"line_number":186,"context_line":"            pass"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        ntime \u003d eventlet.patcher.original(\u0027time\u0027)"},{"line_number":189,"context_line":"        nthread \u003d eventlet.patcher.original(\u0027threading\u0027)"},{"line_number":190,"context_line":"        with (mock.patch(\u0027neutron.common.utils.threading\u0027, nthread),"},{"line_number":191,"context_line":"              mock.patch(\u0027neutron.common.utils.time\u0027, ntime)):"},{"line_number":192,"context_line":"            self.assertRaises("},{"line_number":193,"context_line":"                FalseException,"},{"line_number":194,"context_line":"                utils.wait_until_true,"},{"line_number":195,"context_line":"                lambda: False, timeout\u003d1, exception\u003dFalseException)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"class TestDvrServices(base.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":18,"id":"00c9fc32_e0951067","line":195,"range":{"start_line":173,"start_character":4,"end_line":195,"end_character":67},"updated":"2025-01-17 11:59:16.000000000","message":"Don\u0027t implement UTs mocking threading and time. Use a valid predicate, a valid sleep time and a timeout. For the positive case, the predicate will return false several time until it returns true. For the negative case, it will always return false (it could be the lambda method you already used).","commit_id":"8da8b8b7a45388f9986475fae2b751fbc3b630f2"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"ff72f6b170944b52ae6648746d7033956a5319b2","unresolved":true,"context_lines":[{"line_number":170,"context_line":"                               any_order\u003dTrue)"},{"line_number":171,"context_line":"        self.assertTrue(logger.called)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def test_wait_until_true_eventlet(self):"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        class FalseException(Exception):"},{"line_number":176,"context_line":"            pass"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        self.assertRaises("},{"line_number":179,"context_line":"            FalseException,"},{"line_number":180,"context_line":"            utils.wait_until_true,"},{"line_number":181,"context_line":"            lambda: False, timeout\u003d1, exception\u003dFalseException)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def test_wait_until_true_threading(self):"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        class FalseException(Exception):"},{"line_number":186,"context_line":"            pass"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        ntime \u003d eventlet.patcher.original(\u0027time\u0027)"},{"line_number":189,"context_line":"        nthread \u003d eventlet.patcher.original(\u0027threading\u0027)"},{"line_number":190,"context_line":"        with (mock.patch(\u0027neutron.common.utils.threading\u0027, nthread),"},{"line_number":191,"context_line":"              mock.patch(\u0027neutron.common.utils.time\u0027, ntime)):"},{"line_number":192,"context_line":"            self.assertRaises("},{"line_number":193,"context_line":"                FalseException,"},{"line_number":194,"context_line":"                utils.wait_until_true,"},{"line_number":195,"context_line":"                lambda: False, timeout\u003d1, exception\u003dFalseException)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"class TestDvrServices(base.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":18,"id":"2f705b04_7757e15d","line":195,"range":{"start_line":173,"start_character":4,"end_line":195,"end_character":67},"in_reply_to":"00c9fc32_e0951067","updated":"2025-01-20 07:37:17.000000000","message":"Isn\u0027t that using valid sleep and threading? this one is to valid the behavior with native thread as opposed with test_wait_until_true_eventlet","commit_id":"8da8b8b7a45388f9986475fae2b751fbc3b630f2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"bef0509a912304863547860dd78911fc775604b8","unresolved":true,"context_lines":[{"line_number":170,"context_line":"                               any_order\u003dTrue)"},{"line_number":171,"context_line":"        self.assertTrue(logger.called)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def test_wait_until_true_eventlet(self):"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        class FalseException(Exception):"},{"line_number":176,"context_line":"            pass"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        self.assertRaises("},{"line_number":179,"context_line":"            FalseException,"},{"line_number":180,"context_line":"            utils.wait_until_true,"},{"line_number":181,"context_line":"            lambda: False, timeout\u003d1, exception\u003dFalseException)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def test_wait_until_true_threading(self):"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        class FalseException(Exception):"},{"line_number":186,"context_line":"            pass"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        ntime \u003d eventlet.patcher.original(\u0027time\u0027)"},{"line_number":189,"context_line":"        nthread \u003d eventlet.patcher.original(\u0027threading\u0027)"},{"line_number":190,"context_line":"        with (mock.patch(\u0027neutron.common.utils.threading\u0027, nthread),"},{"line_number":191,"context_line":"              mock.patch(\u0027neutron.common.utils.time\u0027, ntime)):"},{"line_number":192,"context_line":"            self.assertRaises("},{"line_number":193,"context_line":"                FalseException,"},{"line_number":194,"context_line":"                utils.wait_until_true,"},{"line_number":195,"context_line":"                lambda: False, timeout\u003d1, exception\u003dFalseException)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"class TestDvrServices(base.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":18,"id":"e5510798_c141d5d3","line":195,"range":{"start_line":173,"start_character":4,"end_line":195,"end_character":67},"in_reply_to":"2f705b04_7757e15d","updated":"2025-01-21 08:08:11.000000000","message":"If you are mocking the methods you are not using them. Please, don\u0027t mock them.","commit_id":"8da8b8b7a45388f9986475fae2b751fbc3b630f2"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"6a7d497f718469352e4cc7507fd90dc91d275be8","unresolved":true,"context_lines":[{"line_number":170,"context_line":"                               any_order\u003dTrue)"},{"line_number":171,"context_line":"        self.assertTrue(logger.called)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def test_wait_until_true_eventlet(self):"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        class FalseException(Exception):"},{"line_number":176,"context_line":"            pass"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        self.assertRaises("},{"line_number":179,"context_line":"            FalseException,"},{"line_number":180,"context_line":"            utils.wait_until_true,"},{"line_number":181,"context_line":"            lambda: False, timeout\u003d1, exception\u003dFalseException)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def test_wait_until_true_threading(self):"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        class FalseException(Exception):"},{"line_number":186,"context_line":"            pass"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        ntime \u003d eventlet.patcher.original(\u0027time\u0027)"},{"line_number":189,"context_line":"        nthread \u003d eventlet.patcher.original(\u0027threading\u0027)"},{"line_number":190,"context_line":"        with (mock.patch(\u0027neutron.common.utils.threading\u0027, nthread),"},{"line_number":191,"context_line":"              mock.patch(\u0027neutron.common.utils.time\u0027, ntime)):"},{"line_number":192,"context_line":"            self.assertRaises("},{"line_number":193,"context_line":"                FalseException,"},{"line_number":194,"context_line":"                utils.wait_until_true,"},{"line_number":195,"context_line":"                lambda: False, timeout\u003d1, exception\u003dFalseException)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"class TestDvrServices(base.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":18,"id":"b310e791_2b159f0d","line":195,"range":{"start_line":173,"start_character":4,"end_line":195,"end_character":67},"in_reply_to":"e5510798_c141d5d3","updated":"2025-01-21 10:04:18.000000000","message":"Ok fair enough I will remove the function which validates the behavior using native threads.","commit_id":"8da8b8b7a45388f9986475fae2b751fbc3b630f2"}]}
