Skip to content

Commit

Permalink
proxy: add ReplicaUpdate
Browse files Browse the repository at this point in the history
Longhorn 4210
Longhorn 3198

Signed-off-by: Derek Su <derek.su@suse.com>
  • Loading branch information
derekbit committed Oct 17, 2022
1 parent 5bd0795 commit 53f75ed
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 0 deletions.
29 changes: 29 additions & 0 deletions pkg/client/proxy_replica.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (

rpc "github.com/longhorn/longhorn-instance-manager/pkg/imrpc"

"github.com/longhorn/longhorn-engine/pkg/types"
etypes "github.com/longhorn/longhorn-engine/pkg/types"
eptypes "github.com/longhorn/longhorn-engine/proto/ptypes"
)
Expand Down Expand Up @@ -159,3 +160,31 @@ func (c *ProxyClient) ReplicaRemove(serviceAddress, replicaAddress string) (err

return nil
}

func (c *ProxyClient) ReplicaUpdate(serviceAddress, replicaAddress string, mode string) (err error) {
input := map[string]string{
"serviceAddress": serviceAddress,
"replicaAddress": replicaAddress,
}
if err := validateProxyMethodParameters(input); err != nil {
return errors.Wrap(err, "failed to remove replica for volume")
}

defer func() {
err = errors.Wrapf(err, "%v failed to update replica %v for volume", c.getProxyErrorPrefix(serviceAddress), replicaAddress)
}()

req := &rpc.EngineReplicaUpdateRequest{
ProxyEngineRequest: &rpc.ProxyEngineRequest{
Address: serviceAddress,
},
ReplicaAddress: replicaAddress,
Mode: eptypes.ReplicaModeToGRPCReplicaMode(types.Mode(mode)),
}
_, err = c.service.ReplicaUpdate(getContextWithGRPCTimeout(c.ctx), req)
if err != nil {
return err
}

return nil
}
17 changes: 17 additions & 0 deletions pkg/proxy/replica.go
Original file line number Diff line number Diff line change
Expand Up @@ -135,3 +135,20 @@ func (p *Proxy) ReplicaRemove(ctx context.Context, req *rpc.EngineReplicaRemoveR

return &empty.Empty{}, nil
}

func (p *Proxy) ReplicaUpdate(ctx context.Context, req *rpc.EngineReplicaUpdateRequest) (resp *empty.Empty, err error) {
log := logrus.WithFields(logrus.Fields{"serviceURL": req.ProxyEngineRequest.Address})
log.Debug("Updating replica")

c, err := eclient.NewControllerClient(req.ProxyEngineRequest.Address)
if err != nil {
return nil, err
}
defer c.Close()

if _, err = c.ReplicaUpdate(req.ReplicaAddress, eptypes.GRPCReplicaModeToReplicaMode(req.Mode)); err != nil {
return nil, err
}

return &empty.Empty{}, nil
}

0 comments on commit 53f75ed

Please sign in to comment.