Skip to content

Commit 19b600d

Browse files
authored
Merge pull request #36 from IceFireDB/upgrade-gnet-v2.9.7
Upgrade gnet v2.9.7
2 parents 1d6f88d + 6be9852 commit 19b600d

10 files changed

Lines changed: 1054 additions & 169 deletions

File tree

.github/workflows/benchmark.yml

Lines changed: 65 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -9,52 +9,93 @@ on:
99

1010
jobs:
1111
benchmark:
12-
runs-on: ubuntu-latest
12+
strategy:
13+
matrix:
14+
go-version: ['1.24']
15+
os: [ubuntu-latest]
16+
17+
runs-on: ${{ matrix.os }}
18+
1319
steps:
1420
- uses: actions/checkout@v6
1521

1622
- name: Set up Go
1723
uses: actions/setup-go@v5
1824
with:
19-
go-version: '1.21'
25+
go-version: ${{ matrix.go-version }}
2026

2127
- name: Install dependencies
2228
run: |
2329
sudo apt-get update
2430
sudo apt-get install -y redis-tools netcat-openbsd
2531
26-
- name: Run benchmark
32+
- name: Build server
2733
run: |
28-
# Start server in background
2934
cd example/memory_kv
30-
# Start server with logging
31-
go run server.go > server.log 2>&1 &
35+
go build -o server
36+
37+
- name: Start server
38+
run: |
39+
cd example/memory_kv
40+
./server -addr "127.0.0.1:6380" > server.log 2>&1 &
3241
SERVER_PID=$!
33-
34-
# Wait for server to be ready (longer timeout for CI environment)
42+
echo $SERVER_PID > server.pid
43+
3544
for i in {1..30}; do
3645
if nc -z 127.0.0.1 6380; then
3746
echo "Server is ready"
3847
break
3948
fi
40-
sleep 2
49+
sleep 1
4150
echo "Waiting for server to start... ($i/30)"
4251
done
43-
44-
# Verify server is ready
52+
4553
if ! nc -z 127.0.0.1 6380; then
46-
echo "Server failed to start after 60 seconds"
47-
echo "Server logs:"
48-
cat server.log || true
54+
echo "Server failed to start"
55+
cat server.log
4956
exit 1
5057
fi
51-
52-
# Run benchmark tests
53-
echo "Running benchmark tests..."
54-
redis-benchmark -h 127.0.0.1 -p 6380 -n 5000000 -t set,get -c 512 -P 1024 -q
55-
56-
# Stop server
57-
kill $SERVER_PID
58-
59-
# Output results
60-
echo "Benchmark completed"
58+
59+
- name: Warm up
60+
run: |
61+
redis-benchmark -h 127.0.0.1 -p 6380 -n 10000 -t set,get -c 16 -q
62+
63+
- name: Run SET benchmark
64+
run: |
65+
echo "=== SET Benchmark ==="
66+
redis-benchmark -h 127.0.0.1 -p 6380 -n 100000 -t set -c 16
67+
68+
- name: Run GET benchmark
69+
run: |
70+
echo "=== GET Benchmark ==="
71+
redis-benchmark -h 127.0.0.1 -p 6380 -n 100000 -t get -c 16
72+
73+
- name: Run mixed SET/GET benchmark
74+
run: |
75+
echo "=== Mixed SET/GET Benchmark ==="
76+
redis-benchmark -h 127.0.0.1 -p 6380 -n 100000 -t set,get -c 16
77+
78+
- name: Run high concurrency benchmark
79+
run: |
80+
echo "=== High Concurrency Benchmark ==="
81+
redis-benchmark -h 127.0.0.1 -p 6380 -n 100000 -t set,get -c 64 -P 16
82+
83+
- name: Run pipeline benchmark
84+
run: |
85+
echo "=== Pipeline Benchmark ==="
86+
redis-benchmark -h 127.0.0.1 -p 6380 -n 100000 -t set,get -c 16 -P 32
87+
88+
- name: Stop server
89+
if: always()
90+
run: |
91+
cd example/memory_kv
92+
if [ -f server.pid ]; then
93+
kill $(cat server.pid) || true
94+
rm server.pid
95+
fi
96+
97+
- name: Show server logs
98+
if: failure()
99+
run: |
100+
cat example/memory_kv/server.log || true
101+

.github/workflows/build.yml

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,39 +5,30 @@ on:
55
branches: [ main ]
66
pull_request:
77
branches: [ main ]
8-
8+
99

1010
jobs:
11-
# deploy:
12-
# runs-on: ubuntu-20.04
13-
# concurrency:
14-
# group: ${{ github.workflow }}-${{ github.ref }}
15-
# steps:
16-
# - uses: actions/checkout@v2
17-
# with:
18-
# submodules: true # Fetch Hugo themes (true OR recursive)
19-
# fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
20-
21-
# - run: mv README.md doc/index.md
22-
23-
# - name: Deploy Pages
24-
# uses: peaceiris/actions-gh-pages@v3
25-
# with:
26-
# github_token: ${{ secrets.GITHUB_TOKEN }}
27-
# publish_dir: ./doc
28-
# enable_jekyll: true
29-
3011
build-example-kv:
31-
runs-on: ubuntu-latest
12+
strategy:
13+
matrix:
14+
go-version: ['1.21', '1.22', '1.23', '1.24']
15+
os: [ubuntu-latest]
16+
17+
runs-on: ${{ matrix.os }}
18+
3219
steps:
3320
- uses: actions/checkout@v6
3421

3522
- name: Set up Go
3623
uses: actions/setup-go@v5
3724
with:
38-
go-version: 1.24.0
25+
go-version: ${{ matrix.go-version }}
26+
27+
- name: Download dependencies
28+
run: go mod download
3929

