tdb->last_error = TDB_ERR_EINVAL;
return -1;
}
+ tdb->stats.transaction_nest++;
tdb->tdb1.transaction->nesting++;
return 0;
}
tdb->tdb1.transaction->io_methods = tdb->tdb1.io;
tdb->tdb1.io = &transaction1_methods;
+ tdb->stats.transactions++;
return 0;
fail:
*/
int tdb1_transaction_cancel(struct tdb_context *tdb)
{
+ tdb->stats.transaction_cancel++;
return _tdb1_transaction_cancel(tdb);
}
" failed to create recovery area");
return -1;
}
+ tdb->stats.transaction_expand_file++;
/* remap the file (if using mmap) */
methods->tdb1_oob(tdb, tdb->file->map_size + 1, 1);
" expansion failed");
return -1;
}
+ tdb->stats.transaction_expand_file++;
tdb->file->map_size = tdb->tdb1.transaction->old_map_size;
methods->tdb1_oob(tdb, tdb->file->map_size + 1, 1);
}
_tdb1_transaction_cancel(tdb);
if (need_repack) {
- return tdb1_repack(tdb);
+ return tdb_repack(tdb);
}
return 0;
}
/* Any I/O failures we say "needs recovery". */
-bool tdb1_needs_recovery(struct tdb_context *tdb)
+tdb_bool_err tdb1_needs_recovery(struct tdb_context *tdb)
{
tdb1_off_t recovery_head;
struct tdb1_record rec;
/* find the recovery area */
if (tdb1_ofs_read(tdb, TDB1_RECOVERY_HEAD, &recovery_head) == -1) {
- return true;
+ return tdb->last_error;
}
if (recovery_head == 0) {
/* read the recovery record */
if (tdb->tdb1.io->tdb1_read(tdb, recovery_head, &rec,
sizeof(rec), TDB1_DOCONV()) == -1) {
- return true;
+ return tdb->last_error;
}
return (rec.magic == TDB1_RECOVERY_MAGIC);