Skip to content

Commit

Permalink
Merge pull request #158 from saeid-a/feat/region-remove-peer
Browse files Browse the repository at this point in the history
Region RemovePeer function implementation (#126)
  • Loading branch information
sjcsjc123 authored Jul 6, 2023
2 parents a9243eb + 8774906 commit c585ca3
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 1 deletion.
10 changes: 9 additions & 1 deletion cluster/region/region.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,15 @@ func (r *region) AddPeer(peer string) error {
}

func (r *region) RemovePeer(peer string) error {
panic("implement me")
r.mu.RLock()
defer r.mu.RUnlock()
for i := 0; i < len(r.peers); i++ {
if r.peers[i] == peer {
r.peers = append(r.peers[:i], r.peers[i+1:]...)
return r.raft.DemoteVoter(raft.ServerID(peer), 0, 0).Error()
}
}
return errors.New("the specified peer does not exist")
}

func (r *region) GetSize() int64 {
Expand Down
29 changes: 29 additions & 0 deletions cluster/region/region_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,35 @@ func TestRegion_GetSize(t *testing.T) {
assert.Equal(t, int64(100), size)
}

func TestRegion_RemovePeer(t *testing.T) {
// Create a test region instance
region := NewTestRegion()
_ = []struct {
name string
peers []string
peerToAdd string
expectedPeers []string
expectError bool
}{
{
name: "remove a peer",
peers: region.GetPeers(),
peerToAdd: "peer2",
expectedPeers: []string{"peer1"},
expectError: false,
},
{
name: "remove a non existing peer",
peers: region.GetPeers(),
peerToAdd: "peer3",
expectedPeers: []string{"peer1", "peer2"},
expectError: true,
},
}
destroyRegion(region)

}

func TestRegion_AddPeer(t *testing.T) {
// Create a test region instance
region := NewTestRegion()
Expand Down

0 comments on commit c585ca3

Please sign in to comment.