Added more buffer manager flags (allow programs to bypass non_blocking).

This commit is contained in:
Sears Russell 2007-10-22 20:50:00 +00:00
parent 5df9fbdc9c
commit d7e56fc96f
3 changed files with 46 additions and 22 deletions

View file

@ -46,9 +46,21 @@ int main(int argc, char ** argv) {
} else if(!strcmp(argv[i], "--deprecatedFH")) { } else if(!strcmp(argv[i], "--deprecatedFH")) {
bufferManagerFileHandleType = BUFFER_MANAGER_FILE_HANDLE_DEPRECATED; bufferManagerFileHandleType = BUFFER_MANAGER_FILE_HANDLE_DEPRECATED;
legacyFH = 1; legacyFH = 1;
} else if(!strcmp(argv[i], "--pfile")) { } else if(!strcmp(argv[i], "--nb")) {
bufferManagerNonBlockingSlowHandleType = IO_HANDLE_PFILE; bufferManagerFileHandleType = BUFFER_MANAGER_FILE_HANDLE_NON_BLOCKING;
legacyBM = 0;
legacyFH = 0;
} else if(!strcmp(argv[i], "--file")) { } else if(!strcmp(argv[i], "--file")) {
bufferManagerFileHandleType = BUFFER_MANAGER_FILE_HANDLE_FILE;
legacyBM = 0;
legacyFH = 0;
} else if(!strcmp(argv[i], "--pfile")) {
bufferManagerFileHandleType = BUFFER_MANAGER_FILE_HANDLE_PFILE;
legacyBM = 0;
legacyFH = 0;
} else if(!strcmp(argv[i], "--nb_pfile")) {
bufferManagerNonBlockingSlowHandleType = IO_HANDLE_PFILE;
} else if(!strcmp(argv[i], "--nb_file")) {
bufferManagerNonBlockingSlowHandleType = IO_HANDLE_FILE; bufferManagerNonBlockingSlowHandleType = IO_HANDLE_FILE;
} else if(!strcmp(argv[i], "--mb")) { } else if(!strcmp(argv[i], "--mb")) {
i++; i++;

View file

@ -136,27 +136,29 @@ int Tinit() {
LogInit(loggerType); LogInit(loggerType);
stasis_page_init(); stasis_page_init();
#ifndef HAVE_O_DIRECT
if(bufferManagerO_DIRECT) {
printf("O_DIRECT not supported by this build; switching to conventional buffered I/O.\n");
bufferManagerO_DIRECT = 0;
}
#endif
int openMode;
if(bufferManagerO_DIRECT) {
#ifdef HAVE_O_DIRECT
openMode = O_CREAT | O_RDWR | O_DIRECT;
#else
printf("Can't happen\n");
abort();
#endif
} else {
openMode = O_CREAT | O_RDWR;
}
switch(bufferManagerFileHandleType) { switch(bufferManagerFileHandleType) {
case BUFFER_MANAGER_FILE_HANDLE_NON_BLOCKING: { case BUFFER_MANAGER_FILE_HANDLE_NON_BLOCKING: {
struct sf_args * slow_arg = malloc(sizeof(sf_args)); struct sf_args * slow_arg = malloc(sizeof(sf_args));
slow_arg->filename = STORE_FILE; slow_arg->filename = STORE_FILE;
#ifndef HAVE_O_DIRECT slow_arg->openMode = openMode;
if(bufferManagerO_DIRECT) {
printf("O_DIRECT not supported by this build; switching to conventional buffered I/O.\n");
bufferManagerO_DIRECT = 0;
}
#endif
if(bufferManagerO_DIRECT) {
#ifdef HAVE_O_DIRECT
slow_arg->openMode = O_CREAT | O_RDWR | O_DIRECT;
#else
printf("Can't happen\n");
abort();
#endif
} else {
slow_arg->openMode = O_CREAT | O_RDWR;
}
slow_arg->filePerm = FILE_PERM; slow_arg->filePerm = FILE_PERM;
// Allow 4MB of outstanding writes. // Allow 4MB of outstanding writes.
@ -183,7 +185,17 @@ int Tinit() {
//pageFile = stasis_handle(open_debug)(pageFile); //pageFile = stasis_handle(open_debug)(pageFile);
pageHandleOpen(pageFile); pageHandleOpen(pageFile);
} break; } break;
case BUFFER_MANAGER_FILE_HANDLE_DEPRECATED: { case BUFFER_MANAGER_FILE_HANDLE_FILE: {
stasis_handle_t * pageFile =
stasis_handle_open_file(0, STORE_FILE, openMode, FILE_PERM);
pageHandleOpen(pageFile);
} break;
case BUFFER_MANAGER_FILE_HANDLE_PFILE: {
stasis_handle_t * pageFile =
stasis_handle_open_pfile(0, STORE_FILE, openMode, FILE_PERM);
pageHandleOpen(pageFile);
} break;
case BUFFER_MANAGER_FILE_HANDLE_DEPRECATED: {
printf("\nWarning: Using old I/O routines (with known bugs).\n"); printf("\nWarning: Using old I/O routines (with known bugs).\n");
openPageFile(); openPageFile();
} break; } break;
@ -193,8 +205,6 @@ int Tinit() {
abort(); abort();
} }
} }
//#else
//#endif // USE_PAGEFILE
bufInit(bufferManagerType); bufInit(bufferManagerType);
DEBUG("Buffer manager type = %d\n", bufferManagerType); DEBUG("Buffer manager type = %d\n", bufferManagerType);
pageOperationsInit(); pageOperationsInit();

View file

@ -97,7 +97,9 @@ terms specified in this license.
#define BUFFER_MANAGER_DEPRECATED_HASH 3 #define BUFFER_MANAGER_DEPRECATED_HASH 3
#define BUFFER_MANAGER_FILE_HANDLE_NON_BLOCKING 0 #define BUFFER_MANAGER_FILE_HANDLE_NON_BLOCKING 0
#define BUFFER_MANAGER_FILE_HANDLE_DEPRECATED 1 #define BUFFER_MANAGER_FILE_HANDLE_FILE 1
#define BUFFER_MANAGER_FILE_HANDLE_PFILE 2
#define BUFFER_MANAGER_FILE_HANDLE_DEPRECATED 3
#define IO_HANDLE_FILE 1 #define IO_HANDLE_FILE 1
#define IO_HANDLE_PFILE 2 #define IO_HANDLE_PFILE 2