diff options
author | Susan LoVerso <sue@mongodb.com> | 2016-03-16 14:21:26 -0400 |
---|---|---|
committer | Susan LoVerso <sue@mongodb.com> | 2016-03-16 14:21:26 -0400 |
commit | a9b9e2ec66bdf199e73215c7ef404fa1b8ca319f (patch) | |
tree | b8a0c686bae5008edc4754bf212b594cdf1c0156 | |
parent | 1e4eb74c68cee5fdae2fd7fd12a1679fa12b8013 (diff) | |
download | mongo-a9b9e2ec66bdf199e73215c7ef404fa1b8ca319f.tar.gz |
WT-2485 Refactor and consolidate to fix merge_min.
-rw-r--r-- | src/lsm/lsm_meta.c | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/src/lsm/lsm_meta.c b/src/lsm/lsm_meta.c index 0ef78204a2b..66e3226b26e 100644 --- a/src/lsm/lsm_meta.c +++ b/src/lsm/lsm_meta.c @@ -159,15 +159,6 @@ __lsm_meta_read_v0( */ } WT_ERR_NOTFOUND_OK(ret); - - /* - * If the default merge_min was not overridden, calculate it now. We - * do this here so that trees created before merge_min was added get a - * sane value. - */ - if (lsm_tree->merge_min < 2) - lsm_tree->merge_min = WT_MAX(2, lsm_tree->merge_max / 2); - err: return (ret); } @@ -349,14 +340,6 @@ __lsm_meta_read_v1( * Ignore any other values: the metadata entry might have been * created by a future release, with unknown options. */ - /* - * If the default merge_min was not overridden, calculate it now. We - * do this here so that trees created before merge_min was added get a - * sane value. - */ - if (lsm_tree->merge_min < 2) - lsm_tree->merge_min = WT_MAX(2, lsm_tree->merge_max / 2); - err: __wt_scr_free(session, &buf); return (ret); } @@ -431,6 +414,7 @@ __wt_lsm_meta_read(WT_SESSION_IMPL *session, WT_LSM_TREE *lsm_tree) WT_CONFIG_ITEM cval; WT_DECL_RET; char *lsmconf; + bool upgrade; /* LSM trees inherit the merge setting from the connection. */ if (F_ISSET(S2C(session), WT_CONN_LSM_MERGE)) @@ -438,17 +422,29 @@ __wt_lsm_meta_read(WT_SESSION_IMPL *session, WT_LSM_TREE *lsm_tree) WT_RET(__wt_metadata_search(session, lsm_tree->name, &lsmconf)); + upgrade = false; ret = __wt_config_getones(session, lsmconf, "file_config", &cval); if (ret == 0) { ret = __lsm_meta_read_v0(session, lsm_tree, lsmconf); __wt_free(session, lsmconf); WT_RET(ret); - return (__lsm_meta_upgrade_v1(session, lsm_tree)); + upgrade = true; } else if (ret == WT_NOTFOUND) { lsm_tree->config = lsmconf; - return (__lsm_meta_read_v1(session, lsm_tree, lsmconf)); + ret = 0; + WT_RET(__lsm_meta_read_v1(session, lsm_tree, lsmconf)); } - + /* + * If the default merge_min was not overridden, calculate it now. + */ + if (lsm_tree->merge_min < 2) + lsm_tree->merge_min = WT_MAX(2, lsm_tree->merge_max / 2); + /* + * If needed, upgrade the configuration. We need to do this after + * we have fixed the merge_min value. + */ + if (upgrade) + WT_RET(__lsm_meta_upgrade_v1(session, lsm_tree)); return (ret); } |