Feature #1895
closed
osd: detect duplicate requests by tracking per-client last_acked_tid instead of using pg log
Added by Josh Durgin over 12 years ago.
Updated about 12 years ago.
Description
Currently duplicate request detection uses the PG log, which may be trimmed too much to contain actual duplicates. This can cause out of order acks, since a later operation might be detected as a dup, and immmediately acked, while an earlier one may have been trimmed from the log already. Stale client information can be removed after a timeout period.
Naively this data can just go in the OSD::Session struct. However, it might be a bit of a hassle dealing with thrashing scenarios where we maintain the session but get retransmitted requests?
my first thought would be something like:
- set<osd_reqid_t> in the Session
- on session open, load above set from an object on disk
- within session, when client sends trim info, rewrite session object. at least sometimes.
- when a request is written to disk, include an append to the client session object in the local transaction
hmm, but that doesn't help when the pg migrates elsewhere.. we need to build up session state about recent history there as well.. and presumably then it would come from the pg log.
unless the per-client session state is an object in the pg, and the trimming of session state (or purging of stale sessions) is also reflected by a pg log entry, just like everything else.
blah..
- Translation missing: en.field_position set to 4
- Target version deleted (
v0.41)
- Translation missing: en.field_position deleted (
4)
- Translation missing: en.field_position set to 1
- Translation missing: en.field_position deleted (
10)
- Translation missing: en.field_position set to 80
- Translation missing: en.field_position deleted (
90)
- Translation missing: en.field_position set to 103
- Status changed from New to Rejected
Also available in: Atom
PDF