mdbx: допускаем лишние/устаревшие флаги для GC/FreeDB для старых БД.

This commit is contained in:
Леонид Юрьев (Leonid Yuriev)
2024-07-20 14:05:16 +03:00
parent 5c643f72b5
commit 6b2b15ebc8
3 changed files with 17 additions and 3 deletions

View File

@@ -158,6 +158,16 @@ __hot int coherency_check_head(MDBX_txn *txn, const meta_ptr_t head,
*timestamp == 0)))
return coherency_timeout(timestamp, -1, txn->env);
if (unlikely(txn->dbs[FREE_DBI].flags != MDBX_INTEGERKEY)) {
if ((txn->dbs[FREE_DBI].flags & DB_PERSISTENT_FLAGS) != MDBX_INTEGERKEY ||
unaligned_peek_u64(4, &head.ptr_c->magic_and_version) ==
MDBX_DATA_MAGIC) {
ERROR("unexpected/invalid db-flags 0x%u for GC/FreeDB",
txn->dbs[FREE_DBI].flags);
return MDBX_INCOMPATIBLE;
}
txn->dbs[FREE_DBI].flags &= DB_PERSISTENT_FLAGS;
}
tASSERT(txn, txn->dbs[FREE_DBI].flags == MDBX_INTEGERKEY);
tASSERT(txn, check_sdb_flags(txn->dbs[MAIN_DBI].flags));
return MDBX_SUCCESS;