mirror of
https://github.com/versity/scoutfs.git
synced 2026-04-27 16:45:06 +00:00
Client lock invalidation handling was very strict about not receiving duplicate invalidation requests from the server because it could only track one pending request. The promise to only send one invalidate at a time is made by one server, it can't be enforced across server failover. Particularly because invalidation processing can have to do quite a lot of work with the server as it tears down state associated with the lock. We fix this by recording and processing each individual incoming invalidation request on the lock. The code that handled reordering of incoming grant responses and invalidation requests waited for the lock's mode to match the old mode in the invalidation request before proceeding. That would have prevented duplicate invalidation requests from making forward progress. To fix this we make lock client recieve processing synchronous instead of going through async work which can reorder. Now grant responses are processed as they're received and will always be resolved before all the invalidation requests are queued and processed in order. Signed-off-by: Zach Brown <zab@versity.com>