mdbx: don't deem meta pages with zero txnid equal.

Устранение крайне маловероятного регресса после перехода на мета-тройку:
 - процесс А открыает БД и читает мета-траницы для формирования тройки;
 - процесс Б постоянно коммитит новые транзакции;
 - есть шанс что процесс А при чтении разных мета страниц попадет на момент их обновления более одного раза,
   это может привести к ложной ошибке коллизии мета-страниц,
   так как для обновляемых мета-страниц будет виден нулевой номер транзакции.
This commit is contained in:
Леонид Юрьев (Leonid Yuriev) 2022-08-20 01:32:38 +03:00
parent ceba040e32
commit 0ccec20409

View File

@ -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) {