More fixes to prevent tardis from running out of disk space.
This commit is contained in:
parent
e434c35203
commit
986ee57020
2 changed files with 27 additions and 11 deletions
|
@ -172,23 +172,24 @@ int truncateNow() {
|
||||||
|
|
||||||
lsn_t log_trunc = LogTruncationPoint();
|
lsn_t log_trunc = LogTruncationPoint();
|
||||||
if((xact_rec_lsn - log_trunc) > MIN_INCREMENTAL_TRUNCATION) {
|
if((xact_rec_lsn - log_trunc) > MIN_INCREMENTAL_TRUNCATION) {
|
||||||
//printf("xact = %ld \t log = %ld\n", xact_rec_lsn, log_trunc);
|
//fprintf(stderr, "xact = %ld \t log = %ld\n", xact_rec_lsn, log_trunc);
|
||||||
if((rec_lsn - log_trunc) > MIN_INCREMENTAL_TRUNCATION) {
|
if((rec_lsn - log_trunc) > MIN_INCREMENTAL_TRUNCATION) {
|
||||||
fprintf(stderr, "Truncating now. rec_lsn = %ld, log_trunc = %ld\n", rec_lsn, log_trunc);
|
// fprintf(stderr, "Truncating now. rec_lsn = %ld, log_trunc = %ld\n", rec_lsn, log_trunc);
|
||||||
|
fprintf(stderr, "Truncating to rec_lsn = %ld\n", rec_lsn);
|
||||||
forcePageFile();
|
forcePageFile();
|
||||||
LogTruncate(rec_lsn);
|
LogTruncate(rec_lsn);
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
lsn_t flushed = LogFlushedLSN();
|
lsn_t flushed = LogFlushedLSN();
|
||||||
if(flushed - log_trunc > 2 * TARGET_LOG_SIZE) {
|
if(flushed - log_trunc > 2 * TARGET_LOG_SIZE) {
|
||||||
fprintf(stderr, "Flushing dirty buffers: rec_lsn = %ld log_trunc = %ld flushed = %ld\n", rec_lsn, log_trunc, flushed);
|
//fprintf(stderr, "Flushing dirty buffers: rec_lsn = %ld log_trunc = %ld flushed = %ld\n", rec_lsn, log_trunc, flushed);
|
||||||
dirtyPages_flush();
|
dirtyPages_flush();
|
||||||
|
|
||||||
page_rec_lsn = dirtyPages_minRecLSN();
|
page_rec_lsn = dirtyPages_minRecLSN();
|
||||||
rec_lsn = page_rec_lsn < xact_rec_lsn ? page_rec_lsn : xact_rec_lsn;
|
rec_lsn = page_rec_lsn < xact_rec_lsn ? page_rec_lsn : xact_rec_lsn;
|
||||||
rec_lsn = (rec_lsn < flushed_lsn) ? rec_lsn : flushed_lsn;
|
rec_lsn = (rec_lsn < flushed_lsn) ? rec_lsn : flushed_lsn;
|
||||||
|
|
||||||
fprintf(stderr, "Truncating to rec_lsn = %ld\n", rec_lsn);
|
fprintf(stderr, "Flushed Dirty Buffers. Truncating to rec_lsn = %ld\n", rec_lsn);
|
||||||
|
|
||||||
forcePageFile();
|
forcePageFile();
|
||||||
LogTruncate(rec_lsn);
|
LogTruncate(rec_lsn);
|
||||||
|
|
|
@ -15,7 +15,8 @@
|
||||||
|
|
||||||
#define LOG_NAME "check_bufferManager.log"
|
#define LOG_NAME "check_bufferManager.log"
|
||||||
#ifdef LONG_TEST
|
#ifdef LONG_TEST
|
||||||
#define THREAD_COUNT 100
|
|
||||||
|
#define THREAD_COUNT 50
|
||||||
#define NUM_PAGES (MAX_BUFFER_SIZE * 2) // Otherwise, we run out of disk cache, and it takes forever to complete...
|
#define NUM_PAGES (MAX_BUFFER_SIZE * 2) // Otherwise, we run out of disk cache, and it takes forever to complete...
|
||||||
#define PAGE_MULT 10 // This tells the system to only use every 10'th page, allowing us to quickly check >2 GB, >4 GB safeness.
|
#define PAGE_MULT 10 // This tells the system to only use every 10'th page, allowing us to quickly check >2 GB, >4 GB safeness.
|
||||||
|
|
||||||
|
@ -31,9 +32,10 @@
|
||||||
#define READS_PER_THREAD (NUM_PAGES * 5)
|
#define READS_PER_THREAD (NUM_PAGES * 5)
|
||||||
#define RECORDS_PER_THREAD (NUM_PAGES * 5)
|
#define RECORDS_PER_THREAD (NUM_PAGES * 5)
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define MAX_TRANS_LENGTH 100 // Number of writes per transaction. Keeping this low allows truncation.
|
||||||
|
|
||||||
void initializePages() {
|
void initializePages() {
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
@ -100,9 +102,13 @@ void * workerThreadWriting(void * q) {
|
||||||
|
|
||||||
int offset = *(int*)q;
|
int offset = *(int*)q;
|
||||||
recordid rids[RECORDS_PER_THREAD];
|
recordid rids[RECORDS_PER_THREAD];
|
||||||
|
|
||||||
|
int xid = Tbegin();
|
||||||
|
int num_ops = 0;
|
||||||
|
|
||||||
for(int i = 0 ; i < RECORDS_PER_THREAD; i++) {
|
for(int i = 0 ; i < RECORDS_PER_THREAD; i++) {
|
||||||
|
|
||||||
rids[i] = Talloc(-1, sizeof(int));
|
rids[i] = Talloc(xid, sizeof(int));
|
||||||
/* printf("\nRID:\t%d,%d\n", rids[i].page, rids[i].slot); */
|
/* printf("\nRID:\t%d,%d\n", rids[i].page, rids[i].slot); */
|
||||||
/* fflush(NULL); */
|
/* fflush(NULL); */
|
||||||
|
|
||||||
|
@ -111,12 +117,19 @@ void * workerThreadWriting(void * q) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(num_ops == MAX_TRANS_LENGTH) {
|
||||||
|
num_ops = 0;
|
||||||
|
Tcommit(xid);
|
||||||
|
xid = Tbegin();
|
||||||
|
} else {
|
||||||
|
num_ops++;
|
||||||
|
}
|
||||||
/* sched_yield(); */
|
/* sched_yield(); */
|
||||||
}
|
}
|
||||||
for(int i = 0; i < RECORDS_PER_THREAD; i++) {
|
for(int i = 0; i < RECORDS_PER_THREAD; i++) {
|
||||||
int val = (i * 10000) + offset;
|
int val = (i * 10000) + offset;
|
||||||
int k;
|
int k;
|
||||||
Page * p = loadPage(-1, rids[i].page);
|
Page * p = loadPage(xid, rids[i].page);
|
||||||
|
|
||||||
assert(p->id == rids[i].page);
|
assert(p->id == rids[i].page);
|
||||||
|
|
||||||
|
@ -143,7 +156,7 @@ void * workerThreadWriting(void * q) {
|
||||||
Page * p;
|
Page * p;
|
||||||
|
|
||||||
|
|
||||||
p = loadPage(-1, rids[i].page);
|
p = loadPage(xid, rids[i].page);
|
||||||
|
|
||||||
readRecord(1, p, rids[i], &val);
|
readRecord(1, p, rids[i], &val);
|
||||||
|
|
||||||
|
@ -160,6 +173,8 @@ void * workerThreadWriting(void * q) {
|
||||||
|
|
||||||
/* sched_yield(); */
|
/* sched_yield(); */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Tcommit(xid);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -248,10 +263,10 @@ Suite * check_suite(void) {
|
||||||
TCase *tc = tcase_create("multithreaded");
|
TCase *tc = tcase_create("multithreaded");
|
||||||
tcase_set_timeout(tc, 0); // disable timeouts
|
tcase_set_timeout(tc, 0); // disable timeouts
|
||||||
/* Sub tests are added, one per line, here */
|
/* Sub tests are added, one per line, here */
|
||||||
|
|
||||||
tcase_add_test(tc, pageSingleThreadTest);
|
tcase_add_test(tc, pageSingleThreadTest);
|
||||||
tcase_add_test(tc, pageLoadTest);
|
tcase_add_test(tc, pageLoadTest);
|
||||||
tcase_add_test(tc, pageSingleThreadWriterTest);
|
tcase_add_test(tc, pageSingleThreadWriterTest);
|
||||||
tcase_add_test(tc, pageThreadedWritersTest);
|
tcase_add_test(tc, pageThreadedWritersTest);
|
||||||
|
|
||||||
/* --------------------------------------------- */
|
/* --------------------------------------------- */
|
||||||
|
|
Loading…
Reference in a new issue