)]}'
{"neutron/common/utils.py":[{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"db41a9e9ab596c79f432e7cdc8c73dbd44518853","unresolved":false,"context_lines":[{"line_number":61,"context_line":"synchronized \u003d lockutils.synchronized_with_prefix(SYNCHRONIZED_PREFIX)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class WaitTimeout(Exception):"},{"line_number":65,"context_line":"    pass"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"def ensure_dir(dir_path):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_8f3797af","line":65,"range":{"start_line":64,"start_character":0,"end_line":65,"end_character":8},"updated":"2016-09-22 18:57:01.000000000","message":"Do you think, would it be worth to move this to neutron-lib? It\u0027s pretty straight-forward exception, but with extra info, probably could be reusable.","commit_id":"5a2b80da5215a7aa24a16f899b42eb0031b558c0"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"db41a9e9ab596c79f432e7cdc8c73dbd44518853","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class WaitTimeout(Exception):"},{"line_number":65,"context_line":"    pass"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"def ensure_dir(dir_path):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_2f492332","line":65,"range":{"start_line":65,"start_character":4,"end_line":65,"end_character":8},"updated":"2016-09-22 18:57:01.000000000","message":"Please add docstring to this, to inform why it is needed.","commit_id":"5a2b80da5215a7aa24a16f899b42eb0031b558c0"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"34e65c365d77fcba6ebe59cac6627fee451d2a7f","unresolved":false,"context_lines":[{"line_number":61,"context_line":"synchronized \u003d lockutils.synchronized_with_prefix(SYNCHRONIZED_PREFIX)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class WaitTimeout(Exception):"},{"line_number":65,"context_line":"    pass"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"def ensure_dir(dir_path):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_724794bb","line":65,"range":{"start_line":64,"start_character":0,"end_line":65,"end_character":8},"in_reply_to":"5a8bc5a2_4ff3cf9e","updated":"2016-09-22 19:23:41.000000000","message":"That\u0027s why I\u0027ve asked about *-lib, not forced you :)\nThanks.","commit_id":"5a2b80da5215a7aa24a16f899b42eb0031b558c0"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b23c23eda0d126381303276f9a56e821d9ab06db","unresolved":false,"context_lines":[{"line_number":61,"context_line":"synchronized \u003d lockutils.synchronized_with_prefix(SYNCHRONIZED_PREFIX)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class WaitTimeout(Exception):"},{"line_number":65,"context_line":"    pass"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"def ensure_dir(dir_path):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_a926efb7","line":65,"range":{"start_line":64,"start_character":0,"end_line":65,"end_character":8},"in_reply_to":"5a8bc5a2_724794bb","updated":"2016-09-23 10:25:46.000000000","message":"So I see that dragonflow, smaug, networking-ovn, networking-sfc and neutron-vpnaas use wait_until_true. It might be a good time to move it to Neutron-lib.","commit_id":"5a2b80da5215a7aa24a16f899b42eb0031b558c0"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"f10a0789571befb2acdd723dce46b941026ee3ac","unresolved":false,"context_lines":[{"line_number":61,"context_line":"synchronized \u003d lockutils.synchronized_with_prefix(SYNCHRONIZED_PREFIX)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class WaitTimeout(Exception):"},{"line_number":65,"context_line":"    pass"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"def ensure_dir(dir_path):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_4ff3cf9e","line":65,"range":{"start_line":64,"start_character":0,"end_line":65,"end_character":8},"in_reply_to":"5a8bc5a2_8f3797af","updated":"2016-09-22 19:03:25.000000000","message":"Agreed about docstring.\n\nre. neutron-lib - YAGNI :) Also there is a policy that only things that are used in Neutron and some other project should be part of neutron-lib","commit_id":"5a2b80da5215a7aa24a16f899b42eb0031b558c0"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0f70ef40eba35f94ecbb02be55c08d1e90ea84e0","unresolved":false,"context_lines":[{"line_number":61,"context_line":"synchronized \u003d lockutils.synchronized_with_prefix(SYNCHRONIZED_PREFIX)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class WaitTimeout(Exception):"},{"line_number":65,"context_line":"    pass"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"def ensure_dir(dir_path):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_89e1339d","line":65,"range":{"start_line":64,"start_character":0,"end_line":65,"end_character":8},"in_reply_to":"5a8bc5a2_a926efb7","updated":"2016-09-23 10:40:58.000000000","message":"So we can\u0027t put it to neutron-lib as it depends on eventlet and neutron-lib doesn\u0027t want that.","commit_id":"5a2b80da5215a7aa24a16f899b42eb0031b558c0"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"025000a82c7fdcfe862858b5d7f88725c09b7034","unresolved":false,"context_lines":[{"line_number":636,"context_line":"    \"\"\""},{"line_number":637,"context_line":"    if exception is WaitTimeout:"},{"line_number":638,"context_line":"        exception \u003d WaitTimeout(\"Timed out after %d seconds\" % timeout)"},{"line_number":639,"context_line":"    with eventlet.timeout.Timeout(timeout, exception):"},{"line_number":640,"context_line":"        while not predicate():"},{"line_number":641,"context_line":"            eventlet.sleep(sleep)"},{"line_number":642,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_8d96a44a","line":639,"updated":"2016-09-23 09:18:23.000000000","message":"It\u0027s better to keep the exception arg passed to Timeout as is, and wrap this block with \"try ... except Timeout: raise WaitTimeout\", IMO.","commit_id":"5a2b80da5215a7aa24a16f899b42eb0031b558c0"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"45e51e0ef7c4bfacf68bb5e38b3921b9a424e16f","unresolved":false,"context_lines":[{"line_number":636,"context_line":"    \"\"\""},{"line_number":637,"context_line":"    if exception is WaitTimeout:"},{"line_number":638,"context_line":"        exception \u003d WaitTimeout(\"Timed out after %d seconds\" % timeout)"},{"line_number":639,"context_line":"    with eventlet.timeout.Timeout(timeout, exception):"},{"line_number":640,"context_line":"        while not predicate():"},{"line_number":641,"context_line":"            eventlet.sleep(sleep)"},{"line_number":642,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_66dc1613","line":639,"in_reply_to":"5a8bc5a2_031345b9","updated":"2016-09-23 10:18:15.000000000","message":"Sorry, missed that at the time I wrote my comment. I see now what you mean.","commit_id":"5a2b80da5215a7aa24a16f899b42eb0031b558c0"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"f73514b81b55f4a3162b22ede303038a3d7cf2f8","unresolved":false,"context_lines":[{"line_number":636,"context_line":"    \"\"\""},{"line_number":637,"context_line":"    if exception is WaitTimeout:"},{"line_number":638,"context_line":"        exception \u003d WaitTimeout(\"Timed out after %d seconds\" % timeout)"},{"line_number":639,"context_line":"    with eventlet.timeout.Timeout(timeout, exception):"},{"line_number":640,"context_line":"        while not predicate():"},{"line_number":641,"context_line":"            eventlet.sleep(sleep)"},{"line_number":642,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_eda64852","line":639,"in_reply_to":"5a8bc5a2_8d96a44a","updated":"2016-09-23 09:23:31.000000000","message":"What would be the benefit from this approach? Not needing to instantiate WaitTimeout before call to Timeout?","commit_id":"5a2b80da5215a7aa24a16f899b42eb0031b558c0"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"460bb3e8c98238039daf2b3afb6ebed2d93f0cbe","unresolved":false,"context_lines":[{"line_number":636,"context_line":"    \"\"\""},{"line_number":637,"context_line":"    if exception is WaitTimeout:"},{"line_number":638,"context_line":"        exception \u003d WaitTimeout(\"Timed out after %d seconds\" % timeout)"},{"line_number":639,"context_line":"    with eventlet.timeout.Timeout(timeout, exception):"},{"line_number":640,"context_line":"        while not predicate():"},{"line_number":641,"context_line":"            eventlet.sleep(sleep)"},{"line_number":642,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_031345b9","line":639,"in_reply_to":"5a8bc5a2_eda64852","updated":"2016-09-23 09:47:45.000000000","message":"Did you look at my non-inline review comment?\n\neventlet.timeout.Timeout would be more robust.","commit_id":"5a2b80da5215a7aa24a16f899b42eb0031b558c0"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"e5d598c60dcb3b2d68752de0333c341c6bac7bc1","unresolved":false,"context_lines":[{"line_number":653,"context_line":"                message\u003d\"wait_until_true() now raises WaitTimeout error by \""},{"line_number":654,"context_line":"                        \"default.\","},{"line_number":655,"context_line":"                version\u003d\"Ocata\","},{"line_number":656,"context_line":"                removal_version\u003d\"Pike\")"},{"line_number":657,"context_line":"            exception \u003d WaitTimeout(\"Timed out after %d seconds\" % timeout)"},{"line_number":658,"context_line":"        #NOTE(jlibosva): In case None is passed exception is instantiated on"},{"line_number":659,"context_line":"        #                the line above."}],"source_content_type":"text/x-python","patch_set":6,"id":"5a8bc5a2_d5c62e99","line":656,"updated":"2016-09-26 08:10:26.000000000","message":"Is something going to be removed in Pike?\nI think removal_version isn\u0027t necessary.","commit_id":"337e049b467b3bd5c1013d79df68e7e70f7226bc"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"3715a7903f3057faee98a86b02d77a4a3219ec65","unresolved":false,"context_lines":[{"line_number":653,"context_line":"                message\u003d\"wait_until_true() now raises WaitTimeout error by \""},{"line_number":654,"context_line":"                        \"default.\","},{"line_number":655,"context_line":"                version\u003d\"Ocata\","},{"line_number":656,"context_line":"                removal_version\u003d\"Pike\")"},{"line_number":657,"context_line":"            exception \u003d WaitTimeout(\"Timed out after %d seconds\" % timeout)"},{"line_number":658,"context_line":"        #NOTE(jlibosva): In case None is passed exception is instantiated on"},{"line_number":659,"context_line":"        #                the line above."}],"source_content_type":"text/x-python","patch_set":6,"id":"5a8bc5a2_b36b421d","line":656,"in_reply_to":"5a8bc5a2_0e54fc50","updated":"2016-09-27 01:31:23.000000000","message":"At least it wasn\u0027t obvious to me. ;)","commit_id":"337e049b467b3bd5c1013d79df68e7e70f7226bc"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"1a0fc1b88a263f21af71d0c21eb5465e4605736f","unresolved":false,"context_lines":[{"line_number":653,"context_line":"                message\u003d\"wait_until_true() now raises WaitTimeout error by \""},{"line_number":654,"context_line":"                        \"default.\","},{"line_number":655,"context_line":"                version\u003d\"Ocata\","},{"line_number":656,"context_line":"                removal_version\u003d\"Pike\")"},{"line_number":657,"context_line":"            exception \u003d WaitTimeout(\"Timed out after %d seconds\" % timeout)"},{"line_number":658,"context_line":"        #NOTE(jlibosva): In case None is passed exception is instantiated on"},{"line_number":659,"context_line":"        #                the line above."}],"source_content_type":"text/x-python","patch_set":6,"id":"5a8bc5a2_0e54fc50","line":656,"in_reply_to":"5a8bc5a2_47198f21","updated":"2016-09-26 10:32:08.000000000","message":"The idea was to provide this info on L652. Do you think it\u0027s not descriptive enough and should be updated?","commit_id":"337e049b467b3bd5c1013d79df68e7e70f7226bc"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"7974d5487e5684a59e44d1700d2ef13c709d39e8","unresolved":false,"context_lines":[{"line_number":653,"context_line":"                message\u003d\"wait_until_true() now raises WaitTimeout error by \""},{"line_number":654,"context_line":"                        \"default.\","},{"line_number":655,"context_line":"                version\u003d\"Ocata\","},{"line_number":656,"context_line":"                removal_version\u003d\"Pike\")"},{"line_number":657,"context_line":"            exception \u003d WaitTimeout(\"Timed out after %d seconds\" % timeout)"},{"line_number":658,"context_line":"        #NOTE(jlibosva): In case None is passed exception is instantiated on"},{"line_number":659,"context_line":"        #                the line above."}],"source_content_type":"text/x-python","patch_set":6,"id":"5a8bc5a2_47198f21","line":656,"in_reply_to":"5a8bc5a2_50bcecdb","updated":"2016-09-26 09:10:53.000000000","message":"I see.  Is the removal of the inheritance commented somewhere?","commit_id":"337e049b467b3bd5c1013d79df68e7e70f7226bc"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0df49ceab3b870099b8d71db6fd02818722c3b5c","unresolved":false,"context_lines":[{"line_number":653,"context_line":"                message\u003d\"wait_until_true() now raises WaitTimeout error by \""},{"line_number":654,"context_line":"                        \"default.\","},{"line_number":655,"context_line":"                version\u003d\"Ocata\","},{"line_number":656,"context_line":"                removal_version\u003d\"Pike\")"},{"line_number":657,"context_line":"            exception \u003d WaitTimeout(\"Timed out after %d seconds\" % timeout)"},{"line_number":658,"context_line":"        #NOTE(jlibosva): In case None is passed exception is instantiated on"},{"line_number":659,"context_line":"        #                the line above."}],"source_content_type":"text/x-python","patch_set":6,"id":"5a8bc5a2_50bcecdb","line":656,"in_reply_to":"5a8bc5a2_d5c62e99","updated":"2016-09-26 08:33:35.000000000","message":"Yes, the inheritance of TimeoutError","commit_id":"337e049b467b3bd5c1013d79df68e7e70f7226bc"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"a97cfcd830f5167fa72ce88a79c2cfb08f38cbc8","unresolved":false,"context_lines":[{"line_number":717,"context_line":"                eventlet.sleep(sleep)"},{"line_number":718,"context_line":"    except eventlet.TimeoutError:"},{"line_number":719,"context_line":"        if exception is None:"},{"line_number":720,"context_line":"            debtcollector.deprecate("},{"line_number":721,"context_line":"                \"Raising eventlet.TimeoutError by default has been deprecated\","},{"line_number":722,"context_line":"                message\u003d\"wait_until_true() now raises WaitTimeout error by \""},{"line_number":723,"context_line":"                        \"default.\","}],"source_content_type":"text/x-python","patch_set":11,"id":"ba5201f7_b929238c","line":720,"updated":"2017-01-09 10:25:16.000000000","message":"rather than deprecate I would just change the default exception argument to be WaitTimeout. You already derive from eventlet.TimeoutError so current exception handlers won\u0027t break. I don\u0027t see a point in this deprecation business unless you are eventually planning on changing the inheritance chain of the WaitTimeout class.","commit_id":"8db0695914fbda45c8703535d7030ba6d278a358"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"7a9761b7d28b141a4c4c33c6d00aca164070f1e4","unresolved":false,"context_lines":[{"line_number":717,"context_line":"                eventlet.sleep(sleep)"},{"line_number":718,"context_line":"    except eventlet.TimeoutError:"},{"line_number":719,"context_line":"        if exception is None:"},{"line_number":720,"context_line":"            debtcollector.deprecate("},{"line_number":721,"context_line":"                \"Raising eventlet.TimeoutError by default has been deprecated\","},{"line_number":722,"context_line":"                message\u003d\"wait_until_true() now raises WaitTimeout error by \""},{"line_number":723,"context_line":"                        \"default.\","}],"source_content_type":"text/x-python","patch_set":11,"id":"ba5201f7_b985a35a","line":720,"in_reply_to":"ba5201f7_b929238c","updated":"2017-01-09 10:29:17.000000000","message":"IRC discussion says we will remove eventlet from the inheritance of the Exception.","commit_id":"8db0695914fbda45c8703535d7030ba6d278a358"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"e5fa5be1c31b62edacc7dbb0c93244f80623073c","unresolved":false,"context_lines":[{"line_number":700,"context_line":"    return inner"},{"line_number":701,"context_line":""},{"line_number":702,"context_line":""},{"line_number":703,"context_line":"def wait_until_true(predicate, timeout\u003d60, sleep\u003d1, exception\u003dNone):"},{"line_number":704,"context_line":"    \"\"\""},{"line_number":705,"context_line":"    Wait until callable predicate is evaluated as True"},{"line_number":706,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ba5201f7_859b1072","line":703,"updated":"2017-01-09 12:13:31.000000000","message":"I suppose this makes [1] redundant.\n\n[1] https://review.openstack.org/#/c/417011/1","commit_id":"42cc227798d912cd1edd254f3ea228bab3225b24"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e0d841b96b3562d70ce5aa39a257f7f19c1a78ee","unresolved":false,"context_lines":[{"line_number":723,"context_line":"                        \"default.\","},{"line_number":724,"context_line":"                version\u003d\"Ocata\","},{"line_number":725,"context_line":"                removal_version\u003d\"Pike\")"},{"line_number":726,"context_line":"            exception \u003d WaitTimeout(\"Timed out after %d seconds\" % timeout)"},{"line_number":727,"context_line":"        #NOTE(jlibosva): In case None is passed exception is instantiated on"},{"line_number":728,"context_line":"        #                the line above."},{"line_number":729,"context_line":"        #pylint: disable\u003draising-bad-type"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba5201f7_6650ef5f","line":726,"updated":"2017-01-11 16:29:40.000000000","message":"if you respin please add a missing translation","commit_id":"42cc227798d912cd1edd254f3ea228bab3225b24"}],"neutron/tests/fullstack/test_trunk.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"190c22aefd11a6be15f5f28405bf7b0de5d061a3","unresolved":false,"context_lines":[{"line_number":292,"context_line":"        )"},{"line_number":293,"context_line":"        utils.wait_until_true("},{"line_number":294,"context_line":"            no_patch_ports_predicate,"},{"line_number":295,"context_line":"            exception\u003dTrunkTestException("},{"line_number":296,"context_line":"                \"Integration bridge %s still has following ports while some of\""},{"line_number":297,"context_line":"                \" them are patch ports for trunk that were supposed to be \""},{"line_number":298,"context_line":"                \"removed: %s\" % ("}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_e32bb192","line":295,"updated":"2017-01-03 16:22:52.000000000","message":"Oh, it had a reason to be done with try-catch","commit_id":"2989d1cf38861eef92b0e7f8225ab2bc2d67463b"}]}
