LingerOp::target.paused has no chance to be touched by anyone (see Objecter::_send_linger),
then the following bug exists:
1. ceph osd pause
2. rados watch -p pool oid
3. ceph osd unpause
3. the linger op will be in a lost state, i.e., osd op cancelled and the linger
op will not be resent
Fixes: http://tracker.ceph.com/issues/37398
Signed-off-by: runsisi <luo.runbing@zte.com.cn>
force_resend = true;
}
- bool unpaused = false;
- if (t->paused && !target_should_be_paused(t)) {
+ bool unpaused = !target_should_be_paused(t);
+ if (t->paused && unpaused) {
t->paused = false;
- unpaused = true;
+ } else {
+ t->paused = !unpaused;
+ unpaused = false;
}
bool legacy_change =