)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"499331a526696832945d3f9da5630fa074c72599","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"ce81992e_e8adb74a","updated":"2026-03-20 20:29:12.000000000","message":"Thanks for the patch, just one comment.","commit_id":"a362cbced16e163f64f06df37c3761de3b46ae04"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"36c133d2a29a76d7cd30852e787cb7f0e75f5815","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"05ed95ee_004d14fe","updated":"2026-03-31 04:40:04.000000000","message":"Really just nits...","commit_id":"085fd34e2e4636263bd67a782bee0d363c7e4000"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"ec46f82bd85816e33d5956d4001d8a89b1ccf8a3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"59a60400_03a7b4be","updated":"2026-03-29 15:53:14.000000000","message":"recheck","commit_id":"085fd34e2e4636263bd67a782bee0d363c7e4000"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"67d05b6d06e454506de63b15f786f1dee5ffad41","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"c74ca192_ec56a446","updated":"2026-03-30 08:10:18.000000000","message":"recheck tempest-integrated-networking","commit_id":"085fd34e2e4636263bd67a782bee0d363c7e4000"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"bef5d2e4a46e677a910e74e3e03c6eb91df57315","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3fa886c7_a14ce325","in_reply_to":"05ed95ee_004d14fe","updated":"2026-03-31 08:54:27.000000000","message":"They\u0027re good points the code is cleaner with them.","commit_id":"085fd34e2e4636263bd67a782bee0d363c7e4000"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"0bb56205c5568de11319beea140380876635ac26","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"b9006c8e_5339e46b","updated":"2026-04-10 15:59:26.000000000","message":"Just nits, don\u0027t need to fix","commit_id":"e37278b32ae5464d84b1295e7e3c0c9ab8b5053f"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/maintenance.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1d704b8653a7b808c378715d2e87171b1ea48fb6","unresolved":true,"context_lines":[{"line_number":84,"context_line":"            return f(self, *args, **kwargs)"},{"line_number":85,"context_line":"        return decorator"},{"line_number":86,"context_line":"    return wrapper"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def log_maintenance_task(func):"},{"line_number":89,"context_line":"    @functools.wraps(func)"},{"line_number":90,"context_line":"    def wrapper(*args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"6a206857_a231a3ae","line":87,"updated":"2026-03-20 20:57:15.000000000","message":"I\u0027m not sure why this is not failing, but there should be 2 empty lines here.","commit_id":"a362cbced16e163f64f06df37c3761de3b46ae04"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"1b04b57619dde32b8586f792f9a9e3ec252eeb28","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            return f(self, *args, **kwargs)"},{"line_number":85,"context_line":"        return decorator"},{"line_number":86,"context_line":"    return wrapper"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def log_maintenance_task(func):"},{"line_number":89,"context_line":"    @functools.wraps(func)"},{"line_number":90,"context_line":"    def wrapper(*args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"e80dd748_59ba82a4","line":87,"in_reply_to":"6a206857_a231a3ae","updated":"2026-03-26 21:36:33.000000000","message":"Done","commit_id":"a362cbced16e163f64f06df37c3761de3b46ae04"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"75db663f2f8d581020a0de640df4dc4de4bd2c19","unresolved":true,"context_lines":[{"line_number":84,"context_line":"            return f(self, *args, **kwargs)"},{"line_number":85,"context_line":"        return decorator"},{"line_number":86,"context_line":"    return wrapper"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def log_maintenance_task(func):"},{"line_number":89,"context_line":"    @functools.wraps(func)"},{"line_number":90,"context_line":"    def wrapper(*args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"75e40045_0b128432","line":87,"in_reply_to":"6a206857_a231a3ae","updated":"2026-03-23 02:40:59.000000000","message":"See Stephen Finucane\u0027s flake8 patch, some things have been disabled accidentally for a while.","commit_id":"a362cbced16e163f64f06df37c3761de3b46ae04"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"499331a526696832945d3f9da5630fa074c72599","unresolved":true,"context_lines":[{"line_number":88,"context_line":"def log_maintenance_task(func):"},{"line_number":89,"context_line":"    @functools.wraps(func)"},{"line_number":90,"context_line":"    def wrapper(*args, **kwargs):"},{"line_number":91,"context_line":"        LOG.debug(\"Starting OVN maintenance task: %s\", func.__name__)"},{"line_number":92,"context_line":"        watch \u003d timeutils.StopWatch()"},{"line_number":93,"context_line":"        watch.start()"},{"line_number":94,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"632606d9_02a7b761","line":91,"updated":"2026-03-20 20:29:12.000000000","message":"So maybe this wrapper can take an optional string so we don\u0027t lose what the method is doing?\n\nFor example:\n\n\"update_lrouter_ports_ext_ids_name_prefix\" is pretty cryptic, but:\n\n\"Check missing prefix router_name in external_ids of LRPs\" is not.\n\nEven printing both would be fine, something like:\n\n\"Starting OVN maintanance task (%s): %s\", __name__, the_string\n\nThoughts?","commit_id":"a362cbced16e163f64f06df37c3761de3b46ae04"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1d704b8653a7b808c378715d2e87171b1ea48fb6","unresolved":true,"context_lines":[{"line_number":88,"context_line":"def log_maintenance_task(func):"},{"line_number":89,"context_line":"    @functools.wraps(func)"},{"line_number":90,"context_line":"    def wrapper(*args, **kwargs):"},{"line_number":91,"context_line":"        LOG.debug(\"Starting OVN maintenance task: %s\", func.__name__)"},{"line_number":92,"context_line":"        watch \u003d timeutils.StopWatch()"},{"line_number":93,"context_line":"        watch.start()"},{"line_number":94,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"b3e793b6_33d31494","line":91,"in_reply_to":"632606d9_02a7b761","updated":"2026-03-20 20:57:15.000000000","message":"Agree with this. Some methods currently have their own messages that we could keep.\n\nBecause of this, the task name should be quoted:\n```\n\"Starting OVN maintenance task: \u0027%s\u0027\", func.__name__\n\"OVN maintenance task \u0027%(name)s\u0027 finished in %(time).3f seconds\"\n\"OVN maintenance task \u0027%(name)s\u0027 failed after %(time).3f seconds\"\n```","commit_id":"a362cbced16e163f64f06df37c3761de3b46ae04"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"1b04b57619dde32b8586f792f9a9e3ec252eeb28","unresolved":false,"context_lines":[{"line_number":88,"context_line":"def log_maintenance_task(func):"},{"line_number":89,"context_line":"    @functools.wraps(func)"},{"line_number":90,"context_line":"    def wrapper(*args, **kwargs):"},{"line_number":91,"context_line":"        LOG.debug(\"Starting OVN maintenance task: %s\", func.__name__)"},{"line_number":92,"context_line":"        watch \u003d timeutils.StopWatch()"},{"line_number":93,"context_line":"        watch.start()"},{"line_number":94,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"8a987d13_e70d1f23","line":91,"in_reply_to":"b3e793b6_33d31494","updated":"2026-03-26 21:36:33.000000000","message":"Acknowledged","commit_id":"a362cbced16e163f64f06df37c3761de3b46ae04"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"75db663f2f8d581020a0de640df4dc4de4bd2c19","unresolved":true,"context_lines":[{"line_number":86,"context_line":"    return wrapper"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"def log_maintenance_task(func\u003dNone, *, start_messages\u003d()):"},{"line_number":90,"context_line":"    \"\"\"Wrap a maintenance task with timing logs."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    Use ``@log_maintenance_task`` or pass optional ``start_messages``: an"}],"source_content_type":"text/x-python","patch_set":2,"id":"71e27132_7bd8840e","line":89,"updated":"2026-03-23 02:40:59.000000000","message":"Seems like should be start_message\u003dNone ?","commit_id":"c5eb090fc7f8e69e12178bf032d3885ffde9d219"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"1f3206719211df20235f8957c474f6b7e2feec0f","unresolved":true,"context_lines":[{"line_number":86,"context_line":"    return wrapper"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"def log_maintenance_task(func\u003dNone, *, start_messages\u003d()):"},{"line_number":90,"context_line":"    \"\"\"Wrap a maintenance task with timing logs."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    Use ``@log_maintenance_task`` or pass optional ``start_messages``: an"}],"source_content_type":"text/x-python","patch_set":2,"id":"b938eef7_b543aa99","line":89,"in_reply_to":"142052a6_7095324b","updated":"2026-03-26 23:31:30.000000000","message":"I think it should only take a single start message, so None can be the default","commit_id":"c5eb090fc7f8e69e12178bf032d3885ffde9d219"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"1b04b57619dde32b8586f792f9a9e3ec252eeb28","unresolved":true,"context_lines":[{"line_number":86,"context_line":"    return wrapper"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"def log_maintenance_task(func\u003dNone, *, start_messages\u003d()):"},{"line_number":90,"context_line":"    \"\"\"Wrap a maintenance task with timing logs."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    Use ``@log_maintenance_task`` or pass optional ``start_messages``: an"}],"source_content_type":"text/x-python","patch_set":2,"id":"142052a6_7095324b","line":89,"in_reply_to":"71e27132_7bd8840e","updated":"2026-03-26 21:36:33.000000000","message":"Used an empty tuple as the messages are read only and this removes the need for any empty list checks, if this seems over kill I can switch to a list or just one String?","commit_id":"c5eb090fc7f8e69e12178bf032d3885ffde9d219"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"c69c768f0d787fe26fb603282128477e27c1f123","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    return wrapper"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"def log_maintenance_task(func\u003dNone, *, start_messages\u003d()):"},{"line_number":90,"context_line":"    \"\"\"Wrap a maintenance task with timing logs."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    Use ``@log_maintenance_task`` or pass optional ``start_messages``: an"}],"source_content_type":"text/x-python","patch_set":2,"id":"75c4f693_11cf873a","line":89,"in_reply_to":"b938eef7_b543aa99","updated":"2026-03-27 14:49:49.000000000","message":"I\u0027ll make that change","commit_id":"c5eb090fc7f8e69e12178bf032d3885ffde9d219"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"75db663f2f8d581020a0de640df4dc4de4bd2c19","unresolved":true,"context_lines":[{"line_number":100,"context_line":"        @functools.wraps(f)"},{"line_number":101,"context_line":"        def wrapper(*args, **kwargs):"},{"line_number":102,"context_line":"            LOG.debug(\"Starting OVN maintenance task: %s\", f.__name__)"},{"line_number":103,"context_line":"            for msg in start_messages:"},{"line_number":104,"context_line":"                LOG.debug(\"OVN maintenance task: %s\", msg)"},{"line_number":105,"context_line":"            watch \u003d timeutils.StopWatch()"},{"line_number":106,"context_line":"            watch.start()"}],"source_content_type":"text/x-python","patch_set":2,"id":"ec687ddc_55342fdc","line":103,"updated":"2026-03-23 02:40:59.000000000","message":"Are there callers passing multiple messages?","commit_id":"c5eb090fc7f8e69e12178bf032d3885ffde9d219"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"1b04b57619dde32b8586f792f9a9e3ec252eeb28","unresolved":true,"context_lines":[{"line_number":100,"context_line":"        @functools.wraps(f)"},{"line_number":101,"context_line":"        def wrapper(*args, **kwargs):"},{"line_number":102,"context_line":"            LOG.debug(\"Starting OVN maintenance task: %s\", f.__name__)"},{"line_number":103,"context_line":"            for msg in start_messages:"},{"line_number":104,"context_line":"                LOG.debug(\"OVN maintenance task: %s\", msg)"},{"line_number":105,"context_line":"            watch \u003d timeutils.StopWatch()"},{"line_number":106,"context_line":"            watch.start()"}],"source_content_type":"text/x-python","patch_set":2,"id":"387ab380_e73c89a9","line":103,"in_reply_to":"ec687ddc_55342fdc","updated":"2026-03-26 21:36:33.000000000","message":"They have the option to pass multiple messages I thought it would keep the logs more readable if needed. I\u0027m happy to remove if you think it\u0027s not needed?","commit_id":"c5eb090fc7f8e69e12178bf032d3885ffde9d219"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"75db663f2f8d581020a0de640df4dc4de4bd2c19","unresolved":true,"context_lines":[{"line_number":107,"context_line":"            try:"},{"line_number":108,"context_line":"                result \u003d f(*args, **kwargs)"},{"line_number":109,"context_line":"            except periodics.NeverAgain:"},{"line_number":110,"context_line":"                watch.stop()"},{"line_number":111,"context_line":"                LOG.info("},{"line_number":112,"context_line":"                    \"OVN maintenance task %(name)s finished in \""},{"line_number":113,"context_line":"                    \"%(time).3f seconds\","},{"line_number":114,"context_line":"                    {\u0027name\u0027: f.__name__, \u0027time\u0027: watch.elapsed()})"},{"line_number":115,"context_line":"                raise"},{"line_number":116,"context_line":"            except Exception:"},{"line_number":117,"context_line":"                watch.stop()"}],"source_content_type":"text/x-python","patch_set":2,"id":"b6c129de_1ebc1b23","line":114,"range":{"start_line":110,"start_character":16,"end_line":114,"end_character":66},"updated":"2026-03-23 02:40:59.000000000","message":"nit: to reduce code duplication with below, could just use a variable and raise below if set:\n\nL106-ish:\nnever_again \u003d False\n\nnever_again \u003d True\npass","commit_id":"c5eb090fc7f8e69e12178bf032d3885ffde9d219"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"1b04b57619dde32b8586f792f9a9e3ec252eeb28","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            try:"},{"line_number":108,"context_line":"                result \u003d f(*args, **kwargs)"},{"line_number":109,"context_line":"            except periodics.NeverAgain:"},{"line_number":110,"context_line":"                watch.stop()"},{"line_number":111,"context_line":"                LOG.info("},{"line_number":112,"context_line":"                    \"OVN maintenance task %(name)s finished in \""},{"line_number":113,"context_line":"                    \"%(time).3f seconds\","},{"line_number":114,"context_line":"                    {\u0027name\u0027: f.__name__, \u0027time\u0027: watch.elapsed()})"},{"line_number":115,"context_line":"                raise"},{"line_number":116,"context_line":"            except Exception:"},{"line_number":117,"context_line":"                watch.stop()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3401e28f_30bdb7c0","line":114,"range":{"start_line":110,"start_character":16,"end_line":114,"end_character":66},"in_reply_to":"b6c129de_1ebc1b23","updated":"2026-03-26 21:36:33.000000000","message":"Done","commit_id":"c5eb090fc7f8e69e12178bf032d3885ffde9d219"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"75db663f2f8d581020a0de640df4dc4de4bd2c19","unresolved":true,"context_lines":[{"line_number":124,"context_line":"            LOG.info("},{"line_number":125,"context_line":"                \"OVN maintenance task %(name)s finished in \""},{"line_number":126,"context_line":"                \"%(time).3f seconds\","},{"line_number":127,"context_line":"                {\u0027name\u0027: f.__name__, \u0027time\u0027: watch.elapsed()})"},{"line_number":128,"context_line":"            return result"},{"line_number":129,"context_line":"        return wrapper"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9715db5f_792ef9bf","line":127,"updated":"2026-03-23 02:40:59.000000000","message":"if never_again:\n    raise","commit_id":"c5eb090fc7f8e69e12178bf032d3885ffde9d219"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"1b04b57619dde32b8586f792f9a9e3ec252eeb28","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            LOG.info("},{"line_number":125,"context_line":"                \"OVN maintenance task %(name)s finished in \""},{"line_number":126,"context_line":"                \"%(time).3f seconds\","},{"line_number":127,"context_line":"                {\u0027name\u0027: f.__name__, \u0027time\u0027: watch.elapsed()})"},{"line_number":128,"context_line":"            return result"},{"line_number":129,"context_line":"        return wrapper"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"4e987225_8bced5e0","line":127,"in_reply_to":"9715db5f_792ef9bf","updated":"2026-03-26 21:36:33.000000000","message":"Done","commit_id":"c5eb090fc7f8e69e12178bf032d3885ffde9d219"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"75db663f2f8d581020a0de640df4dc4de4bd2c19","unresolved":true,"context_lines":[{"line_number":423,"context_line":"    @has_lock_periodic(spacing\u003dovn_const.DB_CONSISTENCY_CHECK_INTERVAL,"},{"line_number":424,"context_line":"                       run_immediately\u003dTrue)"},{"line_number":425,"context_line":"    @log_maintenance_task(start_messages\u003d("},{"line_number":426,"context_line":"                         \u0027Synchronizing Neutronand OVN databases started\u0027"},{"line_number":427,"context_line":"                         ))"},{"line_number":428,"context_line":"    def check_for_inconsistencies(self):"},{"line_number":429,"context_line":"        admin_context \u003d n_context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a44a9e6_74fcd8c3","line":426,"range":{"start_line":426,"start_character":40,"end_line":426,"end_character":50},"updated":"2026-03-23 02:40:59.000000000","message":"Missing space","commit_id":"c5eb090fc7f8e69e12178bf032d3885ffde9d219"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"1b04b57619dde32b8586f792f9a9e3ec252eeb28","unresolved":false,"context_lines":[{"line_number":423,"context_line":"    @has_lock_periodic(spacing\u003dovn_const.DB_CONSISTENCY_CHECK_INTERVAL,"},{"line_number":424,"context_line":"                       run_immediately\u003dTrue)"},{"line_number":425,"context_line":"    @log_maintenance_task(start_messages\u003d("},{"line_number":426,"context_line":"                         \u0027Synchronizing Neutronand OVN databases started\u0027"},{"line_number":427,"context_line":"                         ))"},{"line_number":428,"context_line":"    def check_for_inconsistencies(self):"},{"line_number":429,"context_line":"        admin_context \u003d n_context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":2,"id":"1b8a0980_95d3ae35","line":426,"range":{"start_line":426,"start_character":40,"end_line":426,"end_character":50},"in_reply_to":"5a44a9e6_74fcd8c3","updated":"2026-03-26 21:36:33.000000000","message":"Acknowledged","commit_id":"c5eb090fc7f8e69e12178bf032d3885ffde9d219"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"75db663f2f8d581020a0de640df4dc4de4bd2c19","unresolved":true,"context_lines":[{"line_number":539,"context_line":"        spacing\u003dovn_const.MAINTENANCE_ONE_RUN_TASK_SPACING,"},{"line_number":540,"context_line":"        run_immediately\u003dTrue)"},{"line_number":541,"context_line":"    @log_maintenance_task(start_messages\u003d("},{"line_number":542,"context_line":"        \u0027Maintenance task: Check missing prefix router_name in \u0027"},{"line_number":543,"context_line":"        \u0027external_ids of LRPs.\u0027,"},{"line_number":544,"context_line":"    ))"},{"line_number":545,"context_line":"    def update_lrouter_ports_ext_ids_name_prefix(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da4fb171_57db0fa3","line":542,"range":{"start_line":542,"start_character":9,"end_line":542,"end_character":26},"updated":"2026-03-23 02:40:59.000000000","message":"Don\u0027t need this as decorator is printing it","commit_id":"c5eb090fc7f8e69e12178bf032d3885ffde9d219"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"1b04b57619dde32b8586f792f9a9e3ec252eeb28","unresolved":false,"context_lines":[{"line_number":539,"context_line":"        spacing\u003dovn_const.MAINTENANCE_ONE_RUN_TASK_SPACING,"},{"line_number":540,"context_line":"        run_immediately\u003dTrue)"},{"line_number":541,"context_line":"    @log_maintenance_task(start_messages\u003d("},{"line_number":542,"context_line":"        \u0027Maintenance task: Check missing prefix router_name in \u0027"},{"line_number":543,"context_line":"        \u0027external_ids of LRPs.\u0027,"},{"line_number":544,"context_line":"    ))"},{"line_number":545,"context_line":"    def update_lrouter_ports_ext_ids_name_prefix(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1279f9a2_14418b79","line":542,"range":{"start_line":542,"start_character":9,"end_line":542,"end_character":26},"in_reply_to":"da4fb171_57db0fa3","updated":"2026-03-26 21:36:33.000000000","message":"Done","commit_id":"c5eb090fc7f8e69e12178bf032d3885ffde9d219"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"75db663f2f8d581020a0de640df4dc4de4bd2c19","unresolved":true,"context_lines":[{"line_number":578,"context_line":"        periodic_run_limit\u003dovn_const.MAINTENANCE_TASK_RETRY_LIMIT,"},{"line_number":579,"context_line":"        spacing\u003dovn_const.MAINTENANCE_ONE_RUN_TASK_SPACING,"},{"line_number":580,"context_line":"        run_immediately\u003dTrue)"},{"line_number":581,"context_line":"    @log_maintenance_task"},{"line_number":582,"context_line":"    def check_global_dhcp_opts(self):"},{"line_number":583,"context_line":"        if (not ovn_conf.get_global_dhcpv4_opts() and"},{"line_number":584,"context_line":"                not ovn_conf.get_global_dhcpv6_opts()):"}],"source_content_type":"text/x-python","patch_set":2,"id":"595ba43c_7401851e","line":581,"updated":"2026-03-23 02:40:59.000000000","message":"Missing message string?","commit_id":"c5eb090fc7f8e69e12178bf032d3885ffde9d219"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"1b04b57619dde32b8586f792f9a9e3ec252eeb28","unresolved":false,"context_lines":[{"line_number":578,"context_line":"        periodic_run_limit\u003dovn_const.MAINTENANCE_TASK_RETRY_LIMIT,"},{"line_number":579,"context_line":"        spacing\u003dovn_const.MAINTENANCE_ONE_RUN_TASK_SPACING,"},{"line_number":580,"context_line":"        run_immediately\u003dTrue)"},{"line_number":581,"context_line":"    @log_maintenance_task"},{"line_number":582,"context_line":"    def check_global_dhcp_opts(self):"},{"line_number":583,"context_line":"        if (not ovn_conf.get_global_dhcpv4_opts() and"},{"line_number":584,"context_line":"                not ovn_conf.get_global_dhcpv6_opts()):"}],"source_content_type":"text/x-python","patch_set":2,"id":"957bf8be_826b6529","line":581,"in_reply_to":"595ba43c_7401851e","updated":"2026-03-26 21:36:33.000000000","message":"I thought logging the method name would be enough of explanation but I\u0027ll add the start message back","commit_id":"c5eb090fc7f8e69e12178bf032d3885ffde9d219"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"75db663f2f8d581020a0de640df4dc4de4bd2c19","unresolved":true,"context_lines":[{"line_number":608,"context_line":"        periodic_run_limit\u003dovn_const.MAINTENANCE_TASK_RETRY_LIMIT,"},{"line_number":609,"context_line":"        spacing\u003dovn_const.MAINTENANCE_ONE_RUN_TASK_SPACING,"},{"line_number":610,"context_line":"        run_immediately\u003dTrue)"},{"line_number":611,"context_line":"    @log_maintenance_task"},{"line_number":612,"context_line":"    def check_for_igmp_snoop_support(self):"},{"line_number":613,"context_line":"        snooping_conf \u003d ovs_conf.get_igmp_snooping_enabled()"},{"line_number":614,"context_line":"        flood_conf \u003d ovs_conf.get_igmp_flood_unregistered()"}],"source_content_type":"text/x-python","patch_set":2,"id":"f19317e9_fa4d889a","line":611,"updated":"2026-03-23 02:40:59.000000000","message":"And maybe for the rest we should add a human-readable message?","commit_id":"c5eb090fc7f8e69e12178bf032d3885ffde9d219"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"1b04b57619dde32b8586f792f9a9e3ec252eeb28","unresolved":false,"context_lines":[{"line_number":608,"context_line":"        periodic_run_limit\u003dovn_const.MAINTENANCE_TASK_RETRY_LIMIT,"},{"line_number":609,"context_line":"        spacing\u003dovn_const.MAINTENANCE_ONE_RUN_TASK_SPACING,"},{"line_number":610,"context_line":"        run_immediately\u003dTrue)"},{"line_number":611,"context_line":"    @log_maintenance_task"},{"line_number":612,"context_line":"    def check_for_igmp_snoop_support(self):"},{"line_number":613,"context_line":"        snooping_conf \u003d ovs_conf.get_igmp_snooping_enabled()"},{"line_number":614,"context_line":"        flood_conf \u003d ovs_conf.get_igmp_flood_unregistered()"}],"source_content_type":"text/x-python","patch_set":2,"id":"427cfc95_7b750c39","line":611,"in_reply_to":"f19317e9_fa4d889a","updated":"2026-03-26 21:36:33.000000000","message":"Added a start message for all the decorators.\nIf any of them need to be change please let me know.","commit_id":"c5eb090fc7f8e69e12178bf032d3885ffde9d219"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"1f3206719211df20235f8957c474f6b7e2feec0f","unresolved":true,"context_lines":[{"line_number":544,"context_line":"        run_immediately\u003dTrue)"},{"line_number":545,"context_line":"    @log_maintenance_task(start_messages\u003d("},{"line_number":546,"context_line":"        \u0027Check missing prefix router_name in \u0027"},{"line_number":547,"context_line":"        \u0027external_ids of LRPs.\u0027,"},{"line_number":548,"context_line":"    ))"},{"line_number":549,"context_line":"    def update_lrouter_ports_ext_ids_name_prefix(self):"},{"line_number":550,"context_line":"        \"\"\"Update OVN logical router ports if missing external ids"}],"source_content_type":"text/x-python","patch_set":3,"id":"c140be0f_8f6e2ca2","line":547,"updated":"2026-03-26 23:31:30.000000000","message":"Is this the place where two messages are sent? It should just be a single message","commit_id":"bdb424affa53619b686ff33d81ed6b37f8ef0ad9"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"c69c768f0d787fe26fb603282128477e27c1f123","unresolved":true,"context_lines":[{"line_number":544,"context_line":"        run_immediately\u003dTrue)"},{"line_number":545,"context_line":"    @log_maintenance_task(start_messages\u003d("},{"line_number":546,"context_line":"        \u0027Check missing prefix router_name in \u0027"},{"line_number":547,"context_line":"        \u0027external_ids of LRPs.\u0027,"},{"line_number":548,"context_line":"    ))"},{"line_number":549,"context_line":"    def update_lrouter_ports_ext_ids_name_prefix(self):"},{"line_number":550,"context_line":"        \"\"\"Update OVN logical router ports if missing external ids"}],"source_content_type":"text/x-python","patch_set":3,"id":"8ecd51ff_f4cf304e","line":547,"in_reply_to":"c140be0f_8f6e2ca2","updated":"2026-03-27 14:49:49.000000000","message":"It\u0027s concating strings not to flag pep8 char limit.","commit_id":"bdb424affa53619b686ff33d81ed6b37f8ef0ad9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"1f3206719211df20235f8957c474f6b7e2feec0f","unresolved":true,"context_lines":[{"line_number":1236,"context_line":"    @log_maintenance_task(start_messages\u003d("},{"line_number":1237,"context_line":"        \u0027Normalize QoS floating IP rule priority in OVN.\u0027,"},{"line_number":1238,"context_line":"    ))"},{"line_number":1239,"context_line":"    def update_qos_fip_rule_priority(self):"},{"line_number":1240,"context_line":"        \"\"\"The new QoS FIP rule priority is OVN_QOS_FIP_RULE_PRIORITY\"\"\""},{"line_number":1241,"context_line":"        cmds \u003d []"},{"line_number":1242,"context_line":"        table \u003d self._nb_idl.tables[\u0027QoS\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f5cdb31_193fbe4c","line":1239,"updated":"2026-03-26 23:31:30.000000000","message":"Did this sneak in?","commit_id":"bdb424affa53619b686ff33d81ed6b37f8ef0ad9"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"c69c768f0d787fe26fb603282128477e27c1f123","unresolved":false,"context_lines":[{"line_number":1236,"context_line":"    @log_maintenance_task(start_messages\u003d("},{"line_number":1237,"context_line":"        \u0027Normalize QoS floating IP rule priority in OVN.\u0027,"},{"line_number":1238,"context_line":"    ))"},{"line_number":1239,"context_line":"    def update_qos_fip_rule_priority(self):"},{"line_number":1240,"context_line":"        \"\"\"The new QoS FIP rule priority is OVN_QOS_FIP_RULE_PRIORITY\"\"\""},{"line_number":1241,"context_line":"        cmds \u003d []"},{"line_number":1242,"context_line":"        table \u003d self._nb_idl.tables[\u0027QoS\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"8d0e3957_155b3392","line":1239,"in_reply_to":"9f5cdb31_193fbe4c","updated":"2026-03-27 14:49:49.000000000","message":"Mistake in my rebase should be removed now.","commit_id":"bdb424affa53619b686ff33d81ed6b37f8ef0ad9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"36c133d2a29a76d7cd30852e787cb7f0e75f5815","unresolved":true,"context_lines":[{"line_number":543,"context_line":"        run_immediately\u003dTrue)"},{"line_number":544,"context_line":"    @log_maintenance_task("},{"line_number":545,"context_line":"        start_message\u003d(\u0027Check missing prefix router_name\u0027,"},{"line_number":546,"context_line":"        \u0027in external_ids of LRPs.\u0027))"},{"line_number":547,"context_line":"    def update_lrouter_ports_ext_ids_name_prefix(self):"},{"line_number":548,"context_line":"        \"\"\"Update OVN logical router ports if missing external ids"},{"line_number":549,"context_line":"        \"neutron-\" prefix for router name."}],"source_content_type":"text/x-python","patch_set":4,"id":"e8866936_e7877c3b","line":546,"updated":"2026-03-31 04:40:04.000000000","message":"nit: seems this should be intented 4 spaces and be like the others in this file","commit_id":"085fd34e2e4636263bd67a782bee0d363c7e4000"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"bef5d2e4a46e677a910e74e3e03c6eb91df57315","unresolved":false,"context_lines":[{"line_number":543,"context_line":"        run_immediately\u003dTrue)"},{"line_number":544,"context_line":"    @log_maintenance_task("},{"line_number":545,"context_line":"        start_message\u003d(\u0027Check missing prefix router_name\u0027,"},{"line_number":546,"context_line":"        \u0027in external_ids of LRPs.\u0027))"},{"line_number":547,"context_line":"    def update_lrouter_ports_ext_ids_name_prefix(self):"},{"line_number":548,"context_line":"        \"\"\"Update OVN logical router ports if missing external ids"},{"line_number":549,"context_line":"        \"neutron-\" prefix for router name."}],"source_content_type":"text/x-python","patch_set":4,"id":"e39687c4_25405478","line":546,"in_reply_to":"e8866936_e7877c3b","updated":"2026-03-31 08:54:27.000000000","message":"Done","commit_id":"085fd34e2e4636263bd67a782bee0d363c7e4000"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"36c133d2a29a76d7cd30852e787cb7f0e75f5815","unresolved":true,"context_lines":[{"line_number":587,"context_line":"                not ovn_conf.get_global_dhcpv6_opts()):"},{"line_number":588,"context_line":"            # No need to scan the subnets if the settings are unset."},{"line_number":589,"context_line":"            raise periodics.NeverAgain()"},{"line_number":590,"context_line":"        LOG.debug(\u0027Checking DHCP options on subnets\u0027)"},{"line_number":591,"context_line":"        fix_subnets \u003d self._check_subnet_global_dhcp_opts()"},{"line_number":592,"context_line":"        if fix_subnets:"},{"line_number":593,"context_line":"            admin_context \u003d n_context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":4,"id":"8389059c_ba5c607a","line":590,"updated":"2026-03-31 04:40:04.000000000","message":"This is covered in the decorator, or at least a similar message","commit_id":"085fd34e2e4636263bd67a782bee0d363c7e4000"},{"author":{"_account_id":37089,"name":"Chris Buggy","display_name":"cbuggy","email":"cbuggy@redhat.com","username":"cbuggy"},"change_message_id":"bef5d2e4a46e677a910e74e3e03c6eb91df57315","unresolved":false,"context_lines":[{"line_number":587,"context_line":"                not ovn_conf.get_global_dhcpv6_opts()):"},{"line_number":588,"context_line":"            # No need to scan the subnets if the settings are unset."},{"line_number":589,"context_line":"            raise periodics.NeverAgain()"},{"line_number":590,"context_line":"        LOG.debug(\u0027Checking DHCP options on subnets\u0027)"},{"line_number":591,"context_line":"        fix_subnets \u003d self._check_subnet_global_dhcp_opts()"},{"line_number":592,"context_line":"        if fix_subnets:"},{"line_number":593,"context_line":"            admin_context \u003d n_context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":4,"id":"da28f0d8_8b6b6a6f","line":590,"in_reply_to":"8389059c_ba5c607a","updated":"2026-03-31 08:54:27.000000000","message":"Done","commit_id":"085fd34e2e4636263bd67a782bee0d363c7e4000"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"0bb56205c5568de11319beea140380876635ac26","unresolved":true,"context_lines":[{"line_number":996,"context_line":"    @log_maintenance_task("},{"line_number":997,"context_line":"        start_message\u003d("},{"line_number":998,"context_line":"            \u0027Sync router.distributed with distributed floating IP \u0027"},{"line_number":999,"context_line":"            \u0027config.\u0027))"},{"line_number":1000,"context_line":"    def update_router_distributed_flag(self):"},{"line_number":1001,"context_line":"        \"\"\"Set \"enable_distributed_floating_ip\" on the router.distributed flag."},{"line_number":1002,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fc710256_83eab992","line":999,"updated":"2026-04-10 15:59:26.000000000","message":"nit: looks like it could have fit on above line, same with some below","commit_id":"e37278b32ae5464d84b1295e7e3c0c9ab8b5053f"}]}