4030
- name: Build
4131
run: |
4232
cd example/memory_kv/
43-
go build
33+
go build -o server
34+

.github/workflows/test.yml

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
name: CI Tests
2+
3+
on:
4+
push:
5+
branches: [ main, master ]
6+
pull_request:
7+
branches: [ main, master ]
8+
9+
jobs:
10+
build-and-test:
11+
strategy:
12+
matrix:
13+
go-version: ['1.21', '1.22', '1.23', '1.24']
14+
os: [ubuntu-latest]
15+
16+
runs-on: ${{ matrix.os }}
17+
18+
steps:
19+
- name: Checkout code
20+
uses: actions/checkout@v6
21+
22+
- name: Set up Go
23+
uses: actions/setup-go@v5
24+
with:
25+
go-version: ${{ matrix.go-version }}
26+
27+
- name: Install dependencies
28+
run: |
29+
sudo apt-get update
30+
sudo apt-get install -y redis-tools netcat-openbsd
31+
32+
- name: Download dependencies
33+
run: go mod download
34+
35+
- name: Verify dependencies
36+
run: go mod verify
37+
38+
- name: Build all packages
39+
run: go build ./...
40+
41+
- name: Build example
42+
run: |
43+
cd example/memory_kv
44+
go build -o server
45+
46+
- name: Run unit tests
47+
run: go test -v -race -coverprofile=coverage.out ./...
48+
49+
- name: Upload coverage to Codecov
50+
uses: codecov/codecov-action@v4
51+
with:
52+
file: ./coverage.out
53+
fail_ci_if_error: false
54+
55+
benchmark-test:
56+
runs-on: ubuntu-latest
57+
58+
steps:
59+
- name: Checkout code
60+
uses: actions/checkout@v6
61+
62+
- name: Set up Go
63+
uses: actions/setup-go@v5
64+
with:
65+
go-version: '1.24'
66+
67+
- name: Install dependencies
68+
run: |
69+
sudo apt-get update
70+
sudo apt-get install -y redis-tools netcat-openbsd
71+
72+
- name: Build example server
73+
run: |
74+
cd example/memory_kv
75+
go build -o server
76+
77+
- name: Start server
78+
run: |
79+
cd example/memory_kv
80+
./server -addr "127.0.0.1:6380" > server.log 2>&1 &
81+
SERVER_PID=$!
82+
echo $SERVER_PID > server.pid
83+
84+
# Wait for server to be ready
85+
for i in {1..30}; do
86+
if nc -z 127.0.0.1 6380; then
87+
echo "Server is ready"
88+
break
89+
fi
90+
sleep 1
91+
echo "Waiting for server to start... ($i/30)"
92+
done
93+
94+
# Verify server is ready
95+
if ! nc -z 127.0.0.1 6380; then
96+
echo "Server failed to start"
97+
cat server.log
98+
exit 1
99+
fi
100+
101+
- name: Warm up server
102+
run: |
103+
echo "Warming up server..."
104+
redis-benchmark -h 127.0.0.1 -p 6380 -n 10000 -t set,get -c 16 -q
105+
106+
- name: Run SET benchmark
107+
run: |
108+
echo "Running SET benchmark..."
109+
redis-benchmark -h 127.0.0.1 -p 6380 -n 100000 -t set -c 16 -q
110+
111+
- name: Run GET benchmark
112+
run: |
113+
echo "Running GET benchmark..."
114+
redis-benchmark -h 127.0.0.1 -p 6380 -n 100000 -t get -c 16 -q
115+
116+
- name: Run mixed SET/GET benchmark
117+
run: |
118+
echo "Running mixed SET/GET benchmark..."
119+
redis-benchmark -h 127.0.0.1 -p 6380 -n 100000 -t set,get -c 16 -q
120+
121+
- name: Run concurrent benchmark
122+
run: |
123+
echo "Running concurrent benchmark..."
124+
redis-benchmark -h 127.0.0.1 -p 6380 -n 100000 -t set,get -c 64 -q
125+
126+
- name: Stop server
127+
if: always()
128+
run: |
129+
cd example/memory_kv
130+
if [ -f server.pid ]; then
131+
kill $(cat server.pid) || true
132+
rm server.pid
133+
fi
134+
135+
- name: Show server logs
136+
if: failure()
137+
run: |
138+
cat example/memory_kv/server.log || true

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,4 @@ vendor
2626
#vscode
2727
.vscode
2828
example/memory_kv/memory_kv
29+
example/memory_kv/server

go.mod

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,21 @@ module github.com/IceFireDB/redhub
33
go 1.24.0
44

55
require (
6-
github.com/panjf2000/gnet v1.6.7
6+
github.com/panjf2000/gnet/v2 v2.9.7
77
github.com/stretchr/testify v1.11.1
88
)
99

1010
require (
1111
github.com/davecgh/go-spew v1.1.1 // indirect
12-
github.com/panjf2000/ants/v2 v2.9.0 // indirect
12+
github.com/kr/pretty v0.1.0 // indirect
13+
github.com/panjf2000/ants/v2 v2.11.4 // indirect
1314
github.com/pmezard/go-difflib v1.0.0 // indirect
1415
github.com/valyala/bytebufferpool v1.0.0 // indirect
1516
go.uber.org/multierr v1.11.0 // indirect
16-
go.uber.org/zap v1.27.0 // indirect
17-
golang.org/x/sys v0.26.0 // indirect
17+
go.uber.org/zap v1.27.1 // indirect
18+
golang.org/x/sync v0.19.0 // indirect
19+
golang.org/x/sys v0.40.0 // indirect
20+
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
1821
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
1922
gopkg.in/yaml.v3 v3.0.1 // indirect
2023
)

0 commit comments

Comments
 (0)