pma: file extension bug fixes. test changes

file extension seems to be working now after reordering freelist restoration and
calling _bt_falloc in _nlist_new to create the first partition

should be able to move on to partition striping now and the explicit call to
_bt_falloc will make this easier
This commit is contained in:
barter-simsum 2024-01-12 20:02:59 -05:00
parent a604f19d74
commit 390c1c3356
2 changed files with 23 additions and 9 deletions

View File

@ -307,11 +307,26 @@ int main(int argc, char *argv[])
return errno; return errno;
assert(SUCC(bt_state_open(state4, "./pmatest4", 0, 0644))); assert(SUCC(bt_state_open(state4, "./pmatest4", 0, 0644)));
#define PMA_INITIAL_SIZE_p PMA_GROW_SIZE_p
BYTE *t4a = bt_malloc(state4, PMA_GROW_SIZE_p * 2); BYTE *t4a = bt_malloc(state4, PMA_GROW_SIZE_p * 2);
BYTE *t4b = t4a; BYTE *t4b = t4a;
for (size_t i = 0; i < PMA_GROW_SIZE_b * 2; i++) { for (size_t i = 0; i < PMA_GROW_SIZE_b * 2; i++) {
*t4b++ = rand(); *t4b++ = rand();
} }
assert(state4->file_size_p == PMA_INITIAL_SIZE_p + PMA_GROW_SIZE_p * 2);
/* given the allocation pattern the head of the flist should also be the
tail. The hi page here should match the file size */
assert(state4->flist->hi == state4->file_size_p);
bt_state_close(state4);
bt_state_new(&state4);
assert(SUCC(bt_state_open(state4, "./pmatest4", 0, 0644)));
assert(state4->file_size_p == PMA_INITIAL_SIZE_p + PMA_GROW_SIZE_p * 2);
assert(state4->flist->hi == state4->file_size_p);
return 0; return 0;
} }

View File

@ -2374,6 +2374,14 @@ _bt_state_load(BT_state *state)
assert(SUCC(_mlist_new(state))); assert(SUCC(_mlist_new(state)));
} }
else { else {
/* Set the file length */
if (fstat(state->data_fd, &stat) != 0)
return errno;
/* the file size should be a multiple of our pagesize */
assert((stat.st_size % BT_PAGESIZE) == 0);
state->file_size_p = stat.st_size / BT_PAGESIZE;
/* restore data memory maps */ /* restore data memory maps */
_bt_state_restore_maps(state); _bt_state_restore_maps(state);
@ -2382,15 +2390,6 @@ _bt_state_load(BT_state *state)
/* Dirty the metapage and root page */ /* Dirty the metapage and root page */
assert(SUCC(_bt_flip_meta(state))); assert(SUCC(_bt_flip_meta(state)));
/* Set the file length */
// XX make sure the flist is updated with this!
if (fstat(state->data_fd, &stat) != 0)
return errno;
/* the file size should be a multiple of our pagesize */
assert((stat.st_size % BT_PAGESIZE) == 0);
state->file_size_p = stat.st_size / BT_PAGESIZE;
} }
return BT_SUCC; return BT_SUCC;