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 <precision1998@gmail.com>
This commit is contained in:
monoamin 2025-03-31 20:15:00 +02:00 committed by mergify[bot]
parent 23fce43925
commit 71decb822d

View File

@ -228,24 +228,22 @@ func (r *Driver) setupCSIAddonsServer(conf *util.Config) error {
is := casrbd.NewIdentityServer(conf) is := casrbd.NewIdentityServer(conf)
r.cas.RegisterService(is) r.cas.RegisterService(is)
if conf.IsControllerServer || conf.IsNodeServer {
// Register FenceController only once
fcs := casrbd.NewFenceControllerServer()
r.cas.RegisterService(fcs)
}
if conf.IsControllerServer { if conf.IsControllerServer {
rs := casrbd.NewReclaimSpaceControllerServer(conf.InstanceID, r.cs.VolumeLocks) rs := casrbd.NewReclaimSpaceControllerServer(conf.InstanceID, r.cs.VolumeLocks)
r.cas.RegisterService(rs) r.cas.RegisterService(rs)
fcs := casrbd.NewFenceControllerServer()
r.cas.RegisterService(fcs)
rcs := casrbd.NewReplicationServer(conf.InstanceID, NewControllerServer(r.cd)) rcs := casrbd.NewReplicationServer(conf.InstanceID, NewControllerServer(r.cd))
r.cas.RegisterService(rcs) r.cas.RegisterService(rcs)
vgcs := casrbd.NewVolumeGroupServer(conf.InstanceID) vgcs := casrbd.NewVolumeGroupServer(conf.InstanceID)
r.cas.RegisterService(vgcs) r.cas.RegisterService(vgcs)
} }
if conf.IsNodeServer { if conf.IsNodeServer {
fcs := casrbd.NewFenceControllerServer()
r.cas.RegisterService(fcs)
rs := casrbd.NewReclaimSpaceNodeServer(r.ns.VolumeLocks) rs := casrbd.NewReclaimSpaceNodeServer(r.ns.VolumeLocks)
r.cas.RegisterService(rs) r.cas.RegisterService(rs)