Hi all, This is V1 to implement the journaling feature in kernel rbd, which makes mirroring in kubernetes possible. It passed the /ceph/ceph/qa/workunits/rbd/rbd_mirror.sh, with a little change as below: ``` [root@atest-guest build]# git diff /ceph/ceph/qa/workunits/rbd/rbd_mirror_helpers.sh diff --git a/qa/workunits/rbd/rbd_mirror_helpers.sh b/qa/workunits/rbd/rbd_mirror_helpers.sh index e019de5..9d00d3e 100755 --- a/qa/workunits/rbd/rbd_mirror_helpers.sh +++ b/qa/workunits/rbd/rbd_mirror_helpers.sh @@ -854,9 +854,9 @@ write_image() test -n "${size}" || size=4096 - rbd --cluster ${cluster} -p ${pool} bench ${image} --io-type write \ - --io-size ${size} --io-threads 1 --io-total $((size * count)) \ - --io-pattern rand + rbd --cluster ${cluster} -p ${pool} map ${image} + fio --name=test --rw=randwrite --bs=${size} --runtime=60 --ioengine=libaio --iodepth=1 --numjobs=1 --filename=/dev/rbd0 --direct=1 --group_reporting --size $((size * count)) --group_reporting --eta-newline 1 + rbd --cluster ${cluster} -p ${pool} unmap ${image} } stress_write_image() ``` Changelog from RFC: 1. error out if there is some unsupported event type in replaying 2. just one memory copy from bio to msg. 3. use async IO in journal appending. 4. no mutex around IO. Dongsheng Yang (11): libceph: support prefix and suffix in bio_iter libceph: support op append libceph: introduce cls_journaler_client libceph: introduce generic journaling libceph: journaling: introduce api to replay uncommitted journal events libceph: journaling: introduce api for journal appending libceph: journaling: trim object set when we found there is no client refer it rbd: wait image request all complete in lock releasing rbd: introduce completion for each img_request rbd: introduce a lock_flag in rbd_dev to make some process exclusive-lock protected rbd: enable journaling drivers/block/rbd.c | 635 +++++++++- include/linux/ceph/cls_journaler_client.h | 93 ++ include/linux/ceph/journaler.h | 176 +++ include/linux/ceph/messenger.h | 9 + net/ceph/Makefile | 3 +- net/ceph/cls_journaler_client.c | 535 +++++++++ net/ceph/journaler.c | 1843 +++++++++++++++++++++++++++++ net/ceph/messenger.c | 96 +- net/ceph/osd_client.c | 14 +- 9 files changed, 3360 insertions(+), 44 deletions(-) create mode 100644 include/linux/ceph/cls_journaler_client.h create mode 100644 include/linux/ceph/journaler.h create mode 100644 net/ceph/cls_journaler_client.c create mode 100644 net/ceph/journaler.c -- 1.8.3.1