)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"e52648f3d9b04fca1b6daa103fd25d9fa1402556","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"a0d36c00_c5d5d03c","updated":"2026-07-31 17:29:32.000000000","message":"This is working fine on gates and also on my local tap-as-a-service environment (devstack). Left one small question","commit_id":"9bca669e5e09839c92f86e4f1f2df8cb8784bc20"},{"author":{"_account_id":33341,"name":"Maor Blaustein","email":"mblue@redhat.com","username":"blue"},"change_message_id":"d815bde7fc873c892813575eee8f6d3e7afe1e51","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3d8af714_ad9943df","updated":"2026-08-05 11:19:18.000000000","message":"for all the repeated code for class method instead of instance, IMO best to add  optional","commit_id":"9bca669e5e09839c92f86e4f1f2df8cb8784bc20"},{"author":{"_account_id":33341,"name":"Maor Blaustein","email":"mblue@redhat.com","username":"blue"},"change_message_id":"c5e01d00f268cb3b1130d1ec658395db21171d27","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"0821cb7e_24b9998e","updated":"2026-08-05 11:10:18.000000000","message":"generally looks good to me, comments mostly of some repeated code that can be spared, thanks!","commit_id":"9bca669e5e09839c92f86e4f1f2df8cb8784bc20"},{"author":{"_account_id":33341,"name":"Maor Blaustein","email":"mblue@redhat.com","username":"blue"},"change_message_id":"b112066b346d12574b4750ddeb044d58d0cb5316","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"18d965c6_bc70c09c","in_reply_to":"3d8af714_ad9943df","updated":"2026-08-05 11:19:48.000000000","message":"(ignore this partial message please ^)","commit_id":"9bca669e5e09839c92f86e4f1f2df8cb8784bc20"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"f9bc990945e130aabae5bf09858eb2de74bedda2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"ac0b2c45_d0f5c334","updated":"2026-08-07 10:38:42.000000000","message":"recheck\nSeems like run into the git fetch issue, but I am not sure if all failures are related to that","commit_id":"983c92396b3b3538d2f959b219621ae38efc4157"},{"author":{"_account_id":35308,"name":"Bharath M V","email":"bmv@redhat.com","username":"bmv"},"change_message_id":"1b6de67c491853e950312276d1a709084391cb41","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"8cb3e3a8_b9a60b24","updated":"2026-08-13 13:14:56.000000000","message":"recheck\nOne job is timed_out, but the testcases are passing.","commit_id":"8ebb405ec53c7f6252fa23d02a62fa850e8dcdd6"}],"neutron_tempest_plugin/tap_as_a_service/scenario/test_tap_mirror.py":[{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"e52648f3d9b04fca1b6daa103fd25d9fa1402556","unresolved":true,"context_lines":[{"line_number":458,"context_line":"            tcpdump_cmd\u003d\"sudo tcpdump -vvv -n -nn proto GRE \u003e %s\")"},{"line_number":459,"context_line":"        self.assertTrue(res)"},{"line_number":460,"context_line":"        # GRE Keys: vm0 IN:101-\u003e0x65, OUT:102-\u003e0x66; vm1 IN:103-\u003e0x67"},{"line_number":461,"context_line":"        # Note: vm1_port OUT (key\u003d0x68) is not checked — OVN does not mirror"},{"line_number":462,"context_line":"        # OUT direction for intra-network traffic; the echo reply is already"},{"line_number":463,"context_line":"        # captured by vm0_port IN (key\u003d0x65)."},{"line_number":464,"context_line":"        self.assertIn(\u0027key\u003d0x65\u0027, output)  # IN:101 vm0"},{"line_number":465,"context_line":"        self.assertIn(\u0027key\u003d0x66\u0027, output)  # OUT:102 vm0"},{"line_number":466,"context_line":"        self.assertIn(\u0027key\u003d0x67\u0027, output)  # IN:103 vm1"}],"source_content_type":"text/x-python","patch_set":6,"id":"35c3e7ba_761f41f5","side":"PARENT","line":463,"range":{"start_line":461,"start_character":8,"end_line":463,"end_character":45},"updated":"2026-07-31 17:29:32.000000000","message":"I see that now we do capture key\u003d0x68. Did this OVN behaviour change?","commit_id":"94f0edcc736ab2a53095945ba7408bed39f21319"},{"author":{"_account_id":35308,"name":"Bharath M V","email":"bmv@redhat.com","username":"bmv"},"change_message_id":"540f8773eaa4d4e5f3ee1a28607926ffd62a1211","unresolved":false,"context_lines":[{"line_number":458,"context_line":"            tcpdump_cmd\u003d\"sudo tcpdump -vvv -n -nn proto GRE \u003e %s\")"},{"line_number":459,"context_line":"        self.assertTrue(res)"},{"line_number":460,"context_line":"        # GRE Keys: vm0 IN:101-\u003e0x65, OUT:102-\u003e0x66; vm1 IN:103-\u003e0x67"},{"line_number":461,"context_line":"        # Note: vm1_port OUT (key\u003d0x68) is not checked — OVN does not mirror"},{"line_number":462,"context_line":"        # OUT direction for intra-network traffic; the echo reply is already"},{"line_number":463,"context_line":"        # captured by vm0_port IN (key\u003d0x65)."},{"line_number":464,"context_line":"        self.assertIn(\u0027key\u003d0x65\u0027, output)  # IN:101 vm0"},{"line_number":465,"context_line":"        self.assertIn(\u0027key\u003d0x66\u0027, output)  # OUT:102 vm0"},{"line_number":466,"context_line":"        self.assertIn(\u0027key\u003d0x67\u0027, output)  # IN:103 vm1"}],"source_content_type":"text/x-python","patch_set":6,"id":"77386d26_837d0df7","side":"PARENT","line":463,"range":{"start_line":461,"start_character":8,"end_line":463,"end_character":45},"in_reply_to":"35c3e7ba_761f41f5","updated":"2026-08-03 14:18:59.000000000","message":"This is an error in assertion. OVN behaviour has not changed. The key is present in the captured traffic. Now it is rectified in the patch.","commit_id":"94f0edcc736ab2a53095945ba7408bed39f21319"},{"author":{"_account_id":33341,"name":"Maor Blaustein","email":"mblue@redhat.com","username":"blue"},"change_message_id":"c5e01d00f268cb3b1130d1ec658395db21171d27","unresolved":true,"context_lines":[{"line_number":126,"context_line":"    See _wait_for_server_active_cls for why this can\u0027t just delegate to the"},{"line_number":127,"context_line":"    real instance method with cls in place of self."},{"line_number":128,"context_line":"    \"\"\""},{"line_number":129,"context_line":"    if not CONF.compute_feature_enabled.console_output:"},{"line_number":130,"context_line":"        return"},{"line_number":131,"context_line":"    client \u003d client or cls.os_primary.servers_client"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def system_booted():"}],"source_content_type":"text/x-python","patch_set":6,"id":"f7e27947_4dddead7","line":130,"range":{"start_line":129,"start_character":0,"end_line":130,"end_character":14},"updated":"2026-08-05 11:10:18.000000000","message":"a stable well tested version of `wait_for_guest_os_ready` already exists in base.py [1], also for `wait_for_server_active` [2], I think it is better to use them and spare repeated code.\n\n[1] https://opendev.org/openstack/neutron-tempest-plugin/src/commit/1e081bdbba/neutron_tempest_plugin/scenario/base.py#L576\n[2] https://opendev.org/openstack/neutron-tempest-plugin/src/commit/1e081bdbba/neutron_tempest_plugin/scenario/base.py#L566","commit_id":"9bca669e5e09839c92f86e4f1f2df8cb8784bc20"},{"author":{"_account_id":33341,"name":"Maor Blaustein","email":"mblue@redhat.com","username":"blue"},"change_message_id":"d815bde7fc873c892813575eee8f6d3e7afe1e51","unresolved":true,"context_lines":[{"line_number":126,"context_line":"    See _wait_for_server_active_cls for why this can\u0027t just delegate to the"},{"line_number":127,"context_line":"    real instance method with cls in place of self."},{"line_number":128,"context_line":"    \"\"\""},{"line_number":129,"context_line":"    if not CONF.compute_feature_enabled.console_output:"},{"line_number":130,"context_line":"        return"},{"line_number":131,"context_line":"    client \u003d client or cls.os_primary.servers_client"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def system_booted():"}],"source_content_type":"text/x-python","patch_set":6,"id":"f4f92de4_8962be7a","line":130,"range":{"start_line":129,"start_character":0,"end_line":130,"end_character":14},"in_reply_to":"f7e27947_4dddead7","updated":"2026-08-05 11:19:18.000000000","message":"regarding that, noticed was done for times when instance not made yet, IMO good to add on top of original code instead of making new similar method, such as adding optional argument for instance, or internaly using instance if it exists, otherwise use class, etc.","commit_id":"9bca669e5e09839c92f86e4f1f2df8cb8784bc20"},{"author":{"_account_id":33341,"name":"Maor Blaustein","email":"mblue@redhat.com","username":"blue"},"change_message_id":"c5e01d00f268cb3b1130d1ec658395db21171d27","unresolved":true,"context_lines":[{"line_number":135,"context_line":"        return any(\u0027login:\u0027 in line.lower()"},{"line_number":136,"context_line":"                  for line in console_output.split(\u0027\\n\u0027))"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    try:"},{"line_number":139,"context_line":"        neutron_utils.wait_until_true(system_booted, timeout\u003d90, sleep\u003d5)"},{"line_number":140,"context_line":"    except neutron_utils.WaitTimeout:"},{"line_number":141,"context_line":"        pass"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"def _create_shared_server_with_floatingip_cls(cls, network,"},{"line_number":145,"context_line":"                                              use_taas_cloud_image\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":6,"id":"49ce1b31_02ae1568","line":142,"range":{"start_line":138,"start_character":0,"end_line":142,"end_character":0},"updated":"2026-08-05 11:10:18.000000000","message":"iiuc `wait_until_true` raises WaitTimeout for intended failure, when 90 seconds passed but `system_booted` failed every 5 seconds throughout that 90 seconds limit, and there isn\u0027t alternative exception passed to it.\n\nso why the `pass`, isn\u0027t it supposed to fail if OS isn\u0027t ready?","commit_id":"9bca669e5e09839c92f86e4f1f2df8cb8784bc20"},{"author":{"_account_id":33341,"name":"Maor Blaustein","email":"mblue@redhat.com","username":"blue"},"change_message_id":"c5e01d00f268cb3b1130d1ec658395db21171d27","unresolved":true,"context_lines":[{"line_number":182,"context_line":""},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"def _make_remote_client_cls(cls, fip, advanced\u003dFalse):"},{"line_number":185,"context_line":"    user \u003d (CONF.neutron_plugin_options.advanced_image_ssh_user"},{"line_number":186,"context_line":"            if advanced else CONF.validation.image_ssh_user)"},{"line_number":187,"context_line":"    client \u003d remote_client.RemoteClient("},{"line_number":188,"context_line":"        fip[\u0027floating_ip_address\u0027], user,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffb85b8f_ac1d2f2a","line":185,"updated":"2026-08-05 11:10:18.000000000","message":"there is existing functionality that can be oused for these tests to get needed user/flavor/image [1].\n\n[1] https://opendev.org/openstack/neutron-tempest-plugin/src/commit/1e081bdbba/neutron_tempest_plugin/scenario/base.py#L273","commit_id":"9bca669e5e09839c92f86e4f1f2df8cb8784bc20"},{"author":{"_account_id":33341,"name":"Maor Blaustein","email":"mblue@redhat.com","username":"blue"},"change_message_id":"c5e01d00f268cb3b1130d1ec658395db21171d27","unresolved":true,"context_lines":[{"line_number":560,"context_line":"            right_ip \u003d ip_receiver if d \u003d\u003d \u0027IN\u0027 else ip_sender"},{"line_number":561,"context_line":"            icmp_msg \u003d \u0027echo request\u0027 if d \u003d\u003d \u0027IN\u0027 else \u0027echo reply\u0027"},{"line_number":562,"context_line":"            found_log \u003d False"},{"line_number":563,"context_line":"            for i, line in enumerate(output_lines):"},{"line_number":564,"context_line":"                if key not in line:"},{"line_number":565,"context_line":"                    continue"},{"line_number":566,"context_line":"                for j in range(1, 6):"},{"line_number":567,"context_line":"                    if i + j \u003e\u003d len(output_lines):"},{"line_number":568,"context_line":"                        break"},{"line_number":569,"context_line":"                    candidate \u003d output_lines[i + j]"},{"line_number":570,"context_line":"                    if (icmp_msg in candidate and"},{"line_number":571,"context_line":"                            left_ip + \u0027 \u003e \u0027 + right_ip in candidate):"},{"line_number":572,"context_line":"                        found_log \u003d True"},{"line_number":573,"context_line":"                        break"},{"line_number":574,"context_line":"                if found_log:"},{"line_number":575,"context_line":"                    break"},{"line_number":576,"context_line":"            self.assertTrue(found_log, msg\u003df\"Did not find direction \""},{"line_number":577,"context_line":"                f\"{direction} and key {key} in the tcpdump log\")"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"    @decorators.idempotent_id(\u00277a4f9d54-16e8-499f-9791-0217aee309e1\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"f44ec229_e8eb62ba","line":576,"range":{"start_line":563,"start_character":1,"end_line":576,"end_character":0},"updated":"2026-08-05 11:10:18.000000000","message":"nit: I was wondering how to simplify the triple nested for loop to be more readable.\nI was thinking of multi line regex functionality, but claude suggested this to spare inner loop, seems nice in case you\u0027d like that:\n```\n  But the readability issue is really about the inner loop. You could simplify by slicing the list after each key match instead of tracking two indices:\n\n  for i, line in enumerate(output_lines):\n      if key not in line:\n          continue\n      lookahead \u003d output_lines[i+1:i+6]\n      if any(icmp_msg in c and f\u0027{left_ip} \u003e {right_ip}\u0027 in c\n             for c in lookahead):\n          found_log \u003d True\n          break\n\n  Same logic, no j index, no bounds check. The slice handles the bounds naturally (Python slicing doesn\u0027t raise on out-of-range end indices).\n```","commit_id":"9bca669e5e09839c92f86e4f1f2df8cb8784bc20"}],"neutron_tempest_plugin/tap_as_a_service/scenario/test_tap_mirror_erspan.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import re"},{"line_number":14,"context_line":"import socket"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_log import log as logging"},{"line_number":17,"context_line":"import testtools"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"87cef651_9cbc4a62","line":15,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: H306: imports not in alphabetical order (tempest.lib.decorators, tempest.lib.common.utils.test_utils)","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":13,"context_line":"import re"},{"line_number":14,"context_line":"import socket"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_log import log as logging"},{"line_number":17,"context_line":"import testtools"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":1,"id":"a4eedaec_1e872a6e","line":16,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: H306: imports not in alphabetical order (tempest.lib.common.utils.test_utils, tempest.lib.common.utils.linux.remote_client)","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import socket"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_log import log as logging"},{"line_number":17,"context_line":"import testtools"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3c385392_fccce7ec","line":17,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: H306: imports not in alphabetical order (tempest.lib.common.utils.linux.remote_client, tempest.lib.common.utils.data_utils)","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_log import log as logging"},{"line_number":17,"context_line":"import testtools"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from tempest.common import utils"}],"source_content_type":"text/x-python","patch_set":1,"id":"a7016ed1_5fc6df9e","line":18,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: H306: imports not in alphabetical order (tempest.lib.common.utils.data_utils, tempest.config)","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from oslo_log import log as logging"},{"line_number":17,"context_line":"import testtools"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from tempest.common import utils"},{"line_number":22,"context_line":"from tempest import config"}],"source_content_type":"text/x-python","patch_set":1,"id":"d7a2fa8f_5501bf8e","line":19,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: H306: imports not in alphabetical order (tempest.config, tempest.common.utils)","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import testtools"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from tempest.common import utils"},{"line_number":22,"context_line":"from tempest import config"},{"line_number":23,"context_line":"from tempest.lib.common.utils import data_utils"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ebfbcf7_297a6593","line":20,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: H306: imports not in alphabetical order (tempest.common.utils, re)","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from tempest.common import utils"},{"line_number":22,"context_line":"from tempest import config"},{"line_number":23,"context_line":"from tempest.lib.common.utils import data_utils"},{"line_number":24,"context_line":"from tempest.lib.common.utils.linux import remote_client"}],"source_content_type":"text/x-python","patch_set":1,"id":"4f255a83_30f4dd65","line":21,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E402 module level import not at top of file","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":19,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from tempest.common import utils"},{"line_number":22,"context_line":"from tempest import config"},{"line_number":23,"context_line":"from tempest.lib.common.utils import data_utils"},{"line_number":24,"context_line":"from tempest.lib.common.utils.linux import remote_client"},{"line_number":25,"context_line":"from tempest.lib.common.utils import test_utils"}],"source_content_type":"text/x-python","patch_set":1,"id":"2f068407_e5809fc9","line":22,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E402 module level import not at top of file","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from tempest.common import utils"},{"line_number":22,"context_line":"from tempest import config"},{"line_number":23,"context_line":"from tempest.lib.common.utils import data_utils"},{"line_number":24,"context_line":"from tempest.lib.common.utils.linux import remote_client"},{"line_number":25,"context_line":"from tempest.lib.common.utils import test_utils"},{"line_number":26,"context_line":"from tempest.lib import decorators"}],"source_content_type":"text/x-python","patch_set":1,"id":"952479b0_1dc1a163","line":23,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E402 module level import not at top of file","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from tempest.common import utils"},{"line_number":22,"context_line":"from tempest import config"},{"line_number":23,"context_line":"from tempest.lib.common.utils import data_utils"},{"line_number":24,"context_line":"from tempest.lib.common.utils.linux import remote_client"},{"line_number":25,"context_line":"from tempest.lib.common.utils import test_utils"},{"line_number":26,"context_line":"from tempest.lib import decorators"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1ca2eb53_7df362a0","line":24,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E402 module level import not at top of file","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from tempest import config"},{"line_number":23,"context_line":"from tempest.lib.common.utils import data_utils"},{"line_number":24,"context_line":"from tempest.lib.common.utils.linux import remote_client"},{"line_number":25,"context_line":"from tempest.lib.common.utils import test_utils"},{"line_number":26,"context_line":"from tempest.lib import decorators"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from neutron_tempest_plugin.tap_as_a_service.scenario import manager"}],"source_content_type":"text/x-python","patch_set":1,"id":"23c88df5_ef22ea83","line":25,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E402 module level import not at top of file","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from tempest.lib.common.utils import data_utils"},{"line_number":24,"context_line":"from tempest.lib.common.utils.linux import remote_client"},{"line_number":25,"context_line":"from tempest.lib.common.utils import test_utils"},{"line_number":26,"context_line":"from tempest.lib import decorators"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from neutron_tempest_plugin.tap_as_a_service.scenario import manager"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"c3c7f292_3ee591a6","line":26,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E402 module level import not at top of file","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from tempest.lib.common.utils import test_utils"},{"line_number":26,"context_line":"from tempest.lib import decorators"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from neutron_tempest_plugin.tap_as_a_service.scenario import manager"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"CONF \u003d config.CONF"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"07443f09_c7889107","line":28,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E402 module level import not at top of file","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    \"\"\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @classmethod"},{"line_number":42,"context_line":"    @utils.requires_ext(extension\u003d\u0027tap-mirror\u0027, service\u003d\u0027network\u0027)"},{"line_number":43,"context_line":"    @utils.requires_ext(extension\u003d\u0027tap-mirror-both-direction\u0027, service\u003d\u0027network\u0027)"},{"line_number":44,"context_line":"    def skip_checks(cls):"},{"line_number":45,"context_line":"        super().skip_checks()"}],"source_content_type":"text/x-python","patch_set":1,"id":"ab8ecd8e_848ff950","line":42,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @classmethod"},{"line_number":42,"context_line":"    @utils.requires_ext(extension\u003d\u0027tap-mirror\u0027, service\u003d\u0027network\u0027)"},{"line_number":43,"context_line":"    @utils.requires_ext(extension\u003d\u0027tap-mirror-both-direction\u0027, service\u003d\u0027network\u0027)"},{"line_number":44,"context_line":"    def skip_checks(cls):"},{"line_number":45,"context_line":"        super().skip_checks()"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"d85265a3_d482b6cf","line":43,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        def _try_decode(raw):"},{"line_number":64,"context_line":"            try:"},{"line_number":65,"context_line":"                offset \u003d 14 * ((raw[12] \u003c\u003c 8 | raw[13]) \u003d\u003d 0x0800"},{"line_number":66,"context_line":"                               and (raw[14] \u003e\u003e 4) \u003d\u003d 4)"},{"line_number":67,"context_line":"                assert (raw[offset] \u003e\u003e 4) \u003d\u003d 4 and raw[offset + 9] \u003d\u003d 47"},{"line_number":68,"context_line":"                offset +\u003d (raw[offset] \u0026 0xf) * 4"},{"line_number":69,"context_line":"                gre_flags \u003d raw[offset] \u003c\u003c 8 | raw[offset + 1]"}],"source_content_type":"text/x-python","patch_set":1,"id":"f16cab03_e676763f","line":66,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: W503 line break before binary operator","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                    proto_num \u003d raw[offset + 9]"},{"line_number":78,"context_line":"                    src \u003d socket.inet_ntoa(raw[offset + 12:offset + 16])"},{"line_number":79,"context_line":"                    dst \u003d socket.inet_ntoa(raw[offset + 16:offset + 20])"},{"line_number":80,"context_line":"                    proto \u003d {1: \u0027ICMP\u0027, 6: \u0027TCP\u0027, 17: \u0027UDP\u0027}.get(proto_num, str(proto_num))"},{"line_number":81,"context_line":"                    icmp_type \u003d raw[offset + (raw[offset] \u0026 0xf) * 4] if proto_num \u003d\u003d 1 else None"},{"line_number":82,"context_line":"                elif ethertype \u003d\u003d 0x86dd:"},{"line_number":83,"context_line":"                    assert (raw[offset] \u003e\u003e 4) \u003d\u003d 6"}],"source_content_type":"text/x-python","patch_set":1,"id":"4792b166_45de2149","line":80,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E501 line too long (91 \u003e 79 characters)","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                    src \u003d socket.inet_ntoa(raw[offset + 12:offset + 16])"},{"line_number":79,"context_line":"                    dst \u003d socket.inet_ntoa(raw[offset + 16:offset + 20])"},{"line_number":80,"context_line":"                    proto \u003d {1: \u0027ICMP\u0027, 6: \u0027TCP\u0027, 17: \u0027UDP\u0027}.get(proto_num, str(proto_num))"},{"line_number":81,"context_line":"                    icmp_type \u003d raw[offset + (raw[offset] \u0026 0xf) * 4] if proto_num \u003d\u003d 1 else None"},{"line_number":82,"context_line":"                elif ethertype \u003d\u003d 0x86dd:"},{"line_number":83,"context_line":"                    assert (raw[offset] \u003e\u003e 4) \u003d\u003d 6"},{"line_number":84,"context_line":"                    proto_num \u003d raw[offset + 6]"}],"source_content_type":"text/x-python","patch_set":1,"id":"8b752a7f_85963f37","line":81,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E501 line too long (97 \u003e 79 characters)","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                elif ethertype \u003d\u003d 0x86dd:"},{"line_number":83,"context_line":"                    assert (raw[offset] \u003e\u003e 4) \u003d\u003d 6"},{"line_number":84,"context_line":"                    proto_num \u003d raw[offset + 6]"},{"line_number":85,"context_line":"                    src \u003d socket.inet_ntop(socket.AF_INET6, raw[offset + 8:offset + 24])"},{"line_number":86,"context_line":"                    dst \u003d socket.inet_ntop(socket.AF_INET6, raw[offset + 24:offset + 40])"},{"line_number":87,"context_line":"                    proto \u003d {58: \u0027ICMPv6\u0027, 6: \u0027TCP\u0027, 17: \u0027UDP\u0027}.get(proto_num, str(proto_num))"},{"line_number":88,"context_line":"                    icmp_type \u003d raw[offset + 40] if proto_num \u003d\u003d 58 else None"}],"source_content_type":"text/x-python","patch_set":1,"id":"11150a90_d1104dc4","line":85,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E501 line too long (88 \u003e 79 characters)","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                    assert (raw[offset] \u003e\u003e 4) \u003d\u003d 6"},{"line_number":84,"context_line":"                    proto_num \u003d raw[offset + 6]"},{"line_number":85,"context_line":"                    src \u003d socket.inet_ntop(socket.AF_INET6, raw[offset + 8:offset + 24])"},{"line_number":86,"context_line":"                    dst \u003d socket.inet_ntop(socket.AF_INET6, raw[offset + 24:offset + 40])"},{"line_number":87,"context_line":"                    proto \u003d {58: \u0027ICMPv6\u0027, 6: \u0027TCP\u0027, 17: \u0027UDP\u0027}.get(proto_num, str(proto_num))"},{"line_number":88,"context_line":"                    icmp_type \u003d raw[offset + 40] if proto_num \u003d\u003d 58 else None"},{"line_number":89,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fb386053_6d5935ec","line":86,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E501 line too long (89 \u003e 79 characters)","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                    proto_num \u003d raw[offset + 6]"},{"line_number":85,"context_line":"                    src \u003d socket.inet_ntop(socket.AF_INET6, raw[offset + 8:offset + 24])"},{"line_number":86,"context_line":"                    dst \u003d socket.inet_ntop(socket.AF_INET6, raw[offset + 24:offset + 40])"},{"line_number":87,"context_line":"                    proto \u003d {58: \u0027ICMPv6\u0027, 6: \u0027TCP\u0027, 17: \u0027UDP\u0027}.get(proto_num, str(proto_num))"},{"line_number":88,"context_line":"                    icmp_type \u003d raw[offset + 40] if proto_num \u003d\u003d 58 else None"},{"line_number":89,"context_line":"                else:"},{"line_number":90,"context_line":"                    return None"}],"source_content_type":"text/x-python","patch_set":1,"id":"8ba424d3_529dcef5","line":87,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E501 line too long (94 \u003e 79 characters)","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        for line in tcpdump_output.splitlines():"},{"line_number":99,"context_line":"            if re.match(r\u0027\\s+0x[0-9a-f]{4}:\u0027, line):"},{"line_number":100,"context_line":"                hex_part \u003d re.split(r\u0027\\s{2,}\u0027, line.split(\u0027:\u0027, 1)[1].strip())[0]"},{"line_number":101,"context_line":"                current_bytes +\u003d [int(g[i:i+2], 16) for g in hex_part.split()"},{"line_number":102,"context_line":"                                   for i in range(0, len(g)-1, 2)]"},{"line_number":103,"context_line":"            elif current_bytes:"}],"source_content_type":"text/x-python","patch_set":1,"id":"54142926_b0d4c2a8","line":100,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        for line in tcpdump_output.splitlines():"},{"line_number":99,"context_line":"            if re.match(r\u0027\\s+0x[0-9a-f]{4}:\u0027, line):"},{"line_number":100,"context_line":"                hex_part \u003d re.split(r\u0027\\s{2,}\u0027, line.split(\u0027:\u0027, 1)[1].strip())[0]"},{"line_number":101,"context_line":"                current_bytes +\u003d [int(g[i:i+2], 16) for g in hex_part.split()"},{"line_number":102,"context_line":"                                   for i in range(0, len(g)-1, 2)]"},{"line_number":103,"context_line":"            elif current_bytes:"},{"line_number":104,"context_line":"                packets.append(bytes(current_bytes))"}],"source_content_type":"text/x-python","patch_set":1,"id":"82370ae2_ff93dd94","line":101,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E226 missing whitespace around arithmetic operator","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            if re.match(r\u0027\\s+0x[0-9a-f]{4}:\u0027, line):"},{"line_number":100,"context_line":"                hex_part \u003d re.split(r\u0027\\s{2,}\u0027, line.split(\u0027:\u0027, 1)[1].strip())[0]"},{"line_number":101,"context_line":"                current_bytes +\u003d [int(g[i:i+2], 16) for g in hex_part.split()"},{"line_number":102,"context_line":"                                   for i in range(0, len(g)-1, 2)]"},{"line_number":103,"context_line":"            elif current_bytes:"},{"line_number":104,"context_line":"                packets.append(bytes(current_bytes))"},{"line_number":105,"context_line":"                current_bytes \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"e4f2dd16_16297640","line":102,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            if re.match(r\u0027\\s+0x[0-9a-f]{4}:\u0027, line):"},{"line_number":100,"context_line":"                hex_part \u003d re.split(r\u0027\\s{2,}\u0027, line.split(\u0027:\u0027, 1)[1].strip())[0]"},{"line_number":101,"context_line":"                current_bytes +\u003d [int(g[i:i+2], 16) for g in hex_part.split()"},{"line_number":102,"context_line":"                                   for i in range(0, len(g)-1, 2)]"},{"line_number":103,"context_line":"            elif current_bytes:"},{"line_number":104,"context_line":"                packets.append(bytes(current_bytes))"},{"line_number":105,"context_line":"                current_bytes \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"6a74c1d1_033d1a4b","line":102,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E226 missing whitespace around arithmetic operator","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        subnet_v6 \u003d None"},{"line_number":134,"context_line":"        if ipv6:"},{"line_number":135,"context_line":"            # IPv6 SLAAC subnet on the same network so ports get dual-stack IPs."},{"line_number":136,"context_line":"            subnet_v6 \u003d self._create_subnet("},{"line_number":137,"context_line":"                network\u003dself.network,"},{"line_number":138,"context_line":"                ip_version\u003d6,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da55f556_8584a749","line":135,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                network\u003dself.network,"},{"line_number":138,"context_line":"                ip_version\u003d6,"},{"line_number":139,"context_line":"                ipv6_ra_mode\u003d\u0027slaac\u0027,"},{"line_number":140,"context_line":"                ipv6_address_mode\u003d\u0027slaac\u0027)"},{"line_number":141,"context_line":"            self.client.add_router_interface_with_subnet_id("},{"line_number":142,"context_line":"                router_id\u003dself.router[\u0027id\u0027], subnet_id\u003dsubnet_v6[\u0027id\u0027])"},{"line_number":143,"context_line":"            self.addCleanup("}],"source_content_type":"text/x-python","patch_set":1,"id":"0b1824f9_49438092","line":140,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":260,"context_line":"            (vm1_ip, vm0_ip, \u0027ICMP\u0027, 0), decoded,"},{"line_number":261,"context_line":"            \"ICMP echo reply (OUT) not found in decoded ERSPAN packets\")"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        # BOTH direction mirrors all traffic on vm1\u0027s port; since ERSPAN carries"},{"line_number":264,"context_line":"        # no GRE tunnel key, IN/OUT/BOTH frames are indistinguishable in the"},{"line_number":265,"context_line":"        # raw capture.  The IN and OUT assertions above implicitly cover BOTH."},{"line_number":266,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"4759bd4f_46761785","line":263,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        # raw capture.  The IN and OUT assertions above implicitly cover BOTH."},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    @testtools.skipUnless("},{"line_number":268,"context_line":"        (CONF.neutron_plugin_options.advanced_image_ref or"},{"line_number":269,"context_line":"         CONF.neutron_plugin_options.default_image_is_advanced),"},{"line_number":270,"context_line":"        \"Advanced image is required to run this test.\")"},{"line_number":271,"context_line":"    @decorators.idempotent_id(\u0027b4c5d6e7-f8a9-01bc-def0-234567890abc\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5c5db927_ba6eac19","line":268,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[{"line_number":333,"context_line":"            (vm1_ipv6, vm0_ipv6, \u0027ICMPv6\u0027, 129), decoded,"},{"line_number":334,"context_line":"            \"ICMPv6 echo reply (OUT) not found in decoded ERSPAN packets\")"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"        # BOTH direction mirrors all traffic on vm1\u0027s port; since ERSPAN carries"},{"line_number":337,"context_line":"        # no GRE tunnel key, IN/OUT/BOTH frames are indistinguishable in the"},{"line_number":338,"context_line":"        # raw capture.  The IN and OUT assertions above implicitly cover BOTH."}],"source_content_type":"text/x-python","patch_set":1,"id":"6896d222_6a0220c0","line":336,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b5deaa4276cb8053adfc58df3b8f25d0faace056","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"13ff45db_e20fcf36","line":341,"updated":"2026-06-22 18:49:41.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"ac4a71f84fadbeb5a378eef5a7f60fc6dc217eff"}]}
