fix(clustermgr): fix snapshot member nodehost store

with #1000095073

Signed-off-by: tangdeyi <tangdeyi@oppo.com>
This commit is contained in:
tangdeyi 2025-04-30 11:06:02 +08:00 committed by slasher
parent d29e116edc
commit d48ca7debc
5 changed files with 24 additions and 6 deletions

View File

@ -54,7 +54,7 @@ func (s *Service) MemberAdd(c *rpc.Context) {
}
var err error
mc, err := parseContext(args.NodeHost)
mc, err := marshalMemberContext(args.NodeHost)
if err != nil {
c.RespondError(err)
return
@ -176,7 +176,7 @@ func (s *Service) checkPeerIDExist(peerID uint64) bool {
return found
}
func parseContext(host string) ([]byte, error) {
func marshalMemberContext(host string) ([]byte, error) {
if host == "" {
return nil, apierrors.ErrIllegalArguments
}

View File

@ -168,7 +168,11 @@ func (s *Service) ApplySnapshot(meta raftserver.SnapshotMeta, st raftserver.Snap
for _, m := range meta.Mbs {
member := base.RaftMember{ID: m.NodeID, Host: m.Host, Learner: m.Learner}
if ct := m.GetContext(); ct != nil {
member.NodeHost = string(ct)
memberContext := &clustermgr.MemberContext{}
if err := memberContext.Unmarshal(ct); err != nil {
return err
}
member.NodeHost = memberContext.NodeHost
}
members = append(members, member)
}

View File

@ -17,6 +17,7 @@ package clustermgr
import (
"testing"
"github.com/cubefs/cubefs/blobstore/api/clustermgr"
"github.com/cubefs/cubefs/blobstore/common/codemode"
"github.com/cubefs/cubefs/blobstore/common/raftserver"
"github.com/stretchr/testify/require"
@ -63,7 +64,11 @@ func TestStateMachine(t *testing.T) {
{
snapshot, err := srcService.Snapshot()
require.NoError(t, err)
member := &raftserver.Member{NodeID: 1, Host: "127.0.0.1:65342", Learner: false, Context: []byte("127.0.0.1:10010")}
memberContext := &clustermgr.MemberContext{NodeHost: "127.0.0.1:10010"}
memberContextB, err := memberContext.Marshal()
require.NoError(t, err)
member := &raftserver.Member{NodeID: 1, Host: "127.0.0.1:65342", Learner: false, Context: memberContextB}
members := []*raftserver.Member{member}
err = destService.ApplySnapshot(raftserver.SnapshotMeta{Index: snapshot.Index(), Mbs: members}, snapshot)
require.NoError(t, err)

View File

@ -321,7 +321,11 @@ func New(cfg *Config) (*Service, error) {
log.Infof("config members: %+v, raftdb members: %+v", cfg.RaftConfig.RaftNodeConfig.Members, members)
for _, member := range members {
m := raftserver.Member{NodeID: member.ID, Host: member.Host, Learner: member.Learner, Context: []byte(member.NodeHost)}
mc, err := marshalMemberContext(member.NodeHost)
if err != nil {
log.Fatalf("marshal MemberContext, err: %v", err)
}
m := raftserver.Member{NodeID: member.ID, Host: member.Host, Learner: member.Learner, Context: mc}
cfg.RaftConfig.ServerConfig.Members = append(cfg.RaftConfig.ServerConfig.Members, m)
}
raftServer, err := raftserver.NewRaftServer(&cfg.RaftConfig.ServerConfig)

View File

@ -77,7 +77,7 @@ var testServiceCfg = &Config{
TickInterval: 1,
ElectionTick: 2,
WalDir: os.TempDir() + "/svrraftwal-" + uuid.NewString() + strconv.FormatInt(rand.Int63n(math.MaxInt64), 10),
Members: []raftserver.Member{{NodeID: 1, Host: "127.0.0.1:60110", Learner: false}},
Members: []raftserver.Member{{NodeID: 1, Host: "127.0.0.1:60110", Learner: false, Context: []byte(`{"node_host": "127.0.0.1:9998"}`)}},
TickIntervalMs: 20,
},
@ -244,6 +244,11 @@ func TestNewService(t *testing.T) {
require.NoError(t, err)
require.NotNil(t, testService)
mc := testService.RaftConfig.ServerConfig.Members[0].Context
memberContext := &clustermgr.MemberContext{}
err = memberContext.Unmarshal(mc)
require.NoError(t, err)
testService.report(context.Background())
testService.metricReport(context.Background())