)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6c259a060edbdc61e51caf355c0cc0d3be6d3baf","unresolved":true,"context_lines":[{"line_number":12,"context_line":"too."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"When the heal_allocation command got the port resource request"},{"line_number":15,"context_line":"support in train, the only way to figure out the missing allocations was"},{"line_number":16,"context_line":"to dig into the placement RP tree directly. Since then nova gained"},{"line_number":17,"context_line":"support for interface attach with such ports and to support that"},{"line_number":18,"context_line":"placement gained support for in_tree filtering in allocation candidate"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"059022ac_d458c2bd","line":15,"range":{"start_line":15,"start_character":11,"end_line":15,"end_character":16},"updated":"2021-08-31 11:14:43.000000000","message":"Train","commit_id":"431be3d4fb9667b33dbb8424b97eacfffa90fea3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6c259a060edbdc61e51caf355c0cc0d3be6d3baf","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Balazs Gibizer \u003cbalazs.gibizer@est.tech\u003e"},{"line_number":5,"context_line":"CommitDate: 2021-08-27 18:04:53 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[nova-manage]support extended resource request"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The nova-manage placement heal_allocations CLI is capable of healing"},{"line_number":10,"context_line":"missing placement allocations due to port resource requests. To support"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"686f2eec_aa608b78","line":7,"range":{"start_line":7,"start_character":13,"end_line":7,"end_character":14},"updated":"2021-08-31 11:14:43.000000000","message":"nit: missing space","commit_id":"23619f887ab48948b6031d1319e58cd5db0736dc"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"303e7195bf746c38f6457da9fc90f03befde39e2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"c9d0b415_6d777ac7","updated":"2021-10-29 02:27:44.000000000","message":"I\u0027m definitely not an expert in the minimum bandwidth resource requests but this looks overall reasonable and comes with a lot of test coverage. I noticed a couple of minor things.","commit_id":"722c026f4f6461892bfc48a5e4c2c1345ee12bd2"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"855ba14333028e6669933959d94f65f8d8dbe721","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"846761a9_40e3ed9f","updated":"2021-10-20 09:49:51.000000000","message":"I\u0027ve re-proposed the spec to yoga as well","commit_id":"722c026f4f6461892bfc48a5e4c2c1345ee12bd2"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bf612c157ac089e19e78defe8dc6761164ca1379","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"3265f928_3e509f04","updated":"2021-10-29 10:21:53.000000000","message":"Thanks Melanie! I responded inline and fixed the comments.","commit_id":"f8dc8b630c28b4df56a8267c1b7c4b8b3848eaed"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0bb04e0773b2b495723558233f5e87f3f6a5d5cd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"1dfbd506_4ae687dc","updated":"2021-11-01 09:51:49.000000000","message":"One nit, but nothing block-worthy","commit_id":"90ed7e574d06a241297b859354237350cc6eb82a"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"34036711b56ac5f20b98a70b69813a4be2f8fe51","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"db6a7bb6_d6105072","updated":"2021-11-01 21:23:18.000000000","message":"Thanks gibi, LGTM","commit_id":"90ed7e574d06a241297b859354237350cc6eb82a"}],"doc/source/cli/nova-manage.rst":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6c259a060edbdc61e51caf355c0cc0d3be6d3baf","unresolved":true,"context_lines":[{"line_number":1220,"context_line":""},{"line_number":1221,"context_line":".. versionchanged:: 24.0.0 (Xena)"},{"line_number":1222,"context_line":""},{"line_number":1223,"context_line":"    Added support for healing port allocations if port-resource-request-groups"},{"line_number":1224,"context_line":"    neutron API extension is enabled and therefore ports can request multiple"},{"line_number":1225,"context_line":"    group of resources e.g. by using both guaranteed minimum bandwidth and"},{"line_number":1226,"context_line":"    guaranteed minimum packet rate QoS policy rules."}],"source_content_type":"text/x-rst","patch_set":12,"id":"e983a384_04c388b7","line":1223,"range":{"start_line":1223,"start_character":49,"end_line":1223,"end_character":78},"updated":"2021-08-31 11:14:43.000000000","message":"nit: ``code``","commit_id":"431be3d4fb9667b33dbb8424b97eacfffa90fea3"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"303e7195bf746c38f6457da9fc90f03befde39e2","unresolved":true,"context_lines":[{"line_number":1224,"context_line":""},{"line_number":1225,"context_line":"    Added :option:`--force` option."},{"line_number":1226,"context_line":""},{"line_number":1227,"context_line":".. versionchanged:: 24.0.0 (Xena)"},{"line_number":1228,"context_line":""},{"line_number":1229,"context_line":"    Added support for healing port allocations if port-resource-request-groups"},{"line_number":1230,"context_line":"    neutron API extension is enabled and therefore ports can request multiple"}],"source_content_type":"text/x-rst","patch_set":17,"id":"1d898dcc_5918f737","line":1227,"range":{"start_line":1227,"start_character":20,"end_line":1227,"end_character":33},"updated":"2021-10-29 02:27:44.000000000","message":"This needs to be 25.0.0 (Yoga) now?","commit_id":"722c026f4f6461892bfc48a5e4c2c1345ee12bd2"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bf612c157ac089e19e78defe8dc6761164ca1379","unresolved":false,"context_lines":[{"line_number":1224,"context_line":""},{"line_number":1225,"context_line":"    Added :option:`--force` option."},{"line_number":1226,"context_line":""},{"line_number":1227,"context_line":".. versionchanged:: 24.0.0 (Xena)"},{"line_number":1228,"context_line":""},{"line_number":1229,"context_line":"    Added support for healing port allocations if port-resource-request-groups"},{"line_number":1230,"context_line":"    neutron API extension is enabled and therefore ports can request multiple"}],"source_content_type":"text/x-rst","patch_set":17,"id":"a0fd9c00_6ce908a3","line":1227,"range":{"start_line":1227,"start_character":20,"end_line":1227,"end_character":33},"in_reply_to":"1d898dcc_5918f737","updated":"2021-10-29 10:21:53.000000000","message":"Done","commit_id":"722c026f4f6461892bfc48a5e4c2c1345ee12bd2"}],"nova/cmd/manage.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6c259a060edbdc61e51caf355c0cc0d3be6d3baf","unresolved":true,"context_lines":[{"line_number":1432,"context_line":"                instance_uuid\u003dinstance.uuid, error\u003dstr(e))"},{"line_number":1433,"context_line":""},{"line_number":1434,"context_line":"    @staticmethod"},{"line_number":1435,"context_line":"    def _has_request_but_no_allocation(port, neutron):"},{"line_number":1436,"context_line":"        has_res_req \u003d neutron_api.API()._has_resource_request("},{"line_number":1437,"context_line":"            context.get_admin_context(), port, neutron)"},{"line_number":1438,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3a31937d_84bd04d4","line":1435,"updated":"2021-08-31 11:14:43.000000000","message":"nit: great type annotations below. Any chance of getting them here?","commit_id":"431be3d4fb9667b33dbb8424b97eacfffa90fea3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6c259a060edbdc61e51caf355c0cc0d3be6d3baf","unresolved":true,"context_lines":[{"line_number":1470,"context_line":"        ports: ty.List[ty.Dict[str, ty.Any]]"},{"line_number":1471,"context_line":"    ) -\u003e ty.Tuple["},{"line_number":1472,"context_line":"            ty.Dict[str, ty.List[\u0027objects.RequestGroup\u0027]],"},{"line_number":1473,"context_line":"            \u0027objects.RequestLevelParams\u0027]:"},{"line_number":1474,"context_line":"        \"\"\"Collect RequestGroups and RequestLevelParams for all ports"},{"line_number":1475,"context_line":""},{"line_number":1476,"context_line":"        :param ctxt: the request context"}],"source_content_type":"text/x-python","patch_set":12,"id":"e9530f61_1e920f86","line":1473,"updated":"2021-08-31 11:14:43.000000000","message":"nit:\n\n    ) -\u003e ty.Tuple[\n        ty.Dict[str, ty.List[\u0027objects.RequestGroup\u0027]],\n        \u0027objects.RequestLevelParams\u0027,\n    ]:\n\n?","commit_id":"431be3d4fb9667b33dbb8424b97eacfffa90fea3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6c259a060edbdc61e51caf355c0cc0d3be6d3baf","unresolved":true,"context_lines":[{"line_number":1475,"context_line":""},{"line_number":1476,"context_line":"        :param ctxt: the request context"},{"line_number":1477,"context_line":"        :param ports: a list of port dicts"},{"line_number":1478,"context_line":"        :raises"},{"line_number":1479,"context_line":"        :returns: A two tuple where the first item is a dict mapping port"},{"line_number":1480,"context_line":"            uuids to a list of request groups coming from that port, the"},{"line_number":1481,"context_line":"            second item is a combined RequestLevelParams object from all ports."}],"source_content_type":"text/x-python","patch_set":12,"id":"66660799_523bb148","line":1478,"updated":"2021-08-31 11:14:43.000000000","message":"incomplete?","commit_id":"431be3d4fb9667b33dbb8424b97eacfffa90fea3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6c259a060edbdc61e51caf355c0cc0d3be6d3baf","unresolved":true,"context_lines":[{"line_number":1484,"context_line":"        request_level_params \u003d objects.RequestLevelParams()"},{"line_number":1485,"context_line":"        extended_res_req \u003d ("},{"line_number":1486,"context_line":"            neutron_api.API().has_extended_resource_request_extension("},{"line_number":1487,"context_line":"                ctxt)"},{"line_number":1488,"context_line":"        )"},{"line_number":1489,"context_line":""},{"line_number":1490,"context_line":"        for port in ports:"}],"source_content_type":"text/x-python","patch_set":12,"id":"13aa8c46_9b9d51b0","line":1487,"updated":"2021-08-31 11:14:43.000000000","message":"(thinking out loud) We\u0027re initializing the API in quite a few places here. At what point does it become more reasonable to actually create it one in \u0027__init__\u0027 and change these from staticmethod to normal object methods?","commit_id":"431be3d4fb9667b33dbb8424b97eacfffa90fea3"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"303e7195bf746c38f6457da9fc90f03befde39e2","unresolved":true,"context_lines":[{"line_number":1502,"context_line":""},{"line_number":1503,"context_line":"        :param ctxt: the request context"},{"line_number":1504,"context_line":"        :param ports: a list of port dicts"},{"line_number":1505,"context_line":"        :raises"},{"line_number":1506,"context_line":"        :returns: A two tuple where the first item is a dict mapping port"},{"line_number":1507,"context_line":"            uuids to a list of request groups coming from that port, the"},{"line_number":1508,"context_line":"            second item is a combined RequestLevelParams object from all ports."}],"source_content_type":"text/x-python","patch_set":17,"id":"a931d77e_0fc1a9cf","line":1505,"updated":"2021-10-29 02:27:44.000000000","message":"Is this supposed to be present if it\u0027s empty? I\u0027m assuming so but I haven\u0027t seen this before.","commit_id":"722c026f4f6461892bfc48a5e4c2c1345ee12bd2"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bf612c157ac089e19e78defe8dc6761164ca1379","unresolved":false,"context_lines":[{"line_number":1502,"context_line":""},{"line_number":1503,"context_line":"        :param ctxt: the request context"},{"line_number":1504,"context_line":"        :param ports: a list of port dicts"},{"line_number":1505,"context_line":"        :raises"},{"line_number":1506,"context_line":"        :returns: A two tuple where the first item is a dict mapping port"},{"line_number":1507,"context_line":"            uuids to a list of request groups coming from that port, the"},{"line_number":1508,"context_line":"            second item is a combined RequestLevelParams object from all ports."}],"source_content_type":"text/x-python","patch_set":17,"id":"09feb725_f0c46f5e","line":1505,"in_reply_to":"a931d77e_0fc1a9cf","updated":"2021-10-29 10:21:53.000000000","message":"Nope, I think this you remainder of the refactoring I made. Removed.","commit_id":"722c026f4f6461892bfc48a5e4c2c1345ee12bd2"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"303e7195bf746c38f6457da9fc90f03befde39e2","unresolved":true,"context_lines":[{"line_number":1673,"context_line":"            request_groups, req_lvl_params, group_policy)"},{"line_number":1674,"context_line":"        res \u003d placement.get_allocation_candidates(ctxt, rr)"},{"line_number":1675,"context_line":"        if not res:"},{"line_number":1676,"context_line":"            raise exception.PlacementAPIConnectFailure()"},{"line_number":1677,"context_line":"        alloc_reqs, __, __ \u003d res"},{"line_number":1678,"context_line":""},{"line_number":1679,"context_line":"        if not alloc_reqs:"}],"source_content_type":"text/x-python","patch_set":17,"id":"c72928bc_41ebbe47","line":1676,"range":{"start_line":1676,"start_character":28,"end_line":1676,"end_character":54},"updated":"2021-10-29 02:27:44.000000000","message":"This could be a misleading exception if the failure is for any reason other than failure to communicate with the placement API ... but maybe there is some precedent for this that I don\u0027t know about.\n\nAlso, looking at the code for get_allocation_candidates, if there is a problem retrieving the allocation candidates, it will return (None, None, None) [1] which would not evaluate to False AFAICT. So I think the \"if not res:\" needs to be a different condition. Not sure if there\u0027s any other option than \"if res \u003d\u003d (None, None, None)\".\n\n[1] https://github.com/openstack/nova/blob/171138146a648d22474b7021ac730e26f03455f8/nova/scheduler/client/report.py#L314","commit_id":"722c026f4f6461892bfc48a5e4c2c1345ee12bd2"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e6b9f7f9affc32bfaa1d276a8777759809faf7c3","unresolved":false,"context_lines":[{"line_number":1673,"context_line":"            request_groups, req_lvl_params, group_policy)"},{"line_number":1674,"context_line":"        res \u003d placement.get_allocation_candidates(ctxt, rr)"},{"line_number":1675,"context_line":"        if not res:"},{"line_number":1676,"context_line":"            raise exception.PlacementAPIConnectFailure()"},{"line_number":1677,"context_line":"        alloc_reqs, __, __ \u003d res"},{"line_number":1678,"context_line":""},{"line_number":1679,"context_line":"        if not alloc_reqs:"}],"source_content_type":"text/x-python","patch_set":17,"id":"68f46e82_0ddae18a","line":1676,"range":{"start_line":1676,"start_character":28,"end_line":1676,"end_character":54},"in_reply_to":"674e9a0b_c4cebf96","updated":"2021-11-01 08:22:46.000000000","message":"Done","commit_id":"722c026f4f6461892bfc48a5e4c2c1345ee12bd2"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f934a1ec8e68f3f8ba5d438ff20f1db0b15356fd","unresolved":false,"context_lines":[{"line_number":1673,"context_line":"            request_groups, req_lvl_params, group_policy)"},{"line_number":1674,"context_line":"        res \u003d placement.get_allocation_candidates(ctxt, rr)"},{"line_number":1675,"context_line":"        if not res:"},{"line_number":1676,"context_line":"            raise exception.PlacementAPIConnectFailure()"},{"line_number":1677,"context_line":"        alloc_reqs, __, __ \u003d res"},{"line_number":1678,"context_line":""},{"line_number":1679,"context_line":"        if not alloc_reqs:"}],"source_content_type":"text/x-python","patch_set":17,"id":"674e9a0b_c4cebf96","line":1676,"range":{"start_line":1676,"start_character":28,"end_line":1676,"end_character":54},"in_reply_to":"c61be492_29553b2f","updated":"2021-10-29 21:12:34.000000000","message":"Oh, wow, that is quite obscure, at least for me. I think it would be worthy of a code comment as it would make it clear it is about @safe_connect.\n\nIIRC there was a desire to remove @safe_connect from the code altogether eventually, if that happened, we would need to change the logic here. (Just another reason why I think having a code comment would be helpful.)","commit_id":"722c026f4f6461892bfc48a5e4c2c1345ee12bd2"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bf612c157ac089e19e78defe8dc6761164ca1379","unresolved":false,"context_lines":[{"line_number":1673,"context_line":"            request_groups, req_lvl_params, group_policy)"},{"line_number":1674,"context_line":"        res \u003d placement.get_allocation_candidates(ctxt, rr)"},{"line_number":1675,"context_line":"        if not res:"},{"line_number":1676,"context_line":"            raise exception.PlacementAPIConnectFailure()"},{"line_number":1677,"context_line":"        alloc_reqs, __, __ \u003d res"},{"line_number":1678,"context_line":""},{"line_number":1679,"context_line":"        if not alloc_reqs:"}],"source_content_type":"text/x-python","patch_set":17,"id":"c61be492_29553b2f","line":1676,"range":{"start_line":1676,"start_character":28,"end_line":1676,"end_character":54},"in_reply_to":"c72928bc_41ebbe47","updated":"2021-10-29 10:21:53.000000000","message":"It is unfortunately complicated. \n\nThere is a safe_connect decorator on get_allocation_candidates that returns None if the connection failed [1].\n\nIn case of any other failure that is actually reported by placement, the return value will be (None, None, None). So both the placement-returned-error and the no-allocation-candidate-exists cases are handled at L1677-L1679 based on the returned tree tuple. While the connection failure handled here.\n\nSo I think the logic and the raised exception is correct here.\n\n\n[1] https://github.com/openstack/nova/blob/171138146a648d22474b7021ac730e26f03455f8/nova/scheduler/client/report.py#L74-L93","commit_id":"722c026f4f6461892bfc48a5e4c2c1345ee12bd2"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"303e7195bf746c38f6457da9fc90f03befde39e2","unresolved":true,"context_lines":[{"line_number":2246,"context_line":"                except ("},{"line_number":2247,"context_line":"                    exception.AllocationCreateFailed,"},{"line_number":2248,"context_line":"                    exception.AllocationUpdateFailed,"},{"line_number":2249,"context_line":"                    exception.PlacementAPIConnectFailure"},{"line_number":2250,"context_line":"                ) as e:"},{"line_number":2251,"context_line":"                    print(e.format_message())"},{"line_number":2252,"context_line":"                    return 3"}],"source_content_type":"text/x-python","patch_set":17,"id":"933e8463_f346433f","line":2249,"range":{"start_line":2249,"start_character":30,"end_line":2249,"end_character":56},"updated":"2021-10-29 02:27:44.000000000","message":"Ah, I guess this is why.","commit_id":"722c026f4f6461892bfc48a5e4c2c1345ee12bd2"}],"nova/tests/functional/test_nova_manage.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"303e7195bf746c38f6457da9fc90f03befde39e2","unresolved":true,"context_lines":[{"line_number":1598,"context_line":"        with mock.patch("},{"line_number":1599,"context_line":"            \u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1600,"context_line":"            \u0027get_allocation_candidates\u0027,"},{"line_number":1601,"context_line":"            return_value\u003dNone"},{"line_number":1602,"context_line":"        ):"},{"line_number":1603,"context_line":"            result \u003d self.cli.heal_allocations(verbose\u003dTrue, max_count\u003d2)"},{"line_number":1604,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"1b3bb263_2ce65d32","line":1601,"range":{"start_line":1601,"start_character":25,"end_line":1601,"end_character":29},"updated":"2021-10-29 02:27:44.000000000","message":"I think this must be wrong based on the code (None, None, None).","commit_id":"722c026f4f6461892bfc48a5e4c2c1345ee12bd2"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bf612c157ac089e19e78defe8dc6761164ca1379","unresolved":false,"context_lines":[{"line_number":1598,"context_line":"        with mock.patch("},{"line_number":1599,"context_line":"            \u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1600,"context_line":"            \u0027get_allocation_candidates\u0027,"},{"line_number":1601,"context_line":"            return_value\u003dNone"},{"line_number":1602,"context_line":"        ):"},{"line_number":1603,"context_line":"            result \u003d self.cli.heal_allocations(verbose\u003dTrue, max_count\u003d2)"},{"line_number":1604,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"133f7260_2831d140","line":1601,"range":{"start_line":1601,"start_character":25,"end_line":1601,"end_character":29},"in_reply_to":"1b3bb263_2ce65d32","updated":"2021-10-29 10:21:53.000000000","message":"No, it is correctly simulates the behavior of the safe_connect decorator. See my response on the comment in the code side.","commit_id":"722c026f4f6461892bfc48a5e4c2c1345ee12bd2"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0bb04e0773b2b495723558233f5e87f3f6a5d5cd","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":3,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":4,"context_line":"#    a copy of the License at"},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":19,"id":"73abc055_9a5df247","line":2,"updated":"2021-11-01 09:51:49.000000000","message":"Whoops","commit_id":"90ed7e574d06a241297b859354237350cc6eb82a"}]}
