valkey: Add recipe

Valkey is an open source, in-memory data store. Release 8.0.0 is
fully compatible with Redis OSS 7.2.4 and brings:

- Added full client info to SHUTDOWN and CLUSTER FAILOVER logs for
  better traceability of requests.
- Resolved issues in replicationSetPrimary where the primary node's
  IP/port updates were not correctly handled in the cluster gossip
  section.
- Fixed AOF base suffix during rewrites when modifying the
  aof-use-rdb-preamble setting, ensuring correct suffix caching to
  prevent inconsistencies.
- Addressed rare crashes in async IO threads with TLS by preventing
  concurrent read and write job overlap.
- Prevented AOF from being incorrectly disabled after loading RDB
  data, ensuring proper re-enabling of AOF.
- Triggered a save of the cluster configuration file before
  shutdown to prevent inconsistencies caused by unsaved node
  configuration changes.
- Fixed timing issue in CLUSTER SETSLOT to ensure replicas handle
  migration correctly when receiving the command before the gossip
  update.
- Optimized the handling of temporary set objects in SUNION and
  SDIFF commands, resulting in a 41% performance improvement for
  SUNION and 27% for SDIFF.

Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
This commit is contained in:
Leon Anavi 2024-09-26 09:02:35 +03:00 committed by Khem Raj
parent ead57410e2
commit 9d3c5967e2
9 changed files with 1695 additions and 0 deletions

View File

@ -0,0 +1,33 @@
From b4cf6e677cec75a0d2b57dcb2960ad1e16908c82 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Tue, 10 Sep 2019 20:04:26 -0700
Subject: [PATCH] src: Do not reset FINAL_LIBS
This helps case where additional libraries are needed to be passed from
environment to get it going
e.g. -latomic is needed on clang/x86 to provide for 64bit atomics
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
---
src/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Makefile b/src/Makefile
index e0b1d2722..48988e271 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -145,7 +145,7 @@ ifeq ($(SERVER_TEST),yes)
FINAL_CFLAGS +=-DSERVER_TEST=1
endif
FINAL_LDFLAGS=$(LDFLAGS) $(OPT) $(SERVER_LDFLAGS) $(DEBUG)
-FINAL_LIBS=-lm
+FINAL_LIBS+=-lm
DEBUG=-g -ggdb
# Linux ARM32 needs -latomic at linking time
--
2.39.5

View File

@ -0,0 +1,29 @@
From f3dd59789e4a8b06777be2725c6c3e36050fd6ec Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sat, 21 Dec 2019 12:09:51 -0800
Subject: [PATCH] Define _GNU_SOURCE to get PTHREAD_MUTEX_INITIALIZER
Fixes
| zmalloc.c:87:37: error: 'PTHREAD_MUTEX_DEFAULT' undeclared here (not in a function)
| 87 | pthread_mutex_t used_memory_mutex = PTHREAD_MUTEX_INITIALIZER;
| | ^~~~~~~~~~~~~~~~~~~~~~~~~
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
---
src/zmalloc.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/zmalloc.c b/src/zmalloc.c
index 7b19107b6..bd365c11c 100644
--- a/src/zmalloc.c
+++ b/src/zmalloc.c
@@ -33,6 +33,7 @@
#include "solarisfixes.h"
#include "serverassert.h"
+#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

View File

@ -0,0 +1,41 @@
From 5e6c3052930f1d831d3479cb59533c08277700ff Mon Sep 17 00:00:00 2001
From: Venture Research <tech@ventureresearch.com>
Date: Fri, 8 Feb 2013 17:39:52 -0600
Subject: [PATCH] hiredis: use default CC if it is set
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Instead of trying to automagically figure out CC, which breaks with OE
as CC has spaces in it, just skip it if one was already passed in.
Signed-off-by: Venture Research <tech@ventureresearch.com>
Update to work with 4.0.8
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
Reworked for 6.0.4
Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
Reworked for 8.0.0
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
---
Upstream-Status: Pending
deps/hiredis/Makefile | 2 --
1 file changed, 2 deletions(-)
diff --git a/deps/hiredis/Makefile b/deps/hiredis/Makefile
index 4a3de1f6e..49bb525cd 100644
--- a/deps/hiredis/Makefile
+++ b/deps/hiredis/Makefile
@@ -36,8 +36,6 @@ endef
export REDIS_TEST_CONFIG
# Fallback to gcc when $CC is not in $PATH.
-CC:=$(shell sh -c 'type $${CC%% *} >/dev/null 2>/dev/null && echo $(CC) || echo gcc')
-CXX:=$(shell sh -c 'type $${CXX%% *} >/dev/null 2>/dev/null && echo $(CXX) || echo g++')
OPTIMIZATION?=-O3
WARNINGS=-Wall -Wextra -Werror -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers
DEBUG_FLAGS?= -g -ggdb

View File

