mirror of
https://github.com/MariaDB/server.git
synced 2025-02-02 03:51:50 +01:00
[t:4281], grab fdlock around reading of fd in bring_node_fully_into_memory
git-svn-id: file:///svn/toku/tokudb@37884 c7de825b-a66e-492c-adef-691d508d4ae1
This commit is contained in:
parent
34f96b568b
commit
1ead590aec
3 changed files with 17 additions and 17 deletions
26
newbrt/brt.c
26
newbrt/brt.c
|
@ -144,13 +144,18 @@ toku_brt_header_suppress_rollbacks(struct brt_header *h, TOKUTXN txn) {
|
||||||
h->root_that_created_or_locked_when_empty = rootid;
|
h->root_that_created_or_locked_when_empty = rootid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool is_entire_node_in_memory(BRTNODE node) {
|
||||||
|
for (int i = 0; i < node->n_children; i++) {
|
||||||
|
if(BP_STATE(node,i) != PT_AVAIL) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
toku_assert_entire_node_in_memory(BRTNODE node) {
|
toku_assert_entire_node_in_memory(BRTNODE node) {
|
||||||
for (int i = 0; i < node->n_children; i++) {
|
assert(is_entire_node_in_memory(node));
|
||||||
assert(BP_STATE(node,i) == PT_AVAIL);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static u_int32_t
|
static u_int32_t
|
||||||
|
@ -1941,11 +1946,14 @@ toku_bnc_flush_to_child(
|
||||||
|
|
||||||
void bring_node_fully_into_memory(BRTNODE node, struct brt_header* h)
|
void bring_node_fully_into_memory(BRTNODE node, struct brt_header* h)
|
||||||
{
|
{
|
||||||
struct brtnode_fetch_extra bfe;
|
if (!is_entire_node_in_memory(node)) {
|
||||||
PAIR_ATTR attr;
|
struct brtnode_fetch_extra bfe;
|
||||||
int fd = toku_cachefile_fd(h->cf);
|
PAIR_ATTR attr;
|
||||||
fill_bfe_for_full_read(&bfe, h);
|
int fd = toku_cachefile_get_and_pin_fd(h->cf);
|
||||||
toku_brtnode_pf_callback(node, &bfe, fd, &attr);
|
fill_bfe_for_full_read(&bfe, h);
|
||||||
|
toku_brtnode_pf_callback(node, &bfe, fd, &attr);
|
||||||
|
toku_cachefile_unpin_fd(h->cf);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -471,10 +471,6 @@ cachefile_refup (CACHEFILE cf) {
|
||||||
cf->refcount++;
|
cf->refcount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
int toku_cachefile_fd(CACHEFILE cf) {
|
|
||||||
return cf->fd;
|
|
||||||
}
|
|
||||||
|
|
||||||
// What cachefile goes with particular iname (iname relative to env)?
|
// What cachefile goes with particular iname (iname relative to env)?
|
||||||
// The transaction that is adding the reference might not have a reference
|
// The transaction that is adding the reference might not have a reference
|
||||||
// to the brt, therefore the cachefile might be closing.
|
// to the brt, therefore the cachefile might be closing.
|
||||||
|
|
|
@ -60,10 +60,6 @@ int toku_cachefile_of_iname_in_env (CACHETABLE ct, const char *iname_in_env, CAC
|
||||||
// Return the filename
|
// Return the filename
|
||||||
char * toku_cachefile_fname_in_cwd (CACHEFILE cf);
|
char * toku_cachefile_fname_in_cwd (CACHEFILE cf);
|
||||||
|
|
||||||
// return the fd
|
|
||||||
int toku_cachefile_fd(CACHEFILE cf);
|
|
||||||
|
|
||||||
|
|
||||||
// TODO: #1510 Add comments on how these behave
|
// TODO: #1510 Add comments on how these behave
|
||||||
int toku_cachetable_begin_checkpoint (CACHETABLE ct, TOKULOGGER);
|
int toku_cachetable_begin_checkpoint (CACHETABLE ct, TOKULOGGER);
|
||||||
int toku_cachetable_end_checkpoint(CACHETABLE ct, TOKULOGGER logger,
|
int toku_cachetable_end_checkpoint(CACHETABLE ct, TOKULOGGER logger,
|
||||||
|
|
Loading…
Add table
Reference in a new issue