Skip to content

Pass FIB suppression flag and to orchagent to control APPL_STATE_DB and pub/sub - #26151

Merged
yxieca merged 1 commit into
sonic-net:masterfrom
mike-dubrovsky:fib-supression
Aug 4, 2026
Merged

Pass FIB suppression flag and to orchagent to control APPL_STATE_DB and pub/sub#26151
yxieca merged 1 commit into
sonic-net:masterfrom
mike-dubrovsky:fib-supression

Conversation

@mike-dubrovsky

@mike-dubrovsky mike-dubrovsky commented Mar 12, 2026

Copy link
Copy Markdown
Contributor

Why I did it

Route download speed degraded after BGP prefix suppression was introduced. RouteOrch::publishRouteState() unconditionally writes to APPL_STATE_DB and sends a pub/sub notification on every route add/remove, even when FIB suppression is disabled and no consumer needs the data.

Work item tracking
  • Microsoft ADO (number only):

How I did it

This PR is part of a multi-repo change to make this a startup-time flag.

orchagent.sh now:

Reads suppress-fib-pending from CONFIG_DB and passes -F to orchagent when enabled (same pattern as synchronous_mode)

How to verify it

Which release branch to backport (provide reason below if selected)

  • 202305
  • 202311
  • 202405
  • 202411
  • 202505
  • 202511

Tested branch (Please provide the tested image version)

Description for the changelog

Link to config_db schema for YANG module changes

A picture of a cute animal (not mandatory but encouraged)

This change needs to go together with
sonic-net/sonic-swss#4333
sonic-net/sonic-utilities#4361
sonic-net/sonic-mgmt#22916
sonic-net/SONiC#2335

@mike-dubrovsky
mike-dubrovsky requested a review from lguohan as a code owner March 12, 2026 17:30
@mssonicbld

Copy link
Copy Markdown
Collaborator

/azp run Azure.sonic-buildimage

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@mssonicbld

Copy link
Copy Markdown
Collaborator

/azp run Azure.sonic-buildimage

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@mssonicbld

Copy link
Copy Markdown
Collaborator

/azp run Azure.sonic-buildimage

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@mssonicbld

Copy link
Copy Markdown
Collaborator

/azp run Azure.sonic-buildimage

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@mike-dubrovsky mike-dubrovsky changed the title [orchagent] Pass FIB suppression flag and publish state to STATE_DB [orchagent] Pass FIB suppression flag and to orchagent to control APPL_STATE_DB and pub/sub May 14, 2026
@mike-dubrovsky mike-dubrovsky changed the title [orchagent] Pass FIB suppression flag and to orchagent to control APPL_STATE_DB and pub/sub Pass FIB suppression flag and to orchagent to control APPL_STATE_DB and pub/sub May 14, 2026

@amitg90 amitg90 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please explain the expected behavior when this flag changes in CONFIG_DB.

Comment thread dockers/docker-orchagent/orchagent.sh
@mssonicbld

Copy link
Copy Markdown
Collaborator

/azp run Azure.sonic-buildimage

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@deepak-singhal0408

Copy link
Copy Markdown
Contributor

/azpw run Azure.sonic-buildimage

@mssonicbld

Copy link
Copy Markdown
Collaborator

⚠️ Notice: /azpw run only runs failed jobs now. If you want to trigger a whole pipline run, please rebase your branch or close and reopen the PR.
💡 Tip: You can also use /azpw retry to retry failed jobs directly.

Retrying failed(or canceled) jobs...

@mssonicbld

Copy link
Copy Markdown
Collaborator

/azp run Azure.sonic-buildimage

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@mssonicbld

Copy link
Copy Markdown
Collaborator

/azp run Azure.sonic-buildimage

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@mssonicbld

Copy link
Copy Markdown
Collaborator

/azp run Azure.sonic-buildimage

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@mssonicbld

Copy link
Copy Markdown
Collaborator

/azp run Azure.sonic-buildimage

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