@ -0,0 +1,71 @@
#!/bin/sh
#
### BEGIN INIT INFO
# Provides: valkey-server
# Required-Start: $network
# Required-Stop: $network
# Default-Start: S 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Redis, a key-value store
# Description: Redis is an open source, advanced key-value store.
# http://valkey.io
### END INIT INFO
test -f /usr/bin/valkey-server || exit 0
ARGS="/etc/valkey/valkey.conf"
case "$1" in
start)
echo "Starting valkey-server..."
start-stop-daemon --start --quiet --exec /usr/bin/valkey-server -- $ARGS
;;
stop)
echo "Stopping valkey-server..."
start-stop-daemon --stop --quiet --exec /usr/bin/valkey-server
;;
restart)
echo "Stopping valkey-server..."
start-stop-daemon --stop --quiet --exec /usr/bin/valkey-server
# Since busybox implementation ignores --retry arguments repeatedly check
# if the process is still running and try another signal after a timeout,
# efectively simulating a stop with --retry=TERM/5/KILL/5 schedule.
waitAfterTerm=5000000 # us / 5000 ms / 5 s
waitAfterKill=5000000 # us / 5000 ms / 5 s
waitStep=100000 # us / 100 ms / 0.1 s
waited=0
start-stop-daemon --stop --test --quiet --exec /usr/bin/valkey-server
processOff=$?
while [ $processOff -eq 0 ] && [ $waited -le $waitAfterTerm ] ; do
usleep ${waitStep}
((waited+=${waitStep}))
start-stop-daemon --stop --test --quiet --exec /usr/bin/valkey-server
processOff=$?
done
if [ $processOff -eq 0 ] ; then
start-stop-daemon --stop --signal KILL --exec /usr/bin/valkey-server
start-stop-daemon --stop --test --quiet --exec /usr/bin/valkey-server
processOff=$?
fi
waited=0
while [ $processOff -eq 0 ] && [ $waited -le $waitAfterKill ] ; do
usleep ${waitStep}
((waited+=${waitStep}))
start-stop-daemon --stop --test --quiet --exec /usr/bin/valkey-server
processOff=$?
done
# Here $processOff will indicate if waiting and retrying according to
# the schedule ended in a successfull stop or not.
echo "Starting valkey-server..."
start-stop-daemon --start --quiet --exec /usr/bin/valkey-server -- $ARGS
;;
*)
echo "Usage: /etc/init.d/valkey-server {start|stop|restart}"
exit 1
;;
esac
exit 0

View File

@ -0,0 +1,78 @@
From 892225f5101b1131434d323c55e79a93dc189609 Mon Sep 17 00:00:00 2001
From: Venture Research <tech@ventureresearch.com>
Date: Fri, 8 Feb 2013 20:22:19 -0600
Subject: [PATCH] lua: update Makefile to use environment build settings
OE-specific parameters, instead of overriding all of these simply use
the ones that are already passed in. Also configure for only Linux...
Signed-off-by: Venture Research <tech@ventureresearch.com>
Updated to work with 3.0.x
Signed-off-by: Armin Kuster <akust808@gmail.com>
updated to work wtih 6.2.1
Signed-off-by: Yi Fan Yu <yifan.yu@windriver.com>
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
---
Upstream-Status: Pending
deps/Makefile | 1 -
deps/lua/Makefile | 1 -
deps/lua/src/Makefile | 16 ++++++----------
3 files changed, 6 insertions(+), 12 deletions(-)
diff --git a/deps/Makefile b/deps/Makefile
index f1e4bd6ce..b9e50d049 100644
--- a/deps/Makefile
+++ b/deps/Makefile
@@ -94,7 +94,6 @@ endif
# lua's Makefile defines AR="ar rcu", which is unusual, and makes it more
# challenging to cross-compile lua (and redis). These defines make it easier
# to fit redis into cross-compilation environments, which typically set AR.
-AR=ar
ARFLAGS=rc
lua: .make-prerequisites
diff --git a/deps/lua/Makefile b/deps/lua/Makefile
index 209a13244..72f4b2bf2 100644
--- a/deps/lua/Makefile
+++ b/deps/lua/Makefile
@@ -33,7 +33,6 @@ INSTALL_DATA= $(INSTALL) -m 0644
# Utilities.
MKDIR= mkdir -p
-RANLIB= ranlib
# == END OF USER SETTINGS. NO NEED TO CHANGE ANYTHING BELOW THIS LINE =========
diff --git a/deps/lua/src/Makefile b/deps/lua/src/Makefile
index f3bba2f81..1555ec028 100644
--- a/deps/lua/src/Makefile
+++ b/deps/lua/src/Makefile
@@ -5,18 +5,14 @@
# == CHANGE THE SETTINGS BELOW TO SUIT YOUR ENVIRONMENT =======================
# Your platform. See PLATS for possible values.
-PLAT= none
+PLAT= linux
-CC?= gcc
-CFLAGS= -O2 -Wall $(MYCFLAGS)
-AR= ar rcu
-RANLIB= ranlib
-RM= rm -f
-LIBS= -lm $(MYLIBS)
-
-MYCFLAGS=
+MYCFLAGS=-DLUA_USE_LINUX
MYLDFLAGS=
-MYLIBS=
+MYLIBS=-Wl,-E -ldl -lreadline -lhistory -lncurses
+
+CFLAGS += $(MYCFLAGS)
+LIBS += -lm $(MYLIBS)
# == END OF USER SETTINGS. NO NEED TO CHANGE ANYTHING BELOW THIS LINE =========

