Fixed blob bug. The reason it's so slow is that it's logging a preimage + postimage of each blob and then synchronously writing to a second copy each time the blob is
written to(!!!)
This commit is contained in:
parent
3e4cac0fe3
commit
e14877821f
3 changed files with 13 additions and 3 deletions
|
@ -436,7 +436,7 @@ void writeBlob(int xid, Page * p, lsn_t lsn, recordid rid, const void * buf) {
|
||||||
files when it's called (are there any dirty blobs associated with
|
files when it's called (are there any dirty blobs associated with
|
||||||
this transaction?
|
this transaction?
|
||||||
|
|
||||||
@todo when writeBlob is fixed, add the fdatasync calls back into commitBlobs().
|
@todo when writeBlob is fixed, add the fdatasync calls back into commitBlobs() Currently, it calls fdatasync on each blob write...
|
||||||
*/
|
*/
|
||||||
void commitBlobs(int xid) {
|
void commitBlobs(int xid) {
|
||||||
flockfile(blobf1);
|
flockfile(blobf1);
|
||||||
|
|
|
@ -230,6 +230,8 @@ recordid slottedRawRalloc(Page * page, int size) {
|
||||||
- If 11 was also deleted by a transaction that could abort, we should lock it so that it won't be reused.
|
- If 11 was also deleted by a transaction that could abort, we should lock it so that it won't be reused.
|
||||||
(4) This function adds it to the freelist to avoid leaking space. (Therefore, Talloc() can return recordids that will
|
(4) This function adds it to the freelist to avoid leaking space. (Therefore, Talloc() can return recordids that will
|
||||||
be reused by aborting transactions...)
|
be reused by aborting transactions...)
|
||||||
|
|
||||||
|
@param rid Recordid with 'internal' size. The size should have already been translated to a type if necessary.
|
||||||
*/
|
*/
|
||||||
static void really_do_ralloc(Page * page, recordid rid) {
|
static void really_do_ralloc(Page * page, recordid rid) {
|
||||||
|
|
||||||
|
@ -333,7 +335,9 @@ static void really_do_ralloc(Page * page, recordid rid) {
|
||||||
//}
|
//}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
@param rid with user-visible size.
|
||||||
|
*/
|
||||||
recordid slottedPostRalloc(int xid, Page * page, lsn_t lsn, recordid rid) {
|
recordid slottedPostRalloc(int xid, Page * page, lsn_t lsn, recordid rid) {
|
||||||
|
|
||||||
writelock(page->rwlatch, 376);
|
writelock(page->rwlatch, 376);
|
||||||
|
@ -368,7 +372,11 @@ recordid slottedPostRalloc(int xid, Page * page, lsn_t lsn, recordid rid) {
|
||||||
// Make sure the slot is invalid. If the slot has not been used yet, then
|
// Make sure the slot is invalid. If the slot has not been used yet, then
|
||||||
// slot_length_ptr will still be zero, so we allow that too.
|
// slot_length_ptr will still be zero, so we allow that too.
|
||||||
if((*slot_length_ptr(page, rid.slot) == 0) || (*slot_ptr(page, rid.slot) == INVALID_SLOT)) {
|
if((*slot_length_ptr(page, rid.slot) == 0) || (*slot_ptr(page, rid.slot) == INVALID_SLOT)) {
|
||||||
really_do_ralloc(page, rid);
|
recordid rid2 = rid;
|
||||||
|
if(rid.size >= BLOB_THRESHOLD_SIZE) {
|
||||||
|
rid2.size = BLOB_SLOT;
|
||||||
|
}
|
||||||
|
really_do_ralloc(page, rid2);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
||||||
#ifndef HAVE_TCASE_SET_TIMEOUT
|
#ifndef HAVE_TCASE_SET_TIMEOUT
|
||||||
|
@ -13,5 +14,6 @@ void setup (void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void teardown(void) {
|
void teardown(void) {
|
||||||
|
system("ls -lh *.txt*");
|
||||||
setup();
|
setup();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue