cache: fix race in assert_right_version
This change fixes race condition in assert_right_version(). Racy situation: - Two instances have the (empty) cache open: New binary and old binary. - New binary executes count() inside assert_right_version(), which internally starts RO transaction. Returned count is 0. - Old binary does some writes (RW transaction parallel to RO in the first process). - New binary skips cache clear because cache was empty at the time of check. - Result: The old binary wrote data with an old format into cache which was not cleared and silenty changed version number to a new one. This is not complete fix because we lack mechanism to detect cache format change at run-time, but at least it removes one nasty corner case and cost of this change seems to be minimal.
Please register or sign in to comment