Bug #6725
closedobjecter: kick_requests() resends ops that should be paused
0%
Description
Operations may be paused because the osd map has a flag manually set, or the cluster is too full. In either case, operations should not be sent if they are meant to be paused by the client.
The objecter handles this correctly in _op_submit() and handle_osd_map(), but always resends requests to a particular osd when the connection is reset. This may result in writes getting -ENOSPC while the full flag is set, instead of blocking as they were meant to. This will not be handled well by rbd if caching is not enabled.
Updated by Josh Durgin over 10 years ago
Possible fix is in the wip-objecter-full branch, but I can't test it at the moment due to bad network conditions.
Updated by Yehuda Sadeh over 10 years ago
I looked and tested it, the fix itself didn't do the work, but I was able to find some other issues. I pushed a second fix to wip-objecter-full. There were two different issues. One was that it was always resending the request on reconnection (because scan_requests() was adding it to the list), and the second issue was that once the full flag was cleared it wasn't resending the request.
I also did some more cleanup and pushed it to wip-objecter-full-2, we'd probably want to test it thoroughly.
Updated by Josh Durgin over 10 years ago
Thanks, that's a lot nicer. It looks good to me if it survives more testing.
Updated by Josh Durgin over 10 years ago
- Status changed from In Progress to Resolved
- Backport changed from dumpling to dumpling, emperor
98ab7d64a191371fa39d840c5f8e91cbaaa1d7b7 and 5fe3dc647bf936df8e1eb2892b53f44f68f19821 are related, along with the fixes for #6938