From 4cc9c3e03b463a11245685a855750b5e054d9fd9 Mon Sep 17 00:00:00 2001 From: Cyril Galibern Date: Fri, 27 Mar 2026 19:10:13 +0100 Subject: [PATCH] [core/resource] Pass leader flag to UnprovisionStop methods for conditional stop logic adjustments --- core/resource/provision.go | 11 ++++++----- drivers/resdiskdrbd/main.go | 7 ++++++- drivers/resdiskzpool/main.go | 8 ++++++-- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/core/resource/provision.go b/core/resource/provision.go index 5827586ea..d85f86529 100644 --- a/core/resource/provision.go +++ b/core/resource/provision.go @@ -31,7 +31,7 @@ type ( ProvisionStart(context.Context) error } UnprovisionStoper interface { - UnprovisionStop(context.Context) error + UnprovisionStop(ctx context.Context, leader bool) error } ) @@ -118,7 +118,7 @@ func Unprovision(ctx context.Context, r Driver, leader bool) error { } else { r.Log().Infof("unprovision is disabled, the current resource provisioning state is %s", prov) } - if err := unprovisionStop(ctx, r); err != nil { + if err := unprovisionStop(ctx, r, leader); err != nil { return err } r.Log().Infof("unprovision is disabled or n/a") @@ -207,7 +207,8 @@ func provisionAsFollower(ctx context.Context, t Driver) error { } func unprovision(ctx context.Context, t Driver, leader bool) error { - if err := unprovisionStop(ctx, t); err != nil { + t.Log().Infof("unprovision leader: %#v", leader) + if err := unprovisionStop(ctx, t, leader); err != nil { return err } if err := SCSIPersistentReservationStop(ctx, t); err != nil { @@ -222,10 +223,10 @@ func unprovision(ctx context.Context, t Driver, leader bool) error { return nil } -func unprovisionStop(ctx context.Context, t Driver) error { +func unprovisionStop(ctx context.Context, t Driver, leader bool) error { switch o := t.(type) { case UnprovisionStoper: - return o.UnprovisionStop(ctx) + return o.UnprovisionStop(ctx, leader) case stopper: return o.Stop(ctx) default: diff --git a/drivers/resdiskdrbd/main.go b/drivers/resdiskdrbd/main.go index a1d94bb40..ceb0f8e87 100644 --- a/drivers/resdiskdrbd/main.go +++ b/drivers/resdiskdrbd/main.go @@ -397,7 +397,12 @@ func (t *T) Label(_ context.Context) string { } // UnprovisionStop is a noop to avoid calling the normal Stop before unprovision -func (t *T) UnprovisionStop(_ context.Context) error { +func (t *T) UnprovisionStop(ctx context.Context, leader bool) error { + if !leader { + t.Log().Debugf("stop for unprovision leader") + return t.Stop(ctx) + } + t.Log().Tracef("bypass stop for unprovision leader") return nil } diff --git a/drivers/resdiskzpool/main.go b/drivers/resdiskzpool/main.go index eb4160d99..593bdfa25 100644 --- a/drivers/resdiskzpool/main.go +++ b/drivers/resdiskzpool/main.go @@ -208,8 +208,12 @@ func (t *T) genHostID() error { // because zfs can only destroy imported pools. The Unprovision func // imports anyway, but if we don't export unnecessary export/import is // saved. -func (t *T) UnprovisionStop(ctx context.Context) error { - t.Log().Tracef("bypass export for unprovision") +func (t *T) UnprovisionStop(ctx context.Context, leader bool) error { + if !leader { + t.Log().Debugf("stop for unprovision leader") + return t.Stop(ctx) + } + t.Log().Tracef("bypass export for unprovision on leader") return nil }