Skip to content

fix(admins-openclaw): disable bonjour plugin to avoid Node crash - #102

Merged
mashkovd merged 1 commit into
mainfrom
fix/admins-openclaw-disable-bonjour
May 2, 2026
Merged

mashkovd merged 1 commit into
mainfrom
fix/admins-openclaw-disable-bonjour

Conversation

@mashkovd

@mashkovd mashkovd commented May 2, 2026

Copy link
Copy Markdown
Member

Summary

Why this is a workaround

Proper fix lives upstream (catch the cancellation rejection in the bonjour announcer restart path). This PR just turns the plugin off for admins so the crash-loop stops. labs/ovk only get the same change if observed to hit it.

Test plan

  • ArgoCD sync clean
  • Pod 3/3 Running stable for 30+ min (full plugin-install completes without bonjour-induced crash)
  • No `bonjour` log lines / no `CIAO ANNOUNCEMENT CANCELLED` in base-service logs

After the runtime-mirror-lock + probe-tuning fixes (PR #96, #101)
opened up enough headroom for openclaw to actually run, a different
crash pattern surfaced: ~5 min into uptime, plugin-install phases
block the Node event loop (eventLoopUtilization=1.0,
eventLoopDelayP99Ms=1260) for ~170s. During the stall, the bundled
@ciao mDNS library's announcer hangs in the `announcing` state, gets
restarted by openclaw's bonjour watchdog, and the cancellation throws
an UnhandledPromiseRejection ("CIAO ANNOUNCEMENT CANCELLED") which
crashes Node with exitCode=1.

Reference log line:
  UnhandledPromiseRejection: ... "CIAO ANNOUNCEMENT CANCELLED".
    at throwUnhandledRejectionsMode (node:internal/process/promises:392:7)

Bonjour does mDNS service-discovery on the local network — useless
inside a k8s pod where the gateway is reached via Service DNS. Lowest-
risk fix is to disable the plugin entirely via
`plugins.entries.bonjour.enabled: false`.

This is a workaround. Proper fix lives upstream in the openclaw fork
(catch the cancellation rejection in the bonjour announcer restart
path); track separately if the issue persists for tenants that
genuinely need mDNS.

admins-canary first per rollout policy. labs/ovk follow-up only if
they're observed to hit the same crash.
@mashkovd

mashkovd commented May 2, 2026

Copy link
Copy Markdown
Member Author

@codex review

@mashkovd

mashkovd commented May 2, 2026

Copy link
Copy Markdown
Member Author

@copilot review

Copilot AI commented May 2, 2026

Copy link
Copy Markdown

@copilot review

Review of 6e43cd5 (platform-gitops/services/admins/openclaw/values.yaml +8 lines):

✅ No blocking issues.

  • JSON embedded in the ConfigMap is valid after the addition; plugins.entries.bonjour parses correctly.
  • The new plugins block is correctly placed as a sibling of agents / auth in the openclaw JSON config.
  • Blast radius is correctly scoped to admins only — labs/ovk untouched per rollout policy.
  • Commit message is thorough (references the observed stack trace, prior PRs, and upstream fix location).

One minor note on _comment:
JSON has no native comment syntax, so _comment is a JSON key that will be visible to the application. This is the only occurrence of this pattern in the repo. If openclaw's config schema is strict, it could emit an unknown-key warning at startup. Using a standard YAML comment (# mDNS service-discovery — ...) above the "bonjour" entry instead would be zero-risk. Not a blocker — openclaw almost certainly ignores unknown keys — but worth keeping in mind if you see any schema-validation noise in the logs after the rollout.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Breezy!

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@mashkovd
mashkovd merged commit 9a54313 into main May 2, 2026
@mashkovd
mashkovd deleted the fix/admins-openclaw-disable-bonjour branch May 2, 2026 21:19
mashkovd pushed a commit that referenced this pull request May 5, 2026
Pre-PR before bumping labs/ovk to 2026.5.2-mctl.1. Copilot review on the
direct labs bump PR #115 surfaced that admins-specific workarounds were
never applied to labs/ovk:

- PR #96 lock-scrub entrypoint wrapper (top-level command/args)
- PR #96 restore-state lock cleanup (find ... *.lock -exec rm)
- PR #101 widened probe budgets (startup 455s, readiness 5x, liveness 5min)
- PR #102/#103 bonjour disable (in JSON config)
- plugin-runtime-deps S3 purge (perf + restore time)

Without these, bumping labs/ovk to 2026.5.2-mctl.1 would re-introduce
the lock-wedge and probe-kill failure modes that admins survived only
because the workarounds were in place.

Tenant-specific differences (CPU limits, OAuth callback URLs, env vars,
MCP server registrations) are intentionally NOT touched — only
durability/safety patches copied over with paths adapted per tenant
('labs' vs 'ovk' in S3 prefixes).

Both files now +38 lines each. Closed PR #115 (labs image bump) — will
re-open after this merges.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants