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 |