View File

@ -0,0 +1,39 @@
From ad79a81d6582555e580bdba42c959477e7d35ae7 Mon Sep 17 00:00:00 2001
From: Venture Research <tech@ventureresearch.com>
Date: Wed, 6 Feb 2013 20:51:02 -0600
Subject: [PATCH] hack to force use of libc malloc
Hack to force libc usage as it seems the option to pass it in has been
removed in favor of magic.
Note that this of course doesn't allow tcmalloc and jemalloc, however
jemalloc wasn't building correctly.
Signed-off-by: Venture Research <tech@ventureresearch.com>
Update to work with 4.0.8
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
Update to work with 8.0.0
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
---
Upstream-Status: Pending
src/Makefile | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/Makefile b/src/Makefile
index 13fa1c027..e0b1d2722 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -13,7 +13,8 @@
# Just use 'make dep', but this is only needed by developers.
release_hdr := $(shell sh -c './mkreleasehdr.sh')
-uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
+# use fake uname option to force use of generic libc
+uname_S := "USE_LIBC_MALLOC"
uname_M := $(shell sh -c 'uname -m 2>/dev/null || echo not')
CLANG := $(findstring clang,$(shell sh -c '$(CC) --version | head -1'))

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,16 @@
[Unit]
Description=Valkey: an open source, in-memory data store
After=network.target
[Service]
User=valkey
Group=valkey
ExecStart=/usr/bin/valkey-server /etc/valkey/valkey.conf
ExecStop=/usr/bin/valkey-cli shutdown
Restart=always
LimitNOFILE=10032
StateDirectory=valkey
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,74 @@
SUMMARY = "Valkey key-value store"
DESCRIPTION = "A flexible distributed key-value datastore that supports both caching and beyond caching workloads."
HOMEPAGE = "http://valkey.io"
SECTION = "libs"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://COPYING;md5=f924153a31f3091d2c9c500317d53425"
DEPENDS = "readline lua ncurses"
SRC_URI = " \
git://github.com/valkey-io/valkey.git;branch=8.0;protocol=https \
file://valkey.conf \
file://init-valkey-server \
file://valkey.service \
file://hiredis-use-default-CC-if-it-is-set.patch \
file://lua-update-Makefile-to-use-environment-build-setting.patch \
file://oe-use-libc-malloc.patch \
file://0001-src-Do-not-reset-FINAL_LIBS.patch \
file://GNU_SOURCE-7.patch \
"
SRCREV = "2b5c7a0dbd61fd4281ef6166b7d119ba7fe7368c"
S = "${WORKDIR}/git"
inherit autotools-brokensep pkgconfig update-rc.d systemd useradd
FINAL_LIBS:x86:toolchain-clang = "-latomic"
FINAL_LIBS:riscv32:toolchain-clang = "-latomic"
FINAL_LIBS:mips = "-latomic"
FINAL_LIBS:arm = "-latomic"
FINAL_LIBS:powerpc = "-latomic"
export FINAL_LIBS
USERADD_PACKAGES = "${PN}"
USERADD_PARAM:${PN} = "--system --home-dir /var/lib/valkey -g valkey --shell /bin/false valkey"
GROUPADD_PARAM:${PN} = "--system valkey"
PACKAGECONFIG = "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
PACKAGECONFIG[systemd] = "USE_SYSTEMD=yes,USE_SYSTEMD=no,systemd"
EXTRA_OEMAKE += "${PACKAGECONFIG_CONFARGS}"
do_compile:prepend() {
(cd deps && oe_runmake hiredis lua linenoise)
}
do_install() {
export PREFIX=${D}/${prefix}
oe_runmake install
install -d ${D}/${sysconfdir}/valkey
install -m 0644 ${UNPACKDIR}/valkey.conf ${D}/${sysconfdir}/valkey/valkey.conf
install -d ${D}/${sysconfdir}/init.d
install -m 0755 ${UNPACKDIR}/init-valkey-server ${D}/${sysconfdir}/init.d/valkey-server
install -d ${D}/var/lib/valkey/
chown valkey.valkey ${D}/var/lib/valkey/
install -d ${D}${systemd_system_unitdir}
install -m 0644 ${UNPACKDIR}/valkey.service ${D}${systemd_system_unitdir}
sed -i 's!/usr/sbin/!${sbindir}/!g' ${D}${systemd_system_unitdir}/valkey.service
if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
sed -i 's!daemonize yes!# daemonize yes!' ${D}/${sysconfdir}/valkey/valkey.conf
sed -i 's!supervised no!supervised systemd!' ${D}/${sysconfdir}/valkey/valkey.conf
fi
}
CONFFILES:${PN} = "${sysconfdir}/valkey/valkey.conf"
INITSCRIPT_NAME = "valkey-server"
INITSCRIPT_PARAMS = "defaults 87"
SYSTEMD_SERVICE:${PN} = "valkey.service"
CVE_STATUS[CVE-2022-3734] = "not-applicable-platform: CVE only applies for Windows."