diff options
author | Susan LoVerso <sue@wiredtiger.com> | 2015-03-24 11:35:24 -0400 |
---|---|---|
committer | Susan LoVerso <sue@wiredtiger.com> | 2015-03-24 11:35:24 -0400 |
commit | 1df7f45ff9834c5eeb77b979339c3529df9f620f (patch) | |
tree | bf60bccf8bae4935a5bb9c42c0748273967881e4 | |
parent | 2a6f8372f8a116bb515a380a80498853f7f3e97e (diff) | |
download | mongo-1df7f45ff9834c5eeb77b979339c3529df9f620f.tar.gz |
Add a single set of fhandle flags for open and close. #1785
-rw-r--r-- | dist/s_string.ok | 2 | ||||
-rw-r--r-- | src/btree/bt_debug.c | 4 | ||||
-rw-r--r-- | src/btree/bt_huffman.c | 7 | ||||
-rw-r--r-- | src/conn/conn_api.c | 5 | ||||
-rw-r--r-- | src/conn/conn_stat.c | 6 | ||||
-rw-r--r-- | src/cursor/cur_backup.c | 6 | ||||
-rw-r--r-- | src/include/extern.h | 4 | ||||
-rw-r--r-- | src/include/misc.h | 17 | ||||
-rw-r--r-- | src/meta/meta_turtle.c | 10 | ||||
-rw-r--r-- | src/os_posix/os_stdio.c | 30 | ||||
-rw-r--r-- | src/support/filename.c | 2 |
11 files changed, 54 insertions, 39 deletions
diff --git a/dist/s_string.ok b/dist/s_string.ok index 86004e3d314..8589f50fd21 100644 --- a/dist/s_string.ok +++ b/dist/s_string.ok @@ -918,6 +918,7 @@ qsort quartile qup rS +rb rbrace rbracket rdlock @@ -1162,6 +1163,7 @@ vtype vunpack vupdate walk's +wb wiredtiger workFactor wrapup diff --git a/src/btree/bt_debug.c b/src/btree/bt_debug.c index fd5c5485050..fa7cff35e5f 100644 --- a/src/btree/bt_debug.c +++ b/src/btree/bt_debug.c @@ -99,7 +99,7 @@ __debug_config(WT_SESSION_IMPL *session, WT_DBG *ds, const char *ofile) return (__wt_scr_alloc(session, 512, &ds->msg)); /* If we're using a file, flush on each line. */ - WT_RET(__wt_fopen(session, ofile, WT_FOPEN_WRITE, 0, &ds->fp)); + WT_RET(__wt_fopen(session, ofile, WT_FHANDLE_WRITE, 0, &ds->fp)); (void)setvbuf(ds->fp, NULL, _IOLBF, 0); return (0); @@ -131,7 +131,7 @@ __dmsg_wrapup(WT_DBG *ds) } /* Close any file we opened. */ - (void)__wt_fclose(session, &ds->fp, WT_FCLOSE_WRITE); + (void)__wt_fclose(session, &ds->fp, WT_FHANDLE_WRITE); } /* diff --git a/src/btree/bt_huffman.c b/src/btree/bt_huffman.c index 11321db0a76..6604bd9c9e1 100644 --- a/src/btree/bt_huffman.c +++ b/src/btree/bt_huffman.c @@ -157,11 +157,12 @@ __huffman_confchk_file( /* Check the file exists. */ WT_RET(__wt_strndup(session, v->str + len, v->len - len, &fname)); - WT_ERR(__wt_fopen(session, fname, WT_FOPEN_READ, WT_FOPEN_FIXED, &fp)); + WT_ERR(__wt_fopen(session, + fname, WT_FHANDLE_READ, WT_FOPEN_FIXED, &fp)); /* Optionally return the file handle. */ if (fpp == NULL) - (void)__wt_fclose(session, &fp, WT_FCLOSE_READ); + (void)__wt_fclose(session, &fp, WT_FHANDLE_READ); else *fpp = fp; @@ -367,7 +368,7 @@ __wt_huffman_read(WT_SESSION_IMPL *session, WT_CONFIG_ITEM *ip, if (0) { err: __wt_free(session, table); } - (void)__wt_fclose(session, &fp, WT_FCLOSE_READ); + (void)__wt_fclose(session, &fp, WT_FHANDLE_READ); return (ret); } diff --git a/src/conn/conn_api.c b/src/conn/conn_api.c index 7aabd88ba90..b41cad25914 100644 --- a/src/conn/conn_api.c +++ b/src/conn/conn_api.c @@ -1494,7 +1494,8 @@ __conn_write_base_config(WT_SESSION_IMPL *session, const char *cfg[]) if (exist) return (0); - WT_RET(__wt_fopen(session, WT_BASECONFIG_SET, WT_FOPEN_WRITE, 0, &fp)); + WT_RET(__wt_fopen(session, + WT_BASECONFIG_SET, WT_FHANDLE_WRITE, 0, &fp)); fprintf(fp, "%s\n\n", "# Do not modify this file.\n" @@ -1551,7 +1552,7 @@ __conn_write_base_config(WT_SESSION_IMPL *session, const char *cfg[]) session, &fp, WT_BASECONFIG_SET, WT_BASECONFIG)); /* Close any file handle left open, remove any temporary file. */ -err: WT_TRET(__wt_fclose(session, &fp, WT_FCLOSE_WRITE)); +err: WT_TRET(__wt_fclose(session, &fp, WT_FHANDLE_WRITE)); WT_TRET(__wt_remove_if_exists(session, WT_BASECONFIG_SET)); return (ret); diff --git a/src/conn/conn_stat.c b/src/conn/conn_stat.c index 6767cc20309..83c8d539662 100644 --- a/src/conn/conn_stat.c +++ b/src/conn/conn_stat.c @@ -300,11 +300,11 @@ __statlog_log_one(WT_SESSION_IMPL *session, WT_ITEM *path, WT_ITEM *tmp) if ((log_file = conn->stat_fp) == NULL || path == NULL || strcmp(tmp->mem, path->mem) != 0) { conn->stat_fp = NULL; - WT_RET(__wt_fclose(session, &log_file, WT_FCLOSE_APPEND)); + WT_RET(__wt_fclose(session, &log_file, WT_FHANDLE_APPEND)); if (path != NULL) (void)strcpy(path->mem, tmp->mem); WT_RET(__wt_fopen(session, - tmp->mem, WT_FOPEN_APPEND, WT_FOPEN_FIXED, &log_file)); + tmp->mem, WT_FHANDLE_APPEND, WT_FOPEN_FIXED, &log_file)); } conn->stat_fp = log_file; @@ -529,7 +529,7 @@ __wt_statlog_destroy(WT_SESSION_IMPL *session, int is_close) conn->stat_session = NULL; conn->stat_tid_set = 0; conn->stat_format = NULL; - WT_TRET(__wt_fclose(session, &conn->stat_fp, WT_FCLOSE_APPEND)); + WT_TRET(__wt_fclose(session, &conn->stat_fp, WT_FHANDLE_APPEND)); conn->stat_path = NULL; conn->stat_sources = NULL; conn->stat_stamp = NULL; diff --git a/src/cursor/cur_backup.c b/src/cursor/cur_backup.c index a0885b0294d..5b47c2c1a73 100644 --- a/src/cursor/cur_backup.c +++ b/src/cursor/cur_backup.c @@ -248,7 +248,7 @@ __backup_start( * Close any hot backup file. * We're about to open the incremental backup file. */ - WT_TRET(__wt_fclose(session, &cb->bfp, WT_FCLOSE_WRITE)); + WT_TRET(__wt_fclose(session, &cb->bfp, WT_FHANDLE_WRITE)); WT_ERR(__backup_file_create(session, cb, log_only)); WT_ERR(__backup_list_append( session, cb, WT_INCREMENTAL_BACKUP)); @@ -266,7 +266,7 @@ __backup_start( } err: /* Close the hot backup file. */ - WT_TRET(__wt_fclose(session, &cb->bfp, WT_FCLOSE_WRITE)); + WT_TRET(__wt_fclose(session, &cb->bfp, WT_FHANDLE_WRITE)); if (ret != 0) { WT_TRET(__backup_cleanup_handles(session, cb)); WT_TRET(__backup_stop(session)); @@ -456,7 +456,7 @@ __backup_file_create( { return (__wt_fopen(session, incremental ? WT_INCREMENTAL_BACKUP : WT_METADATA_BACKUP, - WT_FOPEN_WRITE, 0, &cb->bfp)); + WT_FHANDLE_WRITE, 0, &cb->bfp)); } /* diff --git a/src/include/extern.h b/src/include/extern.h index e9c37e62bb6..fe717f47853 100644 --- a/src/include/extern.h +++ b/src/include/extern.h @@ -490,11 +490,11 @@ extern int __wt_rename(WT_SESSION_IMPL *session, const char *from, const char *t extern int __wt_read( WT_SESSION_IMPL *session, WT_FH *fh, wt_off_t offset, size_t len, void *buf); extern int __wt_write(WT_SESSION_IMPL *session, WT_FH *fh, wt_off_t offset, size_t len, const void *buf); extern void __wt_sleep(uint64_t seconds, uint64_t micro_seconds); -extern int __wt_fopen(WT_SESSION_IMPL *session, const char *name, const char *mode, u_int flags, FILE **fpp); +extern int __wt_fopen(WT_SESSION_IMPL *session, const char *name, WT_FHANDLE_MODE mode_flag, u_int flags, FILE **fpp); extern int __wt_vfprintf(WT_SESSION_IMPL *session, FILE *fp, const char *fmt, va_list ap); extern int __wt_fprintf(WT_SESSION_IMPL *session, FILE *fp, const char *fmt, ...) WT_GCC_FUNC_DECL_ATTRIBUTE((format (printf, 3, 4))); extern int __wt_fflush(WT_SESSION_IMPL *session, FILE *fp); -extern int __wt_fclose(WT_SESSION_IMPL *session, FILE **fpp, int iswrite); +extern int __wt_fclose(WT_SESSION_IMPL *session, FILE **fpp, WT_FHANDLE_MODE mode_flag); extern uint64_t __wt_strtouq(const char *nptr, char **endptr, int base); extern int __wt_thread_create(WT_SESSION_IMPL *session, wt_thread_t *tidret, void *(*func)(void *), void *arg); extern int __wt_thread_join(WT_SESSION_IMPL *session, wt_thread_t tid); diff --git a/src/include/misc.h b/src/include/misc.h index aaec41f6bc4..158903fcf7d 100644 --- a/src/include/misc.h +++ b/src/include/misc.h @@ -34,12 +34,23 @@ /* * FILE handle close/open configuration. */ -#define WT_FCLOSE_APPEND 1 -#define WT_FCLOSE_READ 0 -#define WT_FCLOSE_WRITE 1 +typedef enum { + WT_FHANDLE_APPEND, WT_FHANDLE_READ, WT_FHANDLE_WRITE +} WT_FHANDLE_MODE; + +#ifdef _WIN32 +/* + * Open in binary (untranslated) mode; translations involving + * carriage-return and linefeed characters are suppressed. + */ +#define WT_FOPEN_APPEND "ab" +#define WT_FOPEN_READ "rb" +#define WT_FOPEN_WRITE "wb" +#else #define WT_FOPEN_APPEND "a" #define WT_FOPEN_READ "r" #define WT_FOPEN_WRITE "w" +#endif #define WT_FOPEN_FIXED 0x1 /* Path isn't relative to home */ diff --git a/src/meta/meta_turtle.c b/src/meta/meta_turtle.c index 49442dcf1d2..7e3ac3530f8 100644 --- a/src/meta/meta_turtle.c +++ b/src/meta/meta_turtle.c @@ -78,7 +78,8 @@ __metadata_load_hot_backup(WT_SESSION_IMPL *session) WT_RET(__wt_exist(session, WT_METADATA_BACKUP, &exist)); if (!exist) return (0); - WT_RET(__wt_fopen(session, WT_METADATA_BACKUP, WT_FOPEN_READ, 0, &fp)); + WT_RET(__wt_fopen(session, + WT_METADATA_BACKUP, WT_FHANDLE_READ, 0, &fp)); /* Read line pairs and load them into the metadata file. */ WT_ERR(__wt_scr_alloc(session, 512, &key)); @@ -95,7 +96,7 @@ __metadata_load_hot_backup(WT_SESSION_IMPL *session) F_SET(S2C(session), WT_CONN_WAS_BACKUP); -err: WT_TRET(__wt_fclose(session, &fp, WT_FCLOSE_READ)); +err: WT_TRET(__wt_fclose(session, &fp, WT_FHANDLE_READ)); __wt_scr_free(session, &key); __wt_scr_free(session, &value); return (ret); @@ -235,7 +236,8 @@ __wt_turtle_read(WT_SESSION_IMPL *session, const char *key, char **valuep) if (!exist) return (strcmp(key, WT_METAFILE_URI) == 0 ? __metadata_config(session, valuep) : WT_NOTFOUND); - WT_RET(__wt_fopen(session, WT_METADATA_TURTLE, WT_FOPEN_READ, 0, &fp)); + WT_RET(__wt_fopen(session, + WT_METADATA_TURTLE, WT_FHANDLE_READ, 0, &fp)); /* Search for the key. */ WT_ERR(__wt_scr_alloc(session, 512, &buf)); @@ -257,7 +259,7 @@ __wt_turtle_read(WT_SESSION_IMPL *session, const char *key, char **valuep) /* Copy the value for the caller. */ WT_ERR(__wt_strdup(session, buf->data, valuep)); -err: WT_TRET(__wt_fclose(session, &fp, WT_FCLOSE_READ)); +err: WT_TRET(__wt_fclose(session, &fp, WT_FHANDLE_READ)); __wt_scr_free(session, &buf); return (ret); } diff --git a/src/os_posix/os_stdio.c b/src/os_posix/os_stdio.c index 071bdd9fd33..0f2355aa70d 100644 --- a/src/os_posix/os_stdio.c +++ b/src/os_posix/os_stdio.c @@ -14,10 +14,10 @@ */ int __wt_fopen(WT_SESSION_IMPL *session, - const char *name, const char *mode, u_int flags, FILE **fpp) + const char *name, WT_FHANDLE_MODE mode_flag, u_int flags, FILE **fpp) { WT_DECL_RET; - const char *path; + const char *mode, *path; char *pathbuf; WT_RET(__wt_verbose(session, WT_VERB_FILEOPS, "%s: fopen", name)); @@ -30,20 +30,18 @@ __wt_fopen(WT_SESSION_IMPL *session, path = pathbuf; } -#ifdef _WIN32 - { - char buf[10]; - /* - * Open in binary (untranslated) mode; translations involving - * carriage-return and linefeed characters are suppressed. - */ - (void)snprintf(buf, sizeof(buf), "%s" "b", mode); - - *fpp = fopen(path, buf); + switch (mode_flag) { + case WT_FHANDLE_APPEND: + mode = WT_FOPEN_APPEND; + break; + case WT_FHANDLE_READ: + mode = WT_FOPEN_READ; + break; + case WT_FHANDLE_WRITE: + mode = WT_FOPEN_WRITE; + break; } -#else *fpp = fopen(path, mode); -#endif if (*fpp == NULL) ret = __wt_errno(); @@ -105,7 +103,7 @@ __wt_fflush(WT_SESSION_IMPL *session, FILE *fp) * Close a FILE handle. */ int -__wt_fclose(WT_SESSION_IMPL *session, FILE **fpp, int iswrite) +__wt_fclose(WT_SESSION_IMPL *session, FILE **fpp, WT_FHANDLE_MODE mode_flag) { FILE *fp; WT_DECL_RET; @@ -120,7 +118,7 @@ __wt_fclose(WT_SESSION_IMPL *session, FILE **fpp, int iswrite) * If the handle was opened for writing, flush the file to the backing * OS buffers, then flush the OS buffers to the backing disk. */ - if (iswrite) { + if (mode_flag == WT_FHANDLE_APPEND || mode_flag == WT_FHANDLE_WRITE) { ret = __wt_fflush(session, fp); if (fsync(fileno(fp)) != 0) WT_TRET(__wt_errno()); diff --git a/src/support/filename.c b/src/support/filename.c index 57fdad61d5a..db466ed3bd4 100644 --- a/src/support/filename.c +++ b/src/support/filename.c @@ -104,7 +104,7 @@ __wt_sync_and_rename_fp( *fpp = NULL; /* Flush to disk and close the handle. */ - WT_RET(__wt_fclose(session, &fp, WT_FCLOSE_WRITE)); + WT_RET(__wt_fclose(session, &fp, WT_FHANDLE_WRITE)); /* Rename the source file to the target. */ WT_RET(__wt_rename(session, from, to)); |