API Interface
✤ rados_aio_write(rados_ioctx_t io, const char *oid, rados_completion_t completion, const char *buf, size_t len, uint64_t off)
✤ rados_aio_read(rados_ioctx_t io, const char *oid, rados_completion_t completion, char *buf, size_t len, uint64_t off);
✤ 特点:
✤ 类 POSIX 但没有⽬目录结构
✤ 丰富的 callback 语意,异步通知
Session Layer
✤ Objecter::read(const object_t& oid, const object_locator_t& oloc, uint64_t off, uint64_t len, snapid_t snap, bufferlist *pbl, int flags, Context *onfinish,version_t *objver, ObjectOperation *extra_ops)
✤ Objecter::write(const object_t& oid, const object_locator_t& oloc, uint64_t off, uint64_t len, const SnapContext& snapc, const bufferlist &bl, utime_t mtime, int flags, Context *onack, Context *oncommit, version_t *objver, ObjectOperation *extra_ops)
✤ 特点:
✤ 增加位置和版本信息
✤ 合并操作
Messenger Layer
✤ Connection::send_message(Message *m)
✤ Dispatcher::ms_dispatch(Message *m)
✤ 特点:
✤ Ops -> Message(连续字节流)
✤ ⾼高度封装,处理重传,⽹网络错误
Dispatcher Layer
✤ OSD::handle_op(OpRequestRef& op, OSDMapRef& osdmap)
✤ 特点:
✤ Message -> OpRequest
✤ 基本信息校验(合法性,权限,完整性,正确性)
✤ 重定向
Replication Layer
✤ ReplicatedPG::execute_ctx(OpContext *ctx)
✤ 特点:
✤ OpRequest -> OpContext
✤ 请求解析,上下⽂文组建
✤ 读类型请求执⾏行
✤ 写请求组建事务(Transaction)
✤ 写请求增加⼀一致性操作⽇日志(Undo Log)
Store Backend
✤ ObjectStore::queue_transactions(Sequencer *osr, list<Transaction*>& tls, Context *onreadable, Context *ondisk, Context *onreadable_sync, TrackedOpRef op, ThreadPool::TPHandle *handle)
✤ 特点:
✤ Repop -> Transaction
✤ 保证原⼦子性
✤ 异步 IO
Messenger
✤ Simple
✤ poll
✤ 线程调度
✤ Async
✤ select/epoll/kqueue/evport …
✤ 事件驱动
✤ Xio
✤ tcp/rdma
✤ incompatible
PipelineVCPUThread
Qemu MainThread Pipe::Writer Pipe::Reader DispatchThreader OSD::OpWQ FileJournal::Writer FileJournal->finisher
FileStore::OpWQFileStore::SyncThreadPipe::WriterPipe::ReaderDispatchThreader FileStore->op_finisherFileStore->ondisk_finisherRadosClient->finisher
Top Related