From c2a356014c1a97ec762ead3a566b34c430a8aec6 Mon Sep 17 00:00:00 2001 From: Alex Cheema Date: Wed, 11 Feb 2026 16:38:42 -0800 Subject: [PATCH] dashboard: show warning banner for [jaccl] RDMA driver errors Detect errors containing "[jaccl]" in MetaInstance failure errors and display a red dismissible alert banner. The tooltip explains this is a macOS RDMA driver issue and that the affected machine needs to be restarted. Alert re-appears if a new error arrives after dismissal. Co-Authored-By: Claude Opus 4.6 --- dashboard/src/routes/+page.svelte | 99 ++++++++++++++++++++++++++++++- 1 file changed, 97 insertions(+), 2 deletions(-) diff --git a/dashboard/src/routes/+page.svelte b/dashboard/src/routes/+page.svelte index fb5bbf97..ffb5e5a0 100644 --- a/dashboard/src/routes/+page.svelte +++ b/dashboard/src/routes/+page.svelte @@ -181,6 +181,17 @@ }); let tb5InfoDismissed = $state(false); + // Detect [jaccl] RDMA driver errors from MetaInstance failure errors + const jacclError = $derived.by(() => { + for (const mi of Object.values(metaInstancesData)) { + if (mi.lastFailureError?.includes("[jaccl]")) { + return mi.lastFailureError; + } + } + return null; + }); + let jacclDismissedError = $state(null); + // Helper to get friendly node name from node ID function getNodeName(nodeId: string): string { const node = data?.nodes?.[nodeId]; @@ -2018,8 +2029,71 @@ {#snippet clusterWarnings()} - {#if tbBridgeCycles.length > 0 || macosVersionMismatch || (tb5WithoutRdma && !tb5InfoDismissed)} + {#if tbBridgeCycles.length > 0 || macosVersionMismatch || (tb5WithoutRdma && !tb5InfoDismissed) || (jacclError && jacclError !== jacclDismissedError)}
+ {#if jacclError && jacclError !== jacclDismissedError} + + {/if} + {#if tbBridgeCycles.length > 0} {@const cycle = tbBridgeCycles[0]} {@const serviceName = getTbBridgeServiceName(cycle)} @@ -2188,8 +2262,29 @@ {/snippet} {#snippet clusterWarningsCompact()} - {#if tbBridgeCycles.length > 0 || macosVersionMismatch || (tb5WithoutRdma && !tb5InfoDismissed)} + {#if tbBridgeCycles.length > 0 || macosVersionMismatch || (tb5WithoutRdma && !tb5InfoDismissed) || (jacclError && jacclError !== jacclDismissedError)}
+ {#if jacclError && jacclError !== jacclDismissedError} +
+ + + + JACCL ERROR +
+ {/if} {#if tbBridgeCycles.length > 0}