what i know is that librbd use applied callback, here is the code: in
send_write() calls librados::Rados::aio_create_completion, parameter
rados_req_cb is cb_safe, and cb_complete is NULL, the cb_safe is just
applied callback.
void AbstractWrite::send_write() {
ldout(m_ictx->cct, 20) <<
there are two callbacks: committed and applied, committed means write
to all replica's journal, applied means write to all replica's file
system. so when applied callback return to client, it means data can
be read.
2015-12-31 10:15 GMT+08:00 min fang :
> Hi, as my
thanks, so ceph can guarantee after write commit call back, read IO can get
the new written data, right?
2015-12-31 10:55 GMT+08:00 Zhi Zhang :
> If the data has not been written to filestore, as you mentioned, it is
> still in journal, your following read op will be
If the data has not been written to filestore, as you mentioned, it is
still in journal, your following read op will be blocked until the
data is written to filestore.
This is because when writing this data, the related object context
will hold ondisk_write_lock. This lock will be released in a
yes, the question here is, librbd use the committed callback, as my
understanding, when this callback returned, librbd write will be looked as
completed. So I can issue a read IO even if the data is not readable. In
this case, i would like to know what data will be returned for the read IO?
Hi, as my understanding, write IO will committed data to journal firstly,
then give a safe callback to ceph client. So it is possible that data still
in journal when I send a read IO to the same area. So what data will be
returned if the new data still in journal?
Thanks.
Regards,
Zhi Zhang (David)
Contact: zhang.david2...@gmail.com
zhangz.da...@outlook.com
On Thu, Dec 31, 2015 at 11:08 AM, min fang wrote:
> thanks, so ceph can guarantee after write commit call back, read IO can get
> the new written data, right?
yep :-)