天天看点

【osd】OSD的内部队列

OSD的内部队列

由于op可能各种各样的原因需要背推迟处理,为此PG内部维护了多种op重试队列,它们的含义下表所示:

队列名称 入队条件
 wait_for_map 当收到op时,已经有来自同一个客户端的op存在于此队列中,,或者op携带的Epoch大于PG当前的Epoch 
waiting_for_peered  PG不是Peered或者Active状态(例如PG处于Down或者Incomplete状态)。
waiting_for_active  PG不是Active状态(例如PG处于peered状态)。
waiting_for_unreadable_object            op操作Primary上的降级对象或对象不可读(例如纠删码的情况下,对象的一个或多个分片损坏,并且无法通过解码恢复)。
waiting_for_degraded_object  op包含写操作并且操作对象降级
waiting_for_srub

 op操作的对象正在Srub。

注意:由于PG能够执行Srcub的迁移是PG处于Active + Clean状态,所以PG总是最后检查此队列。

为了保证op之间不会乱序,所有队列都被设计成FIFO队列并且队列之间严格有序,当某个限制条件 被解除后,PG会触发相关队列的op出列,重新进入op_shardedwq排队。

OSD

继续阅读