Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/ByteStorage/FlyDB into go…
Browse files Browse the repository at this point in the history
…dqi-dev
  • Loading branch information
qishenonly committed Jul 7, 2023
2 parents 296823c + e5baacc commit f637c6e
Show file tree
Hide file tree
Showing 6 changed files with 116 additions and 10 deletions.
7 changes: 4 additions & 3 deletions .github/workflows/go.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,13 @@ name: Go

on:
push:
branches: [ "master" ]
branches:
- "*"
pull_request:
branches: [ "master" ]
branches:
- "*"

jobs:

build:
runs-on: ubuntu-latest
strategy:
Expand Down
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,11 @@ func main() {
}
}
```
>You can also run this command.
```shell
./build.sh
```

## 🚀 Performance test

Expand Down
5 changes: 4 additions & 1 deletion README_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,10 @@ func main() {


```

>你也可以执行以下命令。
```shell
./build.sh
```
## 🚀 性能测试

我们对V1.0.4版本的FlyDB做了一个简单的性能测试。本次测试主要针对大规模数据的读写,我们随机选取了50万条数据进行测试。
Expand Down
10 changes: 7 additions & 3 deletions build.sh
Original file line number Diff line number Diff line change
@@ -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"

41 changes: 38 additions & 3 deletions 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 @@ -89,15 +90,49 @@ 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 {
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 {
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
58 changes: 58 additions & 0 deletions cluster/region/region_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,3 +124,61 @@ 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)

}

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)

}

0 comments on commit f637c6e

Please sign in to comment.