From 506d51be45135dc2d8f43441403c4a92dbe24b3d Mon Sep 17 00:00:00 2001 From: Alexandre Derumier Date: Fri, 7 Jun 2013 15:05:05 +0200 Subject: [PATCH] bump sheepdog 0.6 + add new features v2 This bump sheepdog to 0.6, with some changes: Now, we only 1 daemon to manage multiple disks. default root directory is : /var/lib/sheepdog/ This is the default if you don't have dedicated disk. Both metadatastore and objet store are in the root directory. If you want to use, 1 or more dedicated disk: simply create mounts in /var/lib/sheepdog/disc0 /var/lib/sheepdog/disc1 /var/lib/sheepdog/discN No more limit in number of disk, and no more need of a startup file tricks. The metadata-store is always in /var/lib/sheepdog/. (spof, so you need raid) But the object-storage are in /var/lib/sheepdog/discN. You can hotplug/unplug theses disks, have failures,... https://github.com/collie/sheepdog/wiki/Multi-disk-on-Single-Node-Support You can also use a journal on separate disk, like ssd, for fast write. simply create a mount: /var/lib/sheepdog/journal Some tunnables variables in /etc/default/sheepdog: ROOTDIR=/var/lib/sheepdog/ By example,users can change it to /var/lib/vz/sheepdog if they want (As this is the location where we have the more space by default) JOURNALSIZE=256 User can tune the journal size, 256M by default Signed-off-by: Alexandre Derumier --- Makefile | 2 +- debian/changelog | 6 +++ debian/patches/simplify-log-rotation.patch | 33 +++++++++----- debian/pve-sheepdog.sheepdog.default | 4 +- debian/pve-sheepdog.sheepdog.init.d | 53 +++++++++------------- 5 files changed, 53 insertions(+), 45 deletions(-) diff --git a/Makefile b/Makefile index db64558..996f9d1 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ RELEASE=3.0 PACKAGE=pve-sheepdog PKGREL=2 -SDVER=0.5.6 +SDVER=0.6.0 DEB=${PACKAGE}_${SDVER}-${PKGREL}_amd64.deb diff --git a/debian/changelog b/debian/changelog index c7210ba..23092b5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +pve-sheepdog (0.6.0-1) unstable; urgency=low + + * Bump to sheepdog 0.6.0 + + -- Proxmox Support Team Tue, 7 Jun 2013 14:00:00 +0200 + pve-sheepdog (0.5.6-2) unstable; urgency=low * init script: cman need to be started before sheedog diff --git a/debian/patches/simplify-log-rotation.patch b/debian/patches/simplify-log-rotation.patch index 95b04db..5f48319 100644 --- a/debian/patches/simplify-log-rotation.patch +++ b/debian/patches/simplify-log-rotation.patch @@ -1,23 +1,30 @@ -simplify logfile rotation +From fefd0589f89fb3948723f7a5cda7f734d13b30a6 Mon Sep 17 00:00:00 2001 +From: Alexandre Derumier +Date: Thu, 6 Jun 2013 09:17:02 +0200 +Subject: [PATCH] simplify logfile rotation we simply rename to .1. That way we do not need any logrotate script. max_logfile is set to 256MB. +Signed-off-by: Alexandre Derumier +--- + lib/logger.c | 11 ++--------- + 1 file changed, 2 insertions(+), 9 deletions(-) -Index: new/lib/logger.c -=================================================================== ---- new.orig/lib/logger.c 2013-02-28 07:15:26.000000000 +0100 -+++ new/lib/logger.c 2013-02-28 07:29:55.000000000 +0100 -@@ -75,7 +75,7 @@ +diff --git a/lib/logger.c b/lib/logger.c +index ba9f5db..23635c2 100644 +--- a/lib/logger.c ++++ b/lib/logger.c +@@ -113,7 +113,7 @@ static pid_t logger_pid; static key_t semkey; static char *log_buff; -static int64_t max_logsize = 500 * 1024 * 1024; /*500MB*/ -+static int64_t max_logsize = 256 * 1024 * 1024; /*500MB*/ ++static int64_t max_logsize = 256 * 1024 * 1024; /*256MB*/ static pthread_mutex_t logsize_lock = PTHREAD_MUTEX_INITIALIZER; -@@ -243,13 +243,7 @@ +@@ -405,14 +405,7 @@ static notrace void rotate_log(void) if (access(log_nowname, R_OK) == 0) { char old_logfile[256]; @@ -25,10 +32,14 @@ Index: new/lib/logger.c - struct tm tm; - time(&t); - localtime_r((const time_t *)&t, &tm); -- sprintf(old_logfile, "%s.%04d-%02d-%02d-%02d-%02d", -- log_nowname, tm.tm_year + 1900, tm.tm_mon + 1, -- tm.tm_mday, tm.tm_hour, tm.tm_min); +- snprintf(old_logfile, sizeof(old_logfile), +- "%s.%04d-%02d-%02d-%02d-%02d", +- log_nowname, tm.tm_year + 1900, tm.tm_mon + 1, +- tm.tm_mday, tm.tm_hour, tm.tm_min); + sprintf(old_logfile, "%s.1", log_nowname); rename(log_nowname, old_logfile); } new_fd = open(log_nowname, O_RDWR | O_CREAT | O_APPEND, 0644); +-- +1.7.10.4 + diff --git a/debian/pve-sheepdog.sheepdog.default b/debian/pve-sheepdog.sheepdog.default index c66a001..a4bf78a 100644 --- a/debian/pve-sheepdog.sheepdog.default +++ b/debian/pve-sheepdog.sheepdog.default @@ -3,4 +3,6 @@ # start sheepdog at boot [yes|no] START=yes - +#sheepdog root directory +ROOTDIR=/var/lib/sheepdog/ +JOURNALSIZE=256 diff --git a/debian/pve-sheepdog.sheepdog.init.d b/debian/pve-sheepdog.sheepdog.init.d index 39aa36a..2de8744 100644 --- a/debian/pve-sheepdog.sheepdog.init.d +++ b/debian/pve-sheepdog.sheepdog.init.d @@ -17,15 +17,13 @@ DESC="Sheepdog Server" # Introduce a short description here NAME=sheepdog # Introduce the short server's name here DAEMON=/usr/sbin/sheep # Introduce the server's location here SCRIPTNAME=/etc/init.d/$NAME +PIDFILE="/var/run/sheep.pid" # Exit if the package is not installed [ -x $DAEMON ] || exit 0 -DISKLIST=$(echo /var/lib/sheepdog/disc[0123456789]) -RDISKLIST= -for dir in ${DISKLIST}; do - RDISKLIST="${dir} ${RDISKLIST}" -done +ROOTDIR="/var/lib/sheepdog/" +JOURNALSIZE="256" # Read configuration variable file if it is present [ -r /etc/default/$NAME ] && . /etc/default/$NAME @@ -47,21 +45,25 @@ do_start() # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started - - for dir in ${DISKLIST}; do - test -f "${dir}/startup" || continue - DAEMON_ARGS=$(head -n1 "${dir}/startup"); - DISKID=${dir##/var/lib/sheepdog/disc} - PIDFILE="$dir/sheep.pid" - DAEMON_ARGS="${DAEMON_ARGS} --pidfile ${PIDFILE}" - if ! test "$(echo ${DAEMON_ARGS}|grep -c '\-p ')" -eq 1 ; then - DAEMON_ARGS="${DAEMON_ARGS} -p $((7000 + ${DISKID}))" + ulimit -n 1024000 #avoid check_host_env(395) WARN: Allowed open files 1024 too small, suggested 1024000 warning message + ulimit -c unlimited #avoid check_host_env(404) Allowed core file size 0, suggested unlimited warning message + DAEMON_ARGS="--pidfile ${PIDFILE}" + DAEMON_ARGS="${DAEMON_ARGS} $ROOTDIR" + + # /path/to/meta-store,/path/to/disk1{,/path/to/disk2,...} + for d in $ROOTDIR/disc* + do + if [ -d "$d" ]; then + DAEMON_ARGS="${DAEMON_ARGS},$d" fi + done - status_of_proc -p ${PIDFILE} $DAEMON "$NAME" >/dev/null && continue + if [ -d "$ROOTDIR/journal" ]; then + DAEMON_ARGS="${DAEMON_ARGS} -j dir=$ROOTDIR/journal,size=$JOURNALSIZE" - start-stop-daemon --start --quiet --pidfile ${PIDFILE} --exec $DAEMON -- $DAEMON_ARGS ${dir} || return 2 - done + fi + status_of_proc -p ${PIDFILE} $DAEMON "$NAME" >/dev/null && continue + start-stop-daemon --start --quiet --pidfile ${PIDFILE} --exec $DAEMON -- $DAEMON_ARGS || return 2 return 0 } @@ -77,14 +79,7 @@ do_stop() # 2 if daemon could not be stopped # other if a failure occurred - RETVAL=0 - for dir in ${RDISKLIST}; do - test -f "${dir}/startup" || continue - PIDFILE="$dir/sheep.pid" - start-stop-daemon --stop --oknodo --retry=TERM/20/KILL/5 --quiet --pidfile ${PIDFILE} --exec $DAEMON || RETVAL=2 - done - - return "$RETVAL" + start-stop-daemon --stop --oknodo --retry=TERM/20/KILL/5 --quiet --pidfile ${PIDFILE} --exec $DAEMON || return 2 } case "$1" in @@ -106,13 +101,7 @@ case "$1" in ;; status) - RETVAL=0 - for dir in ${DISKLIST}; do - test -f "${dir}/startup" || continue - PIDFILE="$dir/sheep.pid" - status_of_proc -p ${PIDFILE} $DAEMON "$NAME ${dir}" || RETVAL=1 - done - exit $RETVAL + status_of_proc -p ${PIDFILE} $DAEMON "$NAME ${dir}" || exit 1 ;; restart|force-reload) log_daemon_msg "Restarting $DESC" "$NAME" -- 2.39.2