Sitelet https://github.com/phpredis/phpredis/pull/2907/files
Skip to content
Draft
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
90 changes: 84 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ jobs:
fail-fast: false
matrix:
php: ['7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5']
server: ['redis', 'valkey']
server: ['redis', 'dragonfly', 'valkey']

steps:
- name: Checkout
Expand Down Expand Up @@ -106,6 +106,16 @@ jobs:
sudo apt-get update --allow-releaseinfo-change-label
sudo apt-get install redis

- name: Install Dragonfly
if: matrix.server == 'dragonfly'
run: |
sudo curl -Lo /usr/share/keyrings/dragonfly-keyring.public \
https://packages.dragonflydb.io/pgp-key.public
sudo curl -Lo /etc/apt/sources.list.d/dragonfly.sources \
https://packages.dragonflydb.io/dragonfly.sources
sudo apt-get update --allow-releaseinfo-change-label
sudo apt-get install dragonfly redis-server redis-tools

- name: Install ValKey
if: matrix.server == 'valkey'
run: |
Expand All @@ -126,9 +136,15 @@ jobs:
echo 'extension = redis.so' | sudo tee -a "$(php-config --ini-dir)"/90-redis.ini

- name: Attempt to shutdown default server
run: ${{ matrix.server }}-cli SHUTDOWN NOSAVE || true
run: |
if [ "${{ matrix.server }}" = dragonfly ]; then
sudo systemctl stop dragonfly redis-server || true
else
${{ matrix.server }}-cli SHUTDOWN NOSAVE || true
fi

- name: Start ${{ matrix.server }}-server
if: matrix.server != 'dragonfly'
run: |
for PORT in {6379..6382} {32767..32769}; do
${{ matrix.server }}-server \
Expand All @@ -144,7 +160,35 @@ jobs:
--aclfile tests/users.acl \
--acl-pubsub-default allchannels

- name: Start dragonfly
if: matrix.server == 'dragonfly'
run: |
for PORT in {6379..6382} {32767..32769}; do
mkdir -p "/tmp/dragonfly-data-$PORT"
dragonfly \
--port="$PORT" \
--dir="/tmp/dragonfly-data-$PORT" \
--aclfile=tests/users.acl \
--proactor_threads=1 \
--maxmemory=256mb \
--maxclients=1000 \
--version_check=false \
>"/tmp/dragonfly-$PORT.log" 2>&1 &
done
mkdir -p /tmp/dragonfly-data-unixsocket
dragonfly \
--port=0 \
--unixsocket=/tmp/redis.sock \
--dir=/tmp/dragonfly-data-unixsocket \
--aclfile=tests/users.acl \
--proactor_threads=1 \
--maxmemory=256mb \
--maxclients=1000 \
--version_check=false \
>/tmp/dragonfly-unixsocket.log 2>&1 &

- name: Start ${{ matrix.server }} cluster
if: matrix.server != 'dragonfly'
run: |
mkdir -p tests/nodes
echo -n > tests/nodes/nodemap
Expand All @@ -159,13 +203,34 @@ jobs:
echo 127.0.0.1:"$PORT" >> tests/nodes/nodemap
done

- name: Start dragonfly cluster
if: matrix.server == 'dragonfly'
run: |
mkdir -p tests/nodes
mkdir -p /tmp/dragonfly-data-cluster
echo 127.0.0.1:7000 > tests/nodes/nodemap
dragonfly \
--port=7000 \
--cluster_mode=emulated \
--dir=/tmp/dragonfly-data-cluster \
--aclfile=tests/users.acl \
--proactor_threads=1 \
--maxmemory=256mb \
--maxclients=1000 \
--version_check=false \
>/tmp/dragonfly-cluster.log 2>&1 &

