summaryrefslogtreecommitdiff
path: root/src/third_party/wiredtiger/src/btree/bt_handle.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/third_party/wiredtiger/src/btree/bt_handle.c')
-rw-r--r--src/third_party/wiredtiger/src/btree/bt_handle.c70
1 files changed, 44 insertions, 26 deletions
diff --git a/src/third_party/wiredtiger/src/btree/bt_handle.c b/src/third_party/wiredtiger/src/btree/bt_handle.c
index f179fa38d91..168a0152f17 100644
--- a/src/third_party/wiredtiger/src/btree/bt_handle.c
+++ b/src/third_party/wiredtiger/src/btree/bt_handle.c
@@ -93,6 +93,7 @@ __wt_btree_open(WT_SESSION_IMPL *session, const char *op_cfg[])
WT_CKPT ckpt;
WT_CONFIG_ITEM cval;
WT_DATA_HANDLE *dhandle;
+ WT_DECL_ITEM(tmp);
WT_DECL_RET;
size_t root_addr_size;
uint8_t root_addr[WT_BTREE_MAX_ADDR_COOKIE];
@@ -239,6 +240,7 @@ err: WT_TRET(__wt_btree_close(session));
}
__wt_meta_checkpoint_free(session, &ckpt);
+ __wt_scr_free(session, &tmp);
return (ret);
}
@@ -324,6 +326,44 @@ __wt_btree_discard(WT_SESSION_IMPL *session)
}
/*
+ * __wt_btree_config_encryptor --
+ * Return an encryptor handle based on the configuration.
+ */
+int
+__wt_btree_config_encryptor(WT_SESSION_IMPL *session,
+ const char **cfg, WT_KEYED_ENCRYPTOR **kencryptorp)
+{
+ WT_CONFIG_ITEM cval, enc, keyid;
+ WT_DECL_RET;
+ const char *enc_cfg[] = { NULL, NULL };
+
+ /*
+ * We do not use __wt_config_gets_none here because "none" and the empty
+ * string have different meanings. The empty string means inherit the
+ * system encryption setting and "none" means this table is in the clear
+ * even if the database is encrypted.
+ */
+ WT_RET(__wt_config_gets(session, cfg, "encryption.name", &cval));
+ if (cval.len == 0)
+ *kencryptorp = S2C(session)->kencryptor;
+ else if (WT_STRING_MATCH("none", cval.str, cval.len))
+ *kencryptorp = NULL;
+ else {
+ WT_RET(__wt_config_gets_none(
+ session, cfg, "encryption.keyid", &keyid));
+ WT_RET(__wt_config_gets(session, cfg, "encryption", &enc));
+ if (enc.len != 0)
+ WT_RET(__wt_strndup(session, enc.str, enc.len,
+ &enc_cfg[0]));
+ ret = __wt_encryptor_config(session, &cval, &keyid,
+ (WT_CONFIG_ARG *)enc_cfg, kencryptorp);
+ __wt_free(session, enc_cfg[0]);
+ WT_RET(ret);
+ }
+ return (0);
+}
+
+/*
* __btree_conf --
* Configure a WT_BTREE structure.
*/
@@ -331,12 +371,11 @@ static int
__btree_conf(WT_SESSION_IMPL *session, WT_CKPT *ckpt)
{
WT_BTREE *btree;
- WT_CONFIG_ITEM cval, enc, keyid, metadata;
+ WT_CONFIG_ITEM cval, metadata;
WT_CONNECTION_IMPL *conn;
- WT_DECL_RET;
int64_t maj_version, min_version;
uint32_t bitcnt;
- const char **cfg, *enc_cfg[] = { NULL, NULL };
+ const char **cfg;
bool fixed;
btree = S2BT(session);
@@ -548,29 +587,8 @@ __btree_conf(WT_SESSION_IMPL *session, WT_CKPT *ckpt)
}
}
- /*
- * We do not use __wt_config_gets_none here because "none" and the empty
- * string have different meanings. The empty string means inherit the
- * system encryption setting and "none" means this table is in the clear
- * even if the database is encrypted.
- */
- WT_RET(__wt_config_gets(session, cfg, "encryption.name", &cval));
- if (cval.len == 0)
- btree->kencryptor = conn->kencryptor;
- else if (WT_STRING_MATCH("none", cval.str, cval.len))
- btree->kencryptor = NULL;
- else {
- WT_RET(__wt_config_gets_none(
- session, cfg, "encryption.keyid", &keyid));
- WT_RET(__wt_config_gets(session, cfg, "encryption", &enc));
- if (enc.len != 0)
- WT_RET(__wt_strndup(session, enc.str, enc.len,
- &enc_cfg[0]));
- ret = __wt_encryptor_config(session, &cval, &keyid,
- (WT_CONFIG_ARG *)enc_cfg, &btree->kencryptor);
- __wt_free(session, enc_cfg[0]);
- WT_RET(ret);
- }
+ /* Configure encryption. */
+ WT_RET(__wt_btree_config_encryptor(session, cfg, &btree->kencryptor));
/* Initialize locks. */
WT_RET(__wt_rwlock_init(session, &btree->ovfl_lock));