diff options
Diffstat (limited to 'src/third_party/wiredtiger/src/lsm/lsm_meta.c')
-rw-r--r-- | src/third_party/wiredtiger/src/lsm/lsm_meta.c | 41 |
1 files changed, 31 insertions, 10 deletions
diff --git a/src/third_party/wiredtiger/src/lsm/lsm_meta.c b/src/third_party/wiredtiger/src/lsm/lsm_meta.c index 3a4960aaec1..7cb82f94ad4 100644 --- a/src/third_party/wiredtiger/src/lsm/lsm_meta.c +++ b/src/third_party/wiredtiger/src/lsm/lsm_meta.c @@ -104,7 +104,8 @@ __lsm_meta_read_v0( lsm_tree->chunk[nchunks++] = chunk; chunk->id = (uint32_t)lv.val; WT_RET(__wt_lsm_tree_chunk_name(session, - lsm_tree, chunk->id, &chunk->uri)); + lsm_tree, chunk->id, + chunk->generation, &chunk->uri)); F_SET(chunk, WT_LSM_CHUNK_ONDISK | WT_LSM_CHUNK_STABLE); @@ -200,6 +201,21 @@ __lsm_meta_read_v1( cv.str, cv.len, &lsm_tree->collator_name)); } + WT_ERR(__wt_config_getones( + session, lsmconf, "lsm.merge_custom.start_generation", &cv)); + lsm_tree->custom_generation = (uint32_t)cv.val; + if (lsm_tree->custom_generation != 0) { + WT_ERR(__wt_config_getones( + session, lsmconf, "lsm.merge_custom.prefix", &cv)); + WT_ERR(__wt_strndup(session, + cv.str, cv.len, &lsm_tree->custom_prefix)); + + WT_ERR(__wt_config_getones( + session, lsmconf, "lsm.merge_custom.suffix", &cv)); + WT_ERR(__wt_strndup(session, + cv.str, cv.len, &lsm_tree->custom_suffix)); + } + WT_ERR(__wt_config_getones(session, lsmconf, "lsm.auto_throttle", &cv)); if (cv.val) F_SET(lsm_tree, WT_LSM_TREE_THROTTLE); @@ -267,15 +283,18 @@ __lsm_meta_read_v1( __wt_config_subinit(session, &lparser, &cv); for (nchunks = 0; (ret = __wt_config_next(&lparser, &lk, &lv)) == 0; ) { - if (WT_STRING_MATCH("id", lk.str, lk.len)) { + if (WT_STRING_MATCH("generation", lk.str, lk.len)) { WT_ERR(__wt_realloc_def(session, &lsm_tree->chunk_alloc, nchunks + 1, &lsm_tree->chunk)); WT_ERR(__wt_calloc_one(session, &chunk)); lsm_tree->chunk[nchunks++] = chunk; + chunk->generation = (uint32_t)lv.val; + continue; + } else if (WT_STRING_MATCH("id", lk.str, lk.len)) { chunk->id = (uint32_t)lv.val; - WT_ERR(__wt_lsm_tree_chunk_name(session, - lsm_tree, chunk->id, &chunk->uri)); + WT_ERR(__wt_lsm_tree_chunk_name(session, lsm_tree, + chunk->id, chunk->generation, &chunk->uri)); F_SET(chunk, WT_LSM_CHUNK_ONDISK | WT_LSM_CHUNK_STABLE); @@ -290,9 +309,6 @@ __lsm_meta_read_v1( } else if (WT_STRING_MATCH("count", lk.str, lk.len)) { chunk->count = (uint64_t)lv.val; continue; - } else if (WT_STRING_MATCH("generation", lk.str, lk.len)) { - chunk->generation = (uint32_t)lv.val; - continue; } } WT_ERR_NOTFOUND_OK(ret); @@ -473,7 +489,14 @@ __wt_lsm_meta_write(WT_SESSION_IMPL *session, WT_LSM_TREE *lsm_tree, chunk = lsm_tree->chunk[i]; if (i > 0) WT_ERR(__wt_buf_catfmt(session, buf, ",")); - WT_ERR(__wt_buf_catfmt(session, buf, "id=%" PRIu32, chunk->id)); + /* + * Note that we need the generation before the ID for custom + * data sources, or the wrong URI will be generated. + */ + WT_ERR(__wt_buf_catfmt( + session, buf, "generation=%" PRIu32, chunk->generation)); + WT_ERR(__wt_buf_catfmt( + session, buf, ",id=%" PRIu32, chunk->id)); if (F_ISSET(chunk, WT_LSM_CHUNK_BLOOM)) WT_ERR(__wt_buf_catfmt(session, buf, ",bloom")); if (chunk->size != 0) @@ -482,8 +505,6 @@ __wt_lsm_meta_write(WT_SESSION_IMPL *session, WT_LSM_TREE *lsm_tree, if (chunk->count != 0) WT_ERR(__wt_buf_catfmt( session, buf, ",count=%" PRIu64, chunk->count)); - WT_ERR(__wt_buf_catfmt( - session, buf, ",generation=%" PRIu32, chunk->generation)); } WT_ERR(__wt_buf_catfmt(session, buf, "]")); WT_ERR(__wt_buf_catfmt(session, buf, ",old_chunks=[")); |