)]}'
{"kuryr_kubernetes/controller/drivers/vif_pool.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5af43b701e1d6622c0580524d97464d12e01acc6","unresolved":true,"context_lines":[{"line_number":208,"context_line":"        try:"},{"line_number":209,"context_line":"            return self._get_port_from_pool(pool_key, pod, subnets,"},{"line_number":210,"context_line":"                                            tuple(sorted(security_groups)))"},{"line_number":211,"context_line":"        except exceptions.ResourceNotReady:"},{"line_number":212,"context_line":"            LOG.debug(\"Ports pool does not have available ports: %s\", pool_key)"},{"line_number":213,"context_line":"            # NOTE(dulek): We\u0027re passing raise_not_ready\u003dFalse because this"},{"line_number":214,"context_line":"            #              will be run outside of handlers thread, so raising"}],"source_content_type":"text/x-python","patch_set":3,"id":"a696e0ab_b86cbc16","line":211,"range":{"start_line":211,"start_character":15,"end_line":211,"end_character":42},"updated":"2021-09-14 15:36:05.000000000","message":"This has little sense now if `_get_port_from_pool()` raises `VIFPoolEmpty` that isn\u0027t based on ResourceNotReady.","commit_id":"1ee2f995a77bd78fe371d364ac0adc3218553cd8"},{"author":{"_account_id":19521,"name":"Robin Cernin","email":"rcernin@redhat.com","username":"rcernin"},"change_message_id":"404e8010e3cac17f9187d0b3cd1683519abbd304","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        try:"},{"line_number":209,"context_line":"            return self._get_port_from_pool(pool_key, pod, subnets,"},{"line_number":210,"context_line":"                                            tuple(sorted(security_groups)))"},{"line_number":211,"context_line":"        except exceptions.ResourceNotReady:"},{"line_number":212,"context_line":"            LOG.debug(\"Ports pool does not have available ports: %s\", pool_key)"},{"line_number":213,"context_line":"            # NOTE(dulek): We\u0027re passing raise_not_ready\u003dFalse because this"},{"line_number":214,"context_line":"            #              will be run outside of handlers thread, so raising"}],"source_content_type":"text/x-python","patch_set":3,"id":"f8239a45_37d18fc1","line":211,"range":{"start_line":211,"start_character":15,"end_line":211,"end_character":42},"in_reply_to":"a696e0ab_b86cbc16","updated":"2021-09-14 22:41:10.000000000","message":"Done","commit_id":"1ee2f995a77bd78fe371d364ac0adc3218553cd8"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5af43b701e1d6622c0580524d97464d12e01acc6","unresolved":true,"context_lines":[{"line_number":217,"context_line":"                                tuple(sorted(security_groups)),"},{"line_number":218,"context_line":"                                raise_not_ready\u003dFalse)"},{"line_number":219,"context_line":"            try:"},{"line_number":220,"context_line":"                gt.wait()"},{"line_number":221,"context_line":"            except os_exc.ConflictException as ex:"},{"line_number":222,"context_line":"                if ex.details.startswith(\u0027Quota exceeded for resources\u0027):"},{"line_number":223,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":3,"id":"b0f4e6f5_13cb9878","line":220,"range":{"start_line":220,"start_character":0,"end_line":220,"end_character":25},"updated":"2021-09-14 15:36:05.000000000","message":"It makes this method blocking, I\u0027m not exactly sure it\u0027s the best idea, especially as the method is short-circuited if a population of that particular pool is already happening. Hm…","commit_id":"1ee2f995a77bd78fe371d364ac0adc3218553cd8"},{"author":{"_account_id":19521,"name":"Robin Cernin","email":"rcernin@redhat.com","username":"rcernin"},"change_message_id":"404e8010e3cac17f9187d0b3cd1683519abbd304","unresolved":true,"context_lines":[{"line_number":217,"context_line":"                                tuple(sorted(security_groups)),"},{"line_number":218,"context_line":"                                raise_not_ready\u003dFalse)"},{"line_number":219,"context_line":"            try:"},{"line_number":220,"context_line":"                gt.wait()"},{"line_number":221,"context_line":"            except os_exc.ConflictException as ex:"},{"line_number":222,"context_line":"                if ex.details.startswith(\u0027Quota exceeded for resources\u0027):"},{"line_number":223,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":3,"id":"41aef110_4f7c167d","line":220,"range":{"start_line":220,"start_character":0,"end_line":220,"end_character":25},"in_reply_to":"285c1812_d7ca3cd2","updated":"2021-09-14 22:41:10.000000000","message":"I understand this is blocking and was wondering how could I capture the exception from a different thread without waiting for the thread to finish first?","commit_id":"1ee2f995a77bd78fe371d364ac0adc3218553cd8"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"804fff34b9a7911b075b007579ea10796a4e337c","unresolved":true,"context_lines":[{"line_number":217,"context_line":"                                tuple(sorted(security_groups)),"},{"line_number":218,"context_line":"                                raise_not_ready\u003dFalse)"},{"line_number":219,"context_line":"            try:"},{"line_number":220,"context_line":"                gt.wait()"},{"line_number":221,"context_line":"            except os_exc.ConflictException as ex:"},{"line_number":222,"context_line":"                if ex.details.startswith(\u0027Quota exceeded for resources\u0027):"},{"line_number":223,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":3,"id":"df2f0c9c_da21f639","line":220,"range":{"start_line":220,"start_character":0,"end_line":220,"end_character":25},"in_reply_to":"41aef110_4f7c167d","updated":"2021-09-15 11:35:38.000000000","message":"But why do we want to catch and reraise the exception here in the first place? Is it just to be able to distinguish it in the Retry handler to make sure it won\u0027t make Kuryr explode? Then I\u0027d suggest just repacking ResourceNotReady into something distinguishable instead of reraising it in line 227.","commit_id":"1ee2f995a77bd78fe371d364ac0adc3218553cd8"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"fbb5c66ddcd01a324f3c45d3a235ae142b0734e1","unresolved":true,"context_lines":[{"line_number":217,"context_line":"                                tuple(sorted(security_groups)),"},{"line_number":218,"context_line":"                                raise_not_ready\u003dFalse)"},{"line_number":219,"context_line":"            try:"},{"line_number":220,"context_line":"                gt.wait()"},{"line_number":221,"context_line":"            except os_exc.ConflictException as ex:"},{"line_number":222,"context_line":"                if ex.details.startswith(\u0027Quota exceeded for resources\u0027):"},{"line_number":223,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":3,"id":"285c1812_d7ca3cd2","line":220,"range":{"start_line":220,"start_character":0,"end_line":220,"end_character":25},"in_reply_to":"b0f4e6f5_13cb9878","updated":"2021-09-14 15:37:27.000000000","message":"Could we catch it inside `_populate_pool()` instead? Like catch and log as I assume it\u0027s matter of making sure the error is nicely logged?","commit_id":"1ee2f995a77bd78fe371d364ac0adc3218553cd8"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"0df09cff35c9a919330297224c58e98629c11f1f","unresolved":true,"context_lines":[{"line_number":212,"context_line":"                                            tuple(sorted(security_groups)))"},{"line_number":213,"context_line":"        except exceptions.VIFPoolNotReady:"},{"line_number":214,"context_line":"            LOG.debug(\"Ports pool does not have available ports!\")"},{"line_number":215,"context_line":"            eventlet.spawn(self._populate_pool, pool_key, pod,"},{"line_number":216,"context_line":"                           subnets, tuple(sorted(security_groups)))"},{"line_number":217,"context_line":"            raise"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def _get_port_from_pool(self, pool_key, pod, subnets, security_groups):"}],"source_content_type":"text/x-python","patch_set":14,"id":"dd31492d_ac3f9839","line":216,"range":{"start_line":215,"start_character":0,"end_line":216,"end_character":67},"updated":"2021-10-21 16:34:56.000000000","message":"Why do you remove `raise_not_ready\u003dFalse`? This will make those spawned eventlet threads raise the exception and log an ugly failure, while the exception will not be caught by anything, so what\u0027s the point?","commit_id":"5e34956bb66004d1649d12da129285fe3fbf808f"}],"kuryr_kubernetes/controller/handlers/kuryrport.py":[{"author":{"_account_id":19521,"name":"Robin Cernin","email":"rcernin@redhat.com","username":"rcernin"},"change_message_id":"dfea9a05c1aade9f073798c8c7c9d10df20d7f8d","unresolved":true,"context_lines":[{"line_number":221,"context_line":"            main_vif \u003d self._drv_vif_pool.request_vif(pod, project_id,"},{"line_number":222,"context_line":"                                                      subnets,"},{"line_number":223,"context_line":"                                                      security_groups)"},{"line_number":224,"context_line":"        except os_exc.ConflictException as ex:"},{"line_number":225,"context_line":"            if \u0027no more ip addresses available\u0027 in ex.details.lower():"},{"line_number":226,"context_line":"                raise k_exc.IpAddressGenerationFailure(subnets)"},{"line_number":227,"context_line":"            elif \u0027quota\u0027 in ex.details.lower():"}],"source_content_type":"text/x-python","patch_set":9,"id":"d3c396be_6ea2b4a2","line":224,"updated":"2021-09-24 02:08:41.000000000","message":"This is the way I could do it, but I wanted to move this out completely to Retry Handler. At the moment I can see the client no longer throws same exceptions as it used in neutron client, for example \"IpAddressGenerationFailure\" but instead it sends 409 Conflict error to everything. so I added a control statements and re-raised the relevant exceptions. Any suggestions?","commit_id":"e7222fa7ac13e510dde1939f5f1b8109074949b7"},{"author":{"_account_id":19521,"name":"Robin Cernin","email":"rcernin@redhat.com","username":"rcernin"},"change_message_id":"3b8929cb337e2e2d71415852930336c9d0e0174f","unresolved":true,"context_lines":[{"line_number":221,"context_line":"            main_vif \u003d self._drv_vif_pool.request_vif(pod, project_id,"},{"line_number":222,"context_line":"                                                      subnets,"},{"line_number":223,"context_line":"                                                      security_groups)"},{"line_number":224,"context_line":"        except os_exc.ConflictException as ex:"},{"line_number":225,"context_line":"            if \u0027no more ip addresses available\u0027 in ex.details.lower():"},{"line_number":226,"context_line":"                raise k_exc.IpAddressGenerationFailure(subnets)"},{"line_number":227,"context_line":"            elif \u0027quota\u0027 in ex.details.lower():"}],"source_content_type":"text/x-python","patch_set":10,"id":"70f61874_78a3aa29","line":224,"updated":"2021-09-24 04:56:18.000000000","message":"This is the way I could do it, but I wanted to move this out completely to Retry Handler. At the moment I can see the client no longer throws same exceptions as it used in neutron client, for example \"IpAddressGenerationFailure\" but instead it sends 409 Conflict error to everything. so I added a control statements and re-raised the relevant exceptions. Any suggestions?","commit_id":"3b312c1d923921855112a6db1c2d44ee07c39a4e"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"dee1a5ffa45a36a00452d833b11efba4f8276101","unresolved":true,"context_lines":[{"line_number":221,"context_line":"            main_vif \u003d self._drv_vif_pool.request_vif(pod, project_id,"},{"line_number":222,"context_line":"                                                      subnets,"},{"line_number":223,"context_line":"                                                      security_groups)"},{"line_number":224,"context_line":"        except os_exc.ConflictException as ex:"},{"line_number":225,"context_line":"            if \u0027no more ip addresses available\u0027 in ex.details.lower():"},{"line_number":226,"context_line":"                raise k_exc.IpAddressGenerationFailure(subnets)"},{"line_number":227,"context_line":"            elif \u0027quota\u0027 in ex.details.lower():"}],"source_content_type":"text/x-python","patch_set":10,"id":"236f3e34_a879a181","line":224,"in_reply_to":"70f61874_78a3aa29","updated":"2021-10-07 11:40:36.000000000","message":"Looks like openstacksdk kinda swallows the original Neutron error ID but you should still be able to read it from the original response:\n\n In [20]: try:\n    ...:     c.create_port(\u0027e166d5f4-9ac5-46d0-a813-0ee659d075a3\u0027, name\u003d\u0027test1\u0027, fixed_ips\u003d[{\u0027subnet_id\u0027: \u00270a62c8ed-abda-4e43-b77b-08a0963b37f8\u0027}])\n    ...: except Exception as e:\n    ...:     print(e.response.json())\n    ...: \n\n {\u0027NeutronError\u0027: {\u0027type\u0027: \u0027IpAddressGenerationFailure\u0027, \u0027message\u0027: \u0027No more IP addresses available on network e166d5f4-9ac5-46d0-a813-0ee659d075a3.\u0027, \u0027detail\u0027: \u0027\u0027}}\n\nSo you got to check ex.response.json()[\u0027NeutronError\u0027][\u0027type\u0027]. Just make sure to handle KeyError. I\u0027m pretty sure the other type is \"OverQuota\".\n\nI think we have another place where we check the message instead of the ID, so we got to fix it there too (can be a separate patch).\n\nAlso it would be cool to fix openstacksdk to actually save this.","commit_id":"3b312c1d923921855112a6db1c2d44ee07c39a4e"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"0df09cff35c9a919330297224c58e98629c11f1f","unresolved":true,"context_lines":[{"line_number":236,"context_line":"            # as VIFPoolNotReady is raised from vif_pool driver."},{"line_number":237,"context_line":"            # If vif_pool is disabled then the exceptions are raised"},{"line_number":238,"context_line":"            # based on the error message from the neutron-server."},{"line_number":239,"context_line":"            if k_excutils.response(ex, \"NeutronError\","},{"line_number":240,"context_line":"                                   \"IpAddressGenerationFailure\"):"},{"line_number":241,"context_line":"                raise k_exc.IpAddressGenerationFailure(subnets)"},{"line_number":242,"context_line":"            elif k_excutils.response(ex, \"NeutronError\", \"OverQuota\"):"},{"line_number":243,"context_line":"                raise k_exc.OverQuotaClient"},{"line_number":244,"context_line":"            else:"},{"line_number":245,"context_line":"                raise"},{"line_number":246,"context_line":"        except os_exc.ResourceNotFound:"},{"line_number":247,"context_line":"            # NOTE(gryf): It might happen, that between getting security"},{"line_number":248,"context_line":"            # groups above and requesting VIF, network policy is deleted,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1557c609_20c1cb98","line":245,"range":{"start_line":239,"start_character":0,"end_line":245,"end_character":21},"updated":"2021-10-21 16:34:56.000000000","message":"You could just have a method in excutils that will just repack the ConflictException into a correct one?","commit_id":"5e34956bb66004d1649d12da129285fe3fbf808f"}],"kuryr_kubernetes/exceptions.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5af43b701e1d6622c0580524d97464d12e01acc6","unresolved":true,"context_lines":[{"line_number":50,"context_line":"class VIFPoolNotReady(Exception):"},{"line_number":51,"context_line":"    def __init__(self, resource):"},{"line_number":52,"context_line":"        super(VIFPoolNotReady, self).__init__(\"VIF Pool not ready %s: \" %"},{"line_number":53,"context_line":"                                              (resource,))"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"class VIFPoolEmpty(Exception):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ffd3a786_def6066d","line":53,"range":{"start_line":53,"start_character":46,"end_line":53,"end_character":57},"updated":"2021-09-14 15:36:05.000000000","message":"No need for this to be a tuple.","commit_id":"1ee2f995a77bd78fe371d364ac0adc3218553cd8"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"d5627a822f03811a8d11e0148db1d9f6677bf2b7","unresolved":false,"context_lines":[{"line_number":50,"context_line":"class VIFPoolNotReady(Exception):"},{"line_number":51,"context_line":"    def __init__(self, resource):"},{"line_number":52,"context_line":"        super(VIFPoolNotReady, self).__init__(\"VIF Pool not ready %s: \" %"},{"line_number":53,"context_line":"                                              (resource,))"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"class VIFPoolEmpty(Exception):"}],"source_content_type":"text/x-python","patch_set":3,"id":"a23dc42d_5f7a4c60","line":53,"range":{"start_line":53,"start_character":46,"end_line":53,"end_character":57},"in_reply_to":"190ebe44_8792ed89","updated":"2021-09-15 11:36:11.000000000","message":"Done","commit_id":"1ee2f995a77bd78fe371d364ac0adc3218553cd8"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"804fff34b9a7911b075b007579ea10796a4e337c","unresolved":true,"context_lines":[{"line_number":50,"context_line":"class VIFPoolNotReady(Exception):"},{"line_number":51,"context_line":"    def __init__(self, resource):"},{"line_number":52,"context_line":"        super(VIFPoolNotReady, self).__init__(\"VIF Pool not ready %s: \" %"},{"line_number":53,"context_line":"                                              (resource,))"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"class VIFPoolEmpty(Exception):"}],"source_content_type":"text/x-python","patch_set":3,"id":"190ebe44_8792ed89","line":53,"range":{"start_line":53,"start_character":46,"end_line":53,"end_character":57},"in_reply_to":"849671b4_50b8b4a9","updated":"2021-09-15 11:35:38.000000000","message":"Ah, because it\u0027s a pool key, which is a tuple. Alright.","commit_id":"1ee2f995a77bd78fe371d364ac0adc3218553cd8"},{"author":{"_account_id":19521,"name":"Robin Cernin","email":"rcernin@redhat.com","username":"rcernin"},"change_message_id":"404e8010e3cac17f9187d0b3cd1683519abbd304","unresolved":true,"context_lines":[{"line_number":50,"context_line":"class VIFPoolNotReady(Exception):"},{"line_number":51,"context_line":"    def __init__(self, resource):"},{"line_number":52,"context_line":"        super(VIFPoolNotReady, self).__init__(\"VIF Pool not ready %s: \" %"},{"line_number":53,"context_line":"                                              (resource,))"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"class VIFPoolEmpty(Exception):"}],"source_content_type":"text/x-python","patch_set":3,"id":"849671b4_50b8b4a9","line":53,"range":{"start_line":53,"start_character":46,"end_line":53,"end_character":57},"in_reply_to":"ffd3a786_def6066d","updated":"2021-09-14 22:41:10.000000000","message":"Without being a tuple I was getting error:\n\nTypeError: not all arguments converted during string formatting","commit_id":"1ee2f995a77bd78fe371d364ac0adc3218553cd8"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5af43b701e1d6622c0580524d97464d12e01acc6","unresolved":true,"context_lines":[{"line_number":56,"context_line":"class VIFPoolEmpty(Exception):"},{"line_number":57,"context_line":"    def __init__(self, resource):"},{"line_number":58,"context_line":"        super(VIFPoolEmpty, self).__init__(\"VIF Pool empty %s: \" %"},{"line_number":59,"context_line":"                                           (resource,))"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class PortNotReady(ResourceNotReady):"}],"source_content_type":"text/x-python","patch_set":3,"id":"125792bc_23aa2886","line":59,"range":{"start_line":59,"start_character":43,"end_line":59,"end_character":54},"updated":"2021-09-14 15:36:05.000000000","message":"ditto","commit_id":"1ee2f995a77bd78fe371d364ac0adc3218553cd8"},{"author":{"_account_id":19521,"name":"Robin Cernin","email":"rcernin@redhat.com","username":"rcernin"},"change_message_id":"404e8010e3cac17f9187d0b3cd1683519abbd304","unresolved":true,"context_lines":[{"line_number":56,"context_line":"class VIFPoolEmpty(Exception):"},{"line_number":57,"context_line":"    def __init__(self, resource):"},{"line_number":58,"context_line":"        super(VIFPoolEmpty, self).__init__(\"VIF Pool empty %s: \" %"},{"line_number":59,"context_line":"                                           (resource,))"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class PortNotReady(ResourceNotReady):"}],"source_content_type":"text/x-python","patch_set":3,"id":"d16a590b_d1a21139","line":59,"range":{"start_line":59,"start_character":43,"end_line":59,"end_character":54},"in_reply_to":"125792bc_23aa2886","updated":"2021-09-14 22:41:10.000000000","message":"Without being a tuple I was getting error:\n\nTypeError: not all arguments converted during string formatting","commit_id":"1ee2f995a77bd78fe371d364ac0adc3218553cd8"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"d5627a822f03811a8d11e0148db1d9f6677bf2b7","unresolved":false,"context_lines":[{"line_number":56,"context_line":"class VIFPoolEmpty(Exception):"},{"line_number":57,"context_line":"    def __init__(self, resource):"},{"line_number":58,"context_line":"        super(VIFPoolEmpty, self).__init__(\"VIF Pool empty %s: \" %"},{"line_number":59,"context_line":"                                           (resource,))"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class PortNotReady(ResourceNotReady):"}],"source_content_type":"text/x-python","patch_set":3,"id":"477cad61_0e87c7ed","line":59,"range":{"start_line":59,"start_character":43,"end_line":59,"end_character":54},"in_reply_to":"d16a590b_d1a21139","updated":"2021-09-15 11:36:11.000000000","message":"Done","commit_id":"1ee2f995a77bd78fe371d364ac0adc3218553cd8"}],"kuryr_kubernetes/excutils.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"0df09cff35c9a919330297224c58e98629c11f1f","unresolved":true,"context_lines":[{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"def response(ex, cls, type):"},{"line_number":15,"context_line":"    resp \u003d ex.response.json()"},{"line_number":16,"context_line":"    if cls in resp:"},{"line_number":17,"context_line":"        if type in resp[cls].values():"}],"source_content_type":"text/x-python","patch_set":14,"id":"91bce416_60702fcb","line":14,"range":{"start_line":14,"start_character":4,"end_line":14,"end_character":12},"updated":"2021-10-21 16:34:56.000000000","message":"This should mention that it\u0027s for Neutron exceptions. How about is_neutron_ex_type?","commit_id":"5e34956bb66004d1649d12da129285fe3fbf808f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"0df09cff35c9a919330297224c58e98629c11f1f","unresolved":true,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"def response(ex, cls, type):"},{"line_number":15,"context_line":"    resp \u003d ex.response.json()"},{"line_number":16,"context_line":"    if cls in resp:"},{"line_number":17,"context_line":"        if type in resp[cls].values():"},{"line_number":18,"context_line":"            return True"},{"line_number":19,"context_line":"    return False"}],"source_content_type":"text/x-python","patch_set":14,"id":"fd0ca9d5_d4211294","line":19,"range":{"start_line":16,"start_character":0,"end_line":19,"end_character":16},"updated":"2021-10-21 16:34:56.000000000","message":"How about\n\n return cls in resp and type in resp[cls].values()\n\n?","commit_id":"5e34956bb66004d1649d12da129285fe3fbf808f"}],"kuryr_kubernetes/handlers/retry.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5af43b701e1d6622c0580524d97464d12e01acc6","unresolved":true,"context_lines":[{"line_number":83,"context_line":"                }"},{"line_number":84,"context_line":"                self._handler(event, *args, retry_info\u003dinfo, **kwargs)"},{"line_number":85,"context_line":"                break"},{"line_number":86,"context_line":"            except (os_exc.ConflictException,"},{"line_number":87,"context_line":"                    exceptions.VIFPoolNotReady,"},{"line_number":88,"context_line":"                    exceptions.VIFPoolEmpty):"},{"line_number":89,"context_line":"                with excutils.save_and_reraise_exception() as ex:"},{"line_number":90,"context_line":"                    if self._sleep(deadline, attempt, ex.value):"},{"line_number":91,"context_line":"                        ex.reraise \u003d False"},{"line_number":92,"context_line":"            except self._exceptions:"},{"line_number":93,"context_line":"                with excutils.save_and_reraise_exception() as ex:"},{"line_number":94,"context_line":"                    if self._sleep(deadline, attempt, ex.value):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5b32bf69_22656bcd","line":91,"range":{"start_line":86,"start_character":0,"end_line":91,"end_character":42},"updated":"2021-09-14 15:36:05.000000000","message":"I think this will still kill the controller if no port can be created.","commit_id":"1ee2f995a77bd78fe371d364ac0adc3218553cd8"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"dee1a5ffa45a36a00452d833b11efba4f8276101","unresolved":true,"context_lines":[{"line_number":82,"context_line":"                }"},{"line_number":83,"context_line":"                self._handler(event, *args, retry_info\u003dinfo, **kwargs)"},{"line_number":84,"context_line":"                break"},{"line_number":85,"context_line":"            except (exceptions.IpAddressGenerationFailure,"},{"line_number":86,"context_line":"                    exceptions.OverQuotaClient,"},{"line_number":87,"context_line":"                    exceptions.LoadBalancerNotReady,"},{"line_number":88,"context_line":"                    exceptions.PortNotReady,"},{"line_number":89,"context_line":"                    exceptions.VIFPoolNotReady):"},{"line_number":90,"context_line":"                with excutils.save_and_reraise_exception() as ex:"},{"line_number":91,"context_line":"                    if self._sleep(deadline, attempt, ex.value):"},{"line_number":92,"context_line":"                        ex.reraise \u003d False"}],"source_content_type":"text/x-python","patch_set":10,"id":"f6ca9623_89aa73f9","line":89,"range":{"start_line":85,"start_character":0,"end_line":89,"end_character":48},"updated":"2021-10-07 11:40:36.000000000","message":"I\u0027m pretty sure the version before your change would also catch quota exceeded errors for networks, subnets, SGs and SG rules, so this is regressing a bit.","commit_id":"3b312c1d923921855112a6db1c2d44ee07c39a4e"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"0df09cff35c9a919330297224c58e98629c11f1f","unresolved":true,"context_lines":[{"line_number":102,"context_line":"                with excutils.save_and_reraise_exception() as ex:"},{"line_number":103,"context_line":"                    if self._sleep(deadline, attempt, ex.value):"},{"line_number":104,"context_line":"                        ex.reraise \u003d False"},{"line_number":105,"context_line":"                    else:"},{"line_number":106,"context_line":"                        raise"},{"line_number":107,"context_line":"            except self._exceptions:"},{"line_number":108,"context_line":"                with excutils.save_and_reraise_exception() as ex:"},{"line_number":109,"context_line":"                    if self._sleep(deadline, attempt, ex.value):"}],"source_content_type":"text/x-python","patch_set":14,"id":"d01d8440_7836a62e","line":106,"range":{"start_line":105,"start_character":0,"end_line":106,"end_character":29},"updated":"2021-10-21 16:34:56.000000000","message":"I don\u0027t think this is needed, excutils.save_and_reraise_exception will reraise it.","commit_id":"5e34956bb66004d1649d12da129285fe3fbf808f"}]}
