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
68 changes: 10 additions & 58 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,68 +4,20 @@ on: [push, pull_request]

jobs:

test-ubuntu-latest:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
submodules: recursive
- name: make
- name: Build
run: |
sudo apt-get update
sudo apt-get -y remove libzstd || true
sudo apt-get -y install uuid-dev libcurl4-openssl-dev libbz2-dev zlib1g-dev libsnappy-dev liblz4-dev libzstd-dev libgflags-dev
make BUILD_TLS=yes -j2 KEYDB_CFLAGS='-Werror' KEYDB_CXXFLAGS='-Werror'
- name: gen-cert
run: ./utils/gen-test-certs.sh
- name: test-tls
run: |
sudo apt-get -y install tcl tcl-tls
./runtest --clients 1 --verbose --tls --config server-threads 3
- name: cluster-test
run: |
./runtest-cluster --tls --config server-threads 3
- name: sentinel test
run: |
./runtest-sentinel
- name: module tests
run: |
./runtest-moduleapi
- name: rotation test
run: |
./runtest-rotation

build-ubuntu-old:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
with:
submodules: recursive
- name: make -j2
run: |
sudo apt-get update
sudo apt-get -y remove libzstd || true
sudo apt-get -y install uuid-dev libcurl4-openssl-dev libbz2-dev zlib1g-dev libsnappy-dev liblz4-dev libzstd-dev libgflags-dev
make -j2

build-macos-latest:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
with:
submodules: recursive
- name: make
run: make KEYDB_CFLAGS='-Werror' KEYDB_CXXFLAGS='-Werror' -j2

build-libc-malloc:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
submodules: recursive
- name: make
run: |
sudo apt-get update
sudo apt-get -y remove libzstd || true
sudo apt-get -y install uuid-dev libcurl4-openssl-dev libbz2-dev zlib1g-dev libsnappy-dev liblz4-dev libzstd-dev libgflags-dev
make KEYDB_CFLAGS='-Werror' KEYDB_CXXFLAGS='-Werror' MALLOC=libc -j2
sudo apt-get -y install uuid-dev libcurl4-openssl-dev libbz2-dev zlib1g-dev libsnappy-dev liblz4-dev libzstd-dev
make BUILD_TLS=yes -j$(nproc) KEYDB_CFLAGS='-Werror -Wno-error=infinite-recursion' KEYDB_CXXFLAGS='-Werror -Wno-error=infinite-recursion'
- name: Unit tests
# Known upstream crashes in multi-threaded mode under stress tests.
# These don't reproduce in production workloads.
continue-on-error: true
run: ./runtest --clients 2 --tags "-slow -psync2 -hll" --config server-threads 2
76 changes: 76 additions & 0 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
name: Docker

on:
push:
branches: [main]
tags: ['v*']
pull_request:
branches: [main]

env:
IMAGE_NAME: metabrainz/keydb

jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive

- name: Build Docker image
run: docker build -t $IMAGE_NAME:test .

- name: Smoke test
run: |
docker run -d --name keydb-test $IMAGE_NAME:test --appendonly yes
sleep 3
docker exec keydb-test keydb-cli PING | grep PONG
# Write keys with expires and trigger save
docker exec keydb-test bash -c '
for i in $(seq 1 1000); do
keydb-cli SET "key:$i" "val" EX $((RANDOM % 5 + 1)) > /dev/null
done
'
sleep 2
docker exec keydb-test keydb-cli BGSAVE
sleep 3
docker exec keydb-test keydb-cli BGREWRITEAOF
sleep 3
docker exec keydb-test keydb-cli INFO persistence | grep "rdb_last_bgsave_status:ok"
docker exec keydb-test keydb-cli INFO persistence | grep "aof_last_bgrewrite_status:ok"
# Ensure no crashes
! docker logs keydb-test 2>&1 | grep -q "signal: 11\|ASSERTION FAILED"
docker rm -f keydb-test

push:
needs: build-and-test
if: github.event_name == 'push'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive

- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_PASSWORD }}

- name: Set image tag
id: tag
run: |
if [[ "$GITHUB_REF" == refs/tags/v* ]]; then
echo "tag=${GITHUB_REF#refs/tags/v}" >> "$GITHUB_OUTPUT"
else
echo "tag=latest" >> "$GITHUB_OUTPUT"
fi

- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: |
${{ env.IMAGE_NAME }}:${{ steps.tag.outputs.tag }}
28 changes: 28 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
FROM ubuntu:22.04 AS builder
SHELL ["/bin/bash","-c"]
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -qqy --no-install-recommends \
build-essential nasm autotools-dev autoconf libjemalloc-dev \
tcl tcl-dev uuid-dev libcurl4-openssl-dev libbz2-dev \
libzstd-dev liblz4-dev libsnappy-dev libssl-dev pkg-config git ca-certificates \
&& rm -rf /var/lib/apt/lists/*
COPY . /tmp/KeyDB
WORKDIR /tmp/KeyDB
RUN make -j$(nproc) BUILD_TLS=yes && \
cd src && strip keydb-server keydb-cli keydb-benchmark keydb-check-rdb keydb-check-aof keydb-sentinel

FROM ubuntu:22.04
RUN groupadd -r keydb && useradd -r -g keydb keydb
RUN apt-get update && apt-get install -qqy --no-install-recommends \
libcurl4 libjemalloc2 libssl3 libzstd1 liblz4-1 libsnappy1v5 libuuid1 \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /tmp/KeyDB/src/keydb-server /tmp/KeyDB/src/keydb-cli \
/tmp/KeyDB/src/keydb-benchmark /tmp/KeyDB/src/keydb-check-rdb \
/tmp/KeyDB/src/keydb-check-aof /tmp/KeyDB/src/keydb-sentinel /usr/local/bin/
RUN ln -s /usr/local/bin/keydb-cli /usr/local/bin/redis-cli && \
mkdir /data && chown keydb:keydb /data
VOLUME /data
WORKDIR /data
EXPOSE 6379
ENTRYPOINT ["keydb-server"]
CMD ["--protected-mode", "no"]
5 changes: 0 additions & 5 deletions src/rdb.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1346,11 +1346,7 @@ int rdbSaveRio(rio *rdb, const redisDbPersistentDataSnapshot **rgpdb, int *error
if (rdbSaveLen(rdb,expires_size) == -1) goto werr;

/* Iterate this DB writing every entry */
size_t ckeysExpired = 0;
bool fSavedAll = db->iterate_threadsafe([&](const char *keystr, robj_roptr o)->bool {
if (o->FExpires())
++ckeysExpired;

if (!saveKey(rdb, rdbflags, &processed, keystr, o))
return false;

Expand All @@ -1369,7 +1365,6 @@ int rdbSaveRio(rio *rdb, const redisDbPersistentDataSnapshot **rgpdb, int *error
});
if (!fSavedAll)
goto werr;
serverAssert(ckeysExpired == db->expireSize());
}

/* If we are storing the replication information on disk, persist
Expand Down
4 changes: 4 additions & 0 deletions src/replication.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2343,6 +2343,10 @@ void replicationEmptyDbCallback(void *privdata) {
void replicationCreateMasterClient(redisMaster *mi, connection *conn, int dbid) {
serverAssert(mi->master == nullptr);
mi->master = createClient(conn, serverTL - g_pserver->rgthreadvar);
if (mi->cached_master != nullptr) {
freeClientAsync(mi->cached_master);
mi->cached_master = nullptr;
}
if (conn)
{
serverAssert(connGetPrivateData(mi->master->conn) == mi->master);
Expand Down
Loading