Skip to content

Commit

Permalink
Merge branch 'master' into feat/region-remove-peer
Browse files Browse the repository at this point in the history
  • Loading branch information
saeid-a authored Jul 6, 2023
2 parents 21716ea + a9243eb commit 8774906
Show file tree
Hide file tree
Showing 39 changed files with 1,641 additions and 198 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"

16 changes: 15 additions & 1 deletion cluster/region/region.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,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 {
Expand Down
36 changes: 34 additions & 2 deletions cluster/region/region_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,11 @@ func ReturnNewDB() *engine.DB {
func destroyRegion(r Region) {
// Close the region's database
db := r.(*TestRegionStruct).db
_ = db.Close()
err := os.RemoveAll(dirpath)
err := db.Close()
if err != nil {
return
}
err = os.RemoveAll(dirpath)
if err != nil {
return
}
Expand Down Expand Up @@ -150,3 +153,32 @@ func TestRegion_RemovePeer(t *testing.T) {
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)

}
10 changes: 0 additions & 10 deletions cmd/cli/flydb.go

This file was deleted.

2 changes: 1 addition & 1 deletion cmd/app.go → cmd/client/app.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package cmd
package client

import (
"fmt"
Expand Down
19 changes: 19 additions & 0 deletions cmd/client/cli/flydb-client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package main

import (
"fmt"
"github.com/ByteStorage/FlyDB/cmd/client"
"github.com/desertbit/grumble"
"os"
)

func main() {
if len(os.Args) != 2 {
fmt.Println("usage: flydb-cli [addr]")
return
}
client.Addr = os.Args[1]
os.Args = os.Args[:1]
// start client CLI
grumble.Main(client.App)
}
37 changes: 17 additions & 20 deletions cmd/data.go → cmd/client/data.go
Original file line number Diff line number Diff line change
@@ -1,22 +1,27 @@
package cmd
package client

import (
"fmt"
"github.com/ByteStorage/FlyDB/engine/grpc/client"
"github.com/desertbit/grumble"
)

var Addr string

func newClient() *client.Client {
return &client.Client{
Addr: Addr,
}
}

func putData(c *grumble.Context) error {
key := c.Args.String("key")
value := c.Args.String("value")
if key == "" || value == "" {
fmt.Println("key or value is empty")
return nil
}
if db == nil {
fmt.Println("start server first")
return nil
}
err := db.Put([]byte(key), []byte(value))
err := newClient().Put([]byte(key), []byte(value))
if err != nil {
fmt.Println("put data error: ", err)
return err
Expand All @@ -31,11 +36,7 @@ func getData(c *grumble.Context) error {
fmt.Println("key is empty")
return nil
}
if db == nil {
fmt.Println("start server first")
return nil
}
value, err := db.Get([]byte(key))
value, err := newClient().Get([]byte(key))
if err != nil {
fmt.Println("get data error: ", err)
return err
Expand All @@ -50,11 +51,7 @@ func deleteKey(c *grumble.Context) error {
fmt.Println("key is empty")
return nil
}
if db == nil {
fmt.Println("start server first")
return nil
}
err := db.Delete([]byte(key))
err := newClient().Del([]byte(key))
if err != nil {
fmt.Println("delete key error: ", err)
return err
Expand All @@ -64,11 +61,11 @@ func deleteKey(c *grumble.Context) error {
}

func getKeys(c *grumble.Context) error {
if db == nil {
fmt.Println("start server first")
return nil
list, err := newClient().Keys()
if err != nil {
fmt.Println("get keys error: ", err)
return err
}
list := db.GetListKeys()
fmt.Println("Total keys: ", len(list))
for i, bytes := range list {
fmt.Printf(string(bytes[:]) + "\t")
Expand Down
25 changes: 2 additions & 23 deletions cmd/root.go → cmd/client/root.go
Original file line number Diff line number Diff line change
@@ -1,28 +1,8 @@
package cmd
package client

import (
"github.com/desertbit/grumble"
)
import "github.com/desertbit/grumble"

func register(app *grumble.App) {
app.AddCommand(&grumble.Command{
Name: "start",
Help: "start server",
Run: startServer,
})

app.AddCommand(&grumble.Command{
Name: "stop",
Help: "stop server",
Run: stopServer,
})

app.AddCommand(&grumble.Command{
Name: "clean",
Help: "clean server",
Run: cleanServer,
})

app.AddCommand(&grumble.Command{
Name: "put",
Help: "put data",
Expand Down Expand Up @@ -56,5 +36,4 @@ func register(app *grumble.App) {
Help: "list keys",
Run: getKeys,
})

}
78 changes: 0 additions & 78 deletions cmd/server.go

This file was deleted.

28 changes: 28 additions & 0 deletions cmd/server/cli/flydb-server.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package main

import (
"fmt"
"github.com/ByteStorage/FlyDB/cmd/server"
"os"
)

func main() {
args := os.Args
if len(args) >= 2 {
fmt.Println("Usage: flydb-server [start|clean|stop]")
return
}
if len(args) == 1 {
//start server
server.StartServer()
return
}
switch args[1] {
case "start":
server.StartServer()
case "stop":
server.StopServer()
case "clean":
server.CleanServer()
}
}
Loading

0 comments on commit 8774906

Please sign in to comment.