* [tarantool-patches] [PATCH v2 1/1] box: option to start tarantool with no format checks. @ 2018-08-14 11:50 imeevma 2018-08-16 21:08 ` [tarantool-patches] " Vladislav Shpilevoy 0 siblings, 1 reply; 4+ messages in thread From: imeevma @ 2018-08-14 11:50 UTC (permalink / raw) To: tarantool-patches It is a common case that an instance is running on a version 1.6.*, then is upgraded to 1.9 with box.schema.upgrade(). But some of users has malformed space formats, and some of them got and ignored errors on box.schema.upgrade(). Such half-upgraded data can not be used to start a new version due to format violations, and can not be rolled back because some of new system spaces managed to be created. And we can not repair raw xlogs and snapshots because we have no such tools and they are zipped. So it would be useful to have a special box.cfg option ignore_space_formats. It would allow to start an instance on the spaces with malformed formats, fix them, create a snapshot and then start with the formats turned on. Closes #3605 @TarantoolBot document Title: box.cfg option 'ignore_space_formats' The option allows to turn off space formats validation before the instance is started. Useful to fix malformed formats after an upgrade from version < 1.7.5 to >= 1.7.5. --- Branch: https://github.com/tarantool/tarantool/tree/imeevma/gh-3605-ignore-space-formats-option Issue: https://github.com/tarantool/tarantool/issues/3605 src/box/alter.cc | 14 ++++++- src/box/box.h | 1 + src/box/lua/load_cfg.lua | 2 + src/main.cc | 1 + test/app-tap/init_script.result | 71 ++++++++++++++++++------------------ test/box-tap/ignore_formats.test.lua | 20 ++++++++++ test/box/admin.result | 2 + test/box/cfg.result | 4 ++ 8 files changed, 79 insertions(+), 36 deletions(-) create mode 100755 test/box-tap/ignore_formats.test.lua diff --git a/src/box/alter.cc b/src/box/alter.cc index ec3b91b..b379dad 100644 --- a/src/box/alter.cc +++ b/src/box/alter.cc @@ -54,6 +54,18 @@ #include "sequence.h" /** + * A flag to ignore space formats and do not validate tuples by + * them. + */ +static bool ignore_space_formats = false; + +void +box_set_ignore_space_formats(bool value) +{ + ignore_space_formats = value; +} + +/** * chap-sha1 of empty string, i.e. * base64_encode(sha1(sha1(""), 0) */ @@ -533,7 +545,7 @@ space_def_new_from_tuple(struct tuple *tuple, uint32_t errcode, const char *space_opts; struct field_def *fields; uint32_t field_count; - if (dd_version_id >= version_id(1, 7, 6)) { + if (dd_version_id >= version_id(1, 7, 6) && !ignore_space_formats) { /* Check space opts. */ space_opts = tuple_field_with_type_xc(tuple, BOX_SPACE_FIELD_OPTS, diff --git a/src/box/box.h b/src/box/box.h index 9dfb3fd..d4043db 100644 --- a/src/box/box.h +++ b/src/box/box.h @@ -176,6 +176,7 @@ void box_set_vinyl_timeout(void); void box_set_replication_timeout(void); void box_set_replication_connect_timeout(void); void box_set_replication_connect_quorum(void); +void box_set_ignore_space_formats(bool value); extern "C" { #endif /* defined(__cplusplus) */ diff --git a/src/box/lua/load_cfg.lua b/src/box/lua/load_cfg.lua index 2a7142d..6682d49 100644 --- a/src/box/lua/load_cfg.lua +++ b/src/box/lua/load_cfg.lua @@ -66,6 +66,7 @@ local default_cfg = { username = nil, coredump = false, read_only = false, + ignore_space_formats= false, hot_standby = false, checkpoint_interval = 3600, checkpoint_count = 2, @@ -124,6 +125,7 @@ local template_cfg = { checkpoint_interval = 'number', checkpoint_count = 'number', read_only = 'boolean', + ignore_space_formats= 'boolean', hot_standby = 'boolean', worker_pool_threads = 'number', replication_timeout = 'number', diff --git a/src/main.cc b/src/main.cc index 1682bae..30cc78d 100644 --- a/src/main.cc +++ b/src/main.cc @@ -521,6 +521,7 @@ load_cfg() title_set_custom(cfg_gets("custom_proc_title")); title_update(); + box_set_ignore_space_formats(cfg_geti("ignore_space_formats") != 0); box_cfg(); } diff --git a/test/app-tap/init_script.result b/test/app-tap/init_script.result index eea9f5b..f8b8994 100644 --- a/test/app-tap/init_script.result +++ b/test/app-tap/init_script.result @@ -9,41 +9,42 @@ box.cfg 4 coredump:false 5 force_recovery:false 6 hot_standby:false -7 listen:port -8 log:tarantool.log -9 log_format:plain -10 log_level:5 -11 log_nonblock:true -12 memtx_dir:. -13 memtx_max_tuple_size:1048576 -14 memtx_memory:107374182 -15 memtx_min_tuple_size:16 -16 pid_file:box.pid -17 read_only:false -18 readahead:16320 -19 replication_connect_timeout:30 -20 replication_sync_lag:10 -21 replication_timeout:1 -22 rows_per_wal:500000 -23 slab_alloc_factor:1.05 -24 too_long_threshold:0.5 -25 vinyl_bloom_fpr:0.05 -26 vinyl_cache:134217728 -27 vinyl_dir:. -28 vinyl_max_tuple_size:1048576 -29 vinyl_memory:134217728 -30 vinyl_page_size:8192 -31 vinyl_range_size:1073741824 -32 vinyl_read_threads:1 -33 vinyl_run_count_per_level:2 -34 vinyl_run_size_ratio:3.5 -35 vinyl_timeout:60 -36 vinyl_write_threads:2 -37 wal_dir:. -38 wal_dir_rescan_delay:2 -39 wal_max_size:268435456 -40 wal_mode:write -41 worker_pool_threads:4 +7 ignore_space_formats:false +8 listen:port +9 log:tarantool.log +10 log_format:plain +11 log_level:5 +12 log_nonblock:true +13 memtx_dir:. +14 memtx_max_tuple_size:1048576 +15 memtx_memory:107374182 +16 memtx_min_tuple_size:16 +17 pid_file:box.pid +18 read_only:false +19 readahead:16320 +20 replication_connect_timeout:30 +21 replication_sync_lag:10 +22 replication_timeout:1 +23 rows_per_wal:500000 +24 slab_alloc_factor:1.05 +25 too_long_threshold:0.5 +26 vinyl_bloom_fpr:0.05 +27 vinyl_cache:134217728 +28 vinyl_dir:. +29 vinyl_max_tuple_size:1048576 +30 vinyl_memory:134217728 +31 vinyl_page_size:8192 +32 vinyl_range_size:1073741824 +33 vinyl_read_threads:1 +34 vinyl_run_count_per_level:2 +35 vinyl_run_size_ratio:3.5 +36 vinyl_timeout:60 +37 vinyl_write_threads:2 +38 wal_dir:. +39 wal_dir_rescan_delay:2 +40 wal_max_size:268435456 +41 wal_mode:write +42 worker_pool_threads:4 -- -- Test insert from detached fiber -- diff --git a/test/box-tap/ignore_formats.test.lua b/test/box-tap/ignore_formats.test.lua new file mode 100755 index 0000000..feba080 --- /dev/null +++ b/test/box-tap/ignore_formats.test.lua @@ -0,0 +1,20 @@ +#!/usr/bin/env tarantool +-- +-- gh-3605: allow to ignore space formats via box.cfg option. +-- +local tap = require('tap') +local test = tap.test("ignore_formats") +test:plan(1) + +box.cfg{ignore_space_formats=true} + +local format = {} +format[1] = {'field1', 'unsigned'} +format[2] = {'field2', 'unsigned'} + +local s = box.schema.create_space('test', {format = format}) +local pk = s:create_index('pk') +test:ok(pcall(s.replace, s, {1, 'string'}), 'can violate format') + +s:drop() +os.exit(test:check() == true and 0 or 1) diff --git a/test/box/admin.result b/test/box/admin.result index c3e318a..9200ed8 100644 --- a/test/box/admin.result +++ b/test/box/admin.result @@ -30,6 +30,8 @@ cfg_filter(box.cfg) - false - - hot_standby - false + - - ignore_space_formats + - false - - listen - <hidden> - - log diff --git a/test/box/cfg.result b/test/box/cfg.result index cda7aa0..fad4b87 100644 --- a/test/box/cfg.result +++ b/test/box/cfg.result @@ -26,6 +26,8 @@ cfg_filter(box.cfg) - false - - hot_standby - false + - - ignore_space_formats + - false - - listen - <hidden> - - log @@ -115,6 +117,8 @@ cfg_filter(box.cfg) - false - - hot_standby - false + - - ignore_space_formats + - false - - listen - <hidden> - - log -- 2.7.4 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [tarantool-patches] Re: [PATCH v2 1/1] box: option to start tarantool with no format checks. 2018-08-14 11:50 [tarantool-patches] [PATCH v2 1/1] box: option to start tarantool with no format checks imeevma @ 2018-08-16 21:08 ` Vladislav Shpilevoy 2018-08-17 8:11 ` Imeev Mergen 0 siblings, 1 reply; 4+ messages in thread From: Vladislav Shpilevoy @ 2018-08-16 21:08 UTC (permalink / raw) To: tarantool-patches, imeevma Thanks for the patch! I have pushed my review fix on a separate commit. Please, look at it, squash. Then the patch will be lgtm. On 14/08/2018 14:50, imeevma@tarantool.org wrote: > It is a common case that an instance is running on a version > 1.6.*, then is upgraded to 1.9 with box.schema.upgrade(). But > some of users has malformed space formats, and some of them got > and ignored errors on box.schema.upgrade(). Such half-upgraded > data can not be used to start a new version due to format > violations, and can not be rolled back because some of new system > spaces managed to be created. And we can not repair raw xlogs and > snapshots because we have no such tools and they are zipped. > > So it would be useful to have a special box.cfg option > ignore_space_formats. It would allow to start an instance on > the spaces with malformed formats, fix them, create a snapshot > and then start with the formats turned on. > > Closes #3605 > > @TarantoolBot document > Title: box.cfg option 'ignore_space_formats' > The option allows to turn off space formats validation before > the instance is started. Useful to fix malformed formats after > an upgrade from version < 1.7.5 to >= 1.7.5. > --- > Branch: https://github.com/tarantool/tarantool/tree/imeevma/gh-3605-ignore-space-formats-option > Issue: https://github.com/tarantool/tarantool/issues/3605 > ^ permalink raw reply [flat|nested] 4+ messages in thread
* [tarantool-patches] Re: [PATCH v2 1/1] box: option to start tarantool with no format checks. 2018-08-16 21:08 ` [tarantool-patches] " Vladislav Shpilevoy @ 2018-08-17 8:11 ` Imeev Mergen 2018-08-17 8:32 ` Vladislav Shpilevoy 0 siblings, 1 reply; 4+ messages in thread From: Imeev Mergen @ 2018-08-17 8:11 UTC (permalink / raw) To: Vladislav Shpilevoy, tarantool-patches On 08/17/2018 12:08 AM, Vladislav Shpilevoy wrote: > Thanks for the patch! I have pushed my review fix > on a separate commit. Please, look at it, squash. > Then the patch will be lgtm. Thank you for review! I squashed and rebased. Also, I renamed created in test space to 't0' because some conflicts emerged after rebase. > > On 14/08/2018 14:50, imeevma@tarantool.org wrote: >> It is a common case that an instance is running on a version >> 1.6.*, then is upgraded to 1.9 with box.schema.upgrade(). But >> some of users has malformed space formats, and some of them got >> and ignored errors on box.schema.upgrade(). Such half-upgraded >> data can not be used to start a new version due to format >> violations, and can not be rolled back because some of new system >> spaces managed to be created. And we can not repair raw xlogs and >> snapshots because we have no such tools and they are zipped. >> >> So it would be useful to have a special box.cfg option >> ignore_space_formats. It would allow to start an instance on >> the spaces with malformed formats, fix them, create a snapshot >> and then start with the formats turned on. >> >> Closes #3605 >> >> @TarantoolBot document >> Title: box.cfg option 'ignore_space_formats' >> The option allows to turn off space formats validation before >> the instance is started. Useful to fix malformed formats after >> an upgrade from version < 1.7.5 to >= 1.7.5. >> --- >> Branch: >> https://github.com/tarantool/tarantool/tree/imeevma/gh-3605-ignore-space-formats-option >> Issue: https://github.com/tarantool/tarantool/issues/3605 >> commit 2124ae8057df48ec19161e9fa38bc70e8c09aa80 Author: Mergen Imeev <imeevma@gmail.com> Date: Mon Aug 13 18:55:46 2018 +0300 box: option to start tarantool with no format checks. It is a common case that an instance is running on a version 1.6.*, then is upgraded to 1.9 with box.schema.upgrade(). But some of users has malformed space formats, and some of them got and ignored errors on box.schema.upgrade(). Such half-upgraded data can not be used to start a new version due to format violations, and can not be rolled back because some of new system spaces managed to be created. And we can not repair raw xlogs and snapshots because we have no such tools and they are zipped. So it would be useful to have a special box.cfg option ignore_space_formats. It would allow to start an instance on the spaces with malformed formats, fix them, create a snapshot and then start with the formats turned on. Closes #3605 @TarantoolBot document Title: box.cfg option 'ignore_space_formats' The option allows to turn off space formats validation before the instance is started. Useful to fix malformed formats after an upgrade from version < 1.7.5 to >= 1.7.5. diff --git a/src/box/alter.cc b/src/box/alter.cc index ec3b91b..b379dad 100644 --- a/src/box/alter.cc +++ b/src/box/alter.cc @@ -54,6 +54,18 @@ #include "sequence.h" /** + * A flag to ignore space formats and do not validate tuples by + * them. + */ +static bool ignore_space_formats = false; + +void +box_set_ignore_space_formats(bool value) +{ + ignore_space_formats = value; +} + +/** * chap-sha1 of empty string, i.e. * base64_encode(sha1(sha1(""), 0) */ @@ -533,7 +545,7 @@ space_def_new_from_tuple(struct tuple *tuple, uint32_t errcode, const char *space_opts; struct field_def *fields; uint32_t field_count; - if (dd_version_id >= version_id(1, 7, 6)) { + if (dd_version_id >= version_id(1, 7, 6) && !ignore_space_formats) { /* Check space opts. */ space_opts = tuple_field_with_type_xc(tuple, BOX_SPACE_FIELD_OPTS, diff --git a/src/box/box.h b/src/box/box.h index 9dfb3fd..d4043db 100644 --- a/src/box/box.h +++ b/src/box/box.h @@ -176,6 +176,7 @@ void box_set_vinyl_timeout(void); void box_set_replication_timeout(void); void box_set_replication_connect_timeout(void); void box_set_replication_connect_quorum(void); +void box_set_ignore_space_formats(bool value); extern "C" { #endif /* defined(__cplusplus) */ diff --git a/src/box/lua/load_cfg.lua b/src/box/lua/load_cfg.lua index 2a7142d..6682d49 100644 --- a/src/box/lua/load_cfg.lua +++ b/src/box/lua/load_cfg.lua @@ -66,6 +66,7 @@ local default_cfg = { username = nil, coredump = false, read_only = false, + ignore_space_formats= false, hot_standby = false, checkpoint_interval = 3600, checkpoint_count = 2, @@ -124,6 +125,7 @@ local template_cfg = { checkpoint_interval = 'number', checkpoint_count = 'number', read_only = 'boolean', + ignore_space_formats= 'boolean', hot_standby = 'boolean', worker_pool_threads = 'number', replication_timeout = 'number', diff --git a/src/main.cc b/src/main.cc index 1682bae..30cc78d 100644 --- a/src/main.cc +++ b/src/main.cc @@ -521,6 +521,7 @@ load_cfg() title_set_custom(cfg_gets("custom_proc_title")); title_update(); + box_set_ignore_space_formats(cfg_geti("ignore_space_formats") != 0); box_cfg(); } diff --git a/test/app-tap/init_script.result b/test/app-tap/init_script.result index eea9f5b..f8b8994 100644 --- a/test/app-tap/init_script.result +++ b/test/app-tap/init_script.result @@ -9,41 +9,42 @@ box.cfg 4 coredump:false 5 force_recovery:false 6 hot_standby:false -7 listen:port -8 log:tarantool.log -9 log_format:plain -10 log_level:5 -11 log_nonblock:true -12 memtx_dir:. -13 memtx_max_tuple_size:1048576 -14 memtx_memory:107374182 -15 memtx_min_tuple_size:16 -16 pid_file:box.pid -17 read_only:false -18 readahead:16320 -19 replication_connect_timeout:30 -20 replication_sync_lag:10 -21 replication_timeout:1 -22 rows_per_wal:500000 -23 slab_alloc_factor:1.05 -24 too_long_threshold:0.5 -25 vinyl_bloom_fpr:0.05 -26 vinyl_cache:134217728 -27 vinyl_dir:. -28 vinyl_max_tuple_size:1048576 -29 vinyl_memory:134217728 -30 vinyl_page_size:8192 -31 vinyl_range_size:1073741824 -32 vinyl_read_threads:1 -33 vinyl_run_count_per_level:2 -34 vinyl_run_size_ratio:3.5 -35 vinyl_timeout:60 -36 vinyl_write_threads:2 -37 wal_dir:. -38 wal_dir_rescan_delay:2 -39 wal_max_size:268435456 -40 wal_mode:write -41 worker_pool_threads:4 +7 ignore_space_formats:false +8 listen:port +9 log:tarantool.log +10 log_format:plain +11 log_level:5 +12 log_nonblock:true +13 memtx_dir:. +14 memtx_max_tuple_size:1048576 +15 memtx_memory:107374182 +16 memtx_min_tuple_size:16 +17 pid_file:box.pid +18 read_only:false +19 readahead:16320 +20 replication_connect_timeout:30 +21 replication_sync_lag:10 +22 replication_timeout:1 +23 rows_per_wal:500000 +24 slab_alloc_factor:1.05 +25 too_long_threshold:0.5 +26 vinyl_bloom_fpr:0.05 +27 vinyl_cache:134217728 +28 vinyl_dir:. +29 vinyl_max_tuple_size:1048576 +30 vinyl_memory:134217728 +31 vinyl_page_size:8192 +32 vinyl_range_size:1073741824 +33 vinyl_read_threads:1 +34 vinyl_run_count_per_level:2 +35 vinyl_run_size_ratio:3.5 +36 vinyl_timeout:60 +37 vinyl_write_threads:2 +38 wal_dir:. +39 wal_dir_rescan_delay:2 +40 wal_max_size:268435456 +41 wal_mode:write +42 worker_pool_threads:4 -- -- Test insert from detached fiber -- diff --git a/test/box-tap/ignore_formats.test.lua b/test/box-tap/ignore_formats.test.lua new file mode 100755 index 0000000..14211d3 --- /dev/null +++ b/test/box-tap/ignore_formats.test.lua @@ -0,0 +1,24 @@ +#!/usr/bin/env tarantool +-- +-- gh-3605: allow to ignore space formats via box.cfg option. +-- +local tap = require('tap') +local test = tap.test("ignore_formats") +test:plan(3) + +box.cfg{ignore_space_formats=true} + +local format = {} +format[1] = {'field1', 'unsigned'} +format[2] = {'field2', 'unsigned'} + +local s = box.schema.create_space('t0', {format = format}) +local pk = s:create_index('pk') +test:ok(pcall(s.replace, s, {1, 'string'}), 'can violate format') +-- Is not a dynamic option. +local ok, err = pcall(box.cfg, {ignore_space_formats = false}) +test:ok(not ok, "ignore_space_formats is not a dynamic option") +test:ok(err:match("Can't set option"), "error message") + +s:drop() +os.exit(test:check() == true and 0 or 1) diff --git a/test/box/admin.result b/test/box/admin.result index c3e318a..9200ed8 100644 --- a/test/box/admin.result +++ b/test/box/admin.result @@ -30,6 +30,8 @@ cfg_filter(box.cfg) - false - - hot_standby - false + - - ignore_space_formats + - false - - listen - <hidden> - - log diff --git a/test/box/cfg.result b/test/box/cfg.result index cda7aa0..fad4b87 100644 --- a/test/box/cfg.result +++ b/test/box/cfg.result @@ -26,6 +26,8 @@ cfg_filter(box.cfg) - false - - hot_standby - false + - - ignore_space_formats + - false - - listen - <hidden> - - log @@ -115,6 +117,8 @@ cfg_filter(box.cfg) - false - - hot_standby - false + - - ignore_space_formats + - false - - listen - <hidden> - - log ^ permalink raw reply [flat|nested] 4+ messages in thread
* [tarantool-patches] Re: [PATCH v2 1/1] box: option to start tarantool with no format checks. 2018-08-17 8:11 ` Imeev Mergen @ 2018-08-17 8:32 ` Vladislav Shpilevoy 0 siblings, 0 replies; 4+ messages in thread From: Vladislav Shpilevoy @ 2018-08-17 8:32 UTC (permalink / raw) To: Imeev Mergen, tarantool-patches; +Cc: Kirill Yukhin LGTM. On 17/08/2018 11:11, Imeev Mergen wrote: > > > On 08/17/2018 12:08 AM, Vladislav Shpilevoy wrote: >> Thanks for the patch! I have pushed my review fix >> on a separate commit. Please, look at it, squash. >> Then the patch will be lgtm. > Thank you for review! I squashed and rebased. Also, I renamed > created in test space to 't0' because some conflicts emerged > after rebase. >> >> On 14/08/2018 14:50, imeevma@tarantool.org wrote: >>> It is a common case that an instance is running on a version >>> 1.6.*, then is upgraded to 1.9 with box.schema.upgrade(). But >>> some of users has malformed space formats, and some of them got >>> and ignored errors on box.schema.upgrade(). Such half-upgraded >>> data can not be used to start a new version due to format >>> violations, and can not be rolled back because some of new system >>> spaces managed to be created. And we can not repair raw xlogs and >>> snapshots because we have no such tools and they are zipped. >>> >>> So it would be useful to have a special box.cfg option >>> ignore_space_formats. It would allow to start an instance on >>> the spaces with malformed formats, fix them, create a snapshot >>> and then start with the formats turned on. >>> >>> Closes #3605 >>> >>> @TarantoolBot document >>> Title: box.cfg option 'ignore_space_formats' >>> The option allows to turn off space formats validation before >>> the instance is started. Useful to fix malformed formats after >>> an upgrade from version < 1.7.5 to >= 1.7.5. >>> --- >>> Branch: https://github.com/tarantool/tarantool/tree/imeevma/gh-3605-ignore-space-formats-option >>> Issue: https://github.com/tarantool/tarantool/issues/3605 >>> > commit 2124ae8057df48ec19161e9fa38bc70e8c09aa80 > Author: Mergen Imeev <imeevma@gmail.com> > Date: Mon Aug 13 18:55:46 2018 +0300 > > box: option to start tarantool with no format checks. > > It is a common case that an instance is running on a version > 1.6.*, then is upgraded to 1.9 with box.schema.upgrade(). But > some of users has malformed space formats, and some of them got > and ignored errors on box.schema.upgrade(). Such half-upgraded > data can not be used to start a new version due to format > violations, and can not be rolled back because some of new system > spaces managed to be created. And we can not repair raw xlogs and > snapshots because we have no such tools and they are zipped. > > So it would be useful to have a special box.cfg option > ignore_space_formats. It would allow to start an instance on > the spaces with malformed formats, fix them, create a snapshot > and then start with the formats turned on. > > Closes #3605 > > @TarantoolBot document > Title: box.cfg option 'ignore_space_formats' > The option allows to turn off space formats validation before > the instance is started. Useful to fix malformed formats after > an upgrade from version < 1.7.5 to >= 1.7.5. > > diff --git a/src/box/alter.cc b/src/box/alter.cc > index ec3b91b..b379dad 100644 > --- a/src/box/alter.cc > +++ b/src/box/alter.cc > @@ -54,6 +54,18 @@ > #include "sequence.h" > > /** > + * A flag to ignore space formats and do not validate tuples by > + * them. > + */ > +static bool ignore_space_formats = false; > + > +void > +box_set_ignore_space_formats(bool value) > +{ > + ignore_space_formats = value; > +} > + > +/** > * chap-sha1 of empty string, i.e. > * base64_encode(sha1(sha1(""), 0) > */ > @@ -533,7 +545,7 @@ space_def_new_from_tuple(struct tuple *tuple, uint32_t errcode, > const char *space_opts; > struct field_def *fields; > uint32_t field_count; > - if (dd_version_id >= version_id(1, 7, 6)) { > + if (dd_version_id >= version_id(1, 7, 6) && !ignore_space_formats) { > /* Check space opts. */ > space_opts = > tuple_field_with_type_xc(tuple, BOX_SPACE_FIELD_OPTS, > diff --git a/src/box/box.h b/src/box/box.h > index 9dfb3fd..d4043db 100644 > --- a/src/box/box.h > +++ b/src/box/box.h > @@ -176,6 +176,7 @@ void box_set_vinyl_timeout(void); > void box_set_replication_timeout(void); > void box_set_replication_connect_timeout(void); > void box_set_replication_connect_quorum(void); > +void box_set_ignore_space_formats(bool value); > > extern "C" { > #endif /* defined(__cplusplus) */ > diff --git a/src/box/lua/load_cfg.lua b/src/box/lua/load_cfg.lua > index 2a7142d..6682d49 100644 > --- a/src/box/lua/load_cfg.lua > +++ b/src/box/lua/load_cfg.lua > @@ -66,6 +66,7 @@ local default_cfg = { > username = nil, > coredump = false, > read_only = false, > + ignore_space_formats= false, > hot_standby = false, > checkpoint_interval = 3600, > checkpoint_count = 2, > @@ -124,6 +125,7 @@ local template_cfg = { > checkpoint_interval = 'number', > checkpoint_count = 'number', > read_only = 'boolean', > + ignore_space_formats= 'boolean', > hot_standby = 'boolean', > worker_pool_threads = 'number', > replication_timeout = 'number', > diff --git a/src/main.cc b/src/main.cc > index 1682bae..30cc78d 100644 > --- a/src/main.cc > +++ b/src/main.cc > @@ -521,6 +521,7 @@ load_cfg() > > title_set_custom(cfg_gets("custom_proc_title")); > title_update(); > + box_set_ignore_space_formats(cfg_geti("ignore_space_formats") != 0); > box_cfg(); > } > > diff --git a/test/app-tap/init_script.result b/test/app-tap/init_script.result > index eea9f5b..f8b8994 100644 > --- a/test/app-tap/init_script.result > +++ b/test/app-tap/init_script.result > @@ -9,41 +9,42 @@ box.cfg > 4 coredump:false > 5 force_recovery:false > 6 hot_standby:false > -7 listen:port > -8 log:tarantool.log > -9 log_format:plain > -10 log_level:5 > -11 log_nonblock:true > -12 memtx_dir:. > -13 memtx_max_tuple_size:1048576 > -14 memtx_memory:107374182 > -15 memtx_min_tuple_size:16 > -16 pid_file:box.pid > -17 read_only:false > -18 readahead:16320 > -19 replication_connect_timeout:30 > -20 replication_sync_lag:10 > -21 replication_timeout:1 > -22 rows_per_wal:500000 > -23 slab_alloc_factor:1.05 > -24 too_long_threshold:0.5 > -25 vinyl_bloom_fpr:0.05 > -26 vinyl_cache:134217728 > -27 vinyl_dir:. > -28 vinyl_max_tuple_size:1048576 > -29 vinyl_memory:134217728 > -30 vinyl_page_size:8192 > -31 vinyl_range_size:1073741824 > -32 vinyl_read_threads:1 > -33 vinyl_run_count_per_level:2 > -34 vinyl_run_size_ratio:3.5 > -35 vinyl_timeout:60 > -36 vinyl_write_threads:2 > -37 wal_dir:. > -38 wal_dir_rescan_delay:2 > -39 wal_max_size:268435456 > -40 wal_mode:write > -41 worker_pool_threads:4 > +7 ignore_space_formats:false > +8 listen:port > +9 log:tarantool.log > +10 log_format:plain > +11 log_level:5 > +12 log_nonblock:true > +13 memtx_dir:. > +14 memtx_max_tuple_size:1048576 > +15 memtx_memory:107374182 > +16 memtx_min_tuple_size:16 > +17 pid_file:box.pid > +18 read_only:false > +19 readahead:16320 > +20 replication_connect_timeout:30 > +21 replication_sync_lag:10 > +22 replication_timeout:1 > +23 rows_per_wal:500000 > +24 slab_alloc_factor:1.05 > +25 too_long_threshold:0.5 > +26 vinyl_bloom_fpr:0.05 > +27 vinyl_cache:134217728 > +28 vinyl_dir:. > +29 vinyl_max_tuple_size:1048576 > +30 vinyl_memory:134217728 > +31 vinyl_page_size:8192 > +32 vinyl_range_size:1073741824 > +33 vinyl_read_threads:1 > +34 vinyl_run_count_per_level:2 > +35 vinyl_run_size_ratio:3.5 > +36 vinyl_timeout:60 > +37 vinyl_write_threads:2 > +38 wal_dir:. > +39 wal_dir_rescan_delay:2 > +40 wal_max_size:268435456 > +41 wal_mode:write > +42 worker_pool_threads:4 > -- > -- Test insert from detached fiber > -- > diff --git a/test/box-tap/ignore_formats.test.lua b/test/box-tap/ignore_formats.test.lua > new file mode 100755 > index 0000000..14211d3 > --- /dev/null > +++ b/test/box-tap/ignore_formats.test.lua > @@ -0,0 +1,24 @@ > +#!/usr/bin/env tarantool > +-- > +-- gh-3605: allow to ignore space formats via box.cfg option. > +-- > +local tap = require('tap') > +local test = tap.test("ignore_formats") > +test:plan(3) > + > +box.cfg{ignore_space_formats=true} > + > +local format = {} > +format[1] = {'field1', 'unsigned'} > +format[2] = {'field2', 'unsigned'} > + > +local s = box.schema.create_space('t0', {format = format}) > +local pk = s:create_index('pk') > +test:ok(pcall(s.replace, s, {1, 'string'}), 'can violate format') > +-- Is not a dynamic option. > +local ok, err = pcall(box.cfg, {ignore_space_formats = false}) > +test:ok(not ok, "ignore_space_formats is not a dynamic option") > +test:ok(err:match("Can't set option"), "error message") > + > +s:drop() > +os.exit(test:check() == true and 0 or 1) > diff --git a/test/box/admin.result b/test/box/admin.result > index c3e318a..9200ed8 100644 > --- a/test/box/admin.result > +++ b/test/box/admin.result > @@ -30,6 +30,8 @@ cfg_filter(box.cfg) > - false > - - hot_standby > - false > + - - ignore_space_formats > + - false > - - listen > - <hidden> > - - log > diff --git a/test/box/cfg.result b/test/box/cfg.result > index cda7aa0..fad4b87 100644 > --- a/test/box/cfg.result > +++ b/test/box/cfg.result > @@ -26,6 +26,8 @@ cfg_filter(box.cfg) > - false > - - hot_standby > - false > + - - ignore_space_formats > + - false > - - listen > - <hidden> > - - log > @@ -115,6 +117,8 @@ cfg_filter(box.cfg) > - false > - - hot_standby > - false > + - - ignore_space_formats > + - false > - - listen > - <hidden> > - - log > ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-08-17 8:32 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-08-14 11:50 [tarantool-patches] [PATCH v2 1/1] box: option to start tarantool with no format checks imeevma 2018-08-16 21:08 ` [tarantool-patches] " Vladislav Shpilevoy 2018-08-17 8:11 ` Imeev Mergen 2018-08-17 8:32 ` Vladislav Shpilevoy
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox