Body:
Describe the bug
After a CacheRuntime's Client (FUSE) DaemonSet is created once, no later change to runtime.spec.client.* (image/version, resources, tieredStore, volumes, env vars, or any other pod-template-affecting field) ever takes effect. The change is silently dropped — no error, no log entry, no indication anywhere that it was ignored.
Root cause
This is actually two compounding gaps:
-
CacheEngine.ShouldSetupClient() in pkg/ddc/cache/engine/client.go gates all client reconciliation on runtime.Status.Client.Phase == RuntimePhaseNone. That phase flips away from None the very first time setup succeeds, so SetupClientInternal (and therefore manager.Reconciler()) never runs again for the lifetime of the CacheRuntime.
-
Even setting that aside, DaemonSetManager.reconcileDaemonSet in pkg/ddc/cache/component/daemonset_manager.go only handles the not-found case (create). If the DaemonSet already exists, it just returns nil — no diff, no patch. Separately, DaemonSetManager.SyncComponentSpec is a stub that unconditionally returns an error ("client component does not support to be modified after created").
-
CacheEngine.syncRuntimeSpec in pkg/ddc/cache/engine/sync.go — the function that does sync ongoing spec drift for Master/Worker via SyncComponentSpec — explicitly skips Client, with a comment claiming "Client component will be recreated when spec changes." No code anywhere actually implements that recreation.
Net effect: nothing in the codebase ever updates the Client DaemonSet after its first creation, despite comments in two separate files implying it should be handled.
To Reproduce
- Create a CacheRuntime with a Client component (e.g. following the curvine e2e sample) and wait for it to become ready.
- Edit
runtime.spec.client.resources (or .tieredStore, or bump the runtime version) and apply the change.
- Observe: the Client DaemonSet's pod template is unchanged; no FUSE pods restart; no error surfaces in the runtime status or controller logs.
Expected behavior
Client spec changes should propagate to the DaemonSet the same way Master/Worker changes propagate via SyncComponentSpec, or the runtime should surface a clear error/warning if in-place update genuinely isn't supported for this field, rather than silently dropping the change.
Environment
- Fluid: current master (post-CacheRuntime/AdvancedStatefulSet refactor)
- Affects:
pkg/ddc/cache/engine/client.go, pkg/ddc/cache/component/daemonset_manager.go, pkg/ddc/cache/engine/sync.go
Body:
Describe the bug
After a CacheRuntime's Client (FUSE) DaemonSet is created once, no later change to
runtime.spec.client.*(image/version, resources, tieredStore, volumes, env vars, or any other pod-template-affecting field) ever takes effect. The change is silently dropped — no error, no log entry, no indication anywhere that it was ignored.Root cause
This is actually two compounding gaps:
CacheEngine.ShouldSetupClient()inpkg/ddc/cache/engine/client.gogates all client reconciliation onruntime.Status.Client.Phase == RuntimePhaseNone. That phase flips away fromNonethe very first time setup succeeds, soSetupClientInternal(and thereforemanager.Reconciler()) never runs again for the lifetime of the CacheRuntime.Even setting that aside,
DaemonSetManager.reconcileDaemonSetinpkg/ddc/cache/component/daemonset_manager.goonly handles the not-found case (create). If the DaemonSet already exists, it just returnsnil— no diff, no patch. Separately,DaemonSetManager.SyncComponentSpecis a stub that unconditionally returns an error ("client component does not support to be modified after created").CacheEngine.syncRuntimeSpecinpkg/ddc/cache/engine/sync.go— the function that does sync ongoing spec drift for Master/Worker viaSyncComponentSpec— explicitly skips Client, with a comment claiming "Client component will be recreated when spec changes." No code anywhere actually implements that recreation.Net effect: nothing in the codebase ever updates the Client DaemonSet after its first creation, despite comments in two separate files implying it should be handled.
To Reproduce
runtime.spec.client.resources(or.tieredStore, or bump the runtime version) and apply the change.Expected behavior
Client spec changes should propagate to the DaemonSet the same way Master/Worker changes propagate via
SyncComponentSpec, or the runtime should surface a clear error/warning if in-place update genuinely isn't supported for this field, rather than silently dropping the change.Environment
pkg/ddc/cache/engine/client.go,pkg/ddc/cache/component/daemonset_manager.go,pkg/ddc/cache/engine/sync.go