summaryrefslogtreecommitdiff
path: root/src/third_party/wiredtiger/src/lsm/lsm_meta.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/third_party/wiredtiger/src/lsm/lsm_meta.c')
-rw-r--r--src/third_party/wiredtiger/src/lsm/lsm_meta.c41
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=["));