[sheepdog] [PATCH v3 0/8] md: add recovery support
Liu Yuan
namei.unix at gmail.com
Wed Mar 27 10:11:28 CET 2013
From: Liu Yuan <tailai.ly at taobao.com>
v3:
- node events and disk events can supersede each other
- add a new test 056 to test mixed events case
- refactor md_exist a bit
v2:
- add 054 only to md group
- rework patch 3/6
- make iteration of WD more efficient
This patch set mainly add md recovery support which unifies node recovery and
disk recovery.
I choose to take advantage of current node recovery mechanism because:
1. It supports multiple failure events
2. It provide nice race-free and wait queue mechanism for VM IO requests and
recovery IO requests.
3. already-made logic that can recover objects from other nodes. This is very
crutial to md recovery because we distribute objects across disks without
extra copies.
4. Maintan one mechanism is always better than two
So disk failure will simply be seen as a node recovery without epoch lifted and
md recovery has all the merits of node recovery:
1. multiple disk failures handling
2. serve VM IO requests while in recovery
3. can hot-plug and hot-unplug the disks (missing part yet)
Besides, another nice spin-off is that with unified recovery, both node and disk
recovery can suspend and supersede each other.
The missing parts will be implemented in later patch.
Liu Yuan (8):
sheep: prepare and cleanup err_to_stderr() for MD recovery
work queue: don't call worker func if not assigned
recovery: start tgt_epoch with rw->epoch instead of 'rw->epoch - 1'
md: implement automatic recovery
tests: modify _start_sheep helper with one more disk
tests: add a test 055 for md
md: try hard to link stale objects during node events
tests: add 056 to test disk failure with node event change
sheep/journal_file.c | 3 +-
sheep/md.c | 212 ++++++++++++++++++++++++++++++++++++++++++++++++--
sheep/object_cache.c | 3 +-
sheep/plain_store.c | 47 +++++------
sheep/recovery.c | 4 +-
sheep/sheep.c | 4 +-
sheep/sheep_priv.h | 5 +-
sheep/work.c | 3 +-
tests/055 | 46 +++++++++++
tests/055.out | 24 ++++++
tests/056 | 46 +++++++++++
tests/056.out | 19 +++++
tests/common.rc | 2 +-
tests/group | 2 +
14 files changed, 379 insertions(+), 41 deletions(-)
create mode 100755 tests/055
create mode 100644 tests/055.out
create mode 100755 tests/056
create mode 100644 tests/056.out
--
1.7.9.5
More information about the sheepdog
mailing list