From 71decb822d4903f7c00e8c9972121e4a03b5be7e Mon Sep 17 00:00:00 2001 From: monoamin Date: Mon, 31 Mar 2025 20:15:00 +0200 Subject: [PATCH] rbd: Register FenceController only once Running cephcsi in docker swarm currently requires serving both the nodeserver and controllerserver over the same socket. This leads to errors like > FATAL: [core] grpc: Server.RegisterService found duplicate > service registration for \"fence.FenceController\"" ...since `FenceController` is registererd once per server type. Commit proposes simple fix by registering `FenceController` only once when at least one of `IsControllerServer` or `IsNodeServer` is `true`. Signed-off-by: monoamin --- internal/rbd/driver/driver.go | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/internal/rbd/driver/driver.go b/internal/rbd/driver/driver.go index 64ca52bff..649fd31c5 100644 --- a/internal/rbd/driver/driver.go +++ b/internal/rbd/driver/driver.go @@ -228,24 +228,22 @@ func (r *Driver) setupCSIAddonsServer(conf *util.Config) error { is := casrbd.NewIdentityServer(conf) r.cas.RegisterService(is) + if conf.IsControllerServer || conf.IsNodeServer { + // Register FenceController only once + fcs := casrbd.NewFenceControllerServer() + r.cas.RegisterService(fcs) + } if conf.IsControllerServer { rs := casrbd.NewReclaimSpaceControllerServer(conf.InstanceID, r.cs.VolumeLocks) r.cas.RegisterService(rs) - fcs := casrbd.NewFenceControllerServer() - r.cas.RegisterService(fcs) - rcs := casrbd.NewReplicationServer(conf.InstanceID, NewControllerServer(r.cd)) r.cas.RegisterService(rcs) vgcs := casrbd.NewVolumeGroupServer(conf.InstanceID) r.cas.RegisterService(vgcs) } - if conf.IsNodeServer { - fcs := casrbd.NewFenceControllerServer() - r.cas.RegisterService(fcs) - rs := casrbd.NewReclaimSpaceNodeServer(r.ns.VolumeLocks) r.cas.RegisterService(rs)