rlhui pushed a commit to sonic-net/sonic-mgmt that referenced this pull request Aug 3, 2026
)

The suppress-fib-pending configuration change now requires a config save
followed by config reload to take effect.

This change needs to go together with
sonic-net/sonic-swss#4333
sonic-net/sonic-buildimage#26151
sonic-net/sonic-utilities#4361
#22916


<!--
Please make sure you've read and understood our contributing guidelines;
https://github.com/sonic-net/SONiC/blob/gh-pages/CONTRIBUTING.md

Please provide following information to help code review process a bit
easier:
-->
### Description of PR
<!--
- Please include a summary of the change and which issue is fixed.
- Please also include relevant motivation and context. Where should
reviewer start? background context?
- List any dependencies that are required for this change.
-->

Summary:
Fixes # (issue)

### Type of change

<!--
- Fill x for your type of change.
- e.g.
- [x] Bug fix
-->

- [ ] Bug fix
- [ ] Testbed and Framework(new/improvement)
- [ ] New Test case
    - [ ] Skipped for non-supported platforms
- [ ] Test case improvement


### Back port request
- [ ] 202205
- [ ] 202305
- [ ] 202311
- [ ] 202405
- [ ] 202411
- [ ] 202505
- [ ] 202511

### Approach
#### What is the motivation for this PR?

#### How did you do it?

#### How did you verify/test it?

#### Any platform specific information?

#### Supported testbed topology if it's a new test case?

