)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"c0bad5f64ad9a0b9686c09be642bc11e77fbd6ee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"93c02700_ff7c8bb5","updated":"2026-03-16 16:43:12.000000000","message":"recheck\n\nreleases|tarballs.openstack.org etc was down for a period of time.","commit_id":"1b5d118121233dd7d1885787fa5e3eb05125b683"}],"neutron/db/segments_db.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"2b62c64983749fc770893637d3cc65d2a33e169a","unresolved":true,"context_lines":[{"line_number":77,"context_line":"             {\u0027id\u0027: segment_id, \u0027segmentation_id\u0027: segmentation_id})"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"def get_network_segments(context, network_id, filter_dynamic\u003dFalse):"},{"line_number":81,"context_line":"    return get_networks_segments("},{"line_number":82,"context_line":"        context, [network_id], filter_dynamic)[network_id]"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"def get_networks_segments(context, network_ids, filter_dynamic\u003dFalse):"},{"line_number":86,"context_line":"    if not network_ids:"},{"line_number":87,"context_line":"        return {}"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    with db_api.CONTEXT_READER.using(context):"},{"line_number":90,"context_line":"        filters \u003d {"},{"line_number":91,"context_line":"            \u0027network_id\u0027: network_ids,"},{"line_number":92,"context_line":"        }"},{"line_number":93,"context_line":"        if filter_dynamic is not None:"},{"line_number":94,"context_line":"            filters[\u0027is_dynamic\u0027] \u003d filter_dynamic"},{"line_number":95,"context_line":"        objs \u003d network_obj.NetworkSegment.get_objects(context, **filters)"},{"line_number":96,"context_line":"        result \u003d {net_id: [] for net_id in network_ids}"},{"line_number":97,"context_line":"        for record in objs:"},{"line_number":98,"context_line":"            result[record.network_id].append(_make_segment_dict(record))"},{"line_number":99,"context_line":"        return result"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"def get_segment_by_id(context, segment_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"f4684c91_7b510f4a","line":99,"range":{"start_line":80,"start_character":0,"end_line":99,"end_character":21},"updated":"2026-03-18 11:37:52.000000000","message":"Could you add one/two docstring to make it clear for future readers/debuggers that filter_dynamic can be a boolean or None and what that means? I understand that you haven\u0027t touched these methods, but it is a good time to add some context for decades old code.","commit_id":"1b5d118121233dd7d1885787fa5e3eb05125b683"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"0cc935b6635ec3ea41560454c70267c0086ba4ea","unresolved":true,"context_lines":[{"line_number":77,"context_line":"             {\u0027id\u0027: segment_id, \u0027segmentation_id\u0027: segmentation_id})"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"def get_network_segments(context, network_id, filter_dynamic\u003dFalse):"},{"line_number":81,"context_line":"    return get_networks_segments("},{"line_number":82,"context_line":"        context, [network_id], filter_dynamic)[network_id]"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"def get_networks_segments(context, network_ids, filter_dynamic\u003dFalse):"},{"line_number":86,"context_line":"    if not network_ids:"},{"line_number":87,"context_line":"        return {}"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    with db_api.CONTEXT_READER.using(context):"},{"line_number":90,"context_line":"        filters \u003d {"},{"line_number":91,"context_line":"            \u0027network_id\u0027: network_ids,"},{"line_number":92,"context_line":"        }"},{"line_number":93,"context_line":"        if filter_dynamic is not None:"},{"line_number":94,"context_line":"            filters[\u0027is_dynamic\u0027] \u003d filter_dynamic"},{"line_number":95,"context_line":"        objs \u003d network_obj.NetworkSegment.get_objects(context, **filters)"},{"line_number":96,"context_line":"        result \u003d {net_id: [] for net_id in network_ids}"},{"line_number":97,"context_line":"        for record in objs:"},{"line_number":98,"context_line":"            result[record.network_id].append(_make_segment_dict(record))"},{"line_number":99,"context_line":"        return result"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"def get_segment_by_id(context, segment_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"724c313b_b84a67cc","line":99,"range":{"start_line":80,"start_character":0,"end_line":99,"end_character":21},"in_reply_to":"4cecad1a_68fad375","updated":"2026-03-19 09:48:46.000000000","message":"thanks, good for me","commit_id":"1b5d118121233dd7d1885787fa5e3eb05125b683"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"e8a2d55d792e85624d6c0e881a1c94da3ce472f1","unresolved":true,"context_lines":[{"line_number":77,"context_line":"             {\u0027id\u0027: segment_id, \u0027segmentation_id\u0027: segmentation_id})"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"def get_network_segments(context, network_id, filter_dynamic\u003dFalse):"},{"line_number":81,"context_line":"    return get_networks_segments("},{"line_number":82,"context_line":"        context, [network_id], filter_dynamic)[network_id]"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"def get_networks_segments(context, network_ids, filter_dynamic\u003dFalse):"},{"line_number":86,"context_line":"    if not network_ids:"},{"line_number":87,"context_line":"        return {}"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    with db_api.CONTEXT_READER.using(context):"},{"line_number":90,"context_line":"        filters \u003d {"},{"line_number":91,"context_line":"            \u0027network_id\u0027: network_ids,"},{"line_number":92,"context_line":"        }"},{"line_number":93,"context_line":"        if filter_dynamic is not None:"},{"line_number":94,"context_line":"            filters[\u0027is_dynamic\u0027] \u003d filter_dynamic"},{"line_number":95,"context_line":"        objs \u003d network_obj.NetworkSegment.get_objects(context, **filters)"},{"line_number":96,"context_line":"        result \u003d {net_id: [] for net_id in network_ids}"},{"line_number":97,"context_line":"        for record in objs:"},{"line_number":98,"context_line":"            result[record.network_id].append(_make_segment_dict(record))"},{"line_number":99,"context_line":"        return result"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"def get_segment_by_id(context, segment_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"4cecad1a_68fad375","line":99,"range":{"start_line":80,"start_character":0,"end_line":99,"end_character":21},"in_reply_to":"f4684c91_7b510f4a","updated":"2026-03-19 08:33:57.000000000","message":"Right, the tri-state logic might not be obvious. I proposed the docstring changes as a separate change: https://review.opendev.org/c/openstack/neutron/+/981214","commit_id":"1b5d118121233dd7d1885787fa5e3eb05125b683"}],"neutron/plugins/ml2/driver_context.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e4661d9c66e7c8afb1dd19b8d52a9481e1436081","unresolved":true,"context_lines":[{"line_number":79,"context_line":"        self._original_network \u003d original_network"},{"line_number":80,"context_line":"        self._segments \u003d segments_db.get_network_segments("},{"line_number":81,"context_line":"            plugin_context, network[\u0027id\u0027],"},{"line_number":82,"context_line":"            filter_dynamic\u003dNone) if segments is None else segments"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @property"},{"line_number":85,"context_line":"    def current(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"2b9719c0_113078f1","line":82,"updated":"2026-03-16 20:57:24.000000000","message":"Makes sense, because an invocation should be able to invoke and leverage full segment data if a plugin is having to unwind configuration.","commit_id":"1b5d118121233dd7d1885787fa5e3eb05125b683"}]}
