mirror of
https://github.com/isar/libmdbx.git
synced 2024-10-30 11:29:19 +08:00
mdbx: don't deem meta pages with zero txnid equal.
Устранение крайне маловероятного регресса после перехода на мета-тройку: - процесс А открыает БД и читает мета-траницы для формирования тройки; - процесс Б постоянно коммитит новые транзакции; - есть шанс что процесс А при чтении разных мета страниц попадет на момент их обновления более одного раза, это может привести к ложной ошибке коллизии мета-страниц, так как для обновляемых мета-страниц будет виден нулевой номер транзакции.
This commit is contained in:
parent
ceba040e32
commit
0ccec20409
@ -5139,7 +5139,8 @@ static __inline bool meta_eq(const meta_troika_t *troika, unsigned a,
|
||||
unsigned b) {
|
||||
assert(a < NUM_METAS && b < NUM_METAS);
|
||||
return troika->txnid[a] == troika->txnid[b] &&
|
||||
(((troika->fsm >> a) ^ (troika->fsm >> b)) & 1) == 0;
|
||||
(((troika->fsm >> a) ^ (troika->fsm >> b)) & 1) == 0 &&
|
||||
troika->txnid[a];
|
||||
}
|
||||
|
||||
static unsigned meta_eq_mask(const meta_troika_t *troika) {
|
||||
|
Loading…
Reference in New Issue
Block a user