[sheepdog] [PATCH 2/3] sheep: do the real work of delay recovery
MORITA Kazutaka
morita.kazutaka at lab.ntt.co.jp
Mon Jul 30 06:39:12 CEST 2012
At Sun, 29 Jul 2012 22:29:21 +0800,
Yunkai Zhang wrote:
>
> From: Yunkai Zhang <qiushu.zyk at taobao.com>
>
> After delay recovery start, all recovery operation in sd_join_handler or
> sd_leave_handler will be paused. old vnode information will be kept in a newly
> static variable named old_vnode_info in group.c wich will be used by following
> recovery operation. a delay_recovery variable was added in join_message so that
> joining sheep can share cluster's delay_recovery status.
>
> During delay recovery transaction, joined and left nodes will be stored into
> an global array so that we can show inner status to user when necessary(next
> patch will use it).
>
> Only one recovery operation will be executed when user sending
> "collie delay_recovery stop" command. One flag do_delay_recovery is added to
> indicate whether there are reovery works to be done. Ceating a new function
> get_old_vnode_info() so that other code can access old_vnode_info variable.
>
> Signed-off-by: Yunkai Zhang <qiushu.zyk at taobao.com>
> ---
> include/internal_proto.h | 6 ++++
> sheep/group.c | 72 +++++++++++++++++++++++++++++++++++-------------
> sheep/ops.c | 16 +++++++++++
> sheep/sheep_priv.h | 4 +++
> 4 files changed, 79 insertions(+), 19 deletions(-)
This patch doesn't pass the following test:
==
#!/bin/bash
set -ex
sheep /store/0 -z 0 -p 7000
sheep /store/1 -z 1 -p 7001
collie cluster format -c 2
collie delay_recovery start
qemu-img create sheepdog:test 4G
# create 20 objects
for i in `seq 0 19`; do
collie vdi write test $((i * 4 * 1024 * 1024)) 512 < /dev/zero
done
sheep /store/2 -z 2 -p 7002
# overwrite the objects
for i in `seq 0 19`; do
collie vdi write test $((i * 4 * 1024 * 1024)) 512 < /dev/zero
done
==
IIUC, if sheep receives write requests, it needs to recover the
objects even if object recovery is delayed.
Thanks,
Kazutaka
More information about the sheepdog
mailing list