[pve-devel] [PATCH] bump sheepdog 0.6 + add new features v2
Alexandre Derumier
aderumier at odiso.com
Fri Jun 7 15:05:05 CEST 2013
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 <aderumier at odiso.com>
---
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 <support at proxmox.com> 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 <aderumier at odiso.com>
+Date: Thu, 6 Jun 2013 09:17:02 +0200
+Subject: [PATCH] simplify logfile rotation
we simply rename <logfile> to <logfile>.1. That way we do not need
any logrotate script. max_logfile is set to 256MB.
+Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
+---
+ 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"
--
1.7.10.4
More information about the pve-devel
mailing list