Skip to content

Commit

Permalink
removePeer function implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
saeid-a committed Jul 6, 2023
1 parent 53a86a8 commit 21716ea
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 1 deletion.
11 changes: 10 additions & 1 deletion cluster/region/region.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package region

import (
"errors"
"github.com/ByteStorage/FlyDB/engine"
"github.com/hashicorp/raft"
"sync"
Expand Down Expand Up @@ -97,7 +98,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 @@ -121,3 +121,32 @@ func TestRegion_GetSize(t *testing.T) {
size := region.GetSize()
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)

}

0 comments on commit 21716ea

Please sign in to comment.