• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

noironetworks / aci-containers / 12029
64%
master: 64%

Build:
Build:
LAST BUILD BRANCH: apic-non-deletable-objects
DEFAULT BRANCH: master
Ran 07 Jul 2026 05:46AM UTC
Jobs 1
Files 48
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

07 Jul 2026 05:31AM UTC coverage: 64.03% (+0.06%) from 63.969%
12029

push

travis-pro

Santosh-oc
fix(apicapi): block helper-MO deletes using tag-based ownership

Reproduction:
During SNAT policy churn, the controller repeatedly attempts to DELETE
APIC-managed child relation MOs owned by APIC. APIC rejects these
with HTTP 400 "Invalid access", causing the websocket connection to
close and the controller to enter a reconnect loop.

Root cause:
When an SNAT policy is deleted and immediately recreated, APIC
generates helper reverse-relation children under the newly created
service graph objects. When the delete and create notifications arrive
in quick succession, the reconcile cycle triggered by the create
notification fetches a subtree snapshot that already contains these
APIC-managed helper children. Because the parent object carries a
controller sync tagAnnotation, the helper children inherit the parent
tag in the subtree response and are mistakenly treated as
controller-owned. Reconcile then queues DELETE requests for them. APIC
rejects those DELETEs with HTTP 400 "Invalid access", which closes the
websocket connection and triggers a reconnect loop.

Fix:
Introduce a hasLocalSyncTag() helper that determines controller
ownership at the object level rather than by inheriting parent context.
It returns true only when the object itself carries a tagAnnotation
child with key aci-containers-controller-tag, a value matching the
controller sync tag prefix, and an annotation DN that is local to the
object's own DN.

All delete decision points in apicObjCmp, diffApicState, and
reconcileApicObject now gate deletes on hasLocalSyncTag(). APIC-managed
helper children that appear in the subtree but do not have their own
local annotation fail this check and are skipped. Legitimate
controller-owned objects that were written with their own tagAnnotation
continue to be deleted as expected.

32 of 39 new or added lines in 1 file covered. (82.05%)

1 existing line in 1 file now uncovered.

13696 of 21390 relevant lines covered (64.03%)

0.73 hits per line

Uncovered Changes

Lines Coverage ∆ File
7
83.59
2.38% pkg/apicapi/apic_sync.go

Coverage Regressions

Lines Coverage ∆ File
1
83.59
2.38% pkg/apicapi/apic_sync.go
Jobs
ID Job ID Ran Files Coverage
1 12029.1 (DEFAULT_BRANCH=master GOPROXY=https://proxy.golang.org|https://goproxy.io|direct) 07 Jul 2026 05:46AM UTC 48
64.03
Travis Job 12029.1
Source Files on build 12029
  • Tree
  • List 48
  • Changed 2
  • Source Changed 0
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Travis Build #12029
  • 6d1ba88e on github
  • Prev Build on master (#12004)
  • Next Build on apic-non-deletable-objects (#12031)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc