force_range is now being called after compressData()
This commit is contained in:
parent
f51148e686
commit
9bb6984c23
7 changed files with 35 additions and 7 deletions
|
@ -77,8 +77,8 @@ namespace rose {
|
||||||
for(long int i = 0; i < INSERTS; i++) {
|
for(long int i = 0; i < INSERTS; i++) {
|
||||||
getTuple<PAGELAYOUT>(i,t);
|
getTuple<PAGELAYOUT>(i,t);
|
||||||
TlsmTableInsert(h,t);
|
TlsmTableInsert(h,t);
|
||||||
getTuple<PAGELAYOUT>(i,t);
|
// getTuple<PAGELAYOUT>(i,t);
|
||||||
assert(TlsmTableFind(xid,h,t,s));
|
// assert(TlsmTableFind(xid,h,t,s));
|
||||||
count --;
|
count --;
|
||||||
if(!count) {
|
if(!count) {
|
||||||
count = COUNT;
|
count = COUNT;
|
||||||
|
|
|
@ -385,8 +385,9 @@ static int pfile_force(stasis_handle_t *h) {
|
||||||
static int pfile_force_range(stasis_handle_t *h, lsn_t start, lsn_t stop) {
|
static int pfile_force_range(stasis_handle_t *h, lsn_t start, lsn_t stop) {
|
||||||
pfile_impl * impl = h->impl;
|
pfile_impl * impl = h->impl;
|
||||||
#ifdef HAVE_SYNC_FILE_RANGE
|
#ifdef HAVE_SYNC_FILE_RANGE
|
||||||
printf("pfile_force_range calling sync_file_range\n");
|
printf("pfile_force_range calling sync_file_range %lld %lld\n",
|
||||||
int ret = sync_file_range(impl->fd, start-impl->start_pos, (stop-start),
|
start-impl->start_pos, stop-start); fflush(stdout);
|
||||||
|
int ret = sync_file_range(impl->fd, start-impl->start_pos, stop-start,
|
||||||
SYNC_FILE_RANGE_WAIT_BEFORE |
|
SYNC_FILE_RANGE_WAIT_BEFORE |
|
||||||
SYNC_FILE_RANGE_WRITE |
|
SYNC_FILE_RANGE_WRITE |
|
||||||
SYNC_FILE_RANGE_WAIT_AFTER);
|
SYNC_FILE_RANGE_WAIT_AFTER);
|
||||||
|
|
|
@ -201,6 +201,9 @@ namespace rose {
|
||||||
<PAGELAYOUT,mergeIterator<ITERA,ITERB,typename PAGELAYOUT::FMT::TUP> >
|
<PAGELAYOUT,mergeIterator<ITERA,ITERB,typename PAGELAYOUT::FMT::TUP> >
|
||||||
(xid, &mBegin, &mEnd,tree->r_,a->pageAlloc,a->pageAllocState,&insertedTuples); */
|
(xid, &mBegin, &mEnd,tree->r_,a->pageAlloc,a->pageAllocState,&insertedTuples); */
|
||||||
|
|
||||||
|
// XXX hardcodes tree type.
|
||||||
|
TlsmForce(xid,tree->r_,TlsmRegionForceRid,a->pageAllocState);
|
||||||
|
|
||||||
delete taEnd;
|
delete taEnd;
|
||||||
delete tbEnd;
|
delete tbEnd;
|
||||||
|
|
||||||
|
@ -489,6 +492,7 @@ namespace rose {
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
// XXX this does not force the table to disk... it simply forces everything out of the in-memory tree.
|
||||||
template<class PAGELAYOUT>
|
template<class PAGELAYOUT>
|
||||||
void TlsmTableFlush(lsmTableHandle<PAGELAYOUT> *h) {
|
void TlsmTableFlush(lsmTableHandle<PAGELAYOUT> *h) {
|
||||||
pthread_mutex_lock(h->mut);
|
pthread_mutex_lock(h->mut);
|
||||||
|
|
|
@ -38,6 +38,19 @@ pageid_t TlsmRegionAlloc(int xid, void *conf) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TlsmRegionForceRid(int xid, void *conf) {
|
||||||
|
recordid rid = *(recordid*)conf;
|
||||||
|
TlsmRegionAllocConf_t a;
|
||||||
|
Tread(xid,rid,&a);
|
||||||
|
// TlsmRegionAllocConf_t* a = (TlsmRegionAllocConf_t*)conf;
|
||||||
|
for(int i = 0; i < a.regionCount; i++) {
|
||||||
|
a.regionList.slot = i;
|
||||||
|
pageid_t pid;
|
||||||
|
Tread(xid,a.regionList,&pid);
|
||||||
|
dirtyPages_flushRange(pid, pid+a.regionSize);
|
||||||
|
// TregionDealloc(xid,pid);
|
||||||
|
}
|
||||||
|
}
|
||||||
void TlsmRegionDeallocRid(int xid, void *conf) {
|
void TlsmRegionDeallocRid(int xid, void *conf) {
|
||||||
recordid rid = *(recordid*)conf;
|
recordid rid = *(recordid*)conf;
|
||||||
TlsmRegionAllocConf_t a;
|
TlsmRegionAllocConf_t a;
|
||||||
|
@ -602,6 +615,11 @@ recordid TlsmAppendPage(int xid, recordid tree,
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
void TlsmForce(int xid, recordid tree, lsm_page_forcer_t force,
|
||||||
|
void *allocator_state) {
|
||||||
|
force(xid, allocator_state);
|
||||||
|
}
|
||||||
|
|
||||||
void TlsmFree(int xid, recordid tree, lsm_page_deallocator_t dealloc,
|
void TlsmFree(int xid, recordid tree, lsm_page_deallocator_t dealloc,
|
||||||
void *allocator_state) {
|
void *allocator_state) {
|
||||||
// Tdealloc(xid,tree);
|
// Tdealloc(xid,tree);
|
||||||
|
|
|
@ -129,7 +129,7 @@ void dirtyPages_flushRange(pageid_t start, pageid_t stop) {
|
||||||
releasePage(p);
|
releasePage(p);
|
||||||
}
|
}
|
||||||
free(staleDirtyPages);
|
free(staleDirtyPages);
|
||||||
forcePageRange(start,stop); // XXX
|
forcePageRange(start*PAGE_SIZE,stop*PAGE_SIZE);
|
||||||
}
|
}
|
||||||
void dirtyPagesInit() {
|
void dirtyPagesInit() {
|
||||||
dirtyPages = pblHtCreate();
|
dirtyPages = pblHtCreate();
|
||||||
|
|
|
@ -26,12 +26,14 @@ typedef int(*lsm_comparator_t)(const void* a, const void* b);
|
||||||
typedef void*(*lsm_page_initializer_t)(Page *, void *);
|
typedef void*(*lsm_page_initializer_t)(Page *, void *);
|
||||||
typedef pageid_t(*lsm_page_allocator_t)(int, void *);
|
typedef pageid_t(*lsm_page_allocator_t)(int, void *);
|
||||||
typedef void(*lsm_page_deallocator_t)(int, void *);
|
typedef void(*lsm_page_deallocator_t)(int, void *);
|
||||||
|
typedef void(*lsm_page_forcer_t)(int, void *);
|
||||||
|
|
||||||
void lsmTreeRegisterComparator(int id, lsm_comparator_t i);
|
void lsmTreeRegisterComparator(int id, lsm_comparator_t i);
|
||||||
void lsmTreeRegisterPageInitializer(int id, lsm_page_initializer_t i);
|
void lsmTreeRegisterPageInitializer(int id, lsm_page_initializer_t i);
|
||||||
|
|
||||||
pageid_t TlsmRegionAlloc(int xid, void *conf);
|
pageid_t TlsmRegionAlloc(int xid, void *conf);
|
||||||
pageid_t TlsmRegionAllocRid(int xid, void *conf);
|
pageid_t TlsmRegionAllocRid(int xid, void *conf);
|
||||||
|
void TlsmRegionForceRid(int xid, void *conf);
|
||||||
typedef struct {
|
typedef struct {
|
||||||
recordid regionList;
|
recordid regionList;
|
||||||
pageid_t regionCount;
|
pageid_t regionCount;
|
||||||
|
@ -72,6 +74,8 @@ recordid TlsmAppendPage(int xid, recordid tree,
|
||||||
const byte *key,
|
const byte *key,
|
||||||
lsm_page_allocator_t allocator, void *allocator_state,
|
lsm_page_allocator_t allocator, void *allocator_state,
|
||||||
long pageid);
|
long pageid);
|
||||||
|
void TlsmForce(int xid, recordid tree, lsm_page_forcer_t force,
|
||||||
|
void *allocator_state);
|
||||||
void TlsmFree(int xid, recordid tree, lsm_page_deallocator_t dealloc,
|
void TlsmFree(int xid, recordid tree, lsm_page_deallocator_t dealloc,
|
||||||
void *allocator_state);
|
void *allocator_state);
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -68,9 +68,10 @@ void dirtyPages_remove(Page * p);
|
||||||
int dirtyPages_isDirty(Page * p);
|
int dirtyPages_isDirty(Page * p);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@todo forceWriteRange has nothing to do with the dirty pages api, or truncation.
|
@todo flushRange's API sucks. It should be two functions, "startRangeFlush" and "waitRangeFlushes" or something.
|
||||||
|
@todo flushRange has nothing to do with the dirty pages api, or truncation.
|
||||||
*/
|
*/
|
||||||
void dirtyPages_forceWriteRange(pageid_t start, pageid_t stop);
|
void dirtyPages_flushRange(pageid_t start, pageid_t stop);
|
||||||
|
|
||||||
void truncationInit();
|
void truncationInit();
|
||||||
void truncationDeinit();
|
void truncationDeinit();
|
||||||
|
|
Loading…
Reference in a new issue