From 1d0c01a61fb749ecb0c9f04e7a488e8820028ddb Mon Sep 17 00:00:00 2001 From: sjcsjc123 <1401189096@qq.com> Date: Thu, 6 Jul 2023 16:32:53 +0800 Subject: [PATCH 1/9] feat:refactor build.sh(#154) --- build.sh | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/build.sh b/build.sh index 43818ee9..30b7af72 100644 --- a/build.sh +++ b/build.sh @@ -1,6 +1,10 @@ #!/bin/bash # shellcheck disable=SC2164 -cd cmd/cli -go build flydb.go -./flydb +go build -o ./bin/flydb-server cmd/server/cli/flydb-server.go +go build -o ./bin/flydb-client cmd/client/cli/flydb-client.go +echo "build success" + +echo "Now you can run the follow command: + start server: ./bin/flydb-server + start client: ./bin/flydb-client 127.0.0.1:8999" From 80b366ca16234c794b37b6b9fbee239eb5765429 Mon Sep 17 00:00:00 2001 From: sjcsjc123 <1401189096@qq.com> Date: Thu, 6 Jul 2023 16:44:10 +0800 Subject: [PATCH 2/9] bug:some push action did not run ci(#155) --- .github/workflows/go.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index b47f7f57..a25aa8f5 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -5,9 +5,11 @@ name: Go on: push: - branches: [ "master" ] + branches: + - * pull_request: - branches: [ "master" ] + branches: + - * jobs: From c3d322c356924112d50c538b4d7941e3a92c35e4 Mon Sep 17 00:00:00 2001 From: sjcsjc123 <1401189096@qq.com> Date: Thu, 6 Jul 2023 16:47:07 +0800 Subject: [PATCH 3/9] bug:some push action did not run ci(#155) --- .github/workflows/go.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index a25aa8f5..4ee5cdc8 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -6,10 +6,10 @@ name: Go on: push: branches: - - * + - "*" pull_request: branches: - - * + - "*" jobs: From 5ec1ead12ae878d76dcedafe3c1ed65cd68dadce Mon Sep 17 00:00:00 2001 From: sjcsjc123 <1401189096@qq.com> Date: Thu, 6 Jul 2023 19:46:14 +0800 Subject: [PATCH 4/9] fix:ci run fail(#156) --- .github/workflows/go.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 4ee5cdc8..a7d320c4 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -12,7 +12,6 @@ on: - "*" jobs: - build: runs-on: ubuntu-latest strategy: From 20e2192973bd039fb93822113b445c6eca96409f Mon Sep 17 00:00:00 2001 From: sjcsjc123 <1401189096@qq.com> Date: Thu, 6 Jul 2023 19:52:51 +0800 Subject: [PATCH 5/9] doc: update readme --- README.md | 5 +++++ README_CN.md | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4592da16..3875c412 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,11 @@ func main() { } } ``` +>You can also run this command. + +```shell +./build.sh +``` ## 🚀 Performance test diff --git a/README_CN.md b/README_CN.md index 31c3204b..52ca7f63 100644 --- a/README_CN.md +++ b/README_CN.md @@ -66,7 +66,10 @@ func main() { ``` - +>你也可以执行以下命令。 +```shell +./build.sh +``` ## 🚀 性能测试 我们对V1.0.4版本的FlyDB做了一个简单的性能测试。本次测试主要针对大规模数据的读写,我们随机选取了50万条数据进行测试。 From 2a52e6e7df1bb21b4c603ac4324bceb08738f364 Mon Sep 17 00:00:00 2001 From: Saeid Aghapour Date: Thu, 6 Jul 2023 13:45:50 +0330 Subject: [PATCH 6/9] addPeer function implementation --- cluster/region/region.go | 17 ++++++++++++++++- cluster/region/region_test.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/cluster/region/region.go b/cluster/region/region.go index 6bf27ae7..d9f2411a 100644 --- a/cluster/region/region.go +++ b/cluster/region/region.go @@ -1,6 +1,7 @@ package region import ( + "errors" "github.com/ByteStorage/FlyDB/engine" "github.com/hashicorp/raft" "sync" @@ -93,7 +94,21 @@ func (r *region) TransferLeader(peer string) error { } func (r *region) AddPeer(peer string) error { - panic("implement me") + r.mu.RLock() + defer r.mu.RUnlock() + contains := func(arr []string, it string) bool { + for _, n := range arr { + if n == it { + return true + } + } + return false + } + if !contains(r.peers, peer) { + r.peers = append(r.peers, peer) + return r.raft.AddVoter(raft.ServerID(peer), raft.ServerAddress(peer), 0, 0).Error() + } + return errors.New("peer already exists") } func (r *region) RemovePeer(peer string) error { diff --git a/cluster/region/region_test.go b/cluster/region/region_test.go index c0201cf8..fa96512c 100644 --- a/cluster/region/region_test.go +++ b/cluster/region/region_test.go @@ -121,3 +121,32 @@ func TestRegion_GetSize(t *testing.T) { size := region.GetSize() assert.Equal(t, int64(100), size) } + +func TestRegion_AddPeer(t *testing.T) { + // Create a test region instance + region := NewTestRegion() + _ = []struct { + name string + peers []string + peerToAdd string + expectedPeers []string + expectError bool + }{ + { + name: "add a new peer", + peers: region.GetPeers(), + peerToAdd: "peer3", + expectedPeers: []string{"peer1", "peer2", "peer3"}, + expectError: false, + }, + { + name: "add duplicate peer", + peers: region.GetPeers(), + peerToAdd: "peer1", + expectedPeers: []string{"peer1", "peer2"}, + expectError: true, + }, + } + destroyRegion(region) + +} From 53089782bd89ed9a8187ca4f995bc625c2382e6a Mon Sep 17 00:00:00 2001 From: Saeid Aghapour Date: Thu, 6 Jul 2023 14:09:15 +0330 Subject: [PATCH 7/9] removePeer function implementation --- cluster/region/region.go | 11 ++++++++++- cluster/region/region_test.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/cluster/region/region.go b/cluster/region/region.go index 6bf27ae7..692775d3 100644 --- a/cluster/region/region.go +++ b/cluster/region/region.go @@ -1,6 +1,7 @@ package region import ( + "errors" "github.com/ByteStorage/FlyDB/engine" "github.com/hashicorp/raft" "sync" @@ -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 { diff --git a/cluster/region/region_test.go b/cluster/region/region_test.go index c0201cf8..66d4bdf3 100644 --- a/cluster/region/region_test.go +++ b/cluster/region/region_test.go @@ -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) + +} From b7e21270f64b54c699846c388d1e38a86c0a71df Mon Sep 17 00:00:00 2001 From: Saeid Aghapour Date: Thu, 6 Jul 2023 19:18:02 +0330 Subject: [PATCH 8/9] TransferLeader function implementation (#126) --- cluster/region/region.go | 15 ++++++++++++++- cluster/region/region_test.go | 6 ++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/cluster/region/region.go b/cluster/region/region.go index 6bf27ae7..d665480c 100644 --- a/cluster/region/region.go +++ b/cluster/region/region.go @@ -1,6 +1,7 @@ package region import ( + "errors" "github.com/ByteStorage/FlyDB/engine" "github.com/hashicorp/raft" "sync" @@ -89,7 +90,19 @@ func (r *region) GetPeers() []string { } func (r *region) TransferLeader(peer string) error { - panic("implement me") + r.mu.RLock() + defer r.mu.RUnlock() + for _, p := range r.peers { + if p == peer { + err := r.raft.LeadershipTransferToServer(raft.ServerID(peer), raft.ServerAddress(peer)).Error() + if err != nil { + return err + } + r.leader = peer + return nil + } + } + return errors.New("no such peer exists") } func (r *region) AddPeer(peer string) error { diff --git a/cluster/region/region_test.go b/cluster/region/region_test.go index c0201cf8..55b54b61 100644 --- a/cluster/region/region_test.go +++ b/cluster/region/region_test.go @@ -121,3 +121,9 @@ func TestRegion_GetSize(t *testing.T) { size := region.GetSize() assert.Equal(t, int64(100), size) } + +func TestRegion_TransferLeader(t *testing.T) { + region := NewTestRegion() + defer destroyRegion(region) + // TODO: write tests for this function when start raft is ready. +} From 7b3ded19dc8d2fd8b8eea9356f8f0482168b467a Mon Sep 17 00:00:00 2001 From: Saeid Aghapour Date: Thu, 6 Jul 2023 19:45:45 +0330 Subject: [PATCH 9/9] TransferLeader function implementation (#126) --- cluster/region/region_test.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/cluster/region/region_test.go b/cluster/region/region_test.go index 2f524876..7178429b 100644 --- a/cluster/region/region_test.go +++ b/cluster/region/region_test.go @@ -125,12 +125,6 @@ func TestRegion_GetSize(t *testing.T) { assert.Equal(t, int64(100), size) } -func TestRegion_TransferLeader(t *testing.T) { - region := NewTestRegion() - defer destroyRegion(region) - // TODO: write tests for this function when start raft is ready. -} - func TestRegion_RemovePeer(t *testing.T) { // Create a test region instance region := NewTestRegion()