On Thu, Oct 11, 2018 at 1:19 PM 韦皓诚 <whc0000001@xxxxxxxxx> wrote: > > Hi guys > Class mClockQueue calls PullPriorityQueue::pull_request in function > dequeue() . But PullPriorityQueue::pull_request may return a "future" > value. That means the mclock tag of the request are greater than now, > so it should be executed in the future instead of now.The mistake is > that the mClockQueue::dequeue() do not consider about the type of > return value in that case, the returned PullReq is a "future" instead of a "retn", so ceph_assert() will abort OSD if a "future" is returned. but i agree with you, probably we need to wait for "crimson::dmclock::get_time() - pr.getTime()" before retrying. > and execute the request immediately. What is more serious is that > PullPriorityQueue remains the request in queue and it would be > executed twice in the future. > > > From Weihaocheng -- Regards Kefu Chai