- name: Start ${{ matrix.server }} sentinel
run: |
wget raw.githubusercontent.com/redis/redis/7.0/sentinel.conf
SERVER=${{ matrix.server }}-server
if [ "${{ matrix.server }}" = dragonfly ]; then
SERVER=redis-server
fi
for PORT in {26379..26380}; do
cp sentinel.conf "$PORT.conf"
sed -i '/^sentinel/Id' "$PORT.conf"
${{ matrix.server }}-server "$PORT.conf" \
"$SERVER" "$PORT.conf" \
--port "$PORT" \
--daemonize yes \
--sentinel monitor mymaster 127.0.0.1 6379 1 \
Expand All @@ -175,29 +240,42 @@ jobs:
- name: Wait for ${{ matrix.server }} instances
run: |
WAIT_TIMEOUT_SECONDS=30
CLI=${{ matrix.server }}-cli
CLUSTER_PORTS=({7000..7005})
if [ "${{ matrix.server }}" = dragonfly ]; then
CLI=redis-cli
CLUSTER_PORTS=(7000)
fi

for PORT in {6379..6382} {7000..7005} {32767..32768} {26379..26380}; do
for PORT in {6379..6382} "${CLUSTER_PORTS[@]}" {32767..32768} {26379..26380}; do
START_TIME=$SECONDS
until echo PING | ${{ matrix.server }}-cli -p "$PORT" 2>&1 | grep -qE 'PONG|NOAUTH'; do
until echo PING | "$CLI" -p "$PORT" 2>&1 | grep -qE 'PONG|NOAUTH'; do
if (( SECONDS - START_TIME >= WAIT_TIMEOUT_SECONDS )); then
echo "Timed out waiting for ${{ matrix.server }} on port $PORT after ${WAIT_TIMEOUT_SECONDS}s"
if [ "${{ matrix.server }}" = dragonfly ]; then
cat /tmp/dragonfly*.log
fi
exit 1
fi
echo "Still waiting for ${{ matrix.server }} on port $PORT"
sleep .5
done
done
START_TIME=$SECONDS
until echo PING | ${{ matrix.server }}-cli -s /tmp/redis.sock 2>&1 | grep -qE 'PONG|NOAUTH'; do
until echo PING | "$CLI" -s /tmp/redis.sock 2>&1 | grep -qE 'PONG|NOAUTH'; do
if (( SECONDS - START_TIME >= WAIT_TIMEOUT_SECONDS )); then
echo "Timed out waiting for ${{ matrix.server }} at /tmp/redis.sock after ${WAIT_TIMEOUT_SECONDS}s"
if [ "${{ matrix.server }}" = dragonfly ]; then
cat /tmp/dragonfly*.log
fi
exit 1
fi
echo "Still waiting for ${{ matrix.server }} at /tmp/redis.sock"
sleep .5
done

- name: Initialize ${{ matrix.server }} cluster
if: matrix.server != 'dragonfly'
run: |
echo yes | ${{ matrix.server }}-cli --cluster create 127.0.0.1:{7000..7005} \
--cluster-replicas 1 --user phpredis -a phpredis
Expand Down
2 changes: 1 addition & 1 deletion cluster_library.c
Original file line number Diff line number Diff line change
Expand Up @@ -1918,7 +1918,7 @@ cluster_geosearch_resp(INTERNAL_FUNCTION_PARAMETERS, redisCluster *c,
c->cmd_sock->null_mbulk_as_null = c->flags->null_mbulk_as_null;
if (c->reply_type != TYPE_MULTIBULK ||
redis_read_geosearch_response(&zret, c->cmd_sock, c->reply_len,
ctx.mode == REDIS_CTX_GEO_WITHMETA) < 0)
(uintptr_t)ctx.ptr) < 0)
{
ZVAL_FALSE(&zret);
}
Expand Down
1 change: 0 additions & 1 deletion common.h
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,6 @@ typedef enum RedisCtxMode {
REDIS_CTX_WITHSCORES,
REDIS_CTX_WITHVALUES,
REDIS_CTX_INCR,
REDIS_CTX_GEO_WITHMETA,
REDIS_CTX_XAUTOCLAIM,
REDIS_CTX_DECODE_JSON,
REDIS_CTX_HELLO_SERVER,
Expand Down
Loading
Loading