### Documentation
<!--
(If it's a new feature, new test case)
Did you update documentation/Wiki relevant to your implementation?
Link to the wiki page?
-->

---------

Signed-off-by: mike-dubrovsky <mdubrovs@cisco.com>
@mssonicbld

Copy link
Copy Markdown
Collaborator

/azp run Azure.sonic-buildimage

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines will not run the associated pipelines, because the pull request was updated after the run command was issued. Review the pull request again and issue a new run command.

Read suppress-fib-pending from CONFIG_DB in orchagent.sh and pass -F
to orchagent when enabled. Config changes take effect after swss restart
or config reload.

Changes:
- orchagent.sh: read suppress-fib-pending from CONFIG_DB and set -F flag
- src/sonic-swss: bump to 4f3dda15 (includes sonic-net#4333)
- platform/vpp: bump to 77c75ab (includes sonic-net#270)

Signed-off-by: mike-dubrovsky <mdubrovs@cisco.com>
@mssonicbld

Copy link
Copy Markdown
Collaborator

/azp run Azure.sonic-buildimage

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@yxieca
yxieca merged commit c57e683 into sonic-net:master Aug 4, 2026
29 checks passed
@github-project-automation github-project-automation Bot moved this from In Progress to Done in SONiC Routing Dashboard Aug 4, 2026
yejianquan pushed a commit to Azure/sonic-mgmt.msft that referenced this pull request Aug 5, 2026
…dynamic-toggle race (#1344)

…gle race)

**202608 backport** of [sonic-mgmt
#26176](sonic-net/sonic-mgmt#26176).

### Description of PR

Summary:
Fixes #26175

Temporarily skip the whole `bgp/test_bgp_suppress_fib.py` module for the
suppress-fib-pending **dynamic-toggle race**.

The module toggles `suppress-fib-pending` dynamically at runtime (via
the shared `config_bgp_suppress_fib()` helper, no `config reload`). That
triggers a race between **orchagent, fpmsyncd and FRR** where routes are
intermittently **not marked offloaded in FRR** / **not propagated to the
upstream VM** within the wait window, failing essentially every case in
the module.

The root-cause fix makes `suppress-fib-pending` **static** (takes effect
only after a `config reload`), removing the race —
[sonic-swss#4333](sonic-net/sonic-swss#4333),
[sonic-buildimage#26151](sonic-net/sonic-buildimage#26151),
[sonic-utilities#4361](sonic-net/sonic-utilities#4361),
[sonic-mgmt#22916](sonic-net/sonic-mgmt#22916),
[SONiC#2335](sonic-net/SONiC#2335).

> **The product fix is master-only and is not backported.** Because of
that, the skip uses **two different lift semantics**, expressed as
separate conditions:
>
> - **`master`** — gated on the tracking issue: `release in ['master']
and https://github.com/sonic-net/sonic-mgmt/issues/26175`. When the fix
lands on master and #26175 is closed, the skip **auto-lifts** on master
and coverage returns — no manual edit needed.
> - **`202505` / `202511` / `202605`** — a plain `release in [...]`
condition with **no issue gate**. These branches never receive the
product fix, so the module is skipped for the life of the branch (same
nature as the existing pre-202411 "not supported" condition).
>
> **Per-branch effect still requires cherry-picking this skip.** Each
release branch's nightly runs its own `sonic-mgmt` checkout, so this
YAML change must be cherry-picked to 202505/202511/202605 for the skip
to take effect there. The identical diff matches on each branch via its
own `release` token.
>
> If a release branch ever does receive the product fix, drop that
branch's token from the `release in [...]` list — a deliberate
per-branch edit. #26175 tracks the lifecycle.

### Type of change

- [ ] Bug fix
- [x] Testbed and Framework(new/improvement)
- [ ] New Test case
    - [ ] Skipped for non-supported platforms
- [ ] Test case improvement

### Back port request

- [ ] 202205
- [ ] 202305
- [ ] 202311
- [ ] 202405
- [ ] 202411
- [x] 202505
- [x] 202511


### Approach
#### What is the motivation for this PR?

The `test_bgp_suppress_fib` module is a persistent nightly-noise source
across master and the active release branches. The dynamic runtime
toggle of `suppress-fib-pending` races orchagent/fpmsyncd/FRR, so routes
are intermittently left un-offloaded / un-propagated and nearly every
case in the module fails intermittently. Skipping the module de-noises
the nightly signal while the product-layer fix rolls out on master.

#### How did you do it?

Extended the existing `bgp/test_bgp_suppress_fib.py` skip block with
`conditions_logical_operator: or` and split the affected releases by
lift semantics:

```yaml
conditions:
  - "release in ['201811', '201911', '202012', '202205', '202211', '202305', '202311', '202405']"
  - "release in ['202505', '202511', '202605', '202608']"
  - "release in ['master'] and sonic-net/sonic-mgmt#26175"
```

The `conditional_mark` plugin replaces the issue URL with `True`/`False`
based on the issue's open/closed state and `eval()`s the condition, so
the master line auto-lifts when #26175 closes while the release-branch
line stays permanent. (The same file already uses the `<expr> and
<issue-url>` form for the `asic_type in ['vs'] and #14449` conditions.)

#### How did you verify/test it?

- `tests_mark_conditions.yaml` parses cleanly and passes the
`check_conditional_mark_sort.py` pre-commit hook.
- Simulated the `conditional_mark` evaluation for each `release` value:
  - issue **open**: master + 202505/202511/202605 all skip;
- issue **closed**: master unskips, 202505/202511/202605 remain skipped
— matching the intended lift semantics.

#### Any platform specific information?

None — the skip is keyed on `release` only (all ASICs/topologies),
matching the all-vendor nature of the race.

#### Supported testbed topology if it's a new test case?

N/A — not a new test case; module skip only.

### Documentation

N/A
jackson-micas pushed a commit to jackson-micas/sonic-buildimage that referenced this pull request Aug 13, 2026
…ub/sub (sonic-net#26151)

What: orchagent.sh now reads suppress-fib-pending from CONFIG_DB and passes -F to orchagent when enabled (same pattern as synchronous_mode).
Why: Route download speed degraded because RouteOrch::publishRouteState() unconditionally wrote to APPL_STATE_DB and sent pub/sub notifications on every route add/remove, even when FIB suppression was disabled.
How: Part of a multi-repo change making this a startup-time flag; the flag is read from CONFIG_DB and passed to orchagent at startup.
Testing: Approved by reviewers; Azure CI green (all required checks pass).

Signed-off-by: mike-dubrovsky <mdubrovs@cisco.com>
Signed-off-by: jackson-micas <jackson@micasnetworks.com>
rraghav-cisco pushed a commit to rraghav-cisco/sonic-mgmt that referenced this pull request Aug 24, 2026
sonic-net#26175) (sonic-net#26176)

### Description of PR

Summary:
Fixes sonic-net#26175

Temporarily skip the whole `bgp/test_bgp_suppress_fib.py` module for the
suppress-fib-pending **dynamic-toggle race**.

The module toggles `suppress-fib-pending` dynamically at runtime (via
the shared `config_bgp_suppress_fib()` helper, no `config reload`). That
triggers a race between **orchagent, fpmsyncd and FRR** where routes are
intermittently **not marked offloaded in FRR** / **not propagated to the
upstream VM** within the wait window, failing essentially every case in
the module.

The root-cause fix makes `suppress-fib-pending` **static** (takes effect
only after a `config reload`), removing the race —
[sonic-swss#4333](sonic-net/sonic-swss#4333),
[sonic-buildimage#26151](sonic-net/sonic-buildimage#26151),
[sonic-utilities#4361](sonic-net/sonic-utilities#4361),
[sonic-mgmt#22916](sonic-net#22916),
[SONiC#2335](sonic-net/SONiC#2335).

> **The product fix is master-only and is not backported.** Because of
that, the skip uses **two different lift semantics**, expressed as
separate conditions:
>
> - **`master`** — gated on the tracking issue: `release in ['master']
and https://github.com/sonic-net/sonic-mgmt/issues/26175`. When the fix
lands on master and sonic-net#26175 is closed, the skip **auto-lifts** on master
and coverage returns — no manual edit needed.
> - **`202505` / `202511` / `202605`** — a plain `release in [...]`
condition with **no issue gate**. These branches never receive the
product fix, so the module is skipped for the life of the branch (same
nature as the existing pre-202411 "not supported" condition).
>
> **Per-branch effect still requires cherry-picking this skip.** Each
release branch's nightly runs its own `sonic-mgmt` checkout, so this
YAML change must be cherry-picked to 202505/202511/202605 for the skip
to take effect there. The identical diff matches on each branch via its
own `release` token.
>
> If a release branch ever does receive the product fix, drop that
branch's token from the `release in [...]` list — a deliberate
per-branch edit. sonic-net#26175 tracks the lifecycle.

### Type of change

- [ ] Bug fix
- [x] Testbed and Framework(new/improvement)
- [ ] New Test case
    - [ ] Skipped for non-supported platforms
- [ ] Test case improvement

### Back port request

- [ ] 202205
- [ ] 202305
- [ ] 202311
- [ ] 202405
- [ ] 202411
- [x] 202505
- [x] 202511

(also 202605 — not listed in the template checkboxes; cherry-pick
required there as well.)

### Approach
#### What is the motivation for this PR?

The `test_bgp_suppress_fib` module is a persistent nightly-noise source
across master and the active release branches. The dynamic runtime
toggle of `suppress-fib-pending` races orchagent/fpmsyncd/FRR, so routes
are intermittently left un-offloaded / un-propagated and nearly every
case in the module fails intermittently. Skipping the module de-noises
the nightly signal while the product-layer fix rolls out on master.

#### How did you do it?

Extended the existing `bgp/test_bgp_suppress_fib.py` skip block with
`conditions_logical_operator: or` and split the affected releases by
lift semantics:

```yaml
conditions:
  - "release in ['201811', '201911', '202012', '202205', '202211', '202305', '202311', '202405']"
  - "release in ['202505', '202511', '202605']"
  - "release in ['master'] and sonic-net#26175"
```

The `conditional_mark` plugin replaces the issue URL with `True`/`False`
based on the issue's open/closed state and `eval()`s the condition, so
the master line auto-lifts when sonic-net#26175 closes while the release-branch
line stays permanent. (The same file already uses the `<expr> and
<issue-url>` form for the `asic_type in ['vs'] and sonic-net#14449` conditions.)

#### How did you verify/test it?

- `tests_mark_conditions.yaml` parses cleanly and passes the
`check_conditional_mark_sort.py` pre-commit hook.
- Simulated the `conditional_mark` evaluation for each `release` value:
  - issue **open**: master + 202505/202511/202605 all skip;
- issue **closed**: master unskips, 202505/202511/202605 remain skipped
— matching the intended lift semantics.

#### Any platform specific information?

None — the skip is keyed on `release` only (all ASICs/topologies),
matching the all-vendor nature of the race.

#### Supported testbed topology if it's a new test case?

N/A — not a new test case; module skip only.

### Documentation

N/A

Signed-off-by: Deepak Singhal <deepsinghal@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Raghavendran Ramanathan <rraghav@cisco.com>
rajath-nexthop pushed a commit to nexthop-ai/sonic-mgmt that referenced this pull request Sep 1, 2026
### Description of PR

Summary:

Prevent sanity-check recovery from masking unavailable BGP status
details with `KeyError('bgp')`. When a BGP check fails without a `bgp`
payload, adaptive recovery now selects `config_reload` while preserving
the original BGP failure in the test log.

Fixes # N/A

### Type of change

- [x] Bug fix
- [ ] Testbed and Framework(new/improvement)
- [ ] New Test case
    - [ ] Skipped for non-supported platforms
- [ ] Test case improvement


### Back port request

- [ ] 202311
- [ ] 202405
- [ ] 202411
- [ ] 202505
- [ ] 202511
- [ ] 202512
- [ ] 202605

Tracking issue/work item for backport/cherry-pick request (GitHub issue
or Microsoft ADO): N/A
Failure type: regression

### Tested branch

- [x] master
- [ ] 202311
- [ ] 202405
- [ ] 202411
- [ ] 202505
- [ ] 202511
- [ ] 202512
- [ ] 202605
- [ ] N/A

### Test result

- master: Python syntax, flake8, and diff checks passed for the updated
recovery module.

### Approach
#### What is the motivation for this PR?

When `bgp_facts` is unavailable, the BGP sanity check marks the result
as failed without adding a `bgp` detail payload. Adaptive recovery then
indexes `result['bgp']`, raising `KeyError('bgp')` and hiding the
original BGP or container failure.

Representative Elastictest plans that exposed this failure:

-
[6a7df975e52f658a6c0dca34](https://elastictest.org/scheduler/testplan/6a7df975e52f658a6c0dca34)
- t1-lag-vpp, buildimage PR
[sonic-net#27061](sonic-net/sonic-buildimage#27061), 8
affected testbeds
-
[6a699606b63289adaeeedbe6](https://elastictest.org/scheduler/testplan/6a699606b63289adaeeedbe6)
- t1-lag, buildimage PR
[sonic-net#26151](sonic-net/sonic-buildimage#26151), 15
affected testbeds
-
[6a63ce94e05af08a4805ac27](https://elastictest.org/scheduler/testplan/6a63ce94e05af08a4805ac27)
- t1-lag, buildimage PR
[#28506](sonic-net/sonic-buildimage#28506), 17
affected testbeds

Each plan failed in
`test_pretest.py::test_recover_admin_up_offline_dpu_modules` with
`KeyError('bgp')`, masking the underlying BGP or container failure.
#### How did you do it?

Extracted BGP recovery selection into `_recover_bgp`. Missing or empty
BGP details now fall back to `config_reload`. Existing route
re-announcement and neighbor restoration behavior remains unchanged when
detailed BGP failure data is available.

#### How did you verify/test it?

Ran Python syntax, flake8, and diff checks against the updated recovery
module.

#### Any platform specific information?

No.

#### Supported testbed topology if it's a new test case?

N/A.

### Documentation

No documentation changes are required.

---------

Signed-off-by: Austin (Ngoc Thang) Pham <austinpham@microsoft.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants