summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Cahill <michael.cahill@wiredtiger.com>2015-01-17 05:15:04 +1100
committerMichael Cahill <michael.cahill@wiredtiger.com>2015-01-17 05:15:04 +1100
commit1b033e5b2b4caba973f24a85c3591eb45e991538 (patch)
tree5f67f7dfc5f81b1df997b43492dba89e21fb2544
parenteb1511f3f1fb3be31cce7c4b288608997dd77c3e (diff)
downloadmongo-1b033e5b2b4caba973f24a85c3591eb45e991538.tar.gz
Don't allow "readonly" to be reconfigured on cursors.
refs #1467
-rw-r--r--dist/api_data.py18
-rw-r--r--lang/java/java_doc.i3
-rw-r--r--src/config/config_def.c3
-rw-r--r--src/cursor/cur_metadata.c6
-rw-r--r--src/cursor/cur_std.c31
-rw-r--r--src/include/cursor.h3
-rw-r--r--src/include/wiredtiger.in3
-rw-r--r--test/suite/test_cursor06.py1
8 files changed, 17 insertions, 51 deletions
diff --git a/dist/api_data.py b/dist/api_data.py
index d356ee27ed4..0141526285c 100644
--- a/dist/api_data.py
+++ b/dist/api_data.py
@@ -559,7 +559,7 @@ common_wiredtiger_open = [
]),
]
-cursor_config = [
+cursor_runtime_config = [
Config('append', 'false', r'''
append the value as a new record, creating a new record
number key; valid only for cursors with record number keys''',
@@ -571,12 +571,6 @@ cursor_config = [
if the record exists, WT_CURSOR::update and WT_CURSOR::remove
fail with ::WT_NOTFOUND if the record does not exist''',
type='boolean'),
- Config('readonly', 'false', r'''
- only query operations are supported by this cursor. An error is
- returned if a modification is attempted using the cursor. The
- default is false for all cursor types except for log and metadata
- cursors''',
- type='boolean'),
]
methods = {
@@ -590,7 +584,7 @@ methods = {
'cursor.close' : Method([]),
-'cursor.reconfigure' : Method(cursor_config),
+'cursor.reconfigure' : Method(cursor_runtime_config),
'session.close' : Method([]),
@@ -622,7 +616,7 @@ methods = {
'session.log_printf' : Method([]),
-'session.open_cursor' : Method(cursor_config + [
+'session.open_cursor' : Method(cursor_runtime_config + [
Config('bulk', 'false', r'''
configure the cursor for bulk-loading, a fast, initial load
path (see @ref tune_bulk_load for more information). Bulk-load
@@ -663,6 +657,12 @@ methods = {
ignore the encodings for the key and value, manage data as if
the formats were \c "u". See @ref cursor_raw for details''',
type='boolean'),
+ Config('readonly', 'false', r'''
+ only query operations are supported by this cursor. An error is
+ returned if a modification is attempted using the cursor. The
+ default is false for all cursor types except for log and metadata
+ cursors''',
+ type='boolean'),
Config('skip_sort_check', 'false', r'''
skip the check of the sort order of each bulk-loaded key''',
type='boolean', undoc=True),
diff --git a/lang/java/java_doc.i b/lang/java/java_doc.i
index a6973e7fa54..07910687cf5 100644
--- a/lang/java/java_doc.i
+++ b/lang/java/java_doc.i
@@ -15,9 +15,6 @@ COPYDOC(__wt_cursor, WT_CURSOR, update)
COPYDOC(__wt_cursor, WT_CURSOR, remove)
COPYDOC(__wt_cursor, WT_CURSOR, reconfigure)
COPYDOC(__wt_cursor, WT_CURSOR, close)
-COPYDOC(__wt_cursor, WT_CURSOR, insert_orig)
-COPYDOC(__wt_cursor, WT_CURSOR, update_orig)
-COPYDOC(__wt_cursor, WT_CURSOR, remove_orig)
COPYDOC(__wt_async_op, WT_ASYNC_OP, get_key)
COPYDOC(__wt_async_op, WT_ASYNC_OP, get_value)
COPYDOC(__wt_async_op, WT_ASYNC_OP, set_key)
diff --git a/src/config/config_def.c b/src/config/config_def.c
index bf806ea6101..ec44e8839b0 100644
--- a/src/config/config_def.c
+++ b/src/config/config_def.c
@@ -113,7 +113,6 @@ static const WT_CONFIG_CHECK confchk_connection_reconfigure[] = {
static const WT_CONFIG_CHECK confchk_cursor_reconfigure[] = {
{ "append", "boolean", NULL, NULL },
{ "overwrite", "boolean", NULL, NULL },
- { "readonly", "boolean", NULL, NULL },
{ NULL, NULL, NULL, NULL }
};
@@ -569,7 +568,7 @@ static const WT_CONFIG_ENTRY config_entries[] = {
NULL
},
{ "cursor.reconfigure",
- "append=0,overwrite=,readonly=0",
+ "append=0,overwrite=",
confchk_cursor_reconfigure
},
{ "file.meta",
diff --git a/src/cursor/cur_metadata.c b/src/cursor/cur_metadata.c
index ae92a6ee371..562ac51d8ea 100644
--- a/src/cursor/cur_metadata.c
+++ b/src/cursor/cur_metadata.c
@@ -443,9 +443,9 @@ __wt_curmetadata_open(WT_SESSION_IMPL *session,
*/
WT_ERR(__wt_config_gets_def(session, cfg, "readonly", 1, &cval));
if (cval.val != 0) {
- cursor->insert = cursor->insert_orig = __wt_cursor_notsup;
- cursor->update = cursor->update_orig = __wt_cursor_notsup;
- cursor->remove = cursor->remove_orig = __wt_cursor_notsup;
+ cursor->insert = __wt_cursor_notsup;
+ cursor->update = __wt_cursor_notsup;
+ cursor->remove = __wt_cursor_notsup;
}
if (0) {
diff --git a/src/cursor/cur_std.c b/src/cursor/cur_std.c
index 176e9d9efdf..7d6876361ac 100644
--- a/src/cursor/cur_std.c
+++ b/src/cursor/cur_std.c
@@ -522,31 +522,6 @@ __wt_cursor_reconfigure(WT_CURSOR *cursor, const char *config)
} else
WT_RET_NOTFOUND_OK(ret);
- /*
- * readonly
- */
- if ((ret = __wt_config_getones(
- session, config, "readonly", &cval)) == 0) {
- if (cval.val == 0) {
- /*
- * Fail if the user is turning readonly off and the
- * cursor never supported writing in the first place.
- */
- if (cursor->insert_orig ==
- (int (*)(WT_CURSOR *))__wt_cursor_set_notsup)
- WT_RET_MSG(session, EINVAL,
- "cursor cannot be used for data update");
- cursor->insert = cursor->insert_orig;
- cursor->remove = cursor->remove_orig;
- cursor->update = cursor->update_orig;
- } else {
- cursor->insert = __wt_cursor_notsup;
- cursor->remove = __wt_cursor_notsup;
- cursor->update = __wt_cursor_notsup;
- }
- } else
- WT_RET_NOTFOUND_OK(ret);
-
return (0);
}
@@ -625,9 +600,9 @@ __wt_cursor_init(WT_CURSOR *cursor,
*/
WT_RET(__wt_config_gets_def(session, cfg, "checkpoint", 0, &cval));
if (cval.len != 0) {
- cursor->insert = cursor->insert_orig = __wt_cursor_notsup;
- cursor->update = cursor->update_orig = __wt_cursor_notsup;
- cursor->remove = cursor->remove_orig = __wt_cursor_notsup;
+ cursor->insert = __wt_cursor_notsup;
+ cursor->update = __wt_cursor_notsup;
+ cursor->remove = __wt_cursor_notsup;
} else {
WT_RET(
__wt_config_gets_def(session, cfg, "readonly", 0, &cval));
diff --git a/src/include/cursor.h b/src/include/cursor.h
index 0a563b879c9..eceeb9216e7 100644
--- a/src/include/cursor.h
+++ b/src/include/cursor.h
@@ -54,9 +54,6 @@
{ NULL, 0, 0, NULL, 0 }, /* WT_ITEM value */ \
0, /* int saved_err */ \
NULL, /* internal_uri */ \
- insert, /* original insert */ \
- update, /* original update */ \
- remove, /* original remove */ \
0 /* uint32_t flags */ \
}
diff --git a/src/include/wiredtiger.in b/src/include/wiredtiger.in
index f582186f54c..0db347c1413 100644
--- a/src/include/wiredtiger.in
+++ b/src/include/wiredtiger.in
@@ -536,9 +536,6 @@ struct __wt_cursor {
*/
const char *internal_uri;
/* Saved modification methods. */
- int __F(insert_orig)(WT_CURSOR *cursor);
- int __F(update_orig)(WT_CURSOR *cursor);
- int __F(remove_orig)(WT_CURSOR *cursor);
#define WT_CURSTD_APPEND 0x0001
#define WT_CURSTD_BULK 0x0002
diff --git a/test/suite/test_cursor06.py b/test/suite/test_cursor06.py
index c713957f624..e5f500052a9 100644
--- a/test/suite/test_cursor06.py
+++ b/test/suite/test_cursor06.py
@@ -1,5 +1,6 @@
#!/usr/bin/env python
#
+# Public Domain 2014-2015 MongoDB, Inc.
# Public Domain 2008-2014 WiredTiger, Inc.
#
# This is free and unencumbered software released into the public domain.