Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 65 additions & 24 deletions .github/workflows/benchmark.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,52 +9,93 @@ on:

jobs:
benchmark:
runs-on: ubuntu-latest
strategy:
matrix:
go-version: ['1.24']
os: [ubuntu-latest]

runs-on: ${{ matrix.os }}

steps:
- uses: actions/checkout@v6

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.21'
go-version: ${{ matrix.go-version }}

- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y redis-tools netcat-openbsd

- name: Run benchmark
- name: Build server
run: |
# Start server in background
cd example/memory_kv
# Start server with logging
go run server.go > server.log 2>&1 &
go build -o server

- name: Start server
run: |
cd example/memory_kv
./server -addr "127.0.0.1:6380" > server.log 2>&1 &
SERVER_PID=$!

# Wait for server to be ready (longer timeout for CI environment)
echo $SERVER_PID > server.pid

for i in {1..30}; do
if nc -z 127.0.0.1 6380; then
echo "Server is ready"
break
fi
sleep 2
sleep 1
echo "Waiting for server to start... ($i/30)"
done

# Verify server is ready

if ! nc -z 127.0.0.1 6380; then
echo "Server failed to start after 60 seconds"
echo "Server logs:"
cat server.log || true
echo "Server failed to start"
cat server.log
exit 1
fi

# Run benchmark tests
echo "Running benchmark tests..."
redis-benchmark -h 127.0.0.1 -p 6380 -n 5000000 -t set,get -c 512 -P 1024 -q

# Stop server
kill $SERVER_PID

# Output results
echo "Benchmark completed"

- name: Warm up
run: |
redis-benchmark -h 127.0.0.1 -p 6380 -n 10000 -t set,get -c 16 -q

- name: Run SET benchmark
run: |
echo "=== SET Benchmark ==="
redis-benchmark -h 127.0.0.1 -p 6380 -n 100000 -t set -c 16

- name: Run GET benchmark
run: |
echo "=== GET Benchmark ==="
redis-benchmark -h 127.0.0.1 -p 6380 -n 100000 -t get -c 16

- name: Run mixed SET/GET benchmark
run: |
echo "=== Mixed SET/GET Benchmark ==="
redis-benchmark -h 127.0.0.1 -p 6380 -n 100000 -t set,get -c 16

- name: Run high concurrency benchmark
run: |
echo "=== High Concurrency Benchmark ==="
redis-benchmark -h 127.0.0.1 -p 6380 -n 100000 -t set,get -c 64 -P 16

- name: Run pipeline benchmark
run: |
echo "=== Pipeline Benchmark ==="
redis-benchmark -h 127.0.0.1 -p 6380 -n 100000 -t set,get -c 16 -P 32

- name: Stop server
if: always()
run: |
cd example/memory_kv
if [ -f server.pid ]; then
kill $(cat server.pid) || true
rm server.pid
fi

- name: Show server logs
if: failure()
run: |
cat example/memory_kv/server.log || true

37 changes: 14 additions & 23 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,39 +5,30 @@ on:
branches: [ main ]
pull_request:
branches: [ main ]


jobs:
# deploy:
# runs-on: ubuntu-20.04
# concurrency:
# group: ${{ github.workflow }}-${{ github.ref }}
# steps:
# - uses: actions/checkout@v2
# with:
# submodules: true # Fetch Hugo themes (true OR recursive)
# fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod

# - run: mv README.md doc/index.md

# - name: Deploy Pages
# uses: peaceiris/actions-gh-pages@v3
# with:
# github_token: ${{ secrets.GITHUB_TOKEN }}
# publish_dir: ./doc
# enable_jekyll: true

build-example-kv:
runs-on: ubuntu-latest
strategy:
matrix:
go-version: ['1.21', '1.22', '1.23', '1.24']
os: [ubuntu-latest]

runs-on: ${{ matrix.os }}

steps:
- uses: actions/checkout@v6

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: 1.24.0
go-version: ${{ matrix.go-version }}

- name: Download dependencies
run: go mod download

- name: Build
run: |
cd example/memory_kv/
go build
go build -o server

138 changes: 138 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
name: CI Tests

on:
push:
branches: [ main, master ]
pull_request:
branches: [ main, master ]

jobs:
build-and-test:
strategy:
matrix:
go-version: ['1.21', '1.22', '1.23', '1.24']
os: [ubuntu-latest]

runs-on: ${{ matrix.os }}

steps:
- name: Checkout code
uses: actions/checkout@v6

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}

- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y redis-tools netcat-openbsd

- name: Download dependencies
run: go mod download

- name: Verify dependencies
run: go mod verify

- name: Build all packages
run: go build ./...

- name: Build example
run: |
cd example/memory_kv
go build -o server

- name: Run unit tests
run: go test -v -race -coverprofile=coverage.out ./...

- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
file: ./coverage.out
fail_ci_if_error: false

benchmark-test:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v6

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.24'

- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y redis-tools netcat-openbsd

- name: Build example server
run: |
cd example/memory_kv
go build -o server

- name: Start server
run: |
cd example/memory_kv
./server -addr "127.0.0.1:6380" > server.log 2>&1 &
SERVER_PID=$!
echo $SERVER_PID > server.pid

# Wait for server to be ready
for i in {1..30}; do
if nc -z 127.0.0.1 6380; then
echo "Server is ready"
break
fi
sleep 1
echo "Waiting for server to start... ($i/30)"
done

# Verify server is ready
if ! nc -z 127.0.0.1 6380; then
echo "Server failed to start"
cat server.log
exit 1
fi

- name: Warm up server
run: |
echo "Warming up server..."
redis-benchmark -h 127.0.0.1 -p 6380 -n 10000 -t set,get -c 16 -q

- name: Run SET benchmark
run: |
echo "Running SET benchmark..."
redis-benchmark -h 127.0.0.1 -p 6380 -n 100000 -t set -c 16 -q

- name: Run GET benchmark
run: |
echo "Running GET benchmark..."
redis-benchmark -h 127.0.0.1 -p 6380 -n 100000 -t get -c 16 -q

- name: Run mixed SET/GET benchmark
run: |
echo "Running mixed SET/GET benchmark..."
redis-benchmark -h 127.0.0.1 -p 6380 -n 100000 -t set,get -c 16 -q

- name: Run concurrent benchmark
run: |
echo "Running concurrent benchmark..."
redis-benchmark -h 127.0.0.1 -p 6380 -n 100000 -t set,get -c 64 -q

- name: Stop server
if: always()
run: |
cd example/memory_kv
if [ -f server.pid ]; then
kill $(cat server.pid) || true
rm server.pid
fi

- name: Show server logs
if: failure()
run: |
cat example/memory_kv/server.log || true
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,4 @@ vendor
#vscode
.vscode
example/memory_kv/memory_kv
example/memory_kv/server
11 changes: 7 additions & 4 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,21 @@ module github.com/IceFireDB/redhub
go 1.24.0

require (
github.com/panjf2000/gnet v1.6.7
github.com/panjf2000/gnet/v2 v2.9.7
github.com/stretchr/testify v1.11.1
)

require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/panjf2000/ants/v2 v2.9.0 // indirect
github.com/kr/pretty v0.1.0 // indirect
github.com/panjf2000/ants/v2 v2.11.4 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
golang.org/x/sys v0.26.0 // indirect
go.uber.org/zap v1.27.1 // indirect
golang.org/x/sync v0.19.0 // indirect
golang.org/x/sys v0.40.0 // indirect
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
Loading
Loading