Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Optimize counter polling interval by making it more accurate #3391

Merged
merged 11 commits into from
Feb 6, 2025

Conversation

stephenxs
Copy link
Collaborator

@stephenxs stephenxs commented Nov 25, 2024

What I did

Optimize the counter-polling performance in terms of polling interval accuracy

  1. Enable bulk counter-polling to run at a smaller chunk size
    There is one counter-polling thread for each counter group. All such threads can compete for the critical sections at the vendor SAI level, which means a counter-polling thread can wait for a critical section if another thread has been in it, which introduces latency for the waiting counter group.
    An example is the competition between the PFC watchdog and the port counter groups.
    The port counter group contains many counters and is polled in a bulk mode which takes a relatively longer time. The PFC watchdog counter group contains only a few counters but is polled quickly. Sometimes, PFC watchdog counters must wait before polling, which makes the polling interval inaccurate and prevents the PFC storm from being detected in time.
    To resolve this issue, we can reduce the chunk size of the port counter group. By default, the port counter group polls the counters of all ports in a single bulk operation. By using a smaller chunk size, it polls the counters in several bulk operations, with each polling counter of a subset (whose size = chunk size) of all ports. Furthermore, we support setting chunk size on a per-counter-ID basis.
    By doing so, the port counter group stays in the critical section for a shorter time and the PFC watchdog is more likely to be scheduled to poll counters and detect the PFC storm in time.

  2. Collect the time stamp immediately after vendor SAI API returns.
    Currently, many counter groups require a Lua plugin to execute based on polling interval, to calculate rates, detect certain events, etc.
    Eg. For PFC watchdog counter group to PFC storm. In this case, the polling interval is calculated based on the difference of time stamps between the current and last poll to avoid deviation due to scheduling latency. However, the timestamp is collected in the Lua plugin which is several steps after the SAI API returns and is executed in a different context (redis-server). Both introduce even larger deviations. To overcome this, we collect the timestamp immediately after the SAI API returns.

Depends on

  1. Add field for bulk chunk size in flex counter sonic-swss-common#950
  2. Define bulk chunk size and bulk chunk size per counter ID sonic-sairedis#1519

Why I did it

How I verified it

Run regression test and observe counter-polling performance.

A comparison test shows very good results if we put any/or all of the above optimizations.

Details if related

For 2, each counter group contains more than one counter context based on the type of objects. counter context is mapped from (group, object type). But the counters fetched from different counter groups will be pushed into the same entry for the same objects.
eg. PFC_WD group contains counters of ports and queues. PORT group contains counters of ports. QUEUE_STAT group contains counters of queues.
Both PFC_WD and PORT groups will push counter data into an item representing a port. but each counter has its own polling interval, which means counter IDs polled from different counter groups can be polled with different time stamps.
We use the name of a counter group to identify the time stamp of the counter group.
Eg. In port counter entry, PORT_timestamp represents last time when the port counter group polls the counters. PFC_WD_timestamp represents the last time when the PFC watchdog counter group polls the counters

@stephenxs stephenxs force-pushed the counter-optimization-all-in-one branch from 865d118 to b2d77a7 Compare November 25, 2024 09:53
@stephenxs
Copy link
Collaborator Author

Depends on sonic-net/sonic-swss-common#950

@stephenxs stephenxs force-pushed the counter-optimization-all-in-one branch from b2d77a7 to 9e3d1fc Compare November 25, 2024 09:55
@stephenxs stephenxs marked this pull request as ready for review November 25, 2024 12:05
@stephenxs stephenxs requested a review from prsunny as a code owner November 25, 2024 12:05
prsunny
prsunny previously approved these changes Dec 3, 2024
@prsunny prsunny requested a review from dgsudharsan December 3, 2024 22:13
@stephenxs stephenxs force-pushed the counter-optimization-all-in-one branch from 7fc0441 to 09d18ba Compare December 4, 2024 13:37
@stephenxs stephenxs force-pushed the counter-optimization-all-in-one branch from 09d18ba to 33283ac Compare December 13, 2024 06:27
@mssonicbld
Copy link
Collaborator

/azp run

Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@mssonicbld
Copy link
Collaborator

/azp run

Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@mssonicbld
Copy link
Collaborator

/azp run

Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@mssonicbld
Copy link
Collaborator

/azp run

Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@kcudnik
Copy link
Contributor

kcudnik commented Dec 24, 2024

/azp run

Copy link

Commenter does not have sufficient privileges for PR 3391 in repo sonic-net/sonic-swss

dgsudharsan
dgsudharsan previously approved these changes Dec 25, 2024
@stephenxs stephenxs force-pushed the counter-optimization-all-in-one branch 2 times, most recently from 58e7d84 to 3c79f13 Compare December 25, 2024 14:03
@mssonicbld
Copy link
Collaborator

/azp run

@stephenxs
Copy link
Collaborator Author

Add unit test to meet coverage.

Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@stephenxs
Copy link
Collaborator Author

/azpw run

@mssonicbld
Copy link
Collaborator

/AzurePipelines run

Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@stephenxs
Copy link
Collaborator Author

SVR6 test cases are not stable. Sometimes they pass but sometimes fail with the same code.
Will retry.

2025-02-06T07:47:21.5532296Z 
2025-02-06T07:47:21.5536259Z =================================== FAILURES ===================================
2025-02-06T07:47:21.5540727Z ________________________ TestSrv6Mysid.test_mysid_l3adj ________________________
2025-02-06T07:47:21.5541281Z 
2025-02-06T07:47:21.5542167Z self = <test_srv6.TestSrv6Mysid object at 0x7f9a22a80850>
2025-02-06T07:47:21.5543316Z dvs = <conftest.DockerVirtualSwitch object at 0x7f9a22ca3910>, testlog = None
2025-02-06T07:47:21.5543534Z 
2025-02-06T07:47:21.5543901Z     def test_mysid_l3adj(self, dvs, testlog):
2025-02-06T07:47:21.5545431Z         self.setup_db(dvs)
2025-02-06T07:47:21.5545760Z     
2025-02-06T07:47:21.5548206Z         # create MySID entries
2025-02-06T07:47:21.5548635Z         mysid1='32:16:16:0:fc00:0:1:e000::'
2025-02-06T07:47:21.5549012Z     
2025-02-06T07:47:21.5549240Z         # create interface
2025-02-06T07:47:21.5549569Z >       self.create_l3_intf("Ethernet104", "")
2025-02-06T07:47:21.5549650Z 
2025-02-06T07:47:21.5550572Z test_srv6.py:377: 
2025-02-06T07:47:21.5550923Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2025-02-06T07:47:21.5551263Z test_srv6.py:95: in create_l3_intf
2025-02-06T07:47:21.5554543Z     self.adb.wait_for_n_keys(table, len(existed_entries) + 1)
2025-02-06T07:47:21.5555008Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2025-02-06T07:47:21.5555196Z 
2025-02-06T07:47:21.5555541Z self = <dvslib.dvs_database.DVSDatabase object at 0x7f9a2303dac0>
2025-02-06T07:47:21.5555931Z table_name = 'ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE', num_keys = 3
2025-02-06T07:47:21.5556280Z wait_at_least_n_keys = False
2025-02-06T07:47:21.5556621Z polling_config = PollingConfig(polling_interval=0.01, timeout=20.0, strict=True)
2025-02-06T07:47:21.5556961Z failure_message = None
2025-02-06T07:47:21.5557064Z 
2025-02-06T07:47:21.5557356Z     def wait_for_n_keys(
2025-02-06T07:47:21.5557532Z         self,
2025-02-06T07:47:21.5557839Z         table_name: str,
2025-02-06T07:47:21.5558078Z         num_keys: int,
2025-02-06T07:47:21.5558554Z         wait_at_least_n_keys: bool = False,
2025-02-06T07:47:21.5558815Z         polling_config: PollingConfig = PollingConfig(),
2025-02-06T07:47:21.5559003Z         failure_message: str = None,
2025-02-06T07:47:21.5559152Z     ) -> List[str]:
2025-02-06T07:47:21.5559380Z         """Wait for the specified number of keys to exist in the table.
2025-02-06T07:47:21.5559867Z     
2025-02-06T07:47:21.5560133Z         Args:
2025-02-06T07:47:21.5560312Z             table_name: The name of the table from which to fetch the keys.
2025-02-06T07:47:21.5560535Z             num_keys: The expected number of keys to retrieve from the table.
2025-02-06T07:47:21.5560901Z             polling_config: The parameters to use to poll the db.
2025-02-06T07:47:21.5561412Z             failure_message: The message to print if the call times out. This will only take effect
2025-02-06T07:47:21.5562102Z                 if the PollingConfig is set to strict.
2025-02-06T07:47:21.5562268Z     
2025-02-06T07:47:21.5562471Z         Returns:
2025-02-06T07:47:21.5562998Z             The keys stored in the table. If no keys are found, then an empty List is returned.
2025-02-06T07:47:21.5563280Z         """
2025-02-06T07:47:21.5563457Z     
2025-02-06T07:47:21.5567532Z         def access_function():
2025-02-06T07:47:21.5567951Z             keys = self.get_keys(table_name)
2025-02-06T07:47:21.5568281Z             if wait_at_least_n_keys:
2025-02-06T07:47:21.5568582Z                 return (len(keys) >= num_keys, keys)
2025-02-06T07:47:21.5568745Z             else:
2025-02-06T07:47:21.5568963Z                 return (len(keys) == num_keys, keys)
2025-02-06T07:47:21.5569225Z     
2025-02-06T07:47:21.5569514Z         status, result = wait_for_result(
2025-02-06T07:47:21.5569798Z             access_function, self._disable_strict_polling(polling_config)
2025-02-06T07:47:21.5570138Z         )
2025-02-06T07:47:21.5570377Z     
2025-02-06T07:47:21.5570610Z         if not status:
2025-02-06T07:47:21.5571264Z             message = failure_message or (
2025-02-06T07:47:21.5571636Z                 f"Unexpected number of keys: expected={num_keys}, received={len(result)} "
2025-02-06T07:47:21.5572018Z                 f'({result}), table="{table_name}"'
2025-02-06T07:47:21.5572310Z             )
2025-02-06T07:47:21.5572609Z >           assert not polling_config.strict, message
2025-02-06T07:47:21.5573164Z E           AssertionError: Unexpected number of keys: expected=3, received=2 (('oid:0x60000000005c9', 'oid:0x6000000000618')), table="ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE"
2025-02-06T07:47:21.5573594Z 
2025-02-06T07:47:21.5573923Z dvslib/dvs_database.py:414: AssertionError
2025-02-06T07:47:21.5574351Z ______________________________ TestSrv6.test_srv6 ______________________________
2025-02-06T07:47:21.5574560Z 
2025-02-06T07:47:21.5574863Z self = <test_srv6.TestSrv6 object at 0x7f9a22a923a0>
2025-02-06T07:47:21.5575260Z dvs = <conftest.DockerVirtualSwitch object at 0x7f9a22ca3910>, testlog = None
2025-02-06T07:47:21.5575701Z 
2025-02-06T07:47:21.5575998Z     def test_srv6(self, dvs, testlog):
2025-02-06T07:47:21.5576313Z         self.setup_db(dvs)
2025-02-06T07:47:21.5576581Z         dvs.setup_db()
2025-02-06T07:47:21.5576836Z     
2025-02-06T07:47:21.5577105Z         # save exist asic db entries
2025-02-06T07:47:21.5577551Z         tunnel_entries = get_exist_entries(self.adb.db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_TUNNEL")
2025-02-06T07:47:21.5578121Z         nexthop_entries = get_exist_entries(self.adb.db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP")
2025-02-06T07:47:21.5578931Z         route_entries = get_exist_entries(self.adb.db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_ROUTE_ENTRY")
2025-02-06T07:47:21.5579539Z     
2025-02-06T07:47:21.5579773Z     
2025-02-06T07:47:21.5580047Z         # bring up interfacee
2025-02-06T07:47:21.5580375Z         dvs.set_interface_status("Ethernet104", "up")
2025-02-06T07:47:21.5580776Z         dvs.set_interface_status("Ethernet112", "up")
2025-02-06T07:47:21.5581156Z         dvs.set_interface_status("Ethernet120", "up")
2025-02-06T07:47:21.5581438Z     
2025-02-06T07:47:21.5581714Z         # add neighbors
2025-02-06T07:47:21.5582271Z         self.add_neighbor("Ethernet104", "baba:2001:10::", "00:00:00:01:02:01")
2025-02-06T07:47:21.5582775Z         self.add_neighbor("Ethernet112", "baba:2002:10::", "00:00:00:01:02:02")
2025-02-06T07:47:21.5583265Z         self.add_neighbor("Ethernet120", "baba:2003:10::", "00:00:00:01:02:03")
2025-02-06T07:47:21.5583634Z     
2025-02-06T07:47:21.5583877Z         # create seg lists
2025-02-06T07:47:21.5584283Z >       sidlist_id = self.create_sidlist('seg1', 'baba:2001:10::,baba:2001:20::')
2025-02-06T07:47:21.5584542Z 
2025-02-06T07:47:21.5584803Z test_srv6.py:539: 
2025-02-06T07:47:21.5585145Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2025-02-06T07:47:21.5585755Z test_srv6.py:477: in create_sidlist
2025-02-06T07:47:21.5586136Z     self.adb.wait_for_n_keys(table, len(existed_entries) + 1)
2025-02-06T07:47:21.5586534Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2025-02-06T07:47:21.5586685Z 
2025-02-06T07:47:21.5587002Z self = <dvslib.dvs_database.DVSDatabase object at 0x7f9a2303dac0>
2025-02-06T07:47:21.5587576Z table_name = 'ASIC_STATE:SAI_OBJECT_TYPE_SRV6_SIDLIST', num_keys = 2
2025-02-06T07:47:21.5587781Z wait_at_least_n_keys = False
2025-02-06T07:47:21.5588087Z polling_config = PollingConfig(polling_interval=0.01, timeout=20.0, strict=True)
2025-02-06T07:47:21.5588296Z failure_message = None
2025-02-06T07:47:21.5588395Z 
2025-02-06T07:47:21.5588643Z     def wait_for_n_keys(
2025-02-06T07:47:21.5588799Z         self,
2025-02-06T07:47:21.5589080Z         table_name: str,
2025-02-06T07:47:21.5589236Z         num_keys: int,
2025-02-06T07:47:21.5589973Z         wait_at_least_n_keys: bool = False,
2025-02-06T07:47:21.5590336Z         polling_config: PollingConfig = PollingConfig(),
2025-02-06T07:47:21.5590760Z         failure_message: str = None,
2025-02-06T07:47:21.5591093Z     ) -> List[str]:
2025-02-06T07:47:21.5591268Z         """Wait for the specified number of keys to exist in the table.
2025-02-06T07:47:21.5591429Z     
2025-02-06T07:47:21.5591580Z         Args:
2025-02-06T07:47:21.5591756Z             table_name: The name of the table from which to fetch the keys.
2025-02-06T07:47:21.5591946Z             num_keys: The expected number of keys to retrieve from the table.
2025-02-06T07:47:21.5592149Z             polling_config: The parameters to use to poll the db.
2025-02-06T07:47:21.5592365Z             failure_message: The message to print if the call times out. This will only take effect
2025-02-06T07:47:21.5592570Z                 if the PollingConfig is set to strict.
2025-02-06T07:47:21.5592720Z     
2025-02-06T07:47:21.5592853Z         Returns:
2025-02-06T07:47:21.5593021Z             The keys stored in the table. If no keys are found, then an empty List is returned.
2025-02-06T07:47:21.5593203Z         """
2025-02-06T07:47:21.5593722Z     
2025-02-06T07:47:21.5593863Z         def access_function():
2025-02-06T07:47:21.5594023Z             keys = self.get_keys(table_name)
2025-02-06T07:47:21.5594184Z             if wait_at_least_n_keys:
2025-02-06T07:47:21.5594330Z                 return (len(keys) >= num_keys, keys)
2025-02-06T07:47:21.5594481Z             else:
2025-02-06T07:47:21.5594633Z                 return (len(keys) == num_keys, keys)
2025-02-06T07:47:21.5594774Z     
2025-02-06T07:47:21.5594921Z         status, result = wait_for_result(
2025-02-06T07:47:21.5595119Z             access_function, self._disable_strict_polling(polling_config)
2025-02-06T07:47:21.5595283Z         )
2025-02-06T07:47:21.5595424Z     
2025-02-06T07:47:21.5595834Z         if not status:
2025-02-06T07:47:21.5596118Z             message = failure_message or (
2025-02-06T07:47:21.5596466Z                 f"Unexpected number of keys: expected={num_keys}, received={len(result)} "
2025-02-06T07:47:21.5596835Z                 f'({result}), table="{table_name}"'
2025-02-06T07:47:21.5597118Z             )
2025-02-06T07:47:21.5597391Z >           assert not polling_config.strict, message
2025-02-06T07:47:21.5597914Z E           AssertionError: Unexpected number of keys: expected=2, received=1 (('oid:0x3d00000000061a',)), table="ASIC_STATE:SAI_OBJECT_TYPE_SRV6_SIDLIST"
2025-02-06T07:47:21.5598205Z 
2025-02-06T07:47:21.5598526Z dvslib/dvs_database.py:414: AssertionError
2025-02-06T07:47:21.5598931Z _______________ TestSrv6MySidFpmsyncd.test_AddRemoveSrv6MySidEnd _______________
2025-02-06T07:47:21.5599126Z 
2025-02-06T07:47:21.5599457Z self = <test_srv6.TestSrv6MySidFpmsyncd object at 0x7f9a22a66400>
2025-02-06T07:47:21.5599921Z dvs = <conftest.DockerVirtualSwitch object at 0x7f9a22ca3910>, testlog = None
2025-02-06T07:47:21.5600099Z 
2025-02-06T07:47:21.5600943Z     def test_AddRemoveSrv6MySidEnd(self, dvs, testlog):
2025-02-06T07:47:21.5602194Z     
2025-02-06T07:47:21.5602547Z         _, output = dvs.runcmd(f"vtysh -c 'show zebra dplane providers'")
2025-02-06T07:47:21.5602973Z         if 'dplane_fpm_sonic' not in output:
2025-02-06T07:47:21.5603442Z             pytest.skip("'dplane_fpm_sonic' required for this test is not available, skipping", allow_module_level=True)
2025-02-06T07:47:21.5603855Z     
2025-02-06T07:47:21.5604158Z >       self.setup_srv6(dvs)
2025-02-06T07:47:21.5604286Z 
2025-02-06T07:47:21.5604580Z test_srv6.py:828: 
2025-02-06T07:47:21.5604987Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2025-02-06T07:47:21.5621424Z test_srv6.py:727: in setup_srv6
2025-02-06T07:47:21.5621877Z     self.create_l3_intf("Ethernet104", "")
2025-02-06T07:47:21.5622230Z test_srv6.py:693: in create_l3_intf
2025-02-06T07:47:21.5622619Z     self.adb.wait_for_n_keys(table, len(existed_entries) + 1)
2025-02-06T07:47:21.5623195Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2025-02-06T07:47:21.5623378Z 
2025-02-06T07:47:21.5623891Z self = <dvslib.dvs_database.DVSDatabase object at 0x7f9a2303dac0>
2025-02-06T07:47:21.5624399Z table_name = 'ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE', num_keys = 3
2025-02-06T07:47:21.5624804Z wait_at_least_n_keys = False
2025-02-06T07:47:21.5625396Z polling_config = PollingConfig(polling_interval=0.01, timeout=20.0, strict=True)
2025-02-06T07:47:21.5625816Z failure_message = None
2025-02-06T07:47:21.5625954Z 
2025-02-06T07:47:21.5626247Z     def wait_for_n_keys(
2025-02-06T07:47:21.5626548Z         self,
2025-02-06T07:47:21.5627004Z         table_name: str,
2025-02-06T07:47:21.5627681Z         num_keys: int,
2025-02-06T07:47:21.5628005Z         wait_at_least_n_keys: bool = False,
2025-02-06T07:47:21.5628408Z         polling_config: PollingConfig = PollingConfig(),
2025-02-06T07:47:21.5628779Z         failure_message: str = None,
2025-02-06T07:47:21.5629135Z     ) -> List[str]:
2025-02-06T07:47:21.5629534Z         """Wait for the specified number of keys to exist in the table.
2025-02-06T07:47:21.5629919Z     
2025-02-06T07:47:21.5630187Z         Args:
2025-02-06T07:47:21.5631189Z             table_name: The name of the table from which to fetch the keys.
2025-02-06T07:47:21.5632017Z             num_keys: The expected number of keys to retrieve from the table.
2025-02-06T07:47:21.5632417Z             polling_config: The parameters to use to poll the db.
2025-02-06T07:47:21.5632853Z             failure_message: The message to print if the call times out. This will only take effect
2025-02-06T07:47:21.5633265Z                 if the PollingConfig is set to strict.
2025-02-06T07:47:21.5633600Z     
2025-02-06T07:47:21.5633830Z         Returns:
2025-02-06T07:47:21.5634193Z             The keys stored in the table. If no keys are found, then an empty List is returned.
2025-02-06T07:47:21.5634538Z         """
2025-02-06T07:47:21.5634963Z     
2025-02-06T07:47:21.5635396Z         def access_function():
2025-02-06T07:47:21.5635714Z             keys = self.get_keys(table_name)
2025-02-06T07:47:21.5636075Z             if wait_at_least_n_keys:
2025-02-06T07:47:21.5636423Z                 return (len(keys) >= num_keys, keys)
2025-02-06T07:47:21.5636760Z             else:
2025-02-06T07:47:21.5637080Z                 return (len(keys) == num_keys, keys)
2025-02-06T07:47:21.5637391Z     
2025-02-06T07:47:21.5637688Z         status, result = wait_for_result(
2025-02-06T07:47:21.5638080Z             access_function, self._disable_strict_polling(polling_config)
2025-02-06T07:47:21.5638428Z         )
2025-02-06T07:47:21.5638684Z     
2025-02-06T07:47:21.5638946Z         if not status:
2025-02-06T07:47:21.5639224Z             message = failure_message or (
2025-02-06T07:47:21.5639608Z                 f"Unexpected number of keys: expected={num_keys}, received={len(result)} "
2025-02-06T07:47:21.5639988Z                 f'({result}), table="{table_name}"'
2025-02-06T07:47:21.5640265Z             )
2025-02-06T07:47:21.5640565Z >           assert not polling_config.strict, message
2025-02-06T07:47:21.5641433Z E           AssertionError: Unexpected number of keys: expected=3, received=2 (('oid:0x60000000005c9', 'oid:0x6000000000618')), table="ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE"
2025-02-06T07:47:21.5641829Z 
2025-02-06T07:47:21.5642136Z dvslib/dvs_database.py:414: AssertionError
2025-02-06T07:47:21.5642575Z ______________ TestSrv6MySidFpmsyncd.test_AddRemoveSrv6MySidEndX _______________
2025-02-06T07:47:21.5642790Z 
2025-02-06T07:47:21.5643116Z self = <test_srv6.TestSrv6MySidFpmsyncd object at 0x7f9a22dd1340>
2025-02-06T07:47:21.5643546Z dvs = <conftest.DockerVirtualSwitch object at 0x7f9a22ca3910>, testlog = None
2025-02-06T07:47:21.5643732Z 
2025-02-06T07:47:21.5644051Z     def test_AddRemoveSrv6MySidEndX(self, dvs, testlog):
2025-02-06T07:47:21.5644360Z     
2025-02-06T07:47:21.5644686Z         _, output = dvs.runcmd(f"vtysh -c 'show zebra dplane providers'")
2025-02-06T07:47:21.5645015Z         if 'dplane_fpm_sonic' not in output:
2025-02-06T07:47:21.5645466Z             pytest.skip("'dplane_fpm_sonic' required for this test is not available, skipping", allow_module_level=True)
2025-02-06T07:47:21.5645899Z     
2025-02-06T07:47:21.5646159Z >       self.setup_srv6(dvs)
2025-02-06T07:47:21.5646263Z 
2025-02-06T07:47:21.5646535Z test_srv6.py:873: 
2025-02-06T07:47:21.5647050Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2025-02-06T07:47:21.5647416Z test_srv6.py:727: in setup_srv6
2025-02-06T07:47:21.5647765Z     self.create_l3_intf("Ethernet104", "")
2025-02-06T07:47:21.5648295Z test_srv6.py:693: in create_l3_intf
2025-02-06T07:47:21.5648678Z     self.adb.wait_for_n_keys(table, len(existed_entries) + 1)
2025-02-06T07:47:21.5649090Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2025-02-06T07:47:21.5649236Z 
2025-02-06T07:47:21.5649558Z self = <dvslib.dvs_database.DVSDatabase object at 0x7f9a2303dac0>
2025-02-06T07:47:21.5650168Z table_name = 'ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE', num_keys = 3
2025-02-06T07:47:21.5651021Z wait_at_least_n_keys = False
2025-02-06T07:47:21.5651250Z polling_config = PollingConfig(polling_interval=0.01, timeout=20.0, strict=True)
2025-02-06T07:47:21.5651627Z failure_message = None
2025-02-06T07:47:21.5651689Z 
2025-02-06T07:47:21.5651998Z     def wait_for_n_keys(
2025-02-06T07:47:21.5652215Z         self,
2025-02-06T07:47:21.5653237Z         table_name: str,
2025-02-06T07:47:21.5653609Z         num_keys: int,
2025-02-06T07:47:21.5653925Z         wait_at_least_n_keys: bool = False,
2025-02-06T07:47:21.5654574Z         polling_config: PollingConfig = PollingConfig(),
2025-02-06T07:47:21.5654752Z         failure_message: str = None,
2025-02-06T07:47:21.5654907Z     ) -> List[str]:
2025-02-06T07:47:21.5655811Z         """Wait for the specified number of keys to exist in the table.
2025-02-06T07:47:21.5656206Z     
2025-02-06T07:47:21.5656341Z         Args:
2025-02-06T07:47:21.5656840Z             table_name: The name of the table from which to fetch the keys.
2025-02-06T07:47:21.5657907Z             num_keys: The expected number of keys to retrieve from the table.
2025-02-06T07:47:21.5658387Z             polling_config: The parameters to use to poll the db.
2025-02-06T07:47:21.5659158Z             failure_message: The message to print if the call times out. This will only take effect
2025-02-06T07:47:21.5659643Z                 if the PollingConfig is set to strict.
2025-02-06T07:47:21.5659956Z     
2025-02-06T07:47:21.5660225Z         Returns:
2025-02-06T07:47:21.5660609Z             The keys stored in the table. If no keys are found, then an empty List is returned.
2025-02-06T07:47:21.5660956Z         """
2025-02-06T07:47:21.5661233Z     
2025-02-06T07:47:21.5661535Z         def access_function():
2025-02-06T07:47:21.5661887Z             keys = self.get_keys(table_name)
2025-02-06T07:47:21.5662070Z             if wait_at_least_n_keys:
2025-02-06T07:47:21.5662454Z                 return (len(keys) >= num_keys, keys)
2025-02-06T07:47:21.5662613Z             else:
2025-02-06T07:47:21.5663165Z                 return (len(keys) == num_keys, keys)
2025-02-06T07:47:21.5663869Z     
2025-02-06T07:47:21.5664194Z         status, result = wait_for_result(
2025-02-06T07:47:21.5664780Z             access_function, self._disable_strict_polling(polling_config)
2025-02-06T07:47:21.5665159Z         )
2025-02-06T07:47:21.5665389Z     
2025-02-06T07:47:21.5665567Z         if not status:
2025-02-06T07:47:21.5666684Z             message = failure_message or (
2025-02-06T07:47:21.5667106Z                 f"Unexpected number of keys: expected={num_keys}, received={len(result)} "
2025-02-06T07:47:21.5667712Z                 f'({result}), table="{table_name}"'
2025-02-06T07:47:21.5674912Z             )
2025-02-06T07:47:21.5675246Z >           assert not polling_config.strict, message
2025-02-06T07:47:21.5676141Z E           AssertionError: Unexpected number of keys: expected=3, received=2 (('oid:0x60000000005c9', 'oid:0x6000000000618')), table="ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE"
2025-02-06T07:47:21.5676323Z 
2025-02-06T07:47:21.5676542Z dvslib/dvs_database.py:414: AssertionError
2025-02-06T07:47:21.5676981Z _____________ TestSrv6MySidFpmsyncd.test_AddRemoveSrv6MySidEndDT4 ______________
2025-02-06T07:47:21.5677172Z 
2025-02-06T07:47:21.5677570Z self = <test_srv6.TestSrv6MySidFpmsyncd object at 0x7f9a22a922b0>
2025-02-06T07:47:21.5677965Z dvs = <conftest.DockerVirtualSwitch object at 0x7f9a22ca3910>, testlog = None
2025-02-06T07:47:21.5678058Z 
2025-02-06T07:47:21.5678237Z     @pytest.mark.skipif(LooseVersion(platform.release()) < LooseVersion('5.11'),
2025-02-06T07:47:21.5678450Z                         reason="This test requires Linux kernel 5.11 or higher")
2025-02-06T07:47:21.5678631Z     def test_AddRemoveSrv6MySidEndDT4(self, dvs, testlog):
2025-02-06T07:47:21.5679019Z     
2025-02-06T07:47:21.5679356Z         _, output = dvs.runcmd(f"vtysh -c 'show zebra dplane providers'")
2025-02-06T07:47:21.5679793Z         if 'dplane_fpm_sonic' not in output:
2025-02-06T07:47:21.5680106Z             pytest.skip("'dplane_fpm_sonic' required for this test is not available, skipping", allow_module_level=True)
2025-02-06T07:47:21.5680851Z     
2025-02-06T07:47:21.5680990Z >       self.setup_srv6(dvs)
2025-02-06T07:47:21.5681068Z 
2025-02-06T07:47:21.5681214Z test_srv6.py:924: 
2025-02-06T07:47:21.5681400Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2025-02-06T07:47:21.5681584Z test_srv6.py:727: in setup_srv6
2025-02-06T07:47:21.5681814Z     self.create_l3_intf("Ethernet104", "")
2025-02-06T07:47:21.5682131Z test_srv6.py:693: in create_l3_intf
2025-02-06T07:47:21.5682512Z     self.adb.wait_for_n_keys(table, len(existed_entries) + 1)
2025-02-06T07:47:21.5682814Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2025-02-06T07:47:21.5682946Z 
2025-02-06T07:47:21.5683821Z self = <dvslib.dvs_database.DVSDatabase object at 0x7f9a2303dac0>
2025-02-06T07:47:21.5684881Z table_name = 'ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE', num_keys = 3
2025-02-06T07:47:21.5685563Z wait_at_least_n_keys = False
2025-02-06T07:47:21.5686384Z polling_config = PollingConfig(polling_interval=0.01, timeout=20.0, strict=True)
2025-02-06T07:47:21.5686822Z failure_message = None
2025-02-06T07:47:21.5686946Z 
2025-02-06T07:47:21.5687206Z     def wait_for_n_keys(
2025-02-06T07:47:21.5687728Z         self,
2025-02-06T07:47:21.5688012Z         table_name: str,
2025-02-06T07:47:21.5688325Z         num_keys: int,
2025-02-06T07:47:21.5688821Z         wait_at_least_n_keys: bool = False,
2025-02-06T07:47:21.5689557Z         polling_config: PollingConfig = PollingConfig(),
2025-02-06T07:47:21.5689946Z         failure_message: str = None,
2025-02-06T07:47:21.5690269Z     ) -> List[str]:
2025-02-06T07:47:21.5691025Z         """Wait for the specified number of keys to exist in the table.
2025-02-06T07:47:21.5691330Z     
2025-02-06T07:47:21.5691600Z         Args:
2025-02-06T07:47:21.5692151Z             table_name: The name of the table from which to fetch the keys.
2025-02-06T07:47:21.5692638Z             num_keys: The expected number of keys to retrieve from the table.
2025-02-06T07:47:21.5693210Z             polling_config: The parameters to use to poll the db.
2025-02-06T07:47:21.5693721Z             failure_message: The message to print if the call times out. This will only take effect
2025-02-06T07:47:21.5694142Z                 if the PollingConfig is set to strict.
2025-02-06T07:47:21.5694472Z     
2025-02-06T07:47:21.5694637Z         Returns:
2025-02-06T07:47:21.5697487Z             The keys stored in the table. If no keys are found, then an empty List is returned.
2025-02-06T07:47:21.5697839Z         """
2025-02-06T07:47:21.5698058Z     
2025-02-06T07:47:21.5698321Z         def access_function():
2025-02-06T07:47:21.5698587Z             keys = self.get_keys(table_name)
2025-02-06T07:47:21.5699194Z             if wait_at_least_n_keys:
2025-02-06T07:47:21.5699527Z                 return (len(keys) >= num_keys, keys)
2025-02-06T07:47:21.5699874Z             else:
2025-02-06T07:47:21.5700329Z                 return (len(keys) == num_keys, keys)
2025-02-06T07:47:21.5700764Z     
2025-02-06T07:47:21.5701052Z         status, result = wait_for_result(
2025-02-06T07:47:21.5701436Z             access_function, self._disable_strict_polling(polling_config)
2025-02-06T07:47:21.5701764Z         )
2025-02-06T07:47:21.5702839Z     
2025-02-06T07:47:21.5703122Z         if not status:
2025-02-06T07:47:21.5703829Z             message = failure_message or (
2025-02-06T07:47:21.5705095Z                 f"Unexpected number of keys: expected={num_keys}, received={len(result)} "
2025-02-06T07:47:21.5705713Z                 f'({result}), table="{table_name}"'
2025-02-06T07:47:21.5706023Z             )
2025-02-06T07:47:21.5706551Z >           assert not polling_config.strict, message
2025-02-06T07:47:21.5708663Z E           AssertionError: Unexpected number of keys: expected=3, received=2 (('oid:0x60000000005c9', 'oid:0x6000000000618')), table="ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE"
2025-02-06T07:47:21.5709141Z 
2025-02-06T07:47:21.5709527Z dvslib/dvs_database.py:414: AssertionError
2025-02-06T07:47:21.5710094Z _____________ TestSrv6MySidFpmsyncd.test_AddRemoveSrv6MySidEndDT6 ______________
2025-02-06T07:47:21.5710632Z 
2025-02-06T07:47:21.5711183Z self = <test_srv6.TestSrv6MySidFpmsyncd object at 0x7f9a22d402b0>
2025-02-06T07:47:21.5711758Z dvs = <conftest.DockerVirtualSwitch object at 0x7f9a22ca3910>, testlog = None
2025-02-06T07:47:21.5712316Z 
2025-02-06T07:47:21.5712798Z     def test_AddRemoveSrv6MySidEndDT6(self, dvs, testlog):
2025-02-06T07:47:21.5713096Z     
2025-02-06T07:47:21.5713412Z         _, output = dvs.runcmd(f"vtysh -c 'show zebra dplane providers'")
2025-02-06T07:47:21.5713756Z         if 'dplane_fpm_sonic' not in output:
2025-02-06T07:47:21.5714202Z             pytest.skip("'dplane_fpm_sonic' required for this test is not available, skipping", allow_module_level=True)
2025-02-06T07:47:21.5714769Z     
2025-02-06T07:47:21.5715043Z >       self.setup_srv6(dvs)
2025-02-06T07:47:21.5715164Z 
2025-02-06T07:47:21.5715601Z test_srv6.py:972: 
2025-02-06T07:47:21.5715932Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2025-02-06T07:47:21.5716292Z test_srv6.py:727: in setup_srv6
2025-02-06T07:47:21.5716623Z     self.create_l3_intf("Ethernet104", "")
2025-02-06T07:47:21.5716966Z test_srv6.py:693: in create_l3_intf
2025-02-06T07:47:21.5717478Z     self.adb.wait_for_n_keys(table, len(existed_entries) + 1)
2025-02-06T07:47:21.5718258Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2025-02-06T07:47:21.5718368Z 
2025-02-06T07:47:21.5719013Z self = <dvslib.dvs_database.DVSDatabase object at 0x7f9a2303dac0>
2025-02-06T07:47:21.5719922Z table_name = 'ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE', num_keys = 3
2025-02-06T07:47:21.5720319Z wait_at_least_n_keys = False
2025-02-06T07:47:21.5721036Z polling_config = PollingConfig(polling_interval=0.01, timeout=20.0, strict=True)
2025-02-06T07:47:21.5721470Z failure_message = None
2025-02-06T07:47:21.5721593Z 
2025-02-06T07:47:21.5722252Z     def wait_for_n_keys(
2025-02-06T07:47:21.5722530Z         self,
2025-02-06T07:47:21.5722804Z         table_name: str,
2025-02-06T07:47:21.5723098Z         num_keys: int,
2025-02-06T07:47:21.5723412Z         wait_at_least_n_keys: bool = False,
2025-02-06T07:47:21.5723774Z         polling_config: PollingConfig = PollingConfig(),
2025-02-06T07:47:21.5724128Z         failure_message: str = None,
2025-02-06T07:47:21.5724458Z     ) -> List[str]:
2025-02-06T07:47:21.5724768Z         """Wait for the specified number of keys to exist in the table.
2025-02-06T07:47:21.5725080Z     
2025-02-06T07:47:21.5725331Z         Args:
2025-02-06T07:47:21.5725604Z             table_name: The name of the table from which to fetch the keys.
2025-02-06T07:47:21.5726201Z             num_keys: The expected number of keys to retrieve from the table.
2025-02-06T07:47:21.5726852Z             polling_config: The parameters to use to poll the db.
2025-02-06T07:47:21.5727446Z             failure_message: The message to print if the call times out. This will only take effect
2025-02-06T07:47:21.5727907Z                 if the PollingConfig is set to strict.
2025-02-06T07:47:21.5728208Z     
2025-02-06T07:47:21.5728486Z         Returns:
2025-02-06T07:47:21.5728843Z             The keys stored in the table. If no keys are found, then an empty List is returned.
2025-02-06T07:47:21.5729189Z         """
2025-02-06T07:47:21.5729692Z     
2025-02-06T07:47:21.5730102Z         def access_function():
2025-02-06T07:47:21.5730642Z             keys = self.get_keys(table_name)
2025-02-06T07:47:21.5731304Z             if wait_at_least_n_keys:
2025-02-06T07:47:21.5731667Z                 return (len(keys) >= num_keys, keys)
2025-02-06T07:47:21.5732006Z             else:
2025-02-06T07:47:21.5732359Z                 return (len(keys) == num_keys, keys)
2025-02-06T07:47:21.5732823Z     
2025-02-06T07:47:21.5733327Z         status, result = wait_for_result(
2025-02-06T07:47:21.5733732Z             access_function, self._disable_strict_polling(polling_config)
2025-02-06T07:47:21.5734729Z         )
2025-02-06T07:47:21.5734941Z     
2025-02-06T07:47:21.5735585Z         if not status:
2025-02-06T07:47:21.5735979Z             message = failure_message or (
2025-02-06T07:47:21.5736645Z                 f"Unexpected number of keys: expected={num_keys}, received={len(result)} "
2025-02-06T07:47:21.5737238Z                 f'({result}), table="{table_name}"'
2025-02-06T07:47:21.5737424Z             )
2025-02-06T07:47:21.5737665Z >           assert not polling_config.strict, message
2025-02-06T07:47:21.5739030Z E           AssertionError: Unexpected number of keys: expected=3, received=2 (('oid:0x60000000005c9', 'oid:0x6000000000618')), table="ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE"
2025-02-06T07:47:21.5739473Z 
2025-02-06T07:47:21.5739883Z dvslib/dvs_database.py:414: AssertionError
2025-02-06T07:47:21.5740992Z ______________ TestSrv6MySidFpmsyncd.test_AddRemoveSrv6MySidUDT4 _______________
2025-02-06T07:47:21.5741222Z 
2025-02-06T07:47:21.5742071Z self = <test_srv6.TestSrv6MySidFpmsyncd object at 0x7f9a23139850>
2025-02-06T07:47:21.5742925Z dvs = <conftest.DockerVirtualSwitch object at 0x7f9a22ca3910>, testlog = None
2025-02-06T07:47:21.5743138Z 
2025-02-06T07:47:21.5743602Z     @pytest.mark.skipif(LooseVersion(platform.release()) < LooseVersion('5.11'),
2025-02-06T07:47:21.5744364Z                         reason="This test requires Linux kernel 5.11 or higher")
2025-02-06T07:47:21.5745675Z     def test_AddRemoveSrv6MySidUDT4(self, dvs, testlog):
2025-02-06T07:47:21.5746315Z     
2025-02-06T07:47:21.5746695Z         _, output = dvs.runcmd(f"vtysh -c 'show zebra dplane providers'")
2025-02-06T07:47:21.5747110Z         if 'dplane_fpm_sonic' not in output:
2025-02-06T07:47:21.5748435Z             pytest.skip("'dplane_fpm_sonic' required for this test is not available, skipping", allow_module_level=True)
2025-02-06T07:47:21.5748884Z     
2025-02-06T07:47:21.5749366Z >       self.setup_srv6(dvs)
2025-02-06T07:47:21.5749506Z 
2025-02-06T07:47:21.5749824Z test_srv6.py:1167: 
2025-02-06T07:47:21.5750922Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2025-02-06T07:47:21.5751319Z test_srv6.py:727: in setup_srv6
2025-02-06T07:47:21.5751669Z     self.create_l3_intf("Ethernet104", "")
2025-02-06T07:47:21.5752038Z test_srv6.py:693: in create_l3_intf
2025-02-06T07:47:21.5752575Z     self.adb.wait_for_n_keys(table, len(existed_entries) + 1)
2025-02-06T07:47:21.5753268Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2025-02-06T07:47:21.5753442Z 
2025-02-06T07:47:21.5754222Z self = <dvslib.dvs_database.DVSDatabase object at 0x7f9a2303dac0>
2025-02-06T07:47:21.5755421Z table_name = 'ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE', num_keys = 3
2025-02-06T07:47:21.5755852Z wait_at_least_n_keys = False
2025-02-06T07:47:21.5756529Z polling_config = PollingConfig(polling_interval=0.01, timeout=20.0, strict=True)
2025-02-06T07:47:21.5756953Z failure_message = None
2025-02-06T07:47:21.5757087Z 
2025-02-06T07:47:21.5757369Z     def wait_for_n_keys(
2025-02-06T07:47:21.5757680Z         self,
2025-02-06T07:47:21.5758543Z         table_name: str,
2025-02-06T07:47:21.5758882Z         num_keys: int,
2025-02-06T07:47:21.5759224Z         wait_at_least_n_keys: bool = False,
2025-02-06T07:47:21.5759648Z         polling_config: PollingConfig = PollingConfig(),
2025-02-06T07:47:21.5760020Z         failure_message: str = None,
2025-02-06T07:47:21.5760349Z     ) -> List[str]:
2025-02-06T07:47:21.5760710Z         """Wait for the specified number of keys to exist in the table.
2025-02-06T07:47:21.5761057Z     
2025-02-06T07:47:21.5761329Z         Args:
2025-02-06T07:47:21.5761704Z             table_name: The name of the table from which to fetch the keys.
2025-02-06T07:47:21.5762155Z             num_keys: The expected number of keys to retrieve from the table.
2025-02-06T07:47:21.5762598Z             polling_config: The parameters to use to poll the db.
2025-02-06T07:47:21.5763043Z             failure_message: The message to print if the call times out. This will only take effect
2025-02-06T07:47:21.5763515Z                 if the PollingConfig is set to strict.
2025-02-06T07:47:21.5764128Z     
2025-02-06T07:47:21.5764413Z         Returns:
2025-02-06T07:47:21.5764836Z             The keys stored in the table. If no keys are found, then an empty List is returned.
2025-02-06T07:47:21.5765369Z         """
2025-02-06T07:47:21.5765624Z     
2025-02-06T07:47:21.5765904Z         def access_function():
2025-02-06T07:47:21.5766245Z             keys = self.get_keys(table_name)
2025-02-06T07:47:21.5766593Z             if wait_at_least_n_keys:
2025-02-06T07:47:21.5766956Z                 return (len(keys) >= num_keys, keys)
2025-02-06T07:47:21.5767287Z             else:
2025-02-06T07:47:21.5767617Z                 return (len(keys) == num_keys, keys)
2025-02-06T07:47:21.5767898Z     
2025-02-06T07:47:21.5768213Z         status, result = wait_for_result(
2025-02-06T07:47:21.5768616Z             access_function, self._disable_strict_polling(polling_config)
2025-02-06T07:47:21.5768982Z         )
2025-02-06T07:47:21.5769238Z     
2025-02-06T07:47:21.5769522Z         if not status:
2025-02-06T07:47:21.5769838Z             message = failure_message or (
2025-02-06T07:47:21.5770251Z                 f"Unexpected number of keys: expected={num_keys}, received={len(result)} "
2025-02-06T07:47:21.5770845Z                 f'({result}), table="{table_name}"'
2025-02-06T07:47:21.5771151Z             )
2025-02-06T07:47:21.5771466Z >           assert not polling_config.strict, message
2025-02-06T07:47:21.5772465Z E           AssertionError: Unexpected number of keys: expected=3, received=2 (('oid:0x60000000005c9', 'oid:0x6000000000618')), table="ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE"
2025-02-06T07:47:21.5772892Z 
2025-02-06T07:47:21.5773207Z dvslib/dvs_database.py:414: AssertionError
2025-02-06T07:47:21.5774080Z ______________ TestSrv6MySidFpmsyncd.test_AddRemoveSrv6MySidUDT6 _______________
2025-02-06T07:47:21.5774333Z 
2025-02-06T07:47:21.5775433Z self = <test_srv6.TestSrv6MySidFpmsyncd object at 0x7f9a22c104c0>
2025-02-06T07:47:21.5776249Z dvs = <conftest.DockerVirtualSwitch object at 0x7f9a22ca3910>, testlog = None
2025-02-06T07:47:21.5776485Z 
2025-02-06T07:47:21.5776906Z     def test_AddRemoveSrv6MySidUDT6(self, dvs, testlog):
2025-02-06T07:47:21.5777236Z     
2025-02-06T07:47:21.5777702Z         _, output = dvs.runcmd(f"vtysh -c 'show zebra dplane providers'")
2025-02-06T07:47:21.5778161Z         if 'dplane_fpm_sonic' not in output:
2025-02-06T07:47:21.5779480Z             pytest.skip("'dplane_fpm_sonic' required for this test is not available, skipping", allow_module_level=True)
2025-02-06T07:47:21.5779929Z     
2025-02-06T07:47:21.5780217Z >       self.setup_srv6(dvs)
2025-02-06T07:47:21.5780354Z 
2025-02-06T07:47:21.5780634Z test_srv6.py:1215: 
2025-02-06T07:47:21.5781492Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2025-02-06T07:47:21.5781985Z test_srv6.py:727: in setup_srv6
2025-02-06T07:47:21.5782370Z     self.create_l3_intf("Ethernet104", "")
2025-02-06T07:47:21.5783027Z test_srv6.py:693: in create_l3_intf
2025-02-06T07:47:21.5783606Z     self.adb.wait_for_n_keys(table, len(existed_entries) + 1)
2025-02-06T07:47:21.5784322Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2025-02-06T07:47:21.5784549Z 
2025-02-06T07:47:21.5786171Z self = <dvslib.dvs_database.DVSDatabase object at 0x7f9a2303dac0>
2025-02-06T07:47:21.5787077Z table_name = 'ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE', num_keys = 3
2025-02-06T07:47:21.5788048Z wait_at_least_n_keys = False
2025-02-06T07:47:21.5788818Z polling_config = PollingConfig(polling_interval=0.01, timeout=20.0, strict=True)
2025-02-06T07:47:21.5789239Z failure_message = None
2025-02-06T07:47:21.5789540Z 
2025-02-06T07:47:21.5789891Z     def wait_for_n_keys(
2025-02-06T07:47:21.5790346Z         self,
2025-02-06T07:47:21.5790824Z         table_name: str,
2025-02-06T07:47:21.5791114Z         num_keys: int,
2025-02-06T07:47:21.5791622Z         wait_at_least_n_keys: bool = False,
2025-02-06T07:47:21.5792024Z         polling_config: PollingConfig = PollingConfig(),
2025-02-06T07:47:21.5792704Z         failure_message: str = None,
2025-02-06T07:47:21.5793195Z     ) -> List[str]:
2025-02-06T07:47:21.5794125Z         """Wait for the specified number of keys to exist in the table.
2025-02-06T07:47:21.5794481Z     
2025-02-06T07:47:21.5794735Z         Args:
2025-02-06T07:47:21.5795106Z             table_name: The name of the table from which to fetch the keys.
2025-02-06T07:47:21.5795516Z             num_keys: The expected number of keys to retrieve from the table.
2025-02-06T07:47:21.5795956Z             polling_config: The parameters to use to poll the db.
2025-02-06T07:47:21.5796394Z             failure_message: The message to print if the call times out. This will only take effect
2025-02-06T07:47:21.5796839Z                 if the PollingConfig is set to strict.
2025-02-06T07:47:21.5797142Z     
2025-02-06T07:47:21.5797417Z         Returns:
2025-02-06T07:47:21.5797796Z             The keys stored in the table. If no keys are found, then an empty List is returned.
2025-02-06T07:47:21.5798160Z         """
2025-02-06T07:47:21.5798419Z     
2025-02-06T07:47:21.5798705Z         def access_function():
2025-02-06T07:47:21.5799250Z             keys = self.get_keys(table_name)
2025-02-06T07:47:21.5799595Z             if wait_at_least_n_keys:
2025-02-06T07:47:21.5799959Z                 return (len(keys) >= num_keys, keys)
2025-02-06T07:47:21.5800297Z             else:
2025-02-06T07:47:21.5800610Z                 return (len(keys) == num_keys, keys)
2025-02-06T07:47:21.5800934Z     
2025-02-06T07:47:21.5801406Z         status, result = wait_for_result(
2025-02-06T07:47:21.5801816Z             access_function, self._disable_strict_polling(polling_config)
2025-02-06T07:47:21.5802177Z         )
2025-02-06T07:47:21.5802436Z     
2025-02-06T07:47:21.5802691Z         if not status:
2025-02-06T07:47:21.5803030Z             message = failure_message or (
2025-02-06T07:47:21.5809966Z                 f"Unexpected number of keys: expected={num_keys}, received={len(result)} "
2025-02-06T07:47:21.5810892Z                 f'({result}), table="{table_name}"'
2025-02-06T07:47:21.5811219Z             )
2025-02-06T07:47:21.5811705Z >           assert not polling_config.strict, message
2025-02-06T07:47:21.5812292Z E           AssertionError: Unexpected number of keys: expected=3, received=2 (('oid:0x60000000005c9', 'oid:0x6000000000618')), table="ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE"
2025-02-06T07:47:21.5812701Z 
2025-02-06T07:47:21.5812998Z dvslib/dvs_database.py:414: AssertionError
2025-02-06T07:47:21.5813437Z _____________________________ TestSrv6Vpn.test_pic _____________________________
2025-02-06T07:47:21.5813655Z 
2025-02-06T07:47:21.5813977Z self = <test_srv6.TestSrv6Vpn object at 0x7f9a23017670>
2025-02-06T07:47:21.5814401Z dvs = <conftest.DockerVirtualSwitch object at 0x7f9a22ca3910>, testlog = None
2025-02-06T07:47:21.5814642Z 
2025-02-06T07:47:21.5814948Z     def test_pic(self, dvs, testlog):
2025-02-06T07:47:21.5815288Z         self.setup_db(dvs)
2025-02-06T07:47:21.5815749Z         dvs.setup_db()
2025-02-06T07:47:21.5816036Z     
2025-02-06T07:47:21.5816318Z         segsrc_list = []
2025-02-06T07:47:21.5816623Z         nexthop_list = []
2025-02-06T07:47:21.5816925Z         ifname_list = []
2025-02-06T07:47:21.5817200Z         vpn_list = []
2025-02-06T07:47:21.5817501Z         nhg_index = '100'
2025-02-06T07:47:21.5817810Z         pic_ctx_index = '200'
2025-02-06T07:47:21.5818092Z     
2025-02-06T07:47:21.5818389Z         # save exist asic db entries
2025-02-06T07:47:21.5819127Z         tunnel_entries = get_exist_entries(self.adb.db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_TUNNEL")
2025-02-06T07:47:21.5819741Z         nexthop_entries = get_exist_entries(self.adb.db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP")
2025-02-06T07:47:21.5820382Z         map_entries = get_exist_entries(self.adb.db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_TUNNEL_MAP")
2025-02-06T07:47:21.5821027Z         nexthop_group_entries = get_exist_entries(self.adb.db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP_GROUP")
2025-02-06T07:47:21.5821966Z         nexthop_group_member_entries = get_exist_entries(self.adb.db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP_GROUP_MEMBER")
2025-02-06T07:47:21.5822638Z         map_entry_entries = get_exist_entries(self.adb.db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_TUNNEL_MAP_ENTRY")
2025-02-06T07:47:21.5823102Z     
2025-02-06T07:47:21.5823440Z         segsrc_list.append('1001:2000::1')
2025-02-06T07:47:21.5823830Z         segsrc_list.append('1001:2000::1')
2025-02-06T07:47:21.5824204Z     
2025-02-06T07:47:21.5824533Z         nexthop_list.append('2000::1')
2025-02-06T07:47:21.5824918Z         nexthop_list.append('2000::2')
2025-02-06T07:47:21.5825239Z     
2025-02-06T07:47:21.5825538Z         ifname_list.append('unknown')
2025-02-06T07:47:21.5825862Z         ifname_list.append('unknown')
2025-02-06T07:47:21.5826163Z     
2025-02-06T07:47:21.5826479Z         vpn_list.append('3000::1')
2025-02-06T07:47:21.5827025Z         vpn_list.append('3000::2')
2025-02-06T07:47:21.5827510Z     
2025-02-06T07:47:21.5827853Z >       self.create_nhg(nhg_index, nexthop_list, segsrc_list, ifname_list)
2025-02-06T07:47:21.5828064Z 
2025-02-06T07:47:21.5828368Z test_srv6.py:1759: 
2025-02-06T07:47:21.5828715Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2025-02-06T07:47:21.5829094Z test_srv6.py:1610: in create_nhg
2025-02-06T07:47:21.5829499Z     self.adb.wait_for_n_keys(table, len(existed_entries) + 1)
2025-02-06T07:47:21.5829915Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2025-02-06T07:47:21.5830076Z 
2025-02-06T07:47:21.5830764Z self = <dvslib.dvs_database.DVSDatabase object at 0x7f9a2303dac0>
2025-02-06T07:47:21.5831705Z table_name = 'ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP_GROUP', num_keys = 2
2025-02-06T07:47:21.5832158Z wait_at_least_n_keys = False
2025-02-06T07:47:21.5832582Z polling_config = PollingConfig(polling_interval=0.01, timeout=20.0, strict=True)
2025-02-06T07:47:21.5833266Z failure_message = None
2025-02-06T07:47:21.5833396Z 
2025-02-06T07:47:21.5833666Z     def wait_for_n_keys(
2025-02-06T07:47:21.5833877Z         self,
2025-02-06T07:47:21.5834169Z         table_name: str,
2025-02-06T07:47:21.5834473Z         num_keys: int,
2025-02-06T07:47:21.5834788Z         wait_at_least_n_keys: bool = False,
2025-02-06T07:47:21.5835185Z         polling_config: PollingConfig = PollingConfig(),
2025-02-06T07:47:21.5835552Z         failure_message: str = None,
2025-02-06T07:47:21.5835848Z     ) -> List[str]:
2025-02-06T07:47:21.5836214Z         """Wait for the specified number of keys to exist in the table.
2025-02-06T07:47:21.5836543Z     
2025-02-06T07:47:21.5836814Z         Args:
2025-02-06T07:47:21.5837172Z             table_name: The name of the table from which to fetch the keys.
2025-02-06T07:47:21.5837603Z             num_keys: The expected number of keys to retrieve from the table.
2025-02-06T07:47:21.5838053Z             polling_config: The parameters to use to poll the db.
2025-02-06T07:47:21.5838507Z             failure_message: The message to print if the call times out. This will only take effect
2025-02-06T07:47:21.5838955Z                 if the PollingConfig is set to strict.
2025-02-06T07:47:21.5839256Z     
2025-02-06T07:47:21.5839532Z         Returns:
2025-02-06T07:47:21.5839922Z             The keys stored in the table. If no keys are found, then an empty List is returned.
2025-02-06T07:47:21.5840267Z         """
2025-02-06T07:47:21.5840522Z     
2025-02-06T07:47:21.5840814Z         def access_function():
2025-02-06T07:47:21.5841159Z             keys = self.get_keys(table_name)
2025-02-06T07:47:21.5841508Z             if wait_at_least_n_keys:
2025-02-06T07:47:21.5841854Z                 return (len(keys) >= num_keys, keys)
2025-02-06T07:47:21.5842153Z             else:
2025-02-06T07:47:21.5842481Z                 return (len(keys) == num_keys, keys)
2025-02-06T07:47:21.5842779Z     
2025-02-06T07:47:21.5843090Z         status, result = wait_for_result(
2025-02-06T07:47:21.5843535Z             access_function, self._disable_strict_polling(polling_config)
2025-02-06T07:47:21.5844082Z         )
2025-02-06T07:47:21.5844310Z     
2025-02-06T07:47:21.5844589Z         if not status:
2025-02-06T07:47:21.5844918Z             message = failure_message or (
2025-02-06T07:47:21.5845334Z                 f"Unexpected number of keys: expected={num_keys}, received={len(result)} "
2025-02-06T07:47:21.5845912Z                 f'({result}), table="{table_name}"'
2025-02-06T07:47:21.5846184Z             )
2025-02-06T07:47:21.5846499Z >           assert not polling_config.strict, message
2025-02-06T07:47:21.5847054Z E           AssertionError: Unexpected number of keys: expected=2, received=1 (('oid:0x5000000000629',)), table="ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP_GROUP"
2025-02-06T07:47:21.5847405Z 
2025-02-06T07:47:21.5847704Z dvslib/dvs_database.py:414: AssertionError
2025-02-06T07:47:21.5848174Z ______________________ TestSrv6Vpn.test_srv6_vpn_with_nhg ______________________
2025-02-06T07:47:21.5848414Z 
2025-02-06T07:47:21.5848715Z self = <test_srv6.TestSrv6Vpn object at 0x7f9a23077130>
2025-02-06T07:47:21.5849144Z dvs = <conftest.DockerVirtualSwitch object at 0x7f9a22ca3910>, testlog = None
2025-02-06T07:47:21.5849361Z 
2025-02-06T07:47:21.5849638Z     def test_srv6_vpn_with_nhg(self, dvs, testlog):
2025-02-06T07:47:21.5849985Z         self.setup_db(dvs)
2025-02-06T07:47:21.5850291Z         dvs.setup_db()
2025-02-06T07:47:21.5850566Z     
2025-02-06T07:47:21.5850848Z         segsrc_list = []
2025-02-06T07:47:21.5851134Z         nexthop_list = []
2025-02-06T07:47:21.5851427Z         vpn_list = []
2025-02-06T07:47:21.5851716Z         ifname_list = []
2025-02-06T07:47:21.5852020Z         nhg_index = '100'
2025-02-06T07:47:21.5852330Z         pic_ctx_index = '200'
2025-02-06T07:47:21.5852610Z     
2025-02-06T07:47:21.5852878Z         # save exist asic db entries
2025-02-06T07:47:21.5853377Z         nexthop_group_entries = get_exist_entries(self.adb.db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP_GROUP")
2025-02-06T07:47:21.5854018Z     
2025-02-06T07:47:21.5854354Z         segsrc_list.append('1001:2000::1')
2025-02-06T07:47:21.5854761Z         segsrc_list.append('1001:2000::1')
2025-02-06T07:47:21.5855073Z     
2025-02-06T07:47:21.5855368Z         nexthop_list.append('2000::1')
2025-02-06T07:47:21.5855752Z         nexthop_list.append('2000::2')
2025-02-06T07:47:21.5856061Z     
2025-02-06T07:47:21.5856370Z         vpn_list.append('3000::1')
2025-02-06T07:47:21.5856757Z         vpn_list.append('3000::2')
2025-02-06T07:47:21.5857064Z     
2025-02-06T07:47:21.5857342Z         ifname_list.append('unknown')
2025-02-06T07:47:21.5857695Z         ifname_list.append('unknown')
2025-02-06T07:47:21.5857981Z     
2025-02-06T07:47:21.5858342Z >       self.create_nhg(nhg_index, nexthop_list, segsrc_list, ifname_list)
2025-02-06T07:47:21.5858530Z 
2025-02-06T07:47:21.5859138Z test_srv6.py:1895: 
2025-02-06T07:47:21.5859545Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2025-02-06T07:47:21.5860589Z test_srv6.py:1610: in create_nhg
2025-02-06T07:47:21.5860832Z     self.adb.wait_for_n_keys(table, len(existed_entries) + 1)
2025-02-06T07:47:21.5862961Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2025-02-06T07:47:21.5863455Z 
2025-02-06T07:47:21.5864116Z self = <dvslib.dvs_database.DVSDatabase object at 0x7f9a2303dac0>
2025-02-06T07:47:21.5864681Z table_name = 'ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP_GROUP', num_keys = 2
2025-02-06T07:47:21.5865135Z wait_at_least_n_keys = False
2025-02-06T07:47:21.5865806Z polling_config = PollingConfig(polling_interval=0.01, timeout=20.0, strict=True)
2025-02-06T07:47:21.5866227Z failure_message = None
2025-02-06T07:47:21.5866673Z 
2025-02-06T07:47:21.5866947Z     def wait_for_n_keys(
2025-02-06T07:47:21.5867401Z         self,
2025-02-06T07:47:21.5867865Z         table_name: str,
2025-02-06T07:47:21.5868143Z         num_keys: int,
2025-02-06T07:47:21.5868477Z         wait_at_least_n_keys: bool = False,
2025-02-06T07:47:21.5868867Z         polling_config: PollingConfig = PollingConfig(),
2025-02-06T07:47:21.5869546Z         failure_message: str = None,
2025-02-06T07:47:21.5869857Z     ) -> List[str]:
2025-02-06T07:47:21.5870347Z         """Wait for the specified number of keys to exist in the table.
2025-02-06T07:47:21.5870674Z     
2025-02-06T07:47:21.5870927Z         Args:
2025-02-06T07:47:21.5871288Z             table_name: The name of the table from which to fetch the keys.
2025-02-06T07:47:21.5871714Z             num_keys: The expected number of keys to retrieve from the table.
2025-02-06T07:47:21.5872116Z             polling_config: The parameters to use to poll the db.
2025-02-06T07:47:21.5872562Z             failure_message: The message to print if the call times out. This will only take effect
2025-02-06T07:47:21.5872953Z                 if the PollingConfig is set to strict.
2025-02-06T07:47:21.5873256Z     
2025-02-06T07:47:21.5873519Z         Returns:
2025-02-06T07:47:21.5873898Z             The keys stored in the table. If no keys are found, then an empty List is returned.
2025-02-06T07:47:21.5874273Z         """
2025-02-06T07:47:21.5874524Z     
2025-02-06T07:47:21.5874782Z         def access_function():
2025-02-06T07:47:21.5875222Z             keys = self.get_keys(table_name)
2025-02-06T07:47:21.5876460Z             if wait_at_least_n_keys:
2025-02-06T07:47:21.5877709Z                 return (len(keys) >= num_keys, keys)
2025-02-06T07:47:21.5878103Z             else:
2025-02-06T07:47:21.5878460Z                 return (len(keys) == num_keys, keys)
2025-02-06T07:47:21.5878846Z     
2025-02-06T07:47:21.5879558Z         status, result = wait_for_result(
2025-02-06T07:47:21.5879974Z             access_function, self._disable_strict_polling(polling_config)
2025-02-06T07:47:21.5880319Z         )
2025-02-06T07:47:21.5880568Z     
2025-02-06T07:47:21.5880844Z         if not status:
2025-02-06T07:47:21.5881133Z             message = failure_message or (
2025-02-06T07:47:21.5881328Z                 f"Unexpected number of keys: expected={num_keys}, received={len(result)} "
2025-02-06T07:47:21.5881837Z                 f'({result}), table="{table_name}"'
2025-02-06T07:47:21.5882068Z             )
2025-02-06T07:47:21.5882221Z >           assert not polling_config.strict, message
2025-02-06T07:47:21.5883067Z E           AssertionError: Unexpected number of keys: expected=2, received=1 (('oid:0x5000000000629',)), table="ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP_GROUP"
2025-02-06T07:47:21.5883331Z 
2025-02-06T07:47:21.5883495Z dvslib/dvs_database.py:414: AssertionError
2025-02-06T07:47:21.5887154Z _____________________ TestSrv6Vpn.test_srv6_vpn_nh_update ______________________
2025-02-06T07:47:21.5887436Z 
2025-02-06T07:47:21.5887814Z self = <test_srv6.TestSrv6Vpn object at 0x7f9a22ce1fd0>
2025-02-06T07:47:21.5889229Z dvs = <conftest.DockerVirtualSwitch object at 0x7f9a22ca3910>, testlog = None
2025-02-06T07:47:21.5889454Z 
2025-02-06T07:47:21.5889740Z     def test_srv6_vpn_nh_update(self, dvs, testlog):
2025-02-06T07:47:21.5890043Z         self.setup_db(dvs)
2025-02-06T07:47:21.5890549Z         dvs.setup_db()
2025-02-06T07:47:21.5890789Z     
2025-02-06T07:47:21.5891019Z         segsrc_list = []
2025-02-06T07:47:21.5891280Z         nexthop_list = []
2025-02-06T07:47:21.5891522Z         vpn_list = []
2025-02-06T07:47:21.5891755Z         ifname_list = []
2025-02-06T07:47:21.5891986Z     
2025-02-06T07:47:21.5892233Z         # save exist asic db entries
2025-02-06T07:47:21.5893276Z         nexthop_entries = get_exist_entries(self.adb.db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP")
2025-02-06T07:47:21.5894106Z         map_entry_entries = get_exist_entries(self.adb.db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_TUNNEL_MAP_ENTRY")
2025-02-06T07:47:21.5894487Z     
2025-02-06T07:47:21.5895103Z         nexthop_group_entries = get_exist_entries(self.adb.db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP_GROUP")
2025-02-06T07:47:21.5896224Z         nexthop_group_member_entries = get_exist_entries(self.adb.db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP_GROUP_MEMBER")
2025-02-06T07:47:21.5896820Z         map_entry_prefix_agg_id = "1"
2025-02-06T07:47:21.5897426Z         route_entry_prefix_agg_id = "1"
2025-02-06T07:47:21.5897749Z         route_entry_next_hop_id = "1"
2025-02-06T07:47:21.5898011Z     
2025-02-06T07:47:21.5898279Z         # create v4 route with vpn sid
2025-02-06T07:47:21.5899198Z >       route_key = self.create_srv6_vpn_route('5000::/64', '2000::1', '1001:2000::1', '3000::1', 'unknown')
2025-02-06T07:47:21.5899636Z 
2025-02-06T07:47:21.5900104Z test_srv6.py:1968: 
2025-02-06T07:47:21.5900766Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2025-02-06T07:47:21.5901565Z test_srv6.py:1572: in create_srv6_vpn_route
2025-02-06T07:47:21.5902159Z     self.adb.wait_for_n_keys(table, len(existed_entries) + 1)
2025-02-06T07:47:21.5903502Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2025-02-06T07:47:21.5903687Z 
2025-02-06T07:47:21.5904626Z self = <dvslib.dvs_database.DVSDatabase object at 0x7f9a2303dac0>
2025-02-06T07:47:21.5906070Z table_name = 'ASIC_STATE:SAI_OBJECT_TYPE_ROUTE_ENTRY', num_keys = 7
2025-02-06T07:47:21.5907456Z wait_at_least_n_keys = False
2025-02-06T07:47:21.5908980Z polling_config = PollingConfig(polling_interval=0.01, timeout=20.0, strict=True)
2025-02-06T07:47:21.5909436Z failure_message = None
2025-02-06T07:47:21.5909579Z 
2025-02-06T07:47:21.5909907Z     def wait_for_n_keys(
2025-02-06T07:47:21.5911552Z         self,
2025-02-06T07:47:21.5912045Z         table_name: str,
2025-02-06T07:47:21.5912535Z         num_keys: int,
2025-02-06T07:47:21.5912844Z         wait_at_least_n_keys: bool = False,
2025-02-06T07:47:21.5913258Z         polling_config: PollingConfig = PollingConfig(),
2025-02-06T07:47:21.5913608Z         failure_message: str = None,
2025-02-06T07:47:21.5913928Z     ) -> List[str]:
2025-02-06T07:47:21.5914445Z         """Wait for the specified number of keys to exist in the table.
2025-02-06T07:47:21.5914941Z     
2025-02-06T07:47:21.5915675Z         Args:
2025-02-06T07:47:21.5916089Z             table_name: The name of the table from which to fetch the keys.
2025-02-06T07:47:21.5916469Z             num_keys: The expected number of keys to retrieve from the table.
2025-02-06T07:47:21.5919044Z             polling_config: The parameters to use to poll the db.
2025-02-06T07:47:21.5921389Z             failure_message: The message to print if the call times out. This will only take effect
2025-02-06T07:47:21.5921687Z                 if the PollingConfig is set to strict.
2025-02-06T07:47:21.5921982Z     
2025-02-06T07:47:21.5922171Z         Returns:
2025-02-06T07:47:21.5923009Z             The keys stored in the table. If no keys are found, then an empty List is returned.
2025-02-06T07:47:21.5923185Z         """
2025-02-06T07:47:21.5923319Z     
2025-02-06T07:47:21.5923939Z         def access_function():
2025-02-06T07:47:21.5924261Z             keys = self.get_keys(table_name)
2025-02-06T07:47:21.5924590Z             if wait_at_least_n_keys:
2025-02-06T07:47:21.5925835Z                 return (len(keys) >= num_keys, keys)
2025-02-06T07:47:21.5926130Z             else:
2025-02-06T07:47:21.5926418Z                 return (len(keys) == num_keys, keys)
2025-02-06T07:47:21.5926679Z     
2025-02-06T07:47:21.5926953Z         status, result = wait_for_result(
2025-02-06T07:47:21.5927327Z             access_function, self._disable_strict_polling(polling_config)
2025-02-06T07:47:21.5927814Z         )
2025-02-06T07:47:21.5928061Z     
2025-02-06T07:47:21.5928349Z         if not status:
2025-02-06T07:47:21.5928715Z             message = failure_message or (
2025-02-06T07:47:21.5929256Z                 f"Unexpected number of keys: expected={num_keys}, received={len(result)} "
2025-02-06T07:47:21.5929644Z                 f'({result}), table="{table_name}"'
2025-02-06T07:47:21.5929928Z             )
2025-02-06T07:47:21.5930301Z >           assert not polling_config.strict, message
2025-02-06T07:47:21.5933838Z E           AssertionError: Unexpected number of keys: expected=7, received=6 (('{"dest":"fe80::/10","switch_id":"oid:0x21000000000000","vr":"oid:0x3000000000022"}', '{"dest":"::/0","switch_id":"oid:0x21000000000000","vr":"oid:0x3000000000022"}', '{"dest":"20.20.20.20/32","switch_id":"oid:0x21000000000000","vr":"oid:0x3000000000022"}', '{"dest":"5000::/64","switch_id":"oid:0x21000000000000","vr":"oid:0x3000000000022"}', '{"dest":"fe80::42:acff:fe11:7/128","switch_id":"oid:0x21000000000000","vr":"oid:0x3000000000022"}', '{"dest":"0.0.0.0/0","switch_id":"oid:0x21000000000000","vr":"oid:0x3000000000022"}')), table="ASIC_STATE:SAI_OBJECT_TYPE_ROUTE_ENTRY"
2025-02-06T07:47:21.5935086Z 
2025-02-06T07:47:21.5935401Z dvslib/dvs_database.py:414: AssertionError
2025-02-06T07:47:21.5935829Z --------- generated xml file: /agent/_work/1/s/tests/test_srv6_tr.xml ----------
2025-02-06T07:47:21.5936440Z ===Flaky Test Report===
2025-02-06T07:47:21.5936553Z 
2025-02-06T07:47:21.5936879Z test_mysid passed 1 out of the required 1 times. Success!
2025-02-06T07:47:21.5937248Z test_mysid_l3adj failed (1 runs remaining out of 2).
2025-02-06T07:47:21.5937558Z 	<class 'AssertionError'>
2025-02-06T07:47:21.5938072Z 	Unexpected number of keys: expected=3, received=2 (('oid:0x60000000005c9', 'oid:0x6000000000618')), table="ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE"
2025-02-06T07:47:21.5938972Z 	[<TracebackEntry /agent/_work/1/s/tests/test_srv6.py:377>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:95>, <TracebackEntry /agent/_work/1/s/tests/dvslib/dvs_database.py:414>]
2025-02-06T07:47:21.5939509Z test_mysid_l3adj failed; it passed 0 out of the required 1 times.
2025-02-06T07:47:21.5939839Z 	<class 'AssertionError'>
2025-02-06T07:47:21.5940311Z 	Unexpected number of keys: expected=3, received=2 (('oid:0x60000000005c9', 'oid:0x6000000000618')), table="ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE"
2025-02-06T07:47:21.5940958Z 	[<TracebackEntry /agent/_work/1/s/tests/test_srv6.py:377>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:95>, <TracebackEntry /agent/_work/1/s/tests/dvslib/dvs_database.py:414>]
2025-02-06T07:47:21.5941662Z test_srv6 failed (1 runs remaining out of 2).
2025-02-06T07:47:21.5941966Z 	<class 'AssertionError'>
2025-02-06T07:47:21.5942254Z 	Wrong number of created entries.
2025-02-06T07:47:21.5942506Z assert 2 == 1
2025-02-06T07:47:21.5942734Z   -2
2025-02-06T07:47:21.5942946Z   +1
2025-02-06T07:47:21.5943314Z 	[<TracebackEntry /agent/_work/1/s/tests/test_srv6.py:554>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:21>]
2025-02-06T07:47:21.5943733Z test_srv6 failed; it passed 0 out of the required 1 times.
2025-02-06T07:47:21.5944021Z 	<class 'AssertionError'>
2025-02-06T07:47:21.5944459Z 	Unexpected number of keys: expected=2, received=1 (('oid:0x3d00000000061a',)), table="ASIC_STATE:SAI_OBJECT_TYPE_SRV6_SIDLIST"
2025-02-06T07:47:21.5945075Z 	[<TracebackEntry /agent/_work/1/s/tests/test_srv6.py:539>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:477>, <TracebackEntry /agent/_work/1/s/tests/dvslib/dvs_database.py:414>]
2025-02-06T07:47:21.5945762Z test_AddRemoveSrv6MySidEnd failed (1 runs remaining out of 2).
2025-02-06T07:47:21.5946225Z 	<class 'AssertionError'>
2025-02-06T07:47:21.5946693Z 	Unexpected number of keys: expected=3, received=2 (('oid:0x60000000005c9', 'oid:0x6000000000618')), table="ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE"
2025-02-06T07:47:21.5947780Z 	[<TracebackEntry /agent/_work/1/s/tests/test_srv6.py:828>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:727>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:693>, <TracebackEntry /agent/_work/1/s/tests/dvslib/dvs_database.py:414>]
2025-02-06T07:47:21.5948399Z test_AddRemoveSrv6MySidEnd failed; it passed 0 out of the required 1 times.
2025-02-06T07:47:21.5948718Z 	<class 'AssertionError'>
2025-02-06T07:47:21.5949204Z 	Unexpected number of keys: expected=3, received=2 (('oid:0x60000000005c9', 'oid:0x6000000000618')), table="ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE"
2025-02-06T07:47:21.5949967Z 	[<TracebackEntry /agent/_work/1/s/tests/test_srv6.py:828>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:727>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:693>, <TracebackEntry /agent/_work/1/s/tests/dvslib/dvs_database.py:414>]
2025-02-06T07:47:21.5951099Z test_AddRemoveSrv6MySidEndX failed (1 runs remaining out of 2).
2025-02-06T07:47:21.5951401Z 	<class 'AssertionError'>
2025-02-06T07:47:21.5951857Z 	Unexpected number of keys: expected=3, received=2 (('oid:0x60000000005c9', 'oid:0x6000000000618')), table="ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE"
2025-02-06T07:47:21.5952561Z 	[<TracebackEntry /agent/_work/1/s/tests/test_srv6.py:873>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:727>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:693>, <TracebackEntry /agent/_work/1/s/tests/dvslib/dvs_database.py:414>]
2025-02-06T07:47:21.5953145Z test_AddRemoveSrv6MySidEndX failed; it passed 0 out of the required 1 times.
2025-02-06T07:47:21.5953458Z 	<class 'AssertionError'>
2025-02-06T07:47:21.5953884Z 	Unexpected number of keys: expected=3, received=2 (('oid:0x60000000005c9', 'oid:0x6000000000618')), table="ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE"
2025-02-06T07:47:21.5954584Z 	[<TracebackEntry /agent/_work/1/s/tests/test_srv6.py:873>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:727>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:693>, <TracebackEntry /agent/_work/1/s/tests/dvslib/dvs_database.py:414>]
2025-02-06T07:47:21.5955154Z test_AddRemoveSrv6MySidEndDT4 failed (1 runs remaining out of 2).
2025-02-06T07:47:21.5955471Z 	<class 'AssertionError'>
2025-02-06T07:47:21.5955918Z 	Unexpected number of keys: expected=3, received=2 (('oid:0x60000000005c9', 'oid:0x6000000000618')), table="ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE"
2025-02-06T07:47:21.5956604Z 	[<TracebackEntry /agent/_work/1/s/tests/test_srv6.py:924>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:727>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:693>, <TracebackEntry /agent/_work/1/s/tests/dvslib/dvs_database.py:414>]
2025-02-06T07:47:21.5957338Z test_AddRemoveSrv6MySidEndDT4 failed; it passed 0 out of the required 1 times.
2025-02-06T07:47:21.5957863Z 	<class 'AssertionError'>
2025-02-06T07:47:21.5958323Z 	Unexpected number of keys: expected=3, received=2 (('oid:0x60000000005c9', 'oid:0x6000000000618')), table="ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE"
2025-02-06T07:47:21.5959050Z 	[<TracebackEntry /agent/_work/1/s/tests/test_srv6.py:924>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:727>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:693>, <TracebackEntry /agent/_work/1/s/tests/dvslib/dvs_database.py:414>]
2025-02-06T07:47:21.5959628Z test_AddRemoveSrv6MySidEndDT6 failed (1 runs remaining out of 2).
2025-02-06T07:47:21.5959940Z 	<class 'AssertionError'>
2025-02-06T07:47:21.5960412Z 	Unexpected number of keys: expected=3, received=2 (('oid:0x60000000005c9', 'oid:0x6000000000618')), table="ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE"
2025-02-06T07:47:21.5961161Z 	[<TracebackEntry /agent/_work/1/s/tests/test_srv6.py:972>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:727>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:693>, <TracebackEntry /agent/_work/1/s/tests/dvslib/dvs_database.py:414>]
2025-02-06T07:47:21.5961769Z test_AddRemoveSrv6MySidEndDT6 failed; it passed 0 out of the required 1 times.
2025-02-06T07:47:21.5962088Z 	<class 'AssertionError'>
2025-02-06T07:47:21.5962553Z 	Unexpected number of keys: expected=3, received=2 (('oid:0x60000000005c9', 'oid:0x6000000000618')), table="ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE"
2025-02-06T07:47:21.5963248Z 	[<TracebackEntry /agent/_work/1/s/tests/test_srv6.py:972>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:727>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:693>, <TracebackEntry /agent/_work/1/s/tests/dvslib/dvs_database.py:414>]
2025-02-06T07:47:21.5963819Z test_AddRemoveSrv6MySidUDT4 failed (1 runs remaining out of 2).
2025-02-06T07:47:21.5964189Z 	<class 'AssertionError'>
2025-02-06T07:47:21.5964648Z 	Unexpected number of keys: expected=3, received=2 (('oid:0x60000000005c9', 'oid:0x6000000000618')), table="ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE"
2025-02-06T07:47:21.5965391Z 	[<TracebackEntry /agent/_work/1/s/tests/test_srv6.py:1167>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:727>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:693>, <TracebackEntry /agent/_work/1/s/tests/dvslib/dvs_database.py:414>]
2025-02-06T07:47:21.5966157Z test_AddRemoveSrv6MySidUDT4 failed; it passed 0 out of the required 1 times.
2025-02-06T07:47:21.5966478Z 	<class 'AssertionError'>
2025-02-06T07:47:21.5966966Z 	Unexpected number of keys: expected=3, received=2 (('oid:0x60000000005c9', 'oid:0x6000000000618')), table="ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE"
2025-02-06T07:47:21.5967822Z 	[<TracebackEntry /agent/_work/1/s/tests/test_srv6.py:1167>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:727>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:693>, <TracebackEntry /agent/_work/1/s/tests/dvslib/dvs_database.py:414>]
2025-02-06T07:47:21.5968552Z test_AddRemoveSrv6MySidUDT6 failed (1 runs remaining out of 2).
2025-02-06T07:47:21.5968860Z 	<class 'AssertionError'>
2025-02-06T07:47:21.5969320Z 	Unexpected number of keys: expected=3, received=2 (('oid:0x60000000005c9', 'oid:0x6000000000618')), table="ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE"
2025-02-06T07:47:21.5970040Z 	[<TracebackEntry /agent/_work/1/s/tests/test_srv6.py:1215>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:727>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:693>, <TracebackEntry /agent/_work/1/s/tests/dvslib/dvs_database.py:414>]
2025-02-06T07:47:21.5970799Z test_AddRemoveSrv6MySidUDT6 failed; it passed 0 out of the required 1 times.
2025-02-06T07:47:21.5971114Z 	<class 'AssertionError'>
2025-02-06T07:47:21.5971546Z 	Unexpected number of keys: expected=3, received=2 (('oid:0x60000000005c9', 'oid:0x6000000000618')), table="ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE"
2025-02-06T07:47:21.5972251Z 	[<TracebackEntry /agent/_work/1/s/tests/test_srv6.py:1215>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:727>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:693>, <TracebackEntry /agent/_work/1/s/tests/dvslib/dvs_database.py:414>]
2025-02-06T07:47:21.5972988Z test_AddRemoveSrv6SteeringRouteIpv4 passed 1 out of the required 1 times. Success!
2025-02-06T07:47:21.5973372Z test_AddRemoveSrv6SteeringRouteIpv6 passed 1 out of the required 1 times. Success!
2025-02-06T07:47:21.5973728Z test_srv6_vpn_with_single_nh passed 1 out of the required 1 times. Success!
2025-02-06T07:47:21.5974061Z test_pic failed (1 runs remaining out of 2).
2025-02-06T07:47:21.5974336Z 	<class 'AssertionError'>
2025-02-06T07:47:21.5974609Z 	Wrong number of created entries.
2025-02-06T07:47:21.5974858Z assert 0 == 2
2025-02-06T07:47:21.5975075Z   -0
2025-02-06T07:47:21.5975263Z   +2
2025-02-06T07:47:21.5975609Z 	[<TracebackEntry /agent/_work/1/s/tests/test_srv6.py:1763>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:28>]
2025-02-06T07:47:21.5976014Z test_pic failed; it passed 0 out of the required 1 times.
2025-02-06T07:47:21.5976311Z 	<class 'AssertionError'>
2025-02-06T07:47:21.5976709Z 	Unexpected number of keys: expected=2, received=1 (('oid:0x5000000000629',)), table="ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP_GROUP"
2025-02-06T07:47:21.5977311Z 	[<TracebackEntry /agent/_work/1/s/tests/test_srv6.py:1759>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:1610>, <TracebackEntry /agent/_work/1/s/tests/dvslib/dvs_database.py:414>]
2025-02-06T07:47:21.5977811Z test_srv6_vpn_with_nhg failed (1 runs remaining out of 2).
2025-02-06T07:47:21.5978083Z 	<class 'AssertionError'>
2025-02-06T07:47:21.5978491Z 	Unexpected number of keys: expected=2, received=1 (('oid:0x5000000000629',)), table="ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP_GROUP"
2025-02-06T07:47:21.5979273Z 	[<TracebackEntry /agent/_work/1/s/tests/test_srv6.py:1895>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:1610>, <TracebackEntry /agent/_work/1/s/tests/dvslib/dvs_database.py:414>]
2025-02-06T07:47:21.5979771Z test_srv6_vpn_with_nhg failed; it passed 0 out of the required 1 times.
2025-02-06T07:47:21.5980091Z 	<class 'AssertionError'>
2025-02-06T07:47:21.5980499Z 	Unexpected number of keys: expected=2, received=1 (('oid:0x5000000000629',)), table="ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP_GROUP"
2025-02-06T07:47:21.5981502Z 	[<TracebackEntry /agent/_work/1/s/tests/test_srv6.py:1895>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:1610>, <TracebackEntry /agent/_work/1/s/tests/dvslib/dvs_database.py:414>]
2025-02-06T07:47:21.5981997Z test_srv6_vpn_nh_update failed (1 runs remaining out of 2).
2025-02-06T07:47:21.5982300Z 	<class 'AssertionError'>
2025-02-06T07:47:21.5982695Z 	Unexpected number of keys: expected=2, received=1 (('oid:0x5000000000629',)), table="ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP_GROUP"
2025-02-06T07:47:21.5983289Z 	[<TracebackEntry /agent/_work/1/s/tests/test_srv6.py:2004>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:1610>, <TracebackEntry /agent/_work/1/s/tests/dvslib/dvs_database.py:414>]
2025-02-06T07:47:21.5983761Z test_srv6_vpn_nh_update failed; it passed 0 out of the required 1 times.
2025-02-06T07:47:21.5984078Z 	<class 'AssertionError'>
2025-02-06T07:47:21.5985051Z 	Unexpected number of keys: expected=7, received=6 (('{"dest":"fe80::/10","switch_id":"oid:0x21000000000000","vr":"oid:0x3000000000022"}', '{"dest":"::/0","switch_id":"oid:0x21000000000000","vr":"oid:0x3000000000022"}', '{"dest":"20.20.20.20/32","switch_id":"oid:0x21000000000000","vr":"oid:0x3000000000022"}', '{"dest":"5000::/64","switch_id":"oid:0x21000000000000","vr":"oid:0x3000000000022"}', '{"dest":"fe80::42:acff:fe11:7/128","switch_id":"oid:0x21000000000000","vr":"oid:0x3000000000022"}', '{"dest":"0.0.0.0/0","switch_id":"oid:0x21000000000000","vr":"oid:0x3000000000022"}')), table="ASIC_STATE:SAI_OBJECT_TYPE_ROUTE_ENTRY"
2025-02-06T07:47:21.5986186Z 	[<TracebackEntry /agent/_work/1/s/tests/test_srv6.py:1968>, <TracebackEntry /agent/_work/1/s/tests/test_srv6.py:1572>, <TracebackEntry /agent/_work/1/s/tests/dvslib/dvs_database.py:414>]
2025-02-06T07:47:21.5986865Z test_nonflaky_dummy passed 1 out of the required 1 times. Success!
2025-02-06T07:47:21.5987434Z 
2025-02-06T07:47:21.5987885Z ===End Flaky Test Report===
2025-02-06T07:47:21.5988405Z ========= 11 failed, 3 passed, 4 skipped, 2 xpassed in 689.89 seconds ==========

@stephenxs
Copy link
Collaborator Author

/azpw run

@mssonicbld
Copy link
Collaborator

/AzurePipelines run

Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@stephenxs
Copy link
Collaborator Author

/azpw run

@mssonicbld
Copy link
Collaborator

/AzurePipelines run

Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@stephenxs
Copy link
Collaborator Author

/azpw run

@mssonicbld
Copy link
Collaborator

/AzurePipelines run

@stephenxs stephenxs requested a review from prsunny February 6, 2025 14:00
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@stephenxs stephenxs requested a review from dgsudharsan February 6, 2025 14:00
@stephenxs
Copy link
Collaborator Author

@prsunny @dgsudharsan could you review and approve the PR? I added unit tests since the last approval to meet the coverage. thanks

@prsunny prsunny merged commit 60433c7 into sonic-net:master Feb 6, 2025
15 checks passed
@mssonicbld
Copy link
Collaborator

Cherry-pick PR to 202411: #3500

@stephenxs stephenxs deleted the counter-optimization-all-in-one branch February 6, 2025 23:37
mssonicbld added a commit to mssonicbld/sonic-sairedis that referenced this pull request Feb 10, 2025
Define bulk chunk size and bulk chunk size per counter ID.
This is to resolve the VS test failure in sonic-net#1457, which is caused by loop dependency.
In PR sonic-net#1457, new fields `bulk_chunk_size` and `bulk_chunk_size_per_prefix` have been introduced to `sai_redis_flex_counter_group_parameter_t` whose instances are initialized by orchagent.
However, the orchagent is still compiled with the old sairedis header, which prevents both new fields from being uninitialized which in turn fails vs test.

We have to split this PR into two:
1. sonic-net#1519 which updates the header sairedis.h only. the motivation is to compile swss(orchagent) with both new fields initiated.
2. sonic-net#1457 contains all the rest of code

The order to merge:
1. sonic-net#1519
2. sonic-net/sonic-swss#3391
3. sonic-net#1457
mssonicbld added a commit to sonic-net/sonic-sairedis that referenced this pull request Feb 10, 2025
Define bulk chunk size and bulk chunk size per counter ID.
This is to resolve the VS test failure in #1457, which is caused by loop dependency.
In PR #1457, new fields `bulk_chunk_size` and `bulk_chunk_size_per_prefix` have been introduced to `sai_redis_flex_counter_group_parameter_t` whose instances are initialized by orchagent.
However, the orchagent is still compiled with the old sairedis header, which prevents both new fields from being uninitialized which in turn fails vs test.

We have to split this PR into two:
1. #1519 which updates the header sairedis.h only. the motivation is to compile swss(orchagent) with both new fields initiated.
2. #1457 contains all the rest of code

The order to merge:
1. #1519
2. sonic-net/sonic-swss#3391
3. #1457
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants