Wei Dai
90d · built 2026-09-08
Performance
What Wei Dai shipped in the selected window, measured in ETV, and how it compares with the 90 days before it.
Effective capacity
+1.2engineers
delivers like 2.2 (2.2x pre-AI)
Output (ETV)
13.2ETV
+17.6% vs 11.2 prior
Features share
28.6%
+15.3 pp vs prior window
Fixes share
22.3%
−18.8 pp vs prior window
Work mix
28.6% Features24.2% Maintenance22.6% Tests2.3% Docs22.3% Fixes
152 commits over 90 days, ending 2026-09-08.
Daily performance
Daily ETV, stacked by Features, Maintenance, Tests, Docs and Fixes.
Repository spread
Where this developer's commits land. Concentrated work (top1 > 80%) vs polymath spread (top1 < 30%).
Most impactful commits
Top 10 by ETV in the last 90 days.
- 0.7ETVFix cross-switch stale interface routes in DSF Summary: Fix S648783 bug where remote interface route deletes in DSF only matched by prefix, not by interface ID. When two remote DSF switches independently restart with swapped interface IPs, one switch's old-address cleanup could delete a route that now belongs to the other switch. ## Problem Consider three DSF switches: A, B, and C (subscriber). Initial state on switch C (routes learned via DsfSubscriber): | Prefix | Next-hop intf | Owned by | |----------------------------------|---------------|----------| | 2401:db00:e702:50:1000::20/127 | intf 401 | Switch A | | 2401:db00:e702:58:1000::/127 | intf 501 | Switch B | Now switch A and B swap their interface IPs: Switch A: 2401:db00:e702:50:1000::21/127 → 2401:db00:e702:58:1000::1/127 Switch B: 2401:db00:e702:58:1000::1/127 → 2401:db00:e702:50:1000::21/127 Each restart triggers a separate DsfSubscriber update on switch C. The bug is symmetric — whichever switch restarts second triggers it. **Step 1 — Switch A restarts first (separate getUpdatedState call):** processRemoteInterfaceRoutes for changed intf 401: delete 2401:db00:e702:50:1000::20/127 (A's old prefix) add 2401:db00:e702:58:1000::/127 (A's new prefix = B's old prefix) The add overwrites the existing route for 2401:db00:e702:58:1000::/127 (previously owned by switch B's intf 501) via addOrReplaceRouteImpl. State on switch C after step 1: | Prefix | Next-hop intf | Owned by | Change | |----------------------------------|---------------|----------|-------------| | 2401:db00:e702:50:1000::20/127 | | | DELETED | | 2401:db00:e702:58:1000::/127 | intf 401 | Switch A | REPLACED | **Step 2 — Switch B restarts second (separate getUpdatedState call):** processRemoteInterfaceRoutes for changed intf 501: delete 2401:db00:e702:58:1000::/127 (B's old prefix = A's new prefix) add 2401:db00:e702:50:1000::20/127 (B's new prefix = A's old prefix) WITHOUT THE FIX — the RIB deletes 2401:db00:e702:58:1000::/127 because it only matches by prefix, not by interface. This removes switch A's route that was just added in step 1: | Prefix | Next-hop intf | Owned by | Change | |----------------------------------|---------------|----------|--------------| | 2401:db00:e702:50:1000::20/127 | intf 501 | Switch B | ADDED | | 2401:db00:e702:58:1000::/127 | | | BUG: DELETED | Switch A's route is LOST. Traffic to 2401:db00:e702:58:1000::/127 is blackholed until switch A's DsfSubscription does a full resync. WITH THE FIX — the RIB checks that the existing route's next-hop interface (intf 401) does NOT match the requesting interface (intf 501), so the delete is skipped: | Prefix | Next-hop intf | Owned by | Change | |----------------------------------|---------------|----------|--------------| | 2401:db00:e702:50:1000::20/127 | intf 501 | Switch B | ADDED | | 2401:db00:e702:58:1000::/127 | intf 401 | Switch A | (unchanged) | Both routes exist. ✓ ## Root cause RouterIDToPrefixes (the delete table) only stored CIDRNetwork prefixes without tracking which interface originated each delete. The RIB's delRoute matched only by prefix, so a delete from one remote switch could remove a route owned by a different switch. ## Fix 1. Changed RouterIDToPrefixes from vector<CIDRNetwork> to vector<pair<CIDRNetwork, InterfaceID>> (PrefixWithIntf), so each delete entry carries the originating interface ID. 2. In RibRouteTables::updateRemoteInterfaceRoutes, before deleting a route, look up the existing route and check if its next-hop interface matches the requesting interface. If the route was already replaced by a different interface (from a prior DSF update from another remote switch), skip the delete. Reviewed By: zechengh09 Differential Revision: D101811635 fbshipit-source-id: a8369d4181b2ca88eda1b09493764a47a5ad39d7github.com-facebook-fboss · 091a88a9 · 2026-06-22
- 0.5ETVProgram ACL table bind points Summary: Create separate SWITCH-bound and PORT-bound SAI ACL table groups identified by stage and bind point. Create ACL tables with the matching SAI bind point, attach multiple tables to the port-bound group, and process both switch-state group maps. Reviewed By: jasmeetbagga Differential Revision: D117445897 fbshipit-source-id: cda23e45a0d13a0704553a14508b14b80b067476github.com-facebook-fboss · 91bc31cf · 2026-08-31
- 0.5ETVGate SAI precoding on port config Summary: Program per-lane TX and RX precoding values from the platform mapping only when the matching optional port config is enabled and link training is disabled. Use the per-port linkTraining config directly instead of a separate ASIC/port support gate, and reject configs that enable linkTraining together with either TX or RX precoding. On live config transitions, independently apply mapped values or reset the direction that relinquishes manual precoding ownership. Reviewed By: jasmeetbagga Differential Revision: D115774691 fbshipit-source-id: 6f209634ea61e84d1713314c4fa1e2ea843f063bgithub.com-facebook-fboss · 63b56c37 · 2026-08-24
- 0.5ETVPopulate port-bound ingress ACL state Summary: Populate a separate stage-keyed port-bound ACL table group map in switch state, store `ingressAclTableName` on each port, and validate that the referenced table exists in the PORT-bound ingress group. Reuse the existing ACL config application flow with a small table-name lookup across the switch-bound and port-bound state maps. Reviewed By: jasmeetbagga Differential Revision: D117461521 fbshipit-source-id: 8d0d5a4a47d05806f187d84cf438d71a709dbc34github.com-facebook-fboss · 2e75ad07 · 2026-08-31
- 0.4ETVFilter local system ports from remote system ports Summary: Remote system ports are derived from global-scoped system ports. Filter local-scoped system ports before building the remote-system-port multi-switch map, since local system ports can be scoped to multiple local VOQ switches. Reviewed By: shri-khare Differential Revision: D109376321 fbshipit-source-id: 536e11c0ae1f820a658337a505aa5826a82e70dbgithub.com-facebook-fboss · 8c26f77f · 2026-06-23
- 0.4ETVAdd `fboss2` cable length measurement trigger Summary: Add `fboss2 start port <ports> cable-length-measurement` to trigger one-shot cable length measurement through the HW agent thrift API. The command resolves queried port names to port IDs per HW agent and calls `triggerCableLengthMeasurement`. Reviewed By: simuthus-fb Differential Revision: D108769449 fbshipit-source-id: 459b801c4ca0f5b663ec3611ed8b05d053d940acgithub.com-facebook-fboss · b97aa662 · 2026-06-18
- 0.3ETVRemove Trident2 ASIC support Summary: Remove `ASIC_TYPE_TRIDENT2`, `Trident2Asic`, BCM TD2 queue defaults, factory and build wiring, and the remaining Trident2-specific branches and tests from `fboss/agent`, since this is not used anywhere now. Simplify behavior shared by the remaining supported ASICs, including EAPOL and lookup-class qualifier setup and the 40G MAC loopback test. Reviewed By: Tianyu-Meta Differential Revision: D114112847 fbshipit-source-id: e9725aa92a2c91c86f8bf1fd561f9744238c39eagithub.com-facebook-fboss · c96b8820 · 2026-08-03
- 0.3ETVGate SAI precoding on port config Summary: re-apply D115774691, excluded linkTrainingSupportedOnPort part for now, this diff only focused on precoding programming. Program per-lane TX and RX precoding values from the platform mapping only when the matching optional port config is enabled. Preserve the `montblanc_precoding` flag as a fallback while port configs are populated, and reject configs that enable `linkTraining` together with either TX or RX precoding. Reviewed By: simuthus-fb Differential Revision: D117294466 fbshipit-source-id: 554918261fafca95f83a966efef78ddbdd08def3github.com-facebook-fboss · 0d69b21b · 2026-08-25
- 0.3ETVSplit SAI platform construction by vendor Summary: Just move around codes for now. This final goal of this diff stack is to make wedge_agent, wedge_agent_csco, wedge_agent_nvda binaries only build with related broadcom, cisco, nvidia platforms codes, respectively, see buck target improvements in later D113583401 Move SAI platform and port construction into vendor-specific translation units while preserving the existing broad source inclusion. This prepares the platform library for source-list narrowing without changing behavior in this layer. Reviewed By: simuthus-fb Differential Revision: D113583404 fbshipit-source-id: 72b03eb6c00649108de6981dc79183a5cc9dadeegithub.com-facebook-fboss · 66d1ef5a · 2026-07-28
- 0.3ETVAccount for port range in DSF inband sysport ID Summary: processUpdatedDsfNodes() computed an interface node inband system-port ID as globalSystemPortOffset + inbandPortId. That works only when inbandPortId is an offset in the node's port range. On multi-NPU platforms where the configured inbandPortId is the absolute port ID, this can produce a non-existent interface ID. For DSF interface nodes modeled in switchIdToSwitchInfo, require the inband port ID to fall within the modeled portIdRange and include portIdRange.minimum when computing the system port ID. If the switch info or global system port offset is missing, or the modeled inband port is outside the range, throw FbossError instead of silently computing an invalid system port ID. Update the state tests that previously added an unmodeled remote interface DSF node at runtime to assert that this invalid config is rejected, while keeping fabric-node update coverage and direct RemoteInterfaceType::STATIC_ENTRY coverage. Reviewed By: simuthus-fb Differential Revision: D109384419 fbshipit-source-id: 34a029291fbed2d176523f13f69947be04f416c0github.com-facebook-fboss · 6c007b4d · 2026-06-25