diff --git a/test/doc/playground_test.lua b/test/doc/playground_test.lua index 0fa8ad5a..9a3bf951 100644 --- a/test/doc/playground_test.lua +++ b/test/doc/playground_test.lua @@ -61,7 +61,7 @@ end local cases = { test_select_customers = { - request = "crud.select('customers', {{'<=', 'age', 35}}, {first = 10})", + request = "crud.select('customers', {{'<=', 'age', 35}}, {first = 10, mode = 'write'})", retval_1 = { metadata = { {name = 'id', type = 'unsigned'}, @@ -79,7 +79,7 @@ local cases = { } }, test_select_developers = { - request = "crud.select('developers', nil, {first = 6})", + request = "crud.select('developers', nil, {first = 6, mode = 'write'})", retval_1 = { metadata = { {name = 'id', type = 'unsigned'}, @@ -117,7 +117,7 @@ local cases = { test_error = { request = [[ do - local res, err = crud.select('non_existent', nil, {first = 10}) + local res, err = crud.select('non_existent', nil, {first = 10, mode = 'write'}) return res, err and err.err or nil end ]], diff --git a/test/entrypoint/srv_batch_operations/cartridge_init.lua b/test/entrypoint/srv_batch_operations/cartridge_init.lua index a5bb8d62..e5f9c03f 100755 --- a/test/entrypoint/srv_batch_operations/cartridge_init.lua +++ b/test/entrypoint/srv_batch_operations/cartridge_init.lua @@ -3,6 +3,7 @@ require('strict').on() _G.is_initialized = function() return false end +local fio = require('fio') local log = require('log') local errors = require('errors') local cartridge = require('cartridge') @@ -13,10 +14,13 @@ else package.path = package.path .. debug.sourcedir() .. "/?.lua;" end +local root = fio.dirname(fio.dirname(fio.dirname(debug.sourcedir()))) +package.path = package.path .. root .. "/?.lua;" + package.preload['customers-storage'] = function() return { role_name = 'customers-storage', - init = require('storage_init'), + init = require('storage').init, } end diff --git a/test/entrypoint/srv_batch_operations/storage.lua b/test/entrypoint/srv_batch_operations/storage.lua new file mode 100644 index 00000000..8bec46e2 --- /dev/null +++ b/test/entrypoint/srv_batch_operations/storage.lua @@ -0,0 +1,52 @@ +local helper = require('test.helper') + +return { + init = helper.wrap_schema_init(function() + local engine = os.getenv('ENGINE') or 'memtx' + local customers_space = box.schema.space.create('customers', { + format = { + {name = 'id', type = 'unsigned'}, + {name = 'bucket_id', type = 'unsigned'}, + {name = 'name', type = 'string'}, + {name = 'age', type = 'number'}, + }, + if_not_exists = true, + engine = engine, + }) + customers_space:create_index('id', { + parts = { {field = 'id'} }, + if_not_exists = true, + }) + customers_space:create_index('bucket_id', { + parts = { {field = 'bucket_id'} }, + unique = false, + if_not_exists = true, + }) + + local developers_space = box.schema.space.create('developers', { + format = { + {name = 'id', type = 'unsigned'}, + {name = 'bucket_id', type = 'unsigned'}, + {name = 'name', type = 'string'}, + {name = 'login', type = 'string'}, + }, + if_not_exists = true, + engine = engine, + }) + developers_space:create_index('id', { + parts = { {field = 'id'} }, + if_not_exists = true, + }) + developers_space:create_index('bucket_id', { + parts = { {field = 'bucket_id'} }, + unique = false, + if_not_exists = true, + }) + developers_space:create_index('login', { + parts = { {field = 'login'} }, + unique = true, + if_not_exists = true, + }) + end), + wait_until_ready = helper.wait_schema_init, +} diff --git a/test/entrypoint/srv_batch_operations/storage_init.lua b/test/entrypoint/srv_batch_operations/storage_init.lua deleted file mode 100644 index 8aaa6ef9..00000000 --- a/test/entrypoint/srv_batch_operations/storage_init.lua +++ /dev/null @@ -1,51 +0,0 @@ -return function() - if box.info.ro == true then - return - end - - local engine = os.getenv('ENGINE') or 'memtx' - local customers_space = box.schema.space.create('customers', { - format = { - {name = 'id', type = 'unsigned'}, - {name = 'bucket_id', type = 'unsigned'}, - {name = 'name', type = 'string'}, - {name = 'age', type = 'number'}, - }, - if_not_exists = true, - engine = engine, - }) - customers_space:create_index('id', { - parts = { {field = 'id'} }, - if_not_exists = true, - }) - customers_space:create_index('bucket_id', { - parts = { {field = 'bucket_id'} }, - unique = false, - if_not_exists = true, - }) - - local developers_space = box.schema.space.create('developers', { - format = { - {name = 'id', type = 'unsigned'}, - {name = 'bucket_id', type = 'unsigned'}, - {name = 'name', type = 'string'}, - {name = 'login', type = 'string'}, - }, - if_not_exists = true, - engine = engine, - }) - developers_space:create_index('id', { - parts = { {field = 'id'} }, - if_not_exists = true, - }) - developers_space:create_index('bucket_id', { - parts = { {field = 'bucket_id'} }, - unique = false, - if_not_exists = true, - }) - developers_space:create_index('login', { - parts = { {field = 'login'} }, - unique = true, - if_not_exists = true, - }) -end diff --git a/test/entrypoint/srv_ddl/cartridge_init.lua b/test/entrypoint/srv_ddl/cartridge_init.lua index df5d952c..daf8186e 100755 --- a/test/entrypoint/srv_ddl/cartridge_init.lua +++ b/test/entrypoint/srv_ddl/cartridge_init.lua @@ -3,6 +3,7 @@ require('strict').on() _G.is_initialized = function() return false end +local fio = require('fio') local log = require('log') local errors = require('errors') local cartridge = require('cartridge') @@ -13,12 +14,13 @@ else package.path = package.path .. debug.sourcedir() .. "/?.lua;" end +local root = fio.dirname(fio.dirname(fio.dirname(debug.sourcedir()))) +package.path = package.path .. root .. "/?.lua;" + package.preload['customers-storage'] = function() - -- set sharding func in dot.notation - -- in _G for sharding func tests return { role_name = 'customers-storage', - init = require('storage_init'), + init = require('storage').init, } end diff --git a/test/entrypoint/srv_ddl/router.lua b/test/entrypoint/srv_ddl/router.lua new file mode 100644 index 00000000..9c392135 --- /dev/null +++ b/test/entrypoint/srv_ddl/router.lua @@ -0,0 +1,13 @@ +return { + init = function() + local some_module = { + sharding_func = function(key) + if key ~= nil and key[1] ~= nil then + return key[1] % 10 + end + end + } + + rawset(_G, 'some_module', some_module) + end, +} diff --git a/test/entrypoint/srv_ddl/router_init.lua b/test/entrypoint/srv_ddl/router_init.lua deleted file mode 100644 index bc30930e..00000000 --- a/test/entrypoint/srv_ddl/router_init.lua +++ /dev/null @@ -1,11 +0,0 @@ -return function() - local some_module = { - sharding_func = - function(key) - if key ~= nil and key[1] ~= nil then - return key[1] % 10 - end - end - } - rawset(_G, 'some_module', some_module) -end diff --git a/test/entrypoint/srv_ddl/storage.lua b/test/entrypoint/srv_ddl/storage.lua new file mode 100644 index 00000000..c5b0e9d4 --- /dev/null +++ b/test/entrypoint/srv_ddl/storage.lua @@ -0,0 +1,197 @@ +local ddl = require('ddl') +local helper = require('test.helper') + +local some_module = { + sharding_func = + function(key) + if key ~= nil and key[1] ~= nil then + return key[1] % 10 + end + end +} +rawset(_G, 'some_module', some_module) + +return { + init = function() + local engine = os.getenv('ENGINE') or 'memtx' + local customers_schema = { + engine = engine, + is_local = true, + temporary = false, + format = { + {name = 'id', is_nullable = false, type = 'unsigned'}, + {name = 'bucket_id', is_nullable = false, type = 'unsigned'}, + {name = 'name', is_nullable = false, type = 'string'}, + {name = 'age', is_nullable = false, type = 'number'}, + }, + indexes = { + -- This table is intentionally blank. + }, + } + + local primary_index = { + name = 'id', + type = 'TREE', + unique = true, + parts = { + {path = 'id', is_nullable = false, type = 'unsigned'}, + {path = 'name', is_nullable = false, type = 'string'}, + }, + } + local primary_index_id = { + name = 'id', + type = 'TREE', + unique = true, + parts = { + {path = 'id', is_nullable = false, type = 'unsigned'}, + }, + } + local bucket_id_index = { + name = 'bucket_id', + type = 'TREE', + unique = false, + parts = { + {path = 'bucket_id', is_nullable = false, type = 'unsigned'}, + } + } + local name_index = { + name = 'name', + type = 'TREE', + unique = true, + parts = { + {path = 'name', is_nullable = false, type = 'string'}, + }, + } + local age_index = { + name = 'age', + type = 'TREE', + unique = false, + parts = { + {path = 'age', is_nullable = false, type = 'number'}, + }, + } + local secondary_index = { + name = 'secondary', + type = 'TREE', + unique = false, + parts = { + {path = 'id', is_nullable = false, type = 'unsigned'}, + {path = 'name', is_nullable = false, type = 'string'}, + }, + } + + local three_fields_index = { + name = 'three_fields', + type = 'TREE', + unique = false, + parts = { + {path = 'age', is_nullable = false, type = 'number'}, + {path = 'name', is_nullable = false, type = 'string'}, + {path = 'id', is_nullable = false, type = 'unsigned'}, + }, + } + + local customers_id_schema = table.deepcopy(customers_schema) + customers_id_schema.sharding_key = {'id'} + table.insert(customers_id_schema.indexes, primary_index_id) + table.insert(customers_id_schema.indexes, bucket_id_index) + table.insert(customers_id_schema.indexes, age_index) + + local customers_name_key_schema = table.deepcopy(customers_schema) + customers_name_key_schema.sharding_key = {'name'} + table.insert(customers_name_key_schema.indexes, primary_index) + table.insert(customers_name_key_schema.indexes, bucket_id_index) + + local customers_name_key_uniq_index_schema = table.deepcopy(customers_schema) + customers_name_key_uniq_index_schema.sharding_key = {'name'} + table.insert(customers_name_key_uniq_index_schema.indexes, primary_index) + table.insert(customers_name_key_uniq_index_schema.indexes, bucket_id_index) + table.insert(customers_name_key_uniq_index_schema.indexes, name_index) + + local customers_name_key_non_uniq_index_schema = table.deepcopy(customers_schema) + customers_name_key_non_uniq_index_schema.sharding_key = {'name'} + name_index.unique = false + table.insert(customers_name_key_non_uniq_index_schema.indexes, primary_index) + table.insert(customers_name_key_non_uniq_index_schema.indexes, bucket_id_index) + table.insert(customers_name_key_non_uniq_index_schema.indexes, name_index) + + local customers_secondary_idx_name_key_schema = table.deepcopy(customers_schema) + customers_secondary_idx_name_key_schema.sharding_key = {'name'} + table.insert(customers_secondary_idx_name_key_schema.indexes, primary_index_id) + table.insert(customers_secondary_idx_name_key_schema.indexes, secondary_index) + table.insert(customers_secondary_idx_name_key_schema.indexes, bucket_id_index) + + local customers_age_key_schema = table.deepcopy(customers_schema) + customers_age_key_schema.sharding_key = {'age'} + table.insert(customers_age_key_schema.indexes, primary_index) + table.insert(customers_age_key_schema.indexes, bucket_id_index) + + local customers_name_age_key_different_indexes_schema = table.deepcopy(customers_schema) + customers_name_age_key_different_indexes_schema.sharding_key = {'name', 'age'} + table.insert(customers_name_age_key_different_indexes_schema.indexes, primary_index) + table.insert(customers_name_age_key_different_indexes_schema.indexes, bucket_id_index) + table.insert(customers_name_age_key_different_indexes_schema.indexes, age_index) + + local customers_name_age_key_three_fields_index_schema = table.deepcopy(customers_schema) + customers_name_age_key_three_fields_index_schema.sharding_key = {'name', 'age'} + table.insert(customers_name_age_key_three_fields_index_schema.indexes, primary_index_id) + table.insert(customers_name_age_key_three_fields_index_schema.indexes, bucket_id_index) + table.insert(customers_name_age_key_three_fields_index_schema.indexes, three_fields_index) + + local customers_id_key_schema = table.deepcopy(customers_schema) + customers_id_key_schema.sharding_key = {'id'} + table.insert(customers_id_key_schema.indexes, primary_index) + table.insert(customers_id_key_schema.indexes, bucket_id_index) + table.insert(customers_id_key_schema.indexes, name_index) + + local customers_body_func_schema = table.deepcopy(customers_id_key_schema) + customers_body_func_schema.sharding_func = { body = 'function(key) return key[1] % 10 end' } + + local customers_G_func_schema = table.deepcopy(customers_id_key_schema) + customers_G_func_schema.sharding_func = 'some_module.sharding_func' + + local customers_empty_sharding_func_schema = table.deepcopy(customers_id_key_schema) + + local customers_vshard_mpcrc32_schema = table.deepcopy(customers_id_key_schema) + customers_vshard_mpcrc32_schema.sharding_func = 'vshard.router.bucket_id_mpcrc32' + + local customers_vshard_strcrc32_schema = table.deepcopy(customers_id_key_schema) + customers_vshard_strcrc32_schema.sharding_func = 'vshard.router.bucket_id_strcrc32' + + local schema = { + spaces = { + customers = customers_id_schema, + customers_name_key = customers_name_key_schema, + customers_name_key_uniq_index = customers_name_key_uniq_index_schema, + customers_name_key_non_uniq_index = customers_name_key_non_uniq_index_schema, + customers_secondary_idx_name_key = customers_secondary_idx_name_key_schema, + customers_age_key = customers_age_key_schema, + customers_name_age_key_different_indexes = customers_name_age_key_different_indexes_schema, + customers_name_age_key_three_fields_index = customers_name_age_key_three_fields_index_schema, + customers_G_func = customers_G_func_schema, + customers_body_func = customers_body_func_schema, + customers_empty_sharding_func = customers_empty_sharding_func_schema, + customers_vshard_mpcrc32 = customers_vshard_mpcrc32_schema, + customers_vshard_strcrc32 = customers_vshard_strcrc32_schema, + } + } + + rawset(_G, 'set_sharding_key', function(space_name, sharding_key_def) + local fieldno_sharding_key = 2 + box.space['_ddl_sharding_key']:update(space_name, {{'=', fieldno_sharding_key, sharding_key_def}}) + end) + rawset(_G, 'set_sharding_func', function(space_name, fieldno_sharding_func, sharding_func_def) + local record = {space_name, box.NULL, box.NULL} + record[fieldno_sharding_func] = sharding_func_def + box.space['_ddl_sharding_func']:replace(record) + end) + + helper.wrap_schema_init(function() + local ok, err = ddl.set_schema(schema) + if not ok then + error(err) + end + end)() + end, + wait_until_ready = helper.wait_schema_init, +} diff --git a/test/entrypoint/srv_ddl/storage_init.lua b/test/entrypoint/srv_ddl/storage_init.lua deleted file mode 100644 index 57ea212e..00000000 --- a/test/entrypoint/srv_ddl/storage_init.lua +++ /dev/null @@ -1,193 +0,0 @@ -local ddl = require('ddl') - -local some_module = { - sharding_func = - function(key) - if key ~= nil and key[1] ~= nil then - return key[1] % 10 - end - end -} -rawset(_G, 'some_module', some_module) - -return function() - local engine = os.getenv('ENGINE') or 'memtx' - local customers_schema = { - engine = engine, - is_local = true, - temporary = false, - format = { - {name = 'id', is_nullable = false, type = 'unsigned'}, - {name = 'bucket_id', is_nullable = false, type = 'unsigned'}, - {name = 'name', is_nullable = false, type = 'string'}, - {name = 'age', is_nullable = false, type = 'number'}, - }, - indexes = { - -- This table is intentionally blank. - }, - } - - local primary_index = { - name = 'id', - type = 'TREE', - unique = true, - parts = { - {path = 'id', is_nullable = false, type = 'unsigned'}, - {path = 'name', is_nullable = false, type = 'string'}, - }, - } - local primary_index_id = { - name = 'id', - type = 'TREE', - unique = true, - parts = { - {path = 'id', is_nullable = false, type = 'unsigned'}, - }, - } - local bucket_id_index = { - name = 'bucket_id', - type = 'TREE', - unique = false, - parts = { - {path = 'bucket_id', is_nullable = false, type = 'unsigned'}, - } - } - local name_index = { - name = 'name', - type = 'TREE', - unique = true, - parts = { - {path = 'name', is_nullable = false, type = 'string'}, - }, - } - local age_index = { - name = 'age', - type = 'TREE', - unique = false, - parts = { - {path = 'age', is_nullable = false, type = 'number'}, - }, - } - local secondary_index = { - name = 'secondary', - type = 'TREE', - unique = false, - parts = { - {path = 'id', is_nullable = false, type = 'unsigned'}, - {path = 'name', is_nullable = false, type = 'string'}, - }, - } - - local three_fields_index = { - name = 'three_fields', - type = 'TREE', - unique = false, - parts = { - {path = 'age', is_nullable = false, type = 'number'}, - {path = 'name', is_nullable = false, type = 'string'}, - {path = 'id', is_nullable = false, type = 'unsigned'}, - }, - } - - local customers_id_schema = table.deepcopy(customers_schema) - customers_id_schema.sharding_key = {'id'} - table.insert(customers_id_schema.indexes, primary_index_id) - table.insert(customers_id_schema.indexes, bucket_id_index) - table.insert(customers_id_schema.indexes, age_index) - - local customers_name_key_schema = table.deepcopy(customers_schema) - customers_name_key_schema.sharding_key = {'name'} - table.insert(customers_name_key_schema.indexes, primary_index) - table.insert(customers_name_key_schema.indexes, bucket_id_index) - - local customers_name_key_uniq_index_schema = table.deepcopy(customers_schema) - customers_name_key_uniq_index_schema.sharding_key = {'name'} - table.insert(customers_name_key_uniq_index_schema.indexes, primary_index) - table.insert(customers_name_key_uniq_index_schema.indexes, bucket_id_index) - table.insert(customers_name_key_uniq_index_schema.indexes, name_index) - - local customers_name_key_non_uniq_index_schema = table.deepcopy(customers_schema) - customers_name_key_non_uniq_index_schema.sharding_key = {'name'} - name_index.unique = false - table.insert(customers_name_key_non_uniq_index_schema.indexes, primary_index) - table.insert(customers_name_key_non_uniq_index_schema.indexes, bucket_id_index) - table.insert(customers_name_key_non_uniq_index_schema.indexes, name_index) - - local customers_secondary_idx_name_key_schema = table.deepcopy(customers_schema) - customers_secondary_idx_name_key_schema.sharding_key = {'name'} - table.insert(customers_secondary_idx_name_key_schema.indexes, primary_index_id) - table.insert(customers_secondary_idx_name_key_schema.indexes, secondary_index) - table.insert(customers_secondary_idx_name_key_schema.indexes, bucket_id_index) - - local customers_age_key_schema = table.deepcopy(customers_schema) - customers_age_key_schema.sharding_key = {'age'} - table.insert(customers_age_key_schema.indexes, primary_index) - table.insert(customers_age_key_schema.indexes, bucket_id_index) - - local customers_name_age_key_different_indexes_schema = table.deepcopy(customers_schema) - customers_name_age_key_different_indexes_schema.sharding_key = {'name', 'age'} - table.insert(customers_name_age_key_different_indexes_schema.indexes, primary_index) - table.insert(customers_name_age_key_different_indexes_schema.indexes, bucket_id_index) - table.insert(customers_name_age_key_different_indexes_schema.indexes, age_index) - - local customers_name_age_key_three_fields_index_schema = table.deepcopy(customers_schema) - customers_name_age_key_three_fields_index_schema.sharding_key = {'name', 'age'} - table.insert(customers_name_age_key_three_fields_index_schema.indexes, primary_index_id) - table.insert(customers_name_age_key_three_fields_index_schema.indexes, bucket_id_index) - table.insert(customers_name_age_key_three_fields_index_schema.indexes, three_fields_index) - - local customers_id_key_schema = table.deepcopy(customers_schema) - customers_id_key_schema.sharding_key = {'id'} - table.insert(customers_id_key_schema.indexes, primary_index) - table.insert(customers_id_key_schema.indexes, bucket_id_index) - table.insert(customers_id_key_schema.indexes, name_index) - - local customers_body_func_schema = table.deepcopy(customers_id_key_schema) - customers_body_func_schema.sharding_func = { body = 'function(key) return key[1] % 10 end' } - - local customers_G_func_schema = table.deepcopy(customers_id_key_schema) - customers_G_func_schema.sharding_func = 'some_module.sharding_func' - - local customers_empty_sharding_func_schema = table.deepcopy(customers_id_key_schema) - - local customers_vshard_mpcrc32_schema = table.deepcopy(customers_id_key_schema) - customers_vshard_mpcrc32_schema.sharding_func = 'vshard.router.bucket_id_mpcrc32' - - local customers_vshard_strcrc32_schema = table.deepcopy(customers_id_key_schema) - customers_vshard_strcrc32_schema.sharding_func = 'vshard.router.bucket_id_strcrc32' - - local schema = { - spaces = { - customers = customers_id_schema, - customers_name_key = customers_name_key_schema, - customers_name_key_uniq_index = customers_name_key_uniq_index_schema, - customers_name_key_non_uniq_index = customers_name_key_non_uniq_index_schema, - customers_secondary_idx_name_key = customers_secondary_idx_name_key_schema, - customers_age_key = customers_age_key_schema, - customers_name_age_key_different_indexes = customers_name_age_key_different_indexes_schema, - customers_name_age_key_three_fields_index = customers_name_age_key_three_fields_index_schema, - customers_G_func = customers_G_func_schema, - customers_body_func = customers_body_func_schema, - customers_empty_sharding_func = customers_empty_sharding_func_schema, - customers_vshard_mpcrc32 = customers_vshard_mpcrc32_schema, - customers_vshard_strcrc32 = customers_vshard_strcrc32_schema, - } - } - - if not box.info.ro then - local ok, err = ddl.set_schema(schema) - if not ok then - error(err) - end - end - - rawset(_G, 'set_sharding_key', function(space_name, sharding_key_def) - local fieldno_sharding_key = 2 - box.space['_ddl_sharding_key']:update(space_name, {{'=', fieldno_sharding_key, sharding_key_def}}) - end) - rawset(_G, 'set_sharding_func', function(space_name, fieldno_sharding_func, sharding_func_def) - local record = {space_name, box.NULL, box.NULL} - record[fieldno_sharding_func] = sharding_func_def - box.space['_ddl_sharding_func']:replace(record) - end) -end diff --git a/test/entrypoint/srv_ddl_reload/cartridge_init.lua b/test/entrypoint/srv_ddl_reload/cartridge_init.lua index c847d322..b448feff 100755 --- a/test/entrypoint/srv_ddl_reload/cartridge_init.lua +++ b/test/entrypoint/srv_ddl_reload/cartridge_init.lua @@ -3,6 +3,7 @@ require('strict').on() _G.is_initialized = function() return false end +local fio = require('fio') local log = require('log') local errors = require('errors') local cartridge = require('cartridge') @@ -15,6 +16,9 @@ else package.path = package.path .. debug.sourcedir() .. "/?.lua;" end +local root = fio.dirname(fio.dirname(fio.dirname(debug.sourcedir()))) +package.path = package.path .. root .. "/?.lua;" + package.preload['customers-storage'] = function() local customers_module = { sharding_func_default = function(key) @@ -34,7 +38,7 @@ package.preload['customers-storage'] = function() return { role_name = 'customers-storage', - init = require('storage_init') + init = require('storage').init, } end diff --git a/test/entrypoint/srv_ddl_reload/router.lua b/test/entrypoint/srv_ddl_reload/router.lua new file mode 100644 index 00000000..286c9f1c --- /dev/null +++ b/test/entrypoint/srv_ddl_reload/router.lua @@ -0,0 +1,19 @@ +return { + init = function() + local customers_module = { + sharding_func_default = function(key) + local id = key[1] + assert(id ~= nil) + + return id % 3000 + 1 + end, + sharding_func_new = function(key) + local id = key[1] + assert(id ~= nil) + + return (id + 42) % 3000 + 1 + end, + } + rawset(_G, 'customers_module', customers_module) + end, +} diff --git a/test/entrypoint/srv_ddl_reload/router_init.lua b/test/entrypoint/srv_ddl_reload/router_init.lua deleted file mode 100644 index f64cd4c8..00000000 --- a/test/entrypoint/srv_ddl_reload/router_init.lua +++ /dev/null @@ -1,17 +0,0 @@ -return function() - local customers_module = { - sharding_func_default = function(key) - local id = key[1] - assert(id ~= nil) - - return id % 3000 + 1 - end, - sharding_func_new = function(key) - local id = key[1] - assert(id ~= nil) - - return (id + 42) % 3000 + 1 - end, - } - rawset(_G, 'customers_module', customers_module) -end diff --git a/test/entrypoint/srv_ddl_reload/storage.lua b/test/entrypoint/srv_ddl_reload/storage.lua new file mode 100644 index 00000000..57a82f10 --- /dev/null +++ b/test/entrypoint/srv_ddl_reload/storage.lua @@ -0,0 +1,187 @@ +local ddl = require('ddl') + +return { + init = function() + local customers_module = { + sharding_func_default = function(key) + local id = key[1] + assert(id ~= nil) + + return id % 3000 + 1 + end, + sharding_func_new = function(key) + local id = key[1] + assert(id ~= nil) + + return (id + 42) % 3000 + 1 + end, + } + rawset(_G, 'customers_module', customers_module) + + local engine = os.getenv('ENGINE') or 'memtx' + + local customers_schema_raw = { + engine = engine, + temporary = false, + is_local = false, + format = { + {name = 'id', is_nullable = false, type = 'unsigned'}, + {name = 'bucket_id', is_nullable = false, type = 'unsigned'}, + {name = 'name', is_nullable = false, type = 'string'}, + {name = 'age', is_nullable = false, type = 'number'}, + }, + indexes = { + { + name = 'id', + type = 'TREE', + unique = true, + parts = { + {path = 'id', is_nullable = false, type = 'unsigned'}, + }, + }, + { + name = 'bucket_id', + type = 'TREE', + unique = false, + parts = { + {path = 'bucket_id', is_nullable = false, type = 'unsigned'}, + }, + }, + { + name = 'name', + type = 'TREE', + unique = false, + parts = { + {path = 'name', is_nullable = false, type = 'string'}, + }, + }, + { + name = 'age', + type = 'TREE', + unique = false, + parts = { + {path = 'age', is_nullable = false, type = 'number'}, + }, + }, + }, + sharding_key = { 'name' }, + } + + local customers_schema = table.deepcopy(customers_schema_raw) + customers_schema.sharding_key = { 'name' } + + local customers_pk_schema = table.deepcopy(customers_schema_raw) + customers_pk_schema.sharding_key = { 'id' } + customers_pk_schema.sharding_func = 'customers_module.sharding_func_default' + + local schema = { + spaces = { + ['customers'] = customers_schema, + ['customers_pk'] = customers_pk_schema, + } + } + + rawset(_G, 'reset_to_default_schema', function() + if box.info.ro == true then + return + end + + if box.space['_ddl_sharding_key'] ~= nil then + box.space['_ddl_sharding_key']:truncate() + box.space['_ddl_sharding_key']:insert{'customers', customers_schema.sharding_key} + box.space['_ddl_sharding_key']:insert{'customers_pk', customers_pk_schema.sharding_key} + end + + if box.space['_ddl_sharding_func'] ~= nil then + box.space['_ddl_sharding_func']:truncate() + box.space['_ddl_sharding_func']:insert{'customers_pk', customers_pk_schema.sharding_func, box.NULL} + end + + local _, err = ddl.set_schema(schema) + if err ~= nil then + error(err) + end + end) + + rawset(_G, 'set_sharding_key', function(space_name, sharding_key_def) + if box.info.ro == true then + return + end + + local current_schema, err = ddl.get_schema() + if err ~= nil then + error(err) + end + + box.space['_ddl_sharding_key']:replace{space_name, sharding_key_def} + current_schema.spaces[space_name].sharding_key = sharding_key_def + + local _, err = ddl.set_schema(current_schema) + if err ~= nil then + error(err) + end + end) + + rawset(_G, 'set_sharding_func_name', function(space_name, sharding_func_name) + if box.info.ro == true then + return + end + + local current_schema, err = ddl.get_schema() + if err ~= nil then + error(err) + end + + local t = {space_name, sharding_func_name, box.NULL} + box.space['_ddl_sharding_func']:replace(t) + current_schema.spaces[space_name].sharding_func = sharding_func_name + + local _, err = ddl.set_schema(current_schema) + if err ~= nil then + error(err) + end + end) + + rawset(_G, 'set_sharding_func_body', function(space_name, sharding_func_body) + if box.info.ro == true then + return + end + + local current_schema, err = ddl.get_schema() + if err ~= nil then + error(err) + end + + local t = {space_name, box.NULL, sharding_func_body} + box.space['_ddl_sharding_func']:replace(t) + current_schema.spaces[space_name].sharding_func = { body = sharding_func_body } + + local _, err = ddl.set_schema(current_schema) + if err ~= nil then + error(err) + end + end) + + rawset(_G, 'create_new_space', function() + if box.info.ro == true then + return + end + + local new_schema = table.deepcopy(schema) + new_schema.spaces['customers_new'] = table.deepcopy(customers_schema_raw) + new_schema.spaces['customers_new'].sharding_func = { + body = [[ + function(key) + local vshard = require('vshard') + return vshard.router.bucket_id_mpcrc32(key) + end + ]] + } + + local _, err = ddl.set_schema(new_schema) + if err ~= nil then + error(err) + end + end) + end, +} diff --git a/test/entrypoint/srv_ddl_reload/storage_init.lua b/test/entrypoint/srv_ddl_reload/storage_init.lua deleted file mode 100644 index 203b0767..00000000 --- a/test/entrypoint/srv_ddl_reload/storage_init.lua +++ /dev/null @@ -1,186 +0,0 @@ -local ddl = require('ddl') - -local customers_module = { - sharding_func_default = function(key) - local id = key[1] - assert(id ~= nil) - - return id % 3000 + 1 - end, - sharding_func_new = function(key) - local id = key[1] - assert(id ~= nil) - - return (id + 42) % 3000 + 1 - end, -} -rawset(_G, 'customers_module', customers_module) - -return function() - local engine = os.getenv('ENGINE') or 'memtx' - - local customers_schema_raw = { - engine = engine, - temporary = false, - is_local = false, - format = { - {name = 'id', is_nullable = false, type = 'unsigned'}, - {name = 'bucket_id', is_nullable = false, type = 'unsigned'}, - {name = 'name', is_nullable = false, type = 'string'}, - {name = 'age', is_nullable = false, type = 'number'}, - }, - indexes = { - { - name = 'id', - type = 'TREE', - unique = true, - parts = { - {path = 'id', is_nullable = false, type = 'unsigned'}, - }, - }, - { - name = 'bucket_id', - type = 'TREE', - unique = false, - parts = { - {path = 'bucket_id', is_nullable = false, type = 'unsigned'}, - }, - }, - { - name = 'name', - type = 'TREE', - unique = false, - parts = { - {path = 'name', is_nullable = false, type = 'string'}, - }, - }, - { - name = 'age', - type = 'TREE', - unique = false, - parts = { - {path = 'age', is_nullable = false, type = 'number'}, - }, - }, - }, - sharding_key = { 'name' }, - } - - local customers_schema = table.deepcopy(customers_schema_raw) - customers_schema.sharding_key = { 'name' } - - local customers_pk_schema = table.deepcopy(customers_schema_raw) - customers_pk_schema.sharding_key = { 'id' } - customers_pk_schema.sharding_func = 'customers_module.sharding_func_default' - - local schema = { - spaces = { - ['customers'] = customers_schema, - ['customers_pk'] = customers_pk_schema, - } - } - - - rawset(_G, 'reset_to_default_schema', function() - if box.info.ro == true then - return - end - - if box.space['_ddl_sharding_key'] ~= nil then - box.space['_ddl_sharding_key']:truncate() - box.space['_ddl_sharding_key']:insert{'customers', customers_schema.sharding_key} - box.space['_ddl_sharding_key']:insert{'customers_pk', customers_pk_schema.sharding_key} - end - - if box.space['_ddl_sharding_func'] ~= nil then - box.space['_ddl_sharding_func']:truncate() - box.space['_ddl_sharding_func']:insert{'customers_pk', customers_pk_schema.sharding_func, box.NULL} - end - - local _, err = ddl.set_schema(schema) - if err ~= nil then - error(err) - end - end) - - rawset(_G, 'set_sharding_key', function(space_name, sharding_key_def) - if box.info.ro == true then - return - end - - local current_schema, err = ddl.get_schema() - if err ~= nil then - error(err) - end - - box.space['_ddl_sharding_key']:replace{space_name, sharding_key_def} - current_schema.spaces[space_name].sharding_key = sharding_key_def - - local _, err = ddl.set_schema(current_schema) - if err ~= nil then - error(err) - end - end) - - rawset(_G, 'set_sharding_func_name', function(space_name, sharding_func_name) - if box.info.ro == true then - return - end - - local current_schema, err = ddl.get_schema() - if err ~= nil then - error(err) - end - - local t = {space_name, sharding_func_name, box.NULL} - box.space['_ddl_sharding_func']:replace(t) - current_schema.spaces[space_name].sharding_func = sharding_func_name - - local _, err = ddl.set_schema(current_schema) - if err ~= nil then - error(err) - end - end) - - rawset(_G, 'set_sharding_func_body', function(space_name, sharding_func_body) - if box.info.ro == true then - return - end - - local current_schema, err = ddl.get_schema() - if err ~= nil then - error(err) - end - - local t = {space_name, box.NULL, sharding_func_body} - box.space['_ddl_sharding_func']:replace(t) - current_schema.spaces[space_name].sharding_func = { body = sharding_func_body } - - local _, err = ddl.set_schema(current_schema) - if err ~= nil then - error(err) - end - end) - - rawset(_G, 'create_new_space', function() - if box.info.ro == true then - return - end - - local new_schema = table.deepcopy(schema) - new_schema.spaces['customers_new'] = table.deepcopy(customers_schema_raw) - new_schema.spaces['customers_new'].sharding_func = { - body = [[ - function(key) - local vshard = require('vshard') - return vshard.router.bucket_id_mpcrc32(key) - end - ]] - } - - local _, err = ddl.set_schema(new_schema) - if err ~= nil then - error(err) - end - end) -end diff --git a/test/entrypoint/srv_migration/cartridge_init.lua b/test/entrypoint/srv_migration/cartridge_init.lua index 37c18409..d20f3046 100755 --- a/test/entrypoint/srv_migration/cartridge_init.lua +++ b/test/entrypoint/srv_migration/cartridge_init.lua @@ -3,6 +3,7 @@ require('strict').on() _G.is_initialized = function() return false end +local fio = require('fio') local log = require('log') local errors = require('errors') local cartridge = require('cartridge') @@ -13,10 +14,13 @@ else package.path = package.path .. debug.sourcedir() .. "/?.lua;" end +local root = fio.dirname(fio.dirname(fio.dirname(debug.sourcedir()))) +package.path = package.path .. root .. "/?.lua;" + package.preload['customers-storage'] = function() return { role_name = 'customers-storage', - init = require('storage_init') + init = require('storage').init, } end diff --git a/test/entrypoint/srv_migration/storage.lua b/test/entrypoint/srv_migration/storage.lua new file mode 100644 index 00000000..11908e41 --- /dev/null +++ b/test/entrypoint/srv_migration/storage.lua @@ -0,0 +1,17 @@ +local helper = require('test.helper') + +return { + init = helper.wrap_schema_init(function() + box.schema.space.create('customers', {if_not_exists = true}) + + box.space['customers']:format{ + {name = 'id', is_nullable = false, type = 'unsigned'}, + {name = 'bucket_id', is_nullable = false, type = 'unsigned'}, + {name = 'sharding_key', is_nullable = false, type = 'unsigned'}, + } + + box.space['customers']:create_index('pk', {parts = { 'id' }, if_not_exists = true}) + box.space['customers']:create_index('bucket_id', {parts = { 'bucket_id' }, if_not_exists = true}) + end), + wait_until_ready = helper.wait_schema_init, +} diff --git a/test/entrypoint/srv_migration/storage_init.lua b/test/entrypoint/srv_migration/storage_init.lua deleted file mode 100644 index 71d94d71..00000000 --- a/test/entrypoint/srv_migration/storage_init.lua +++ /dev/null @@ -1,15 +0,0 @@ -return function() - if box.info.ro == true then - return - end - box.schema.space.create('customers') - - box.space['customers']:format{ - {name = 'id', is_nullable = false, type = 'unsigned'}, - {name = 'bucket_id', is_nullable = false, type = 'unsigned'}, - {name = 'sharding_key', is_nullable = false, type = 'unsigned'}, - } - - box.space['customers']:create_index('pk', {parts = { 'id' }}) - box.space['customers']:create_index('bucket_id', {parts = { 'bucket_id' }}) -end diff --git a/test/entrypoint/srv_not_initialized/cartridge_init.lua b/test/entrypoint/srv_not_initialized/cartridge_init.lua index 7d82a7b1..372cab45 100755 --- a/test/entrypoint/srv_not_initialized/cartridge_init.lua +++ b/test/entrypoint/srv_not_initialized/cartridge_init.lua @@ -3,6 +3,7 @@ require('strict').on() _G.is_initialized = function() return false end +local fio = require('fio') local log = require('log') local errors = require('errors') local cartridge = require('cartridge') @@ -13,10 +14,13 @@ else package.path = package.path .. debug.sourcedir() .. "/?.lua;" end +local root = fio.dirname(fio.dirname(fio.dirname(debug.sourcedir()))) +package.path = package.path .. root .. "/?.lua;" + package.preload['customers-storage'] = function() return { role_name = 'customers-storage', - init = require('storage_init'), + init = require('storage').init, dependencies = {'cartridge.roles.vshard-storage'}, } end diff --git a/test/entrypoint/srv_not_initialized/storage.lua b/test/entrypoint/srv_not_initialized/storage.lua new file mode 100644 index 00000000..5f2e5fef --- /dev/null +++ b/test/entrypoint/srv_not_initialized/storage.lua @@ -0,0 +1,25 @@ +local helper = require('test.helper') + +return { + init = helper.wrap_schema_init(function() + local customers_space = box.schema.space.create('customers', { + format = { + {name = 'id', type = 'unsigned'}, + {name = 'bucket_id', type = 'unsigned'}, + {name = 'name', type = 'string'}, + {name = 'age', type = 'number'}, + }, + if_not_exists = true, + }) + customers_space:create_index('id', { + parts = { {field = 'id' } }, + if_not_exists = true, + }) + customers_space:create_index('bucket_id', { + parts = { {field = 'bucket_id' } }, + unique = false, + if_not_exists = true, + }) + end), + wait_until_ready = helper.wait_schema_init, +} diff --git a/test/entrypoint/srv_not_initialized/storage_init.lua b/test/entrypoint/srv_not_initialized/storage_init.lua deleted file mode 100644 index c4a74517..00000000 --- a/test/entrypoint/srv_not_initialized/storage_init.lua +++ /dev/null @@ -1,24 +0,0 @@ -return function() - if box.info.ro == true then - return - end - - local customers_space = box.schema.space.create('customers', { - format = { - {name = 'id', type = 'unsigned'}, - {name = 'bucket_id', type = 'unsigned'}, - {name = 'name', type = 'string'}, - {name = 'age', type = 'number'}, - }, - if_not_exists = true, - }) - customers_space:create_index('id', { - parts = { {field = 'id' } }, - if_not_exists = true, - }) - customers_space:create_index('bucket_id', { - parts = { {field = 'bucket_id' } }, - unique = false, - if_not_exists = true, - }) -end diff --git a/test/entrypoint/srv_read_calls_strategies/all.lua b/test/entrypoint/srv_read_calls_strategies/all.lua new file mode 100644 index 00000000..24691819 --- /dev/null +++ b/test/entrypoint/srv_read_calls_strategies/all.lua @@ -0,0 +1,31 @@ +return { + init = function() + rawset(_G, 'vshard_calls', {}) + + rawset(_G, 'clear_vshard_calls', function() + table.clear(_G.vshard_calls) + end) + + rawset(_G, 'patch_vshard_calls', function(vshard_call_names) + local vshard = require('vshard') + + local replicasets = vshard.router.routeall() + + local _, replicaset = next(replicasets) + local replicaset_mt = getmetatable(replicaset) + + for _, vshard_call_name in ipairs(vshard_call_names) do + local old_func = replicaset_mt.__index[vshard_call_name] + assert(old_func ~= nil, vshard_call_name) + + replicaset_mt.__index[vshard_call_name] = function(...) + local func_name = select(2, ...) + if not string.startswith(func_name, 'vshard.') or func_name == 'vshard.storage.call' then + table.insert(_G.vshard_calls, vshard_call_name) + end + return old_func(...) + end + end + end) + end, +} diff --git a/test/entrypoint/srv_read_calls_strategies/all_init.lua b/test/entrypoint/srv_read_calls_strategies/all_init.lua deleted file mode 100644 index 1827214d..00000000 --- a/test/entrypoint/srv_read_calls_strategies/all_init.lua +++ /dev/null @@ -1,29 +0,0 @@ -return function() - rawset(_G, 'vshard_calls', {}) - - rawset(_G, 'clear_vshard_calls', function() - table.clear(_G.vshard_calls) - end) - - rawset(_G, 'patch_vshard_calls', function(vshard_call_names) - local vshard = require('vshard') - - local replicasets = vshard.router.routeall() - - local _, replicaset = next(replicasets) - local replicaset_mt = getmetatable(replicaset) - - for _, vshard_call_name in ipairs(vshard_call_names) do - local old_func = replicaset_mt.__index[vshard_call_name] - assert(old_func ~= nil, vshard_call_name) - - replicaset_mt.__index[vshard_call_name] = function(...) - local func_name = select(2, ...) - if not string.startswith(func_name, 'vshard.') or func_name == 'vshard.storage.call' then - table.insert(_G.vshard_calls, vshard_call_name) - end - return old_func(...) - end - end - end) -end diff --git a/test/entrypoint/srv_read_calls_strategies/cartridge_init.lua b/test/entrypoint/srv_read_calls_strategies/cartridge_init.lua index 96a94860..16922eb6 100755 --- a/test/entrypoint/srv_read_calls_strategies/cartridge_init.lua +++ b/test/entrypoint/srv_read_calls_strategies/cartridge_init.lua @@ -3,6 +3,7 @@ require('strict').on() _G.is_initialized = function() return false end +local fio = require('fio') local log = require('log') local errors = require('errors') local cartridge = require('cartridge') @@ -13,10 +14,13 @@ else package.path = package.path .. debug.sourcedir() .. "/?.lua;" end +local root = fio.dirname(fio.dirname(fio.dirname(debug.sourcedir()))) +package.path = package.path .. root .. "/?.lua;" + package.preload['customers-storage'] = function() return { role_name = 'customers-storage', - init = require('storage_init'), + init = require('storage').init, } end @@ -36,6 +40,6 @@ if not ok then os.exit(1) end -require('all_init')() +require('all').init() _G.is_initialized = cartridge.is_healthy diff --git a/test/entrypoint/srv_read_calls_strategies/storage.lua b/test/entrypoint/srv_read_calls_strategies/storage.lua new file mode 100644 index 00000000..0948aea3 --- /dev/null +++ b/test/entrypoint/srv_read_calls_strategies/storage.lua @@ -0,0 +1,22 @@ +local helper = require('test.helper') + +return { + init = helper.wrap_schema_init(function() + local engine = os.getenv('ENGINE') or 'memtx' + local customers_space = box.schema.space.create('customers', { + format = { + {name = 'id', type = 'unsigned'}, + {name = 'bucket_id', type = 'unsigned'}, + {name = 'name', type = 'string'}, + {name = 'age', type = 'number'}, + }, + if_not_exists = true, + engine = engine, + }) + customers_space:create_index('id', { + parts = { {field = 'id'} }, + if_not_exists = true, + }) + end), + wait_until_ready = helper.wait_schema_init, +} diff --git a/test/entrypoint/srv_read_calls_strategies/storage_init.lua b/test/entrypoint/srv_read_calls_strategies/storage_init.lua deleted file mode 100644 index 0973bb7d..00000000 --- a/test/entrypoint/srv_read_calls_strategies/storage_init.lua +++ /dev/null @@ -1,21 +0,0 @@ -return function() - if box.info.ro == true then - return - end - - local engine = os.getenv('ENGINE') or 'memtx' - local customers_space = box.schema.space.create('customers', { - format = { - {name = 'id', type = 'unsigned'}, - {name = 'bucket_id', type = 'unsigned'}, - {name = 'name', type = 'string'}, - {name = 'age', type = 'number'}, - }, - if_not_exists = true, - engine = engine, - }) - customers_space:create_index('id', { - parts = { {field = 'id'} }, - if_not_exists = true, - }) -end diff --git a/test/entrypoint/srv_say_hi/all.lua b/test/entrypoint/srv_say_hi/all.lua new file mode 100644 index 00000000..e4ae52eb --- /dev/null +++ b/test/entrypoint/srv_say_hi/all.lua @@ -0,0 +1,70 @@ +local fiber = require('fiber') +local helper = require('test.helper') + +-- Adds execution rights to a function for a vshard storage user. +local function add_storage_execute(func_name) + if box.schema.user.exists('storage') then + box.schema.func.create(func_name, {setuid = true, if_not_exists = true}) + box.schema.user.grant('storage', 'execute', 'function', func_name, {if_not_exists = true}) + end +end + +return { + init = function() + rawset(_G, 'say_hi_politely', function (to_name) + to_name = to_name or "handsome" + local my_alias = box.info.id + return string.format("HI, %s! I am %s", to_name, my_alias) + end) + + rawset(_G, 'say_hi_sleepily', function (time_to_sleep) + if time_to_sleep ~= nil then + fiber.sleep(time_to_sleep) + end + + return "HI" + end) + + rawset(_G, 'vshard_calls', {}) + + rawset(_G, 'clear_vshard_calls', function() + table.clear(_G.vshard_calls) + end) + + rawset(_G, 'patch_vshard_calls', function(vshard_call_names) + local vshard = require('vshard') + + local replicasets = vshard.router.routeall() + + local _, replicaset = next(replicasets) + local replicaset_mt = getmetatable(replicaset) + + for _, vshard_call_name in ipairs(vshard_call_names) do + local old_func = replicaset_mt.__index[vshard_call_name] + assert(old_func ~= nil, vshard_call_name) + + replicaset_mt.__index[vshard_call_name] = function(...) + local func_name = select(2, ...) + if not string.startswith(func_name, 'vshard.') or func_name == 'vshard.storage.call' then + table.insert(_G.vshard_calls, vshard_call_name) + end + return old_func(...) + end + end + end) + + if type(box.cfg) ~= 'table' then + -- Cartridge, unit tests. + return + else + helper.wrap_schema_init(function() + add_storage_execute('clear_vshard_calls') + add_storage_execute('say_hi_sleepily') + add_storage_execute('say_hi_politely') + add_storage_execute('patch_vshard_calls') + add_storage_execute('non_existent_func') + end)() + end + end, + wait_until_ready = helper.wait_schema_init, +} diff --git a/test/entrypoint/srv_say_hi/all_init.lua b/test/entrypoint/srv_say_hi/all_init.lua deleted file mode 100644 index 01c0edcb..00000000 --- a/test/entrypoint/srv_say_hi/all_init.lua +++ /dev/null @@ -1,63 +0,0 @@ -local fiber = require('fiber') - --- Adds execution rights to a function for a vshard storage user. -local function add_storage_execute(func_name) - if type(box.cfg) ~= 'table' then - -- Cartridge, unit tests. - return - end - if box.cfg.read_only == false and box.schema.user.exists('storage') then - box.schema.func.create(func_name, {setuid = true}) - box.schema.user.grant('storage', 'execute', 'function', func_name) - end -end - -return function() - rawset(_G, 'say_hi_politely', function (to_name) - to_name = to_name or "handsome" - local my_alias = box.info.id - return string.format("HI, %s! I am %s", to_name, my_alias) - end) - add_storage_execute('say_hi_politely') - - rawset(_G, 'say_hi_sleepily', function (time_to_sleep) - if time_to_sleep ~= nil then - fiber.sleep(time_to_sleep) - end - - return "HI" - end) - add_storage_execute('say_hi_sleepily') - - rawset(_G, 'vshard_calls', {}) - - rawset(_G, 'clear_vshard_calls', function() - table.clear(_G.vshard_calls) - end) - add_storage_execute('clear_vshard_calls') - - rawset(_G, 'patch_vshard_calls', function(vshard_call_names) - local vshard = require('vshard') - - local replicasets = vshard.router.routeall() - - local _, replicaset = next(replicasets) - local replicaset_mt = getmetatable(replicaset) - - for _, vshard_call_name in ipairs(vshard_call_names) do - local old_func = replicaset_mt.__index[vshard_call_name] - assert(old_func ~= nil, vshard_call_name) - - replicaset_mt.__index[vshard_call_name] = function(...) - local func_name = select(2, ...) - if not string.startswith(func_name, 'vshard.') or func_name == 'vshard.storage.call' then - table.insert(_G.vshard_calls, vshard_call_name) - end - return old_func(...) - end - end - end) - add_storage_execute('patch_vshard_calls') - - add_storage_execute('non_existent_func') -end diff --git a/test/entrypoint/srv_say_hi/cartridge_init.lua b/test/entrypoint/srv_say_hi/cartridge_init.lua index 1890e017..6dbe1303 100755 --- a/test/entrypoint/srv_say_hi/cartridge_init.lua +++ b/test/entrypoint/srv_say_hi/cartridge_init.lua @@ -3,6 +3,7 @@ require('strict').on() _G.is_initialized = function() return false end +local fio = require('fio') local log = require('log') local errors = require('errors') local cartridge = require('cartridge') @@ -13,6 +14,9 @@ else package.path = package.path .. debug.sourcedir() .. "/?.lua;" end +local root = fio.dirname(fio.dirname(fio.dirname(debug.sourcedir()))) +package.path = package.path .. root .. "/?.lua;" + local ok, err ok, err = errors.pcall('CartridgeCfgError', cartridge.cfg, { @@ -30,6 +34,6 @@ if not ok then os.exit(1) end -require('all_init')() +require('all').init() _G.is_initialized = cartridge.is_healthy diff --git a/test/entrypoint/srv_schema/cartridge_init.lua b/test/entrypoint/srv_schema/cartridge_init.lua index 7998e50d..ff604d7a 100755 --- a/test/entrypoint/srv_schema/cartridge_init.lua +++ b/test/entrypoint/srv_schema/cartridge_init.lua @@ -3,6 +3,7 @@ require('strict').on() _G.is_initialized = function() return false end +local fio = require('fio') local log = require('log') local errors = require('errors') local cartridge = require('cartridge') @@ -13,10 +14,13 @@ else package.path = package.path .. debug.sourcedir() .. "/?.lua;" end +local root = fio.dirname(fio.dirname(fio.dirname(debug.sourcedir()))) +package.path = package.path .. root .. "/?.lua;" + package.preload['customers-storage'] = function() return { role_name = 'customers-storage', - init = require('storage_init') + init = require('storage').init, } end diff --git a/test/entrypoint/srv_schema/storage.lua b/test/entrypoint/srv_schema/storage.lua new file mode 100644 index 00000000..e5496273 --- /dev/null +++ b/test/entrypoint/srv_schema/storage.lua @@ -0,0 +1,86 @@ +local schema = require('crud.schema') +local helper = require('test.helper') + +return { + init = function() + local engine = os.getenv('ENGINE') or 'memtx' + + rawset(_G, 'reload_schema', function() + for name, space in pairs(box.space) do + -- Can be indexed by space id and space name, + -- so we need to be careful with duplicates. + if type(name) == 'string' and schema.system_spaces[name] == nil then + space:drop() + end + end + + local customers_space = box.schema.space.create('customers', { + format = { + {name = 'id', type = 'unsigned'}, + {name = 'bucket_id', type = 'unsigned'}, + {name = 'name', type = 'string'}, + {name = 'age', type = 'number'}, + }, + if_not_exists = true, + engine = engine, + }) + customers_space:create_index('id', { + parts = { {field = 'id'} }, + if_not_exists = true, + }) + customers_space:create_index('bucket_id', { + parts = { {field = 'bucket_id'} }, + unique = false, + if_not_exists = true, + }) + + local shops_space = box.schema.space.create('shops', { + format = { + {name = 'registry_id', type = 'unsigned'}, + {name = 'bucket_id', type = 'unsigned'}, + {name = 'name', type = 'string'}, + {name = 'address', type = 'string'}, + {name = 'owner', type = 'string', is_nullable = true}, + }, + if_not_exists = true, + engine = engine, + }) + shops_space:create_index('registry', { + parts = { {field = 'registry_id'} }, + if_not_exists = true, + }) + shops_space:create_index('bucket_id', { + parts = { {field = 'bucket_id'} }, + unique = false, + if_not_exists = true, + }) + shops_space:create_index('address', { + parts = { {field = 'address'} }, + unique = true, + if_not_exists = true, + }) + end) + + rawset(_G, 'alter_schema', function() + box.space['customers']:create_index('age', { + parts = { {field = 'age'} }, + unique = false, + if_not_exists = true, + }) + + box.space['shops']:format({ + {name = 'registry_id', type = 'unsigned'}, + {name = 'bucket_id', type = 'unsigned'}, + {name = 'name', type = 'string'}, + {name = 'address', type = 'string'}, + {name = 'owner', type = 'string', is_nullable = true}, + {name = 'salary', type = 'unsigned', is_nullable = true}, + }) + end) + + helper.wrap_schema_init( + rawget(_G, 'reload_schema') + )() + end, + wait_until_ready = helper.wait_schema_init, +} diff --git a/test/entrypoint/srv_schema/storage_init.lua b/test/entrypoint/srv_schema/storage_init.lua deleted file mode 100644 index 4351fa87..00000000 --- a/test/entrypoint/srv_schema/storage_init.lua +++ /dev/null @@ -1,84 +0,0 @@ -local schema = require('crud.schema') - -return function() - if box.info.ro == true then - return - end - - local engine = os.getenv('ENGINE') or 'memtx' - - rawset(_G, 'reload_schema', function() - for name, space in pairs(box.space) do - -- Can be indexed by space id and space name, - -- so we need to be careful with duplicates. - if type(name) == 'string' and schema.system_spaces[name] == nil then - space:drop() - end - end - - local customers_space = box.schema.space.create('customers', { - format = { - {name = 'id', type = 'unsigned'}, - {name = 'bucket_id', type = 'unsigned'}, - {name = 'name', type = 'string'}, - {name = 'age', type = 'number'}, - }, - if_not_exists = true, - engine = engine, - }) - customers_space:create_index('id', { - parts = { {field = 'id'} }, - if_not_exists = true, - }) - customers_space:create_index('bucket_id', { - parts = { {field = 'bucket_id'} }, - unique = false, - if_not_exists = true, - }) - - local shops_space = box.schema.space.create('shops', { - format = { - {name = 'registry_id', type = 'unsigned'}, - {name = 'bucket_id', type = 'unsigned'}, - {name = 'name', type = 'string'}, - {name = 'address', type = 'string'}, - {name = 'owner', type = 'string', is_nullable = true}, - }, - if_not_exists = true, - engine = engine, - }) - shops_space:create_index('registry', { - parts = { {field = 'registry_id'} }, - if_not_exists = true, - }) - shops_space:create_index('bucket_id', { - parts = { {field = 'bucket_id'} }, - unique = false, - if_not_exists = true, - }) - shops_space:create_index('address', { - parts = { {field = 'address'} }, - unique = true, - if_not_exists = true, - }) - end) - - rawset(_G, 'alter_schema', function() - box.space['customers']:create_index('age', { - parts = { {field = 'age'} }, - unique = false, - if_not_exists = true, - }) - - box.space['shops']:format({ - {name = 'registry_id', type = 'unsigned'}, - {name = 'bucket_id', type = 'unsigned'}, - {name = 'name', type = 'string'}, - {name = 'address', type = 'string'}, - {name = 'owner', type = 'string', is_nullable = true}, - {name = 'salary', type = 'unsigned', is_nullable = true}, - }) - end) - - rawget(_G, 'reload_schema')() -end diff --git a/test/entrypoint/srv_select/cartridge_init.lua b/test/entrypoint/srv_select/cartridge_init.lua index 03a2c438..0964e660 100755 --- a/test/entrypoint/srv_select/cartridge_init.lua +++ b/test/entrypoint/srv_select/cartridge_init.lua @@ -3,6 +3,7 @@ require('strict').on() _G.is_initialized = function() return false end +local fio = require('fio') local log = require('log') local errors = require('errors') local cartridge = require('cartridge') @@ -13,10 +14,13 @@ else package.path = package.path .. debug.sourcedir() .. "/?.lua;" end +local root = fio.dirname(fio.dirname(fio.dirname(debug.sourcedir()))) +package.path = package.path .. root .. "/?.lua;" + package.preload['customers-storage'] = function() return { role_name = 'customers-storage', - init = require('storage_init') + init = require('storage').init, } end diff --git a/test/entrypoint/srv_select/storage.lua b/test/entrypoint/srv_select/storage.lua new file mode 100644 index 00000000..984f8606 --- /dev/null +++ b/test/entrypoint/srv_select/storage.lua @@ -0,0 +1,447 @@ +local crud_utils = require('crud.common.utils') +local helper = require('test.helper') + +return { + init = helper.wrap_schema_init(function() + local engine = os.getenv('ENGINE') or 'memtx' + box.schema.space.create('no_index_space', { + format = { + {name = 'id', type = 'unsigned'}, + {name = 'bucket_id', type = 'unsigned'}, + {name = 'name', type = 'string'}, + }, + if_not_exists = true, + engine = engine, + }) + + local customers_space = box.schema.space.create('customers', { + format = { + {name = 'id', type = 'unsigned'}, + {name = 'bucket_id', type = 'unsigned'}, + {name = 'name', type = 'string'}, + {name = 'last_name', type = 'string'}, + {name = 'age', type = 'number'}, + {name = 'city', type = 'string'}, + }, + if_not_exists = true, + engine = engine, + }) + -- primary index + customers_space:create_index('id_index', { + parts = { {field = 'id'} }, + if_not_exists = true, + }) + customers_space:create_index('bucket_id', { + parts = { {field = 'bucket_id'} }, + unique = false, + if_not_exists = true, + }) + customers_space:create_index('age_index', { + parts = { {field = 'age'} }, + unique = false, + if_not_exists = true, + }) + -- indexes with same names as fields + customers_space:create_index('age', { + parts = { {field = 'age'} }, + unique = false, + if_not_exists = true, + }) + customers_space:create_index('id', { + parts = { {field = 'id'} }, + if_not_exists = true, + }) + customers_space:create_index('full_name', { + parts = { + {field = 'name', collation = 'unicode_ci'}, + {field = 'last_name', collation = 'unicode_ci'} , + }, + unique = false, + if_not_exists = true, + }) + + if crud_utils.tarantool_supports_uuids() then + local goods_space = box.schema.space.create('goods', { + format = { + {name = 'uuid', type = 'uuid'}, + {name = 'bucket_id', type = 'unsigned'}, + {name = 'name', type = 'string'}, + {name = 'category_id', type = 'uuid'}, + }, + if_not_exists = true, + engine = engine, + }) + --primary index + goods_space:create_index('uuid', { + parts = { {field = 'uuid'} }, + if_not_exists = true, + }) + goods_space:create_index('bucket_id', { + parts = { {field = 'bucket_id'} }, + unique = false, + if_not_exists = true, + }) + end + + local coord_space = box.schema.space.create('coord', { + format = { + {name = 'x', type = 'unsigned'}, + {name = 'y', type = 'unsigned'}, + {name = 'bucket_id', type = 'unsigned'}, + }, + if_not_exists = true, + engine = engine, + }) + -- primary index + coord_space:create_index('primary', { + parts = { + {field = 'x'}, + {field = 'y'}, + }, + if_not_exists = true, + }) + coord_space:create_index('bucket_id', { + parts = { {field = 'bucket_id'} }, + unique = false, + if_not_exists = true, + }) + + local book_translation = box.schema.space.create('book_translation', { + format = { + { name = 'id', type = 'unsigned' }, + { name = 'bucket_id', type = 'unsigned' }, + { name = 'language', type = 'string' }, + { name = 'edition', type = 'integer' }, + { name = 'translator', type = 'string' }, + { name = 'comments', type = 'string', is_nullable = true }, + }, + if_not_exists = true, + }) + + book_translation:create_index('id', { + parts = { 'id', 'language', 'edition' }, + if_not_exists = true, + }) + + book_translation:create_index('bucket_id', { + parts = { 'bucket_id' }, + unique = false, + if_not_exists = true, + }) + + local developers_space = box.schema.space.create('developers', { + format = { + {name = 'id', type = 'unsigned'}, + {name = 'bucket_id', type = 'unsigned'}, + {name = 'name', type = 'string'}, + {name = 'last_name', type = 'string'}, + {name = 'age', type = 'number'}, + {name = 'additional', type = 'any'}, + }, + if_not_exists = true, + engine = engine, + }) + + -- primary index + developers_space:create_index('id_index', { + parts = { 'id' }, + if_not_exists = true, + }) + + developers_space:create_index('bucket_id', { + parts = { 'bucket_id' }, + unique = false, + if_not_exists = true, + }) + + if crud_utils.tarantool_supports_jsonpath_indexes() then + local cars_space = box.schema.space.create('cars', { + format = { + {name = 'id', type = 'map'}, + {name = 'bucket_id', type = 'unsigned'}, + {name = 'age', type = 'number'}, + {name = 'manufacturer', type = 'string'}, + {name = 'data', type = 'map'} + }, + if_not_exists = true, + engine = engine, + }) + + -- primary index + cars_space:create_index('id_ind', { + parts = { + {1, 'unsigned', path = 'car_id.signed'}, + }, + if_not_exists = true, + }) + + cars_space:create_index('bucket_id', { + parts = { 'bucket_id' }, + unique = false, + if_not_exists = true, + }) + + cars_space:create_index('data_index', { + parts = { + {5, 'str', path = 'car.color'}, + {5, 'str', path = 'car.model'}, + }, + unique = false, + if_not_exists = true, + }) + end + + local logins_space = box.schema.space.create('logins', { + format = { + {name = 'id', type = 'unsigned'}, + {name = 'bucket_id', type = 'unsigned'}, + {name = 'city', type = 'string'}, + {name = 'name', type = 'string'}, + {name = 'last_login', type = 'number'}, + }, + if_not_exists = true, + engine = engine, + }) + + logins_space:create_index('id_index', { + parts = { 'id' }, + if_not_exists = true, + }) + + logins_space:create_index('bucket_id', { + parts = { 'bucket_id' }, + unique = false, + if_not_exists = true, + }) + + logins_space:create_index('city', { + parts = { 'city' }, + unique = false, + if_not_exists = true, + }) + + logins_space:create_index('last_login', { + parts = { 'last_login' }, + unique = false, + if_not_exists = true, + }) + + if crud_utils.tarantool_supports_decimals() then + local decimal_format = { + {name = 'id', type = 'unsigned'}, + {name = 'bucket_id', type = 'unsigned'}, + {name = 'decimal_field', type = 'decimal'}, + } + + + local decimal_nonindexed_space = box.schema.space.create('decimal_nonindexed', { + if_not_exists = true, + engine = engine, + }) + + decimal_nonindexed_space:format(decimal_format) + + decimal_nonindexed_space:create_index('id_index', { + parts = { 'id' }, + if_not_exists = true, + }) + + decimal_nonindexed_space:create_index('bucket_id', { + parts = { 'bucket_id' }, + unique = false, + if_not_exists = true, + }) + + + local decimal_indexed_space = box.schema.space.create('decimal_indexed', { + if_not_exists = true, + engine = engine, + }) + + decimal_indexed_space:format(decimal_format) + + decimal_indexed_space:create_index('id_index', { + parts = { 'id' }, + if_not_exists = true, + }) + + decimal_indexed_space:create_index('bucket_id', { + parts = { 'bucket_id' }, + unique = false, + if_not_exists = true, + }) + + decimal_indexed_space:create_index('decimal_index', { + parts = { 'decimal_field' }, + unique = false, + if_not_exists = true, + }) + + + local decimal_pk_space = box.schema.space.create('decimal_pk', { + if_not_exists = true, + engine = engine, + }) + + decimal_pk_space:format(decimal_format) + + decimal_pk_space:create_index('decimal_index', { + parts = { 'decimal_field' }, + if_not_exists = true, + }) + + decimal_pk_space:create_index('bucket_id', { + parts = { 'bucket_id' }, + unique = false, + if_not_exists = true, + }) + + + local decimal_multipart_index_space = box.schema.space.create('decimal_multipart_index', { + if_not_exists = true, + engine = engine, + }) + + decimal_multipart_index_space:format(decimal_format) + + decimal_multipart_index_space:create_index('id_index', { + parts = { 'id' }, + if_not_exists = true, + }) + + decimal_multipart_index_space:create_index('bucket_id', { + parts = { 'bucket_id' }, + unique = false, + if_not_exists = true, + }) + + decimal_multipart_index_space:create_index('decimal_index', { + parts = { 'id', 'decimal_field' }, + unique = false, + if_not_exists = true, + }) + end + + if crud_utils.tarantool_supports_datetimes() then + local datetime_format = { + {name = 'id', type = 'unsigned'}, + {name = 'bucket_id', type = 'unsigned'}, + {name = 'datetime_field', type = 'datetime'}, + } + + + local datetime_nonindexed_space = box.schema.space.create('datetime_nonindexed', { + if_not_exists = true, + engine = engine, + }) + + datetime_nonindexed_space:format(datetime_format) + + datetime_nonindexed_space:create_index('id_index', { + parts = { 'id' }, + if_not_exists = true, + }) + + datetime_nonindexed_space:create_index('bucket_id', { + parts = { 'bucket_id' }, + unique = false, + if_not_exists = true, + }) + + + local datetime_indexed_space = box.schema.space.create('datetime_indexed', { + if_not_exists = true, + engine = engine, + }) + + datetime_indexed_space:format(datetime_format) + + datetime_indexed_space:create_index('id_index', { + parts = { 'id' }, + if_not_exists = true, + }) + + datetime_indexed_space:create_index('bucket_id', { + parts = { 'bucket_id' }, + unique = false, + if_not_exists = true, + }) + + datetime_indexed_space:create_index('datetime_index', { + parts = { 'datetime_field' }, + unique = false, + if_not_exists = true, + }) + + + local datetime_pk_space = box.schema.space.create('datetime_pk', { + if_not_exists = true, + engine = engine, + }) + + datetime_pk_space:format(datetime_format) + + datetime_pk_space:create_index('datetime_index', { + parts = { 'datetime_field' }, + if_not_exists = true, + }) + + datetime_pk_space:create_index('bucket_id', { + parts = { 'bucket_id' }, + unique = false, + if_not_exists = true, + }) + + + local datetime_multipart_index_space = box.schema.space.create('datetime_multipart_index', { + if_not_exists = true, + engine = engine, + }) + + datetime_multipart_index_space:format(datetime_format) + + datetime_multipart_index_space:create_index('id_index', { + parts = { 'id' }, + if_not_exists = true, + }) + + datetime_multipart_index_space:create_index('bucket_id', { + parts = { 'bucket_id' }, + unique = false, + if_not_exists = true, + }) + + datetime_multipart_index_space:create_index('datetime_index', { + parts = { 'id', 'datetime_field' }, + unique = false, + if_not_exists = true, + }) + end + + if crud_utils.tarantool_supports_intervals() then + -- Interval is non-indexable. + local interval_space = box.schema.space.create('interval', { + if_not_exists = true, + engine = engine, + }) + + interval_space:format({ + {name = 'id', type = 'unsigned'}, + {name = 'bucket_id', type = 'unsigned'}, + {name = 'interval_field', type = 'interval'}, + }) + + interval_space:create_index('id_index', { + parts = { 'id' }, + if_not_exists = true, + }) + + interval_space:create_index('bucket_id', { + parts = { 'bucket_id' }, + unique = false, + if_not_exists = true, + }) + end + end), + wait_until_ready = helper.wait_schema_init, +} diff --git a/test/entrypoint/srv_select/storage_init.lua b/test/entrypoint/srv_select/storage_init.lua deleted file mode 100644 index cfcea23f..00000000 --- a/test/entrypoint/srv_select/storage_init.lua +++ /dev/null @@ -1,447 +0,0 @@ -local crud_utils = require('crud.common.utils') - -return function() - if box.info.ro == true then - return - end - - local engine = os.getenv('ENGINE') or 'memtx' - box.schema.space.create('no_index_space', { - format = { - {name = 'id', type = 'unsigned'}, - {name = 'bucket_id', type = 'unsigned'}, - {name = 'name', type = 'string'}, - }, - if_not_exists = true, - engine = engine, - }) - - local customers_space = box.schema.space.create('customers', { - format = { - {name = 'id', type = 'unsigned'}, - {name = 'bucket_id', type = 'unsigned'}, - {name = 'name', type = 'string'}, - {name = 'last_name', type = 'string'}, - {name = 'age', type = 'number'}, - {name = 'city', type = 'string'}, - }, - if_not_exists = true, - engine = engine, - }) - -- primary index - customers_space:create_index('id_index', { - parts = { {field = 'id'} }, - if_not_exists = true, - }) - customers_space:create_index('bucket_id', { - parts = { {field = 'bucket_id'} }, - unique = false, - if_not_exists = true, - }) - customers_space:create_index('age_index', { - parts = { {field = 'age'} }, - unique = false, - if_not_exists = true, - }) - -- indexes with same names as fields - customers_space:create_index('age', { - parts = { {field = 'age'} }, - unique = false, - if_not_exists = true, - }) - customers_space:create_index('id', { - parts = { {field = 'id'} }, - if_not_exists = true, - }) - customers_space:create_index('full_name', { - parts = { - {field = 'name', collation = 'unicode_ci'}, - {field = 'last_name', collation = 'unicode_ci'} , - }, - unique = false, - if_not_exists = true, - }) - - if crud_utils.tarantool_supports_uuids() then - local goods_space = box.schema.space.create('goods', { - format = { - {name = 'uuid', type = 'uuid'}, - {name = 'bucket_id', type = 'unsigned'}, - {name = 'name', type = 'string'}, - {name = 'category_id', type = 'uuid'}, - }, - if_not_exists = true, - engine = engine, - }) - --primary index - goods_space:create_index('uuid', { - parts = { {field = 'uuid'} }, - if_not_exists = true, - }) - goods_space:create_index('bucket_id', { - parts = { {field = 'bucket_id'} }, - unique = false, - if_not_exists = true, - }) - end - - local coord_space = box.schema.space.create('coord', { - format = { - {name = 'x', type = 'unsigned'}, - {name = 'y', type = 'unsigned'}, - {name = 'bucket_id', type = 'unsigned'}, - }, - if_not_exists = true, - engine = engine, - }) - -- primary index - coord_space:create_index('primary', { - parts = { - {field = 'x'}, - {field = 'y'}, - }, - if_not_exists = true, - }) - coord_space:create_index('bucket_id', { - parts = { {field = 'bucket_id'} }, - unique = false, - if_not_exists = true, - }) - - local book_translation = box.schema.space.create('book_translation', { - format = { - { name = 'id', type = 'unsigned' }, - { name = 'bucket_id', type = 'unsigned' }, - { name = 'language', type = 'string' }, - { name = 'edition', type = 'integer' }, - { name = 'translator', type = 'string' }, - { name = 'comments', type = 'string', is_nullable = true }, - }, - if_not_exists = true, - }) - - book_translation:create_index('id', { - parts = { 'id', 'language', 'edition' }, - if_not_exists = true, - }) - - book_translation:create_index('bucket_id', { - parts = { 'bucket_id' }, - unique = false, - if_not_exists = true, - }) - - local developers_space = box.schema.space.create('developers', { - format = { - {name = 'id', type = 'unsigned'}, - {name = 'bucket_id', type = 'unsigned'}, - {name = 'name', type = 'string'}, - {name = 'last_name', type = 'string'}, - {name = 'age', type = 'number'}, - {name = 'additional', type = 'any'}, - }, - if_not_exists = true, - engine = engine, - }) - - -- primary index - developers_space:create_index('id_index', { - parts = { 'id' }, - if_not_exists = true, - }) - - developers_space:create_index('bucket_id', { - parts = { 'bucket_id' }, - unique = false, - if_not_exists = true, - }) - - if crud_utils.tarantool_supports_jsonpath_indexes() then - local cars_space = box.schema.space.create('cars', { - format = { - {name = 'id', type = 'map'}, - {name = 'bucket_id', type = 'unsigned'}, - {name = 'age', type = 'number'}, - {name = 'manufacturer', type = 'string'}, - {name = 'data', type = 'map'} - }, - if_not_exists = true, - engine = engine, - }) - - -- primary index - cars_space:create_index('id_ind', { - parts = { - {1, 'unsigned', path = 'car_id.signed'}, - }, - if_not_exists = true, - }) - - cars_space:create_index('bucket_id', { - parts = { 'bucket_id' }, - unique = false, - if_not_exists = true, - }) - - cars_space:create_index('data_index', { - parts = { - {5, 'str', path = 'car.color'}, - {5, 'str', path = 'car.model'}, - }, - unique = false, - if_not_exists = true, - }) - end - - local logins_space = box.schema.space.create('logins', { - format = { - {name = 'id', type = 'unsigned'}, - {name = 'bucket_id', type = 'unsigned'}, - {name = 'city', type = 'string'}, - {name = 'name', type = 'string'}, - {name = 'last_login', type = 'number'}, - }, - if_not_exists = true, - engine = engine, - }) - - logins_space:create_index('id_index', { - parts = { 'id' }, - if_not_exists = true, - }) - - logins_space:create_index('bucket_id', { - parts = { 'bucket_id' }, - unique = false, - if_not_exists = true, - }) - - logins_space:create_index('city', { - parts = { 'city' }, - unique = false, - if_not_exists = true, - }) - - logins_space:create_index('last_login', { - parts = { 'last_login' }, - unique = false, - if_not_exists = true, - }) - - if crud_utils.tarantool_supports_decimals() then - local decimal_format = { - {name = 'id', type = 'unsigned'}, - {name = 'bucket_id', type = 'unsigned'}, - {name = 'decimal_field', type = 'decimal'}, - } - - - local decimal_nonindexed_space = box.schema.space.create('decimal_nonindexed', { - if_not_exists = true, - engine = engine, - }) - - decimal_nonindexed_space:format(decimal_format) - - decimal_nonindexed_space:create_index('id_index', { - parts = { 'id' }, - if_not_exists = true, - }) - - decimal_nonindexed_space:create_index('bucket_id', { - parts = { 'bucket_id' }, - unique = false, - if_not_exists = true, - }) - - - local decimal_indexed_space = box.schema.space.create('decimal_indexed', { - if_not_exists = true, - engine = engine, - }) - - decimal_indexed_space:format(decimal_format) - - decimal_indexed_space:create_index('id_index', { - parts = { 'id' }, - if_not_exists = true, - }) - - decimal_indexed_space:create_index('bucket_id', { - parts = { 'bucket_id' }, - unique = false, - if_not_exists = true, - }) - - decimal_indexed_space:create_index('decimal_index', { - parts = { 'decimal_field' }, - unique = false, - if_not_exists = true, - }) - - - local decimal_pk_space = box.schema.space.create('decimal_pk', { - if_not_exists = true, - engine = engine, - }) - - decimal_pk_space:format(decimal_format) - - decimal_pk_space:create_index('decimal_index', { - parts = { 'decimal_field' }, - if_not_exists = true, - }) - - decimal_pk_space:create_index('bucket_id', { - parts = { 'bucket_id' }, - unique = false, - if_not_exists = true, - }) - - - local decimal_multipart_index_space = box.schema.space.create('decimal_multipart_index', { - if_not_exists = true, - engine = engine, - }) - - decimal_multipart_index_space:format(decimal_format) - - decimal_multipart_index_space:create_index('id_index', { - parts = { 'id' }, - if_not_exists = true, - }) - - decimal_multipart_index_space:create_index('bucket_id', { - parts = { 'bucket_id' }, - unique = false, - if_not_exists = true, - }) - - decimal_multipart_index_space:create_index('decimal_index', { - parts = { 'id', 'decimal_field' }, - unique = false, - if_not_exists = true, - }) - end - - if crud_utils.tarantool_supports_datetimes() then - local datetime_format = { - {name = 'id', type = 'unsigned'}, - {name = 'bucket_id', type = 'unsigned'}, - {name = 'datetime_field', type = 'datetime'}, - } - - - local datetime_nonindexed_space = box.schema.space.create('datetime_nonindexed', { - if_not_exists = true, - engine = engine, - }) - - datetime_nonindexed_space:format(datetime_format) - - datetime_nonindexed_space:create_index('id_index', { - parts = { 'id' }, - if_not_exists = true, - }) - - datetime_nonindexed_space:create_index('bucket_id', { - parts = { 'bucket_id' }, - unique = false, - if_not_exists = true, - }) - - - local datetime_indexed_space = box.schema.space.create('datetime_indexed', { - if_not_exists = true, - engine = engine, - }) - - datetime_indexed_space:format(datetime_format) - - datetime_indexed_space:create_index('id_index', { - parts = { 'id' }, - if_not_exists = true, - }) - - datetime_indexed_space:create_index('bucket_id', { - parts = { 'bucket_id' }, - unique = false, - if_not_exists = true, - }) - - datetime_indexed_space:create_index('datetime_index', { - parts = { 'datetime_field' }, - unique = false, - if_not_exists = true, - }) - - - local datetime_pk_space = box.schema.space.create('datetime_pk', { - if_not_exists = true, - engine = engine, - }) - - datetime_pk_space:format(datetime_format) - - datetime_pk_space:create_index('datetime_index', { - parts = { 'datetime_field' }, - if_not_exists = true, - }) - - datetime_pk_space:create_index('bucket_id', { - parts = { 'bucket_id' }, - unique = false, - if_not_exists = true, - }) - - - local datetime_multipart_index_space = box.schema.space.create('datetime_multipart_index', { - if_not_exists = true, - engine = engine, - }) - - datetime_multipart_index_space:format(datetime_format) - - datetime_multipart_index_space:create_index('id_index', { - parts = { 'id' }, - if_not_exists = true, - }) - - datetime_multipart_index_space:create_index('bucket_id', { - parts = { 'bucket_id' }, - unique = false, - if_not_exists = true, - }) - - datetime_multipart_index_space:create_index('datetime_index', { - parts = { 'id', 'datetime_field' }, - unique = false, - if_not_exists = true, - }) - end - - if crud_utils.tarantool_supports_intervals() then - -- Interval is non-indexable. - local interval_space = box.schema.space.create('interval', { - if_not_exists = true, - engine = engine, - }) - - interval_space:format({ - {name = 'id', type = 'unsigned'}, - {name = 'bucket_id', type = 'unsigned'}, - {name = 'interval_field', type = 'interval'}, - }) - - interval_space:create_index('id_index', { - parts = { 'id' }, - if_not_exists = true, - }) - - interval_space:create_index('bucket_id', { - parts = { 'bucket_id' }, - unique = false, - if_not_exists = true, - }) - end -end diff --git a/test/entrypoint/srv_simple_operations/cartridge_init.lua b/test/entrypoint/srv_simple_operations/cartridge_init.lua index c4579622..e5f9c03f 100755 --- a/test/entrypoint/srv_simple_operations/cartridge_init.lua +++ b/test/entrypoint/srv_simple_operations/cartridge_init.lua @@ -3,6 +3,7 @@ require('strict').on() _G.is_initialized = function() return false end +local fio = require('fio') local log = require('log') local errors = require('errors') local cartridge = require('cartridge') @@ -13,10 +14,13 @@ else package.path = package.path .. debug.sourcedir() .. "/?.lua;" end +local root = fio.dirname(fio.dirname(fio.dirname(debug.sourcedir()))) +package.path = package.path .. root .. "/?.lua;" + package.preload['customers-storage'] = function() return { role_name = 'customers-storage', - init = require('storage_init') + init = require('storage').init, } end diff --git a/test/entrypoint/srv_simple_operations/storage.lua b/test/entrypoint/srv_simple_operations/storage.lua new file mode 100644 index 00000000..a487a589 --- /dev/null +++ b/test/entrypoint/srv_simple_operations/storage.lua @@ -0,0 +1,135 @@ +local helper = require('test.helper') + +return { + init = helper.wrap_schema_init(function() + local engine = os.getenv('ENGINE') or 'memtx' + local customers_space = box.schema.space.create('customers', { + format = { + {name = 'id', type = 'unsigned'}, + {name = 'bucket_id', type = 'unsigned'}, + {name = 'name', type = 'string'}, + {name = 'age', type = 'number'}, + }, + if_not_exists = true, + engine = engine, + }) + customers_space:create_index('id', { + parts = { {field = 'id'} }, + if_not_exists = true, + }) + customers_space:create_index('bucket_id', { + parts = { {field = 'bucket_id'} }, + unique = false, + if_not_exists = true, + }) + + local developers_space = box.schema.space.create('developers', { + format = { + {name = 'id', type = 'unsigned'}, + {name = 'bucket_id', type = 'unsigned'}, + }, + if_not_exists = true, + engine = engine, + }) + developers_space:create_index('id', { + parts = { {field = 'id'} }, + if_not_exists = true, + }) + developers_space:create_index('bucket_id', { + parts = { {field = 'bucket_id'} }, + unique = false, + if_not_exists = true, + }) + + rawset(_G, 'add_extra_field', function(space_name, field_name) + local space = box.space[space_name] + local new_format = space:format() + table.insert(new_format, {name = field_name, type = 'any', is_nullable = true}) + space:format(new_format) + end) + + rawset(_G, 'create_space_for_gh_326_cases', function() + local countries_space = box.schema.space.create('countries', { + format = { + {name = 'id', type = 'unsigned'}, + {name = 'bucket_id', type = 'unsigned'}, + {name = 'name', type = 'string'}, + {name = 'population', type = 'unsigned'}, + }, + if_not_exists = true, + engine = os.getenv('ENGINE') or 'memtx', + }) + countries_space:create_index('id', { + parts = { {field = 'id'} }, + if_not_exists = true, + }) + countries_space:create_index('bucket_id', { + parts = { {field = 'bucket_id'} }, + unique = false, + if_not_exists = true, + }) + end) + + rawset(_G, 'drop_space_for_gh_326_cases', function() + box.space['countries']:drop() + end) + + -- Space with huge amount of nullable fields + -- an object that inserted in such space should get + -- explicit nulls in absence fields otherwise + -- Tarantool serializers could consider such object as map (not array). + local tags_space = box.schema.space.create('tags', { + format = { + {name = 'id', type = 'unsigned'}, + {name = 'bucket_id', type = 'unsigned'}, + {name = 'is_red', type = 'boolean', is_nullable = true}, + {name = 'is_green', type = 'boolean', is_nullable = true}, + {name = 'is_blue', type = 'boolean', is_nullable = true}, + {name = 'is_yellow', type = 'boolean', is_nullable = true}, + {name = 'is_sweet', type = 'boolean', is_nullable = true}, + {name = 'is_dirty', type = 'boolean', is_nullable = true}, + {name = 'is_long', type = 'boolean', is_nullable = true}, + {name = 'is_short', type = 'boolean', is_nullable = true}, + {name = 'is_useful', type = 'boolean', is_nullable = true}, + {name = 'is_correct', type = 'boolean', is_nullable = true}, + }, + if_not_exists = true, + engine = engine, + }) + + tags_space:create_index('id', { + parts = { {field = 'id'} }, + if_not_exists = true, + }) + tags_space:create_index('bucket_id', { + parts = { {field = 'bucket_id'} }, + unique = false, + if_not_exists = true, + }) + + local sequence_space = box.schema.space.create('notebook', { + format = { + {name = 'local_id', type = 'unsigned', is_nullable = false}, + {name = 'bucket_id', type = 'unsigned', is_nullable = false}, + {name = 'record', type = 'string', is_nullable = false}, + }, + if_not_exists = true, + engine = engine, + }) + + box.schema.sequence.create('local_id', {if_not_exists = true}) + + sequence_space:create_index('local_id', { + parts = { {field = 'local_id'} }, + unique = true, + if_not_exists = true, + sequence = 'local_id', + }) + sequence_space:create_index('bucket_id', { + parts = { {field = 'bucket_id'} }, + unique = false, + if_not_exists = true, + }) + end), + wait_until_ready = helper.wait_schema_init, +} diff --git a/test/entrypoint/srv_simple_operations/storage_init.lua b/test/entrypoint/srv_simple_operations/storage_init.lua deleted file mode 100644 index af90840b..00000000 --- a/test/entrypoint/srv_simple_operations/storage_init.lua +++ /dev/null @@ -1,134 +0,0 @@ -return function() - if box.info.ro == true then - return - end - - local engine = os.getenv('ENGINE') or 'memtx' - local customers_space = box.schema.space.create('customers', { - format = { - {name = 'id', type = 'unsigned'}, - {name = 'bucket_id', type = 'unsigned'}, - {name = 'name', type = 'string'}, - {name = 'age', type = 'number'}, - }, - if_not_exists = true, - engine = engine, - }) - customers_space:create_index('id', { - parts = { {field = 'id'} }, - if_not_exists = true, - }) - customers_space:create_index('bucket_id', { - parts = { {field = 'bucket_id'} }, - unique = false, - if_not_exists = true, - }) - - local developers_space = box.schema.space.create('developers', { - format = { - {name = 'id', type = 'unsigned'}, - {name = 'bucket_id', type = 'unsigned'}, - }, - if_not_exists = true, - engine = engine, - }) - developers_space:create_index('id', { - parts = { {field = 'id'} }, - if_not_exists = true, - }) - developers_space:create_index('bucket_id', { - parts = { {field = 'bucket_id'} }, - unique = false, - if_not_exists = true, - }) - - rawset(_G, 'add_extra_field', function(space_name, field_name) - local space = box.space[space_name] - local new_format = space:format() - table.insert(new_format, {name = field_name, type = 'any', is_nullable = true}) - space:format(new_format) - end) - - rawset(_G, 'create_space_for_gh_326_cases', function() - local countries_space = box.schema.space.create('countries', { - format = { - {name = 'id', type = 'unsigned'}, - {name = 'bucket_id', type = 'unsigned'}, - {name = 'name', type = 'string'}, - {name = 'population', type = 'unsigned'}, - }, - if_not_exists = true, - engine = os.getenv('ENGINE') or 'memtx', - }) - countries_space:create_index('id', { - parts = { {field = 'id'} }, - if_not_exists = true, - }) - countries_space:create_index('bucket_id', { - parts = { {field = 'bucket_id'} }, - unique = false, - if_not_exists = true, - }) - end) - - rawset(_G, 'drop_space_for_gh_326_cases', function() - box.space['countries']:drop() - end) - - -- Space with huge amount of nullable fields - -- an object that inserted in such space should get - -- explicit nulls in absence fields otherwise - -- Tarantool serializers could consider such object as map (not array). - local tags_space = box.schema.space.create('tags', { - format = { - {name = 'id', type = 'unsigned'}, - {name = 'bucket_id', type = 'unsigned'}, - {name = 'is_red', type = 'boolean', is_nullable = true}, - {name = 'is_green', type = 'boolean', is_nullable = true}, - {name = 'is_blue', type = 'boolean', is_nullable = true}, - {name = 'is_yellow', type = 'boolean', is_nullable = true}, - {name = 'is_sweet', type = 'boolean', is_nullable = true}, - {name = 'is_dirty', type = 'boolean', is_nullable = true}, - {name = 'is_long', type = 'boolean', is_nullable = true}, - {name = 'is_short', type = 'boolean', is_nullable = true}, - {name = 'is_useful', type = 'boolean', is_nullable = true}, - {name = 'is_correct', type = 'boolean', is_nullable = true}, - }, - if_not_exists = true, - engine = engine, - }) - - tags_space:create_index('id', { - parts = { {field = 'id'} }, - if_not_exists = true, - }) - tags_space:create_index('bucket_id', { - parts = { {field = 'bucket_id'} }, - unique = false, - if_not_exists = true, - }) - - local sequence_space = box.schema.space.create('notebook', { - format = { - {name = 'local_id', type = 'unsigned', is_nullable = false}, - {name = 'bucket_id', type = 'unsigned', is_nullable = false}, - {name = 'record', type = 'string', is_nullable = false}, - }, - if_not_exists = true, - engine = engine, - }) - - box.schema.sequence.create('local_id', {if_not_exists = true}) - - sequence_space:create_index('local_id', { - parts = { {field = 'local_id'} }, - unique = true, - if_not_exists = true, - sequence = 'local_id', - }) - sequence_space:create_index('bucket_id', { - parts = { {field = 'bucket_id'} }, - unique = false, - if_not_exists = true, - }) -end diff --git a/test/entrypoint/srv_stats/cartridge_init.lua b/test/entrypoint/srv_stats/cartridge_init.lua index 3cdd3ccf..429a4be8 100755 --- a/test/entrypoint/srv_stats/cartridge_init.lua +++ b/test/entrypoint/srv_stats/cartridge_init.lua @@ -3,6 +3,7 @@ require('strict').on() _G.is_initialized = function() return false end +local fio = require('fio') local log = require('log') local errors = require('errors') local cartridge = require('cartridge') @@ -15,10 +16,13 @@ else package.path = package.path .. debug.sourcedir() .. "/?.lua;" end +local root = fio.dirname(fio.dirname(fio.dirname(debug.sourcedir()))) +package.path = package.path .. root .. "/?.lua;" + package.preload['customers-storage'] = function() return { role_name = 'customers-storage', - init = require('storage_init'), + init = require('storage').init, } end diff --git a/test/entrypoint/srv_stats/storage.lua b/test/entrypoint/srv_stats/storage.lua new file mode 100644 index 00000000..62a41cde --- /dev/null +++ b/test/entrypoint/srv_stats/storage.lua @@ -0,0 +1,36 @@ +local helper = require('test.helper') + +return { + init = helper.wrap_schema_init(function() + local engine = os.getenv('ENGINE') or 'memtx' + local customers_space = box.schema.space.create('customers', { + format = { + {name = 'id', type = 'unsigned'}, + {name = 'bucket_id', type = 'unsigned'}, + {name = 'name', type = 'string'}, + {name = 'last_name', type = 'string'}, + {name = 'age', type = 'number'}, + {name = 'city', type = 'string'}, + }, + if_not_exists = true, + engine = engine, + id = 542, + }) + -- primary index + customers_space:create_index('id_index', { + parts = { {field = 'id'} }, + if_not_exists = true, + }) + customers_space:create_index('bucket_id', { + parts = { {field = 'bucket_id'} }, + unique = false, + if_not_exists = true, + }) + customers_space:create_index('age_index', { + parts = { {field = 'age'} }, + unique = false, + if_not_exists = true, + }) + end), + wait_until_ready = helper.wait_schema_init, +} diff --git a/test/entrypoint/srv_stats/storage_init.lua b/test/entrypoint/srv_stats/storage_init.lua deleted file mode 100644 index d64d5fc1..00000000 --- a/test/entrypoint/srv_stats/storage_init.lua +++ /dev/null @@ -1,35 +0,0 @@ -return function() - if box.info.ro == true then - return - end - - local engine = os.getenv('ENGINE') or 'memtx' - local customers_space = box.schema.space.create('customers', { - format = { - {name = 'id', type = 'unsigned'}, - {name = 'bucket_id', type = 'unsigned'}, - {name = 'name', type = 'string'}, - {name = 'last_name', type = 'string'}, - {name = 'age', type = 'number'}, - {name = 'city', type = 'string'}, - }, - if_not_exists = true, - engine = engine, - id = 542, - }) - -- primary index - customers_space:create_index('id_index', { - parts = { {field = 'id'} }, - if_not_exists = true, - }) - customers_space:create_index('bucket_id', { - parts = { {field = 'bucket_id'} }, - unique = false, - if_not_exists = true, - }) - customers_space:create_index('age_index', { - parts = { {field = 'age'} }, - unique = false, - if_not_exists = true, - }) -end diff --git a/test/entrypoint/srv_update_schema/cartridge_init.lua b/test/entrypoint/srv_update_schema/cartridge_init.lua index ba9b4274..01ef07fe 100755 --- a/test/entrypoint/srv_update_schema/cartridge_init.lua +++ b/test/entrypoint/srv_update_schema/cartridge_init.lua @@ -3,6 +3,7 @@ require('strict').on() _G.is_initialized = function() return false end +local fio = require('fio') local log = require('log') local errors = require('errors') local cartridge = require('cartridge') @@ -13,10 +14,13 @@ else package.path = package.path .. debug.sourcedir() .. "/?.lua;" end +local root = fio.dirname(fio.dirname(fio.dirname(debug.sourcedir()))) +package.path = package.path .. root .. "/?.lua;" + package.preload['customers-storage'] = function() return { role_name = 'customers-storage', - init = require('storage_init'), + init = require('storage').init, } end diff --git a/test/entrypoint/srv_update_schema/storage.lua b/test/entrypoint/srv_update_schema/storage.lua new file mode 100644 index 00000000..675e0dae --- /dev/null +++ b/test/entrypoint/srv_update_schema/storage.lua @@ -0,0 +1,72 @@ +return { + init = function() + local engine = os.getenv('ENGINE') or 'memtx' + rawset(_G, 'create_space', function() + local customers_space = box.schema.space.create('customers', { + format = { + {name = 'id', type = 'unsigned'}, + {name = 'bucket_id', type = 'unsigned'}, + {name = 'value', type = 'string'}, + {name = 'number', type = 'integer', is_nullable = true}, + }, + if_not_exists = true, + engine = engine, + }) + + -- primary index + customers_space:create_index('id_index', { + parts = { {field = 'id'} }, + if_not_exists = true, + }) + end) + + rawset(_G, 'create_bucket_id_index', function() + box.space.customers:create_index('bucket_id', { + parts = { {field = 'bucket_id'} }, + if_not_exists = true, + unique = false, + }) + end) + + rawset(_G, 'set_value_type_to_unsigned', function() + local new_format = {} + + for _, field_format in ipairs(box.space.customers:format()) do + if field_format.name == 'value' then + field_format.type = 'unsigned' + end + table.insert(new_format, field_format) + end + + box.space.customers:format(new_format) + end) + + rawset(_G, 'add_extra_field', function() + local new_format = box.space.customers:format() + table.insert(new_format, {name = 'extra', type = 'string', is_nullable = true}) + box.space.customers:format(new_format) + end) + + rawset(_G, 'add_value_index', function() + box.space.customers:create_index('value_index', { + parts = { {field = 'value'} }, + if_not_exists = true, + unique = false, + }) + end) + + rawset(_G, 'create_number_value_index', function() + box.space.customers:create_index('number_value_index', { + parts = { {field = 'number'}, {field = 'value'} }, + if_not_exists = true, + unique = false, + }) + end) + + rawset(_G, 'alter_number_value_index', function() + box.space.customers.index.number_value_index:alter({ + parts = { {field = 'value'}, {field = 'number'} }, + }) + end) + end, +} diff --git a/test/entrypoint/srv_update_schema/storage_init.lua b/test/entrypoint/srv_update_schema/storage_init.lua deleted file mode 100644 index 0c81fa88..00000000 --- a/test/entrypoint/srv_update_schema/storage_init.lua +++ /dev/null @@ -1,74 +0,0 @@ -return function() - if box.info.ro == true then - return - end - - local engine = os.getenv('ENGINE') or 'memtx' - rawset(_G, 'create_space', function() - local customers_space = box.schema.space.create('customers', { - format = { - {name = 'id', type = 'unsigned'}, - {name = 'bucket_id', type = 'unsigned'}, - {name = 'value', type = 'string'}, - {name = 'number', type = 'integer', is_nullable = true}, - }, - if_not_exists = true, - engine = engine, - }) - - -- primary index - customers_space:create_index('id_index', { - parts = { {field = 'id'} }, - if_not_exists = true, - }) - end) - - rawset(_G, 'create_bucket_id_index', function() - box.space.customers:create_index('bucket_id', { - parts = { {field = 'bucket_id'} }, - if_not_exists = true, - unique = false, - }) - end) - - rawset(_G, 'set_value_type_to_unsigned', function() - local new_format = {} - - for _, field_format in ipairs(box.space.customers:format()) do - if field_format.name == 'value' then - field_format.type = 'unsigned' - end - table.insert(new_format, field_format) - end - - box.space.customers:format(new_format) - end) - - rawset(_G, 'add_extra_field', function() - local new_format = box.space.customers:format() - table.insert(new_format, {name = 'extra', type = 'string', is_nullable = true}) - box.space.customers:format(new_format) - end) - - rawset(_G, 'add_value_index', function() - box.space.customers:create_index('value_index', { - parts = { {field = 'value'} }, - if_not_exists = true, - unique = false, - }) - end) - - rawset(_G, 'create_number_value_index', function() - box.space.customers:create_index('number_value_index', { - parts = { {field = 'number'}, {field = 'value'} }, - if_not_exists = true, - unique = false, - }) - end) - - rawset(_G, 'alter_number_value_index', function() - box.space.customers.index.number_value_index:alter({ - parts = { {field = 'value'}, {field = 'number'} }, - }) - end) -end diff --git a/test/helper.lua b/test/helper.lua index 0e10eee5..6f7a9fe4 100644 --- a/test/helper.lua +++ b/test/helper.lua @@ -2,13 +2,17 @@ require('strict').on() local t = require('luatest') local vtest = require('test.vshard_helpers.vtest') +local vclock_utils = require('test.vshard_helpers.vclock') local luatest_capture = require('luatest.capture') local luatest_helpers = require('luatest.helpers') local luatest_utils = require('luatest.utils') local checks = require('checks') +local clock = require('clock') local digest = require('digest') +local fiber = require('fiber') +local json = require('json') local fio = require('fio') local crud = require('crud') @@ -87,15 +91,15 @@ local function entrypoint_vshard(name, entrypoint, err) end function helpers.entrypoint_vshard_storage(name) - return entrypoint_vshard(name, 'storage_init', true) + return entrypoint_vshard(name, 'storage', true) end function helpers.entrypoint_vshard_router(name) - return entrypoint_vshard(name, 'router_init', true) + return entrypoint_vshard(name, 'router', true) end function helpers.entrypoint_vshard_all(name) - return entrypoint_vshard(name, 'all_init', true) + return entrypoint_vshard(name, 'all', true) end function helpers.table_keys(t) @@ -116,7 +120,13 @@ function helpers.get_results_list(results_map) return results_list end -function helpers.box_cfg() +function helpers.box_cfg(opts) + opts = opts or {} + + if opts.wait_rw == nil then + opts.wait_rw = true + end + if type(box.cfg) ~= 'function' then return end @@ -127,13 +137,20 @@ function helpers.box_cfg() wal_mode = 'none', }) fio.rmtree(tempdir) + + if opts.wait_rw then + t.helpers.retrying( + {timeout = 3, delay = 0.1}, + t.assert_equals, box.info.ro, false + ) + end end function helpers.insert_objects(g, space_name, objects) local inserted_objects = {} for _, obj in ipairs(objects) do - local result, err = g.cluster.main_server.net_box:call('crud.insert_object', {space_name, obj}) + local result, err = g.router:call('crud.insert_object', {space_name, obj}) t.assert_equals(err, nil) @@ -354,7 +371,7 @@ function helpers.assert_ge(actual, expected, message) end function helpers.get_other_storage_bucket_id(cluster, bucket_id) - return cluster.main_server.net_box:eval([[ + return cluster:server('router'):eval([[ local vshard = require('vshard') local bucket_id = ... @@ -392,7 +409,7 @@ end helpers.tarantool_version_at_least = crud_utils.tarantool_version_at_least function helpers.update_sharding_key_cache(cluster, space_name) - return cluster.main_server.net_box:eval([[ + return cluster:server('router'):eval([[ local sharding_key = require('crud.common.sharding_key') local space_name = ... @@ -401,7 +418,7 @@ function helpers.update_sharding_key_cache(cluster, space_name) end function helpers.get_sharding_key_cache(cluster) - return cluster.main_server.net_box:eval([[ + return cluster:server('router'):eval([[ local vshard = require('vshard') local sharding_metadata_cache = require('crud.common.sharding.router_metadata_cache') @@ -416,7 +433,7 @@ end -- object through net.box that's why we get a sign of record -- existence of cache but not the cache itself function helpers.update_sharding_func_cache(cluster, space_name) - return cluster.main_server.net_box:eval([[ + return cluster:server('router'):eval([[ local sharding_func = require('crud.common.sharding_func') local space_name = ... @@ -433,7 +450,7 @@ end -- object through net.box that's why we get size of cache -- but not the cache itself function helpers.get_sharding_func_cache_size(cluster) - return cluster.main_server.net_box:eval([[ + return cluster:server('router'):eval([[ local vshard = require('vshard') local sharding_metadata_cache = require('crud.common.sharding.router_metadata_cache') @@ -704,16 +721,23 @@ function helpers.start_default_cluster(g, srv_name) local vshard_cfg = { sharding = helpers.get_test_vshard_sharding(), bucket_count = 3000, - storage_init = entrypoint_vshard(srv_name, 'storage_init', false), - router_init = entrypoint_vshard(srv_name, 'router_init', false), - all_init = entrypoint_vshard(srv_name, 'all_init', false), + storage_entrypoint = entrypoint_vshard(srv_name, 'storage', false), + router_entrypoint = entrypoint_vshard(srv_name, 'router', false), + all_entrypoint = entrypoint_vshard(srv_name, 'all', false), crud_init = true, } helpers.start_cluster(g, cartridge_cfg, vshard_cfg) end -function helpers.start_cluster(g, cartridge_cfg, vshard_cfg) +function helpers.start_cluster(g, cartridge_cfg, vshard_cfg, opts) + checks('table', '?table', '?table', {wait_crud_is_ready = '?boolean'}) + + opts = opts or {} + if opts.wait_crud_is_ready == nil then + opts.wait_crud_is_ready = true + end + if g.params.backend == helpers.backend.CARTRIDGE then helpers.skip_cartridge_unsupported() @@ -724,6 +748,17 @@ function helpers.start_cluster(g, cartridge_cfg, vshard_cfg) g.cfg = cfg g.cluster = helpers.Cluster:new(cfg) + + for k, server in ipairs(g.cluster.servers) do + local mt = getmetatable(server) + + local extended_mt = table.deepcopy(mt) + extended_mt.__index = vclock_utils.extend_with_vclock_methods(extended_mt.__index) + + g.cluster.servers[k] = setmetatable(server, extended_mt) + end + g.cluster.main_server = g.cluster.servers[1] + g.cluster:start() elseif g.params.backend == helpers.backend.VSHARD then local cfg = table.deepcopy(vshard_cfg) @@ -733,21 +768,106 @@ function helpers.start_cluster(g, cartridge_cfg, vshard_cfg) vtest.cluster_new(g, g.cfg) g.cfg.engine = nil end + + g.router = g.cluster:server('router') + assert(g.router ~= nil, 'router found') + + if opts.wait_crud_is_ready then + helpers.wait_crud_is_ready_on_cluster(g) + end end -function helpers.stop_cluster(cluster, backend) +local function count_storages_in_topology(g, backend, vshard_group, storage_roles) + local storages_in_topology = 0 if backend == helpers.backend.CARTRIDGE then - helpers.stop_cartridge_cluster(cluster) + for _, replicaset in ipairs(g.cfg.replicasets) do + local is_storage = helpers.does_replicaset_have_one_of_cartridge_roles(replicaset, storage_roles) + local is_part_of_vshard_group = replicaset.vshard_group == vshard_group + + if is_storage and is_part_of_vshard_group then + storages_in_topology = storages_in_topology + #replicaset.servers + end + end elseif backend == helpers.backend.VSHARD then - cluster:drop() + for _, storage_replicaset in pairs(g.cfg.sharding) do + for _, _ in pairs(storage_replicaset.replicas) do + storages_in_topology = storages_in_topology + 1 + end + end end + + return storages_in_topology end -function helpers.get_router(cluster, backend) +function helpers.does_replicaset_have_one_of_cartridge_roles(replicaset, expected_roles) + for _, actual_role in ipairs(replicaset.roles) do + for _, expected_role in ipairs(expected_roles) do + if expected_role == actual_role then + return true + end + end + end + + return false +end + +local function assert_expected_number_of_storages_is_running(g, vshard_group, expected_number) + local res, err = g.router:call('crud.storage_info', {{vshard_router = vshard_group}}) + assert( + err == nil, + ('crud is not bootstrapped: error on getting storage info: %s'):format(err) + ) + + local running_storages = 0 + for _, storage in pairs(res) do + if storage.status == 'running' then + running_storages = running_storages + 1 + end + end + + assert( + running_storages == expected_number, + ('crud is not bootstrapped: expected %d running storages, got the following storage info: %s'):format( + expected_number, json.encode(res)) + ) + + return true +end + +function helpers.wait_crud_is_ready_on_cluster(g, opts) + checks('table', { + backend = '?string', + vshard_group = '?string', + storage_roles = '?table', + }) + + opts = opts or {} + + if opts.backend == nil then + opts.backend = g.params.backend + end + assert(opts.backend ~= nil) + + if opts.storage_roles == nil then + opts.storage_roles = {'crud-storage'} + end + + local storages_in_topology = count_storages_in_topology(g, opts.backend, opts.vshard_group, opts.storage_roles) + + local WAIT_TIMEOUT = 5 + local DELAY = 0.1 + t.helpers.retrying( + {timeout = WAIT_TIMEOUT, delay = DELAY}, + assert_expected_number_of_storages_is_running, + g, opts.vshard_group, storages_in_topology + ) +end + +function helpers.stop_cluster(cluster, backend) if backend == helpers.backend.CARTRIDGE then - return cluster:server('router') + helpers.stop_cartridge_cluster(cluster) elseif backend == helpers.backend.VSHARD then - return cluster.main_server + cluster:drop() end end @@ -947,7 +1067,7 @@ end function helpers.prepare_ordered_data(g, space, expected_objects, bucket_id, order_condition) helpers.insert_objects(g, space, expected_objects) - local resp, err = g.cluster.main_server:call('crud.select', { + local resp, err = g.router:call('crud.select', { space, {order_condition}, {bucket_id = bucket_id, mode = 'write'}, @@ -1004,4 +1124,134 @@ function helpers.merge_tables(t1, t2, ...) return helpers.merge_tables(res, ...) end +function helpers.wait_cluster_replication_finished(g) + if g.params.backend == helpers.backend.CARTRIDGE then + for _, replicaset in ipairs(g.cfg.replicasets) do + local server_names = {} + for _, server in ipairs(replicaset.servers) do + table.insert(server_names, server.alias) + end + + helpers.wait_replicaset_replication_finished(g, server_names) + end + elseif g.params.backend == helpers.backend.VSHARD then + for _, storage_replicaset in pairs(g.cfg.sharding) do + local server_names = {} + for name, _ in pairs(storage_replicaset.replicas) do + table.insert(server_names, name) + end + + helpers.wait_replicaset_replication_finished(g, server_names) + end + end +end + +function helpers.wait_replicaset_replication_finished(g, server_names) + for _, etalon_server_name in ipairs(server_names) do + local etalon_server = g.cluster:server(etalon_server_name) + + for _, current_server_name in ipairs(server_names) do + local current_server = g.cluster:server(current_server_name) + + if current_server ~= etalon_server then + current_server:wait_vclock_of(etalon_server) + end + end + end +end + +function helpers.is_lua_persistent_func_supported() + -- https://github.com/tarantool/tarantool/commit/200a492aa771e50af86a4754b41a5e373fa7a354 + local tarantool_version = luatest_utils.get_tarantool_version() + return luatest_utils.version_ge(tarantool_version, luatest_utils.version(2, 2, 1)) +end + +helpers.SCHEMA_INIT_STARTED_FLAG = '_schema_init_started' +helpers.SCHEMA_READY_FLAG = '_is_schema_ready' + +function helpers.set_func_flag(flag) + box.schema.func.create(flag, { + language = 'LUA', + body = 'function() return true end', + if_not_exists = true, + }) +end + +function helpers.is_func_flag(flag) + local status, ready = pcall(box.schema.func.call, flag) + return status and ready +end + +function helpers.wait_func_flag(flag) + local TIMEOUT = 5 + local start = clock.monotonic() + + while clock.monotonic() - start < TIMEOUT do + if helpers.is_func_flag(flag) then + return true + end + + fiber.sleep(0.05) + end + + error('timeout while waiting for a flag') +end + +function helpers.wrap_schema_init(init_func) + -- Do not implement waiting for Tarantool 1.10. + if not helpers.is_lua_persistent_func_supported() then + return function() + if box.info.ro then + return + end + + init_func() + end + end + + local function wrapped_init_func() + if box.info.ro then + return + end + + -- Do not call init several times: it may break the tests which alter schema. + if helpers.is_func_flag(helpers.SCHEMA_INIT_STARTED_FLAG) then + return + end + + helpers.set_func_flag(helpers.SCHEMA_INIT_STARTED_FLAG) + + init_func() + + helpers.set_func_flag(helpers.SCHEMA_READY_FLAG) + end + + if rawget(box, 'watch') ~= nil then + return function() + box.watch('box.status', wrapped_init_func) + end + else + return function() + fiber.create(function() + fiber.self():name('schema_init') + + while true do + wrapped_init_func() + + fiber.sleep(0.05) + end + end) + end + end +end + +function helpers.wait_schema_init() + -- Do not implement waiting for Tarantool 1.10. + if not helpers.is_lua_persistent_func_supported() then + return true + end + + return helpers.wait_func_flag(helpers.SCHEMA_READY_FLAG) +end + return helpers diff --git a/test/integration/borders_test.lua b/test/integration/borders_test.lua index 52a5412e..f49b08c9 100644 --- a/test/integration/borders_test.lua +++ b/test/integration/borders_test.lua @@ -6,13 +6,12 @@ local helpers = require('test.helper') local pgroup = t.group('borders', helpers.backend_matrix({ {engine = 'memtx'}, - {engine = 'vinyl'}, })) pgroup.before_all(function(g) helpers.start_default_cluster(g, 'srv_select') - g.space_format = g.cluster.servers[2].net_box.space.customers:format() + g.space_format = g.cluster:server('s1-master').net_box.space.customers:format() end) pgroup.after_all(function(g) @@ -26,17 +25,21 @@ end) pgroup.test_non_existent_space = function(g) -- min - local result, err = g.cluster.main_server.net_box:call( - 'crud.min', {'non_existent_space'} - ) + local result, err = g.router:call('crud.min', { + 'non_existent_space', + nil, + {mode = 'write'}, + }) t.assert_equals(result, nil) t.assert_str_contains(err.err, "Space \"non_existent_space\" doesn't exist") -- max - local result, err = g.cluster.main_server.net_box:call( - 'crud.max', {'non_existent_space'} - ) + local result, err = g.router:call('crud.max', { + 'non_existent_space', + nil, + {mode = 'write'}, + }) t.assert_equals(result, nil) t.assert_str_contains(err.err, "Space \"non_existent_space\" doesn't exist") @@ -44,31 +47,39 @@ end pgroup.test_non_existent_index = function(g) -- min - local result, err = g.cluster.main_server.net_box:call( - 'crud.min', {'customers', 'non_existent_index'} - ) + local result, err = g.router:call('crud.min', { + 'customers', + 'non_existent_index', + {mode = 'write'}, + }) t.assert_equals(result, nil) t.assert_str_contains(err.err, "Index \"non_existent_index\" of space \"customers\" doesn't exist") - local result, err = g.cluster.main_server.net_box:call( - 'crud.min', {'customers', 13} - ) + local result, err = g.router:call('crud.min', { + 'customers', + 13, + {mode = 'write'}, + }) t.assert_equals(result, nil) t.assert_str_contains(err.err, "Index \"13\" of space \"customers\" doesn't exist") -- max - local result, err = g.cluster.main_server.net_box:call( - 'crud.max', {'customers', 'non_existent_index'} - ) + local result, err = g.router:call('crud.max', { + 'customers', + 'non_existent_index', + {mode = 'write'}, + }) t.assert_equals(result, nil) t.assert_str_contains(err.err, "Index \"non_existent_index\" of space \"customers\" doesn't exist") - local result, err = g.cluster.main_server.net_box:call( - 'crud.max', {'customers', 13} - ) + local result, err = g.router:call('crud.max', { + 'customers', + 13, + {mode = 'write'}, + }) t.assert_equals(result, nil) t.assert_str_contains(err.err, "Index \"13\" of space \"customers\" doesn't exist") @@ -76,33 +87,41 @@ end pgroup.test_empty_space = function(g) -- min - local result, err = g.cluster.main_server.net_box:call( - 'crud.min', {'customers'} - ) + local result, err = g.router:call('crud.min', { + 'customers', + nil, + {mode = 'write'}, + }) t.assert_equals(err, nil) t.assert_equals(#result.rows, 0) -- min by age index with fields - local result, err = g.cluster.main_server.net_box:call( - 'crud.min', {'customers', 'age_index', {fields = {'name'}}} - ) + local result, err = g.router:call('crud.min', { + 'customers', + 'age_index', + {fields = {'name'}, mode = 'write'}, + }) t.assert_equals(err, nil) t.assert_equals(#result.rows, 0) -- max - local result, err = g.cluster.main_server.net_box:call( - 'crud.max', {'customers'} - ) + local result, err = g.router:call('crud.max', { + 'customers', + nil, + {mode = 'write'}, + }) t.assert_equals(err, nil) t.assert_equals(#result.rows, 0) -- max by age index with fields - local result, err = g.cluster.main_server.net_box:call( - 'crud.max', {'customers', 'age_index', {fields = {'name'}}} - ) + local result, err = g.router:call('crud.max', { + 'customers', + 'age_index', + {fields = {'name'}, mode = 'write'}, + }) t.assert_equals(err, nil) t.assert_equals(#result.rows, 0) @@ -128,7 +147,7 @@ pgroup.test_min = function(g) table.sort(customers, function(obj1, obj2) return obj1.id < obj2.id end) -- by primary - local result, err = g.cluster.main_server.net_box:call('crud.min', { + local result, err = g.router:call('crud.min', { 'customers', nil, {mode = 'write'}, }) t.assert_equals(err, nil) @@ -136,7 +155,7 @@ pgroup.test_min = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(customers, {1})) -- by primary, index ID is specified - local result, err = g.cluster.main_server.net_box:call('crud.min', { + local result, err = g.router:call('crud.min', { 'customers', 0, {mode = 'write'}, }) t.assert_equals(err, nil) @@ -144,7 +163,7 @@ pgroup.test_min = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(customers, {1})) -- by primary with fields - local result, err = g.cluster.main_server.net_box:call('crud.min', { + local result, err = g.router:call('crud.min', { 'customers', nil, {fields = {'name', 'last_name'}, mode = 'write'}, }) t.assert_equals(err, nil) @@ -152,7 +171,7 @@ pgroup.test_min = function(g) t.assert_equals(objects, {{name = "Elizabeth", last_name = "Jackson"}}) -- by age index - local result, err = g.cluster.main_server.net_box:call('crud.min', { + local result, err = g.router:call('crud.min', { 'customers', 'age_index', {mode = 'write'}, }) t.assert_equals(err, nil) @@ -160,7 +179,7 @@ pgroup.test_min = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(customers, {4})) -- by age index, index ID is specified - local result, err = g.cluster.main_server.net_box:call('crud.min', { + local result, err = g.router:call('crud.min', { 'customers', 2, {mode = 'write'}, }) t.assert_equals(err, nil) @@ -168,7 +187,7 @@ pgroup.test_min = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(customers, {4})) -- by age index with fields - local result, err = g.cluster.main_server.net_box:call('crud.min', { + local result, err = g.router:call('crud.min', { 'customers', 'age_index', {fields = {'name', 'last_name'}, mode = 'write'}, }) t.assert_equals(err, nil) @@ -176,7 +195,7 @@ pgroup.test_min = function(g) t.assert_equals(objects, {{name = "William", last_name = "White"}}) -- by composite index full_name - local result, err = g.cluster.main_server.net_box:call('crud.min', { + local result, err = g.router:call('crud.min', { 'customers', 'full_name', {mode = 'write'}, }) t.assert_equals(err, nil) @@ -184,7 +203,7 @@ pgroup.test_min = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(customers, {3})) -- by composite index full_name, index ID is specified - local result, err = g.cluster.main_server.net_box:call('crud.min', { + local result, err = g.router:call('crud.min', { 'customers', 5, {mode = 'write'}, }) t.assert_equals(err, nil) @@ -192,7 +211,7 @@ pgroup.test_min = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(customers, {3})) -- by composite index full_name with fields - local result, err = g.cluster.main_server.net_box:call('crud.min', { + local result, err = g.router:call('crud.min', { 'customers', 'full_name', {fields = {'name', 'last_name'}, mode = 'write'}, }) t.assert_equals(err, nil) @@ -220,7 +239,7 @@ pgroup.test_max = function(g) table.sort(customers, function(obj1, obj2) return obj1.id < obj2.id end) -- by primary - local result, err = g.cluster.main_server.net_box:call('crud.max', { + local result, err = g.router:call('crud.max', { 'customers', nil, {mode = 'write'}, }) t.assert_equals(err, nil) @@ -228,7 +247,7 @@ pgroup.test_max = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(customers, {4})) -- by primary, index ID is specified - local result, err = g.cluster.main_server.net_box:call('crud.max', { + local result, err = g.router:call('crud.max', { 'customers', 0, {mode = 'write'}, }) t.assert_equals(err, nil) @@ -236,7 +255,7 @@ pgroup.test_max = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(customers, {4})) -- by primary with fields - local result, err = g.cluster.main_server.net_box:call('crud.max', { + local result, err = g.router:call('crud.max', { 'customers', nil, {fields = {'name', 'last_name'}, mode = 'write'} }) t.assert_equals(err, nil) @@ -244,7 +263,7 @@ pgroup.test_max = function(g) t.assert_equals(objects, {{name = "William", last_name = "White"}}) -- by age index - local result, err = g.cluster.main_server.net_box:call('crud.max', { + local result, err = g.router:call('crud.max', { 'customers', 'age_index', {mode = 'write'}, }) t.assert_equals(err, nil) @@ -252,7 +271,7 @@ pgroup.test_max = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(customers, {2})) -- by age index, index ID is specified - local result, err = g.cluster.main_server.net_box:call('crud.max', { + local result, err = g.router:call('crud.max', { 'customers', 2, {mode = 'write'}, }) t.assert_equals(err, nil) @@ -260,7 +279,7 @@ pgroup.test_max = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(customers, {2})) -- by age index with fields - local result, err = g.cluster.main_server.net_box:call('crud.max', { + local result, err = g.router:call('crud.max', { 'customers', 'age_index', {fields = {'name', 'last_name'}, mode = 'write'}, }) t.assert_equals(err, nil) @@ -268,7 +287,7 @@ pgroup.test_max = function(g) t.assert_equals(objects, {{name = "Mary", last_name = "Brown"}}) -- by composite index full_name - local result, err = g.cluster.main_server.net_box:call('crud.max', { + local result, err = g.router:call('crud.max', { 'customers', 'full_name', {mode = 'write'}, }) t.assert_equals(err, nil) @@ -276,7 +295,7 @@ pgroup.test_max = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(customers, {4})) -- by composite index full_name, index ID is specified - local result, err = g.cluster.main_server.net_box:call('crud.max', { + local result, err = g.router:call('crud.max', { 'customers', 5, {mode = 'write'}, }) t.assert_equals(err, nil) @@ -284,7 +303,7 @@ pgroup.test_max = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(customers, {4})) -- by composite index full_name with fields - local result, err = g.cluster.main_server.net_box:call('crud.max', { + local result, err = g.router:call('crud.max', { 'customers', 'full_name', {fields = {'name', 'last_name'}, mode = 'write'}, }) t.assert_equals(err, nil) @@ -314,7 +333,7 @@ pgroup.test_equal_secondary_keys = function(g) table.sort(customers, function(obj1, obj2) return obj1.id < obj2.id end) -- min - local result, err = g.cluster.main_server.net_box:call('crud.min', { + local result, err = g.router:call('crud.min', { 'customers', 'age_index', {mode = 'write'}, }) t.assert_equals(err, nil) @@ -322,7 +341,7 @@ pgroup.test_equal_secondary_keys = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(customers, {1})) -- max - local result, err = g.cluster.main_server.net_box:call('crud.max', { + local result, err = g.router:call('crud.max', { 'customers', 'age_index', {mode = 'write'}, }) t.assert_equals(err, nil) @@ -349,7 +368,7 @@ pgroup.test_opts_not_damaged = function(g) -- min local min_opts = {timeout = 1, fields = {'name', 'age'}, mode = 'write'} - local new_min_opts, err = g.cluster.main_server:eval([[ + local new_min_opts, err = g.router:eval([[ local crud = require('crud') local min_opts = ... @@ -364,7 +383,7 @@ pgroup.test_opts_not_damaged = function(g) -- max local max_opts = {timeout = 1, fields = {'name', 'age'}, mode = 'write'} - local new_max_opts, err = g.cluster.main_server:eval([[ + local new_max_opts, err = g.router:eval([[ local crud = require('crud') local max_opts = ... diff --git a/test/integration/cartridge_reload_test.lua b/test/integration/cartridge_reload_test.lua index a021cfa8..5ddeeacf 100644 --- a/test/integration/cartridge_reload_test.lua +++ b/test/integration/cartridge_reload_test.lua @@ -11,19 +11,22 @@ local helpers = require('test.helper') g.before_all(function() helpers.skip_cartridge_unsupported() - g.cluster = helpers.Cluster:new({ + g.cfg = { datadir = fio.tempdir(), use_vshard = true, server_command = helpers.entrypoint_cartridge('srv_reload'), replicasets = helpers.get_test_cartridge_replicasets(), - }) + } + g.cluster = helpers.Cluster:new(g.cfg) g.cluster:start() g.router = assert(g.cluster:server('router')) g.s1_master = assert(g.cluster:server('s1-master')) g.s1_replica = assert(g.cluster:server('s1-replica')) + helpers.wait_crud_is_ready_on_cluster(g, {backend = helpers.backend.CARTRIDGE}) + g.insertions_passed = {} g.insertions_failed = {} end) diff --git a/test/integration/cfg_test.lua b/test/integration/cfg_test.lua index 7f6f57e8..1c279472 100644 --- a/test/integration/cfg_test.lua +++ b/test/integration/cfg_test.lua @@ -7,8 +7,6 @@ local group = t.group('cfg', helpers.backend_matrix()) group.before_all(function(g) helpers.start_default_cluster(g, 'srv_stats') - - g.router = helpers.get_router(g.cluster, g.params.backend) end) group.after_all(function(g) @@ -159,7 +157,7 @@ group.test_role_cfg = function(g) stats_quantile_max_age_time = 180, } - g.cluster.main_server:upload_config({crud = cfg}) + g.router:upload_config({crud = cfg}) local actual_cfg = g.router:eval("return require('crud').cfg") t.assert_equals(cfg, actual_cfg) @@ -174,7 +172,7 @@ group.test_role_partial_cfg = function(g) local cfg_after = table.deepcopy(cfg_before) cfg_after.stats = not cfg_before.stats - g.cluster.main_server:upload_config({crud = {stats = cfg_after.stats}}) + g.router:upload_config({crud = {stats = cfg_after.stats}}) local actual_cfg = g.router:eval("return require('crud').cfg") t.assert_equals(cfg_after, actual_cfg, "Only requested field were updated") @@ -204,7 +202,7 @@ for name, case in pairs(role_cfg_error_cases) do group['test_role_cfg_' .. name] = function(g) helpers.skip_not_cartridge_backend(g.params.backend) local success, error = pcall(function() - g.cluster.main_server:upload_config(case.args) + g.router:upload_config(case.args) end) t.assert_equals(success, false) diff --git a/test/integration/count_test.lua b/test/integration/count_test.lua index 6d1668de..3ed960d7 100644 --- a/test/integration/count_test.lua +++ b/test/integration/count_test.lua @@ -7,13 +7,11 @@ local read_scenario = require('test.integration.read_scenario') local pgroup = t.group('count', helpers.backend_matrix({ {engine = 'memtx'}, - {engine = 'vinyl'}, })) pgroup.before_all(function(g) helpers.start_default_cluster(g, 'srv_select') - g.router = helpers.get_router(g.cluster, g.params.backend) g.router.net_box:eval([[ require('crud').cfg{ stats = true } ]]) @@ -33,14 +31,22 @@ pgroup.before_each(function(g) end) pgroup.test_count_non_existent_space = function(g) - local result, err = g.cluster.main_server.net_box:call('crud.count', {'non_existent_space', nil, {fullscan = true}}) + local result, err = g.router:call('crud.count', { + 'non_existent_space', + nil, + {fullscan = true, mode = 'write'}, + }) t.assert_equals(result, nil) t.assert_str_contains(err.err, "Space \"non_existent_space\" doesn't exist") end pgroup.test_count_empty_space = function(g) - local result, err = g.cluster.main_server.net_box:call('crud.count', {'customers', nil, {fullscan = true}}) + local result, err = g.router:call('crud.count', { + 'customers', + nil, + {fullscan = true, mode = 'write'}, + }) t.assert_equals(err, nil) t.assert_equals(result, 0) @@ -51,9 +57,11 @@ pgroup.test_not_valid_value_type = function(g) {'==', 'id', 'not_number'} } - local result, err = g.cluster.main_server.net_box:call('crud.count', - {'customers', conditions} - ) + local result, err = g.router:call('crud.count', { + 'customers', + conditions, + {mode = 'write'}, + }) t.assert_equals(result, nil) t.assert_str_contains(err.err, "Supplied key type of part 0 does not match index part type: expected unsigned") @@ -64,9 +72,11 @@ pgroup.test_not_valid_operation = function(g) {{}, 'id', 5} } - local result, err = g.cluster.main_server.net_box:call('crud.count', - {'customers', conditions, {fullscan = true}} - ) + local result, err = g.router:call('crud.count', { + 'customers', + conditions, + {fullscan = true, mode = 'write'}, + }) t.assert_equals(result, nil) t.assert_str_contains(err.err, "Failed to parse conditions") @@ -77,9 +87,11 @@ pgroup.test_conditions_with_non_existed_field = function(g) {'==', 'non_existed_field', 'value'} } - local result, err = g.cluster.main_server.net_box:call('crud.count', - {'customers', conditions} - ) + local result, err = g.router:call('crud.count', { + 'customers', + conditions, + {mode = 'write'}, + }) t.assert_equals(err, nil) t.assert_equals(result, 0) @@ -180,7 +192,7 @@ pgroup.test_count_all = function(g) }, }) - local result, err = g.cluster.main_server.net_box:call('crud.count', { + local result, err = g.router:call('crud.count', { 'customers', nil, {fullscan = true, mode = 'write'}, }) @@ -216,7 +228,7 @@ pgroup.test_count_all_with_yield_every = function(g) }, }) - local result, err = g.cluster.main_server.net_box:call('crud.count', { + local result, err = g.router:call('crud.count', { 'customers', nil, {yield_every = 1, fullscan = true, mode = 'write'}, }) @@ -252,7 +264,7 @@ pgroup.test_count_all_with_yield_every_0 = function(g) }, }) - local result, err = g.cluster.main_server.net_box:call('crud.count', { + local result, err = g.router:call('crud.count', { 'customers', nil, {yield_every = 0, fullscan = true, mode = 'write'} }) @@ -290,7 +302,7 @@ pgroup.test_count_by_primary_index = function(g) local conditions = {{'==', 'id_index', 3}} - local result, err = g.cluster.main_server.net_box:call('crud.count', { + local result, err = g.router:call('crud.count', { 'customers', conditions, {mode = 'write'}, }) @@ -332,7 +344,7 @@ pgroup.test_eq_condition_with_index = function(g) local expected_len = 2 - local result, err = g.cluster.main_server.net_box:call('crud.count', { + local result, err = g.router:call('crud.count', { 'customers', conditions, {mode = 'write'}, }) @@ -374,7 +386,7 @@ pgroup.test_ge_condition_with_index = function(g) local expected_len = 3 - local result, err = g.cluster.main_server.net_box:call('crud.count', { + local result, err = g.router:call('crud.count', { 'customers', conditions, {fullscan = true, mode = 'write'}, }) @@ -416,7 +428,7 @@ pgroup.test_gt_condition_with_index = function(g) local expected_len = 1 - local result, err = g.cluster.main_server.net_box:call('crud.count', { + local result, err = g.router:call('crud.count', { 'customers', conditions, {fullscan = true, mode = 'write'}, }) @@ -458,7 +470,7 @@ pgroup.test_le_condition_with_index = function(g) local expected_len = 4 - local result, err = g.cluster.main_server.net_box:call('crud.count', { + local result, err = g.router:call('crud.count', { 'customers', conditions, {fullscan = true, mode = 'write'}, }) @@ -500,7 +512,7 @@ pgroup.test_lt_condition_with_index = function(g) local expected_len = 2 - local result, err = g.cluster.main_server.net_box:call('crud.count', { + local result, err = g.router:call('crud.count', { 'customers', conditions, {fullscan = true, mode = 'write'}, }) @@ -544,7 +556,7 @@ pgroup.test_multiple_conditions = function(g) local expected_len = 2 - local result, err = g.cluster.main_server.net_box:call('crud.count', { + local result, err = g.router:call('crud.count', { 'customers', conditions, {mode = 'write'}, }) @@ -566,7 +578,7 @@ pgroup.test_multipart_primary_index = function(g) }) local conditions = {{'=', 'primary', 0}} - local result, err = g.cluster.main_server.net_box:call('crud.count', { + local result, err = g.router:call('crud.count', { 'coord', conditions, {mode = 'write'}, }) @@ -574,7 +586,7 @@ pgroup.test_multipart_primary_index = function(g) t.assert_equals(result, 3) local conditions = {{'=', 'primary', {0, 2}}} - local result, err = g.cluster.main_server.net_box:call('crud.count', { + local result, err = g.router:call('crud.count', { 'coord', conditions, {mode = 'write'}, }) @@ -608,7 +620,7 @@ pgroup.test_opts_not_damaged = function(g) balance = false, fullscan = true } - local new_count_opts, err = g.cluster.main_server:eval([[ + local new_count_opts, err = g.router:eval([[ local crud = require('crud') local count_opts = ... @@ -647,7 +659,7 @@ pgroup.test_count_no_map_reduce = function(g) local map_reduces_before = helpers.get_map_reduces_stat(router, 'customers') -- Case: no conditions, just bucket id. - local result, err = g.cluster.main_server.net_box:call('crud.count', { + local result, err = g.router:call('crud.count', { 'customers', nil, {bucket_id = 2804, timeout = 1, fullscan = true, mode = 'write'}, @@ -661,7 +673,7 @@ pgroup.test_count_no_map_reduce = function(g) -- Case: EQ on secondary index, which is not in the sharding -- index (primary index in the case). - local result, err = g.cluster.main_server.net_box:call('crud.count', { + local result, err = g.router:call('crud.count', { 'customers', {{'==', 'age', 81}}, {bucket_id = 1161, timeout = 1, mode = 'write'}, @@ -710,7 +722,7 @@ pgroup.test_count_timeout = function(g) local timeout = 4 local begin = clock.proc() - local result, err = g.cluster.main_server.net_box:call('crud.count', { + local result, err = g.router:call('crud.count', { 'customers', conditions, {timeout = timeout, fullscan = true, mode = 'write'}, }) @@ -752,7 +764,7 @@ pgroup.test_composite_index = function(g) } -- no after - local result, err = g.cluster.main_server.net_box:call('crud.count', { + local result, err = g.router:call('crud.count', { 'customers', conditions, {fullscan = true, mode = 'write'}, }) @@ -764,7 +776,7 @@ pgroup.test_composite_index = function(g) {'==', 'full_name', "Elizabeth"}, } - local result, err = g.cluster.main_server.net_box:call('crud.count', { + local result, err = g.router:call('crud.count', { 'customers', conditions, {mode = 'write'}, }) @@ -786,7 +798,7 @@ pgroup.test_composite_primary_index = function(g) local conditions = {{'=', 'id', {5, 'Ukrainian', 55}}} - local result, err = g.cluster.main_server.net_box:call('crud.count', { + local result, err = g.router:call('crud.count', { 'book_translation', conditions, {mode = 'write'}, }) t.assert_equals(err, nil) @@ -822,7 +834,7 @@ pgroup.test_count_by_full_sharding_key = function(g) }) local conditions = {{'==', 'id', 3}} - local result, err = g.cluster.main_server.net_box:call('crud.count', { + local result, err = g.router:call('crud.count', { 'customers', conditions, {mode = 'write'}, }) @@ -833,7 +845,7 @@ end pgroup.test_count_force_map_call = function(g) local key = 1 - local first_bucket_id = g.cluster.main_server.net_box:eval([[ + local first_bucket_id = g.router:eval([[ local vshard = require('vshard') local key = ... @@ -854,14 +866,14 @@ pgroup.test_count_force_map_call = function(g) }, }) - local result, err = g.cluster.main_server.net_box:call('crud.count', { + local result, err = g.router:call('crud.count', { 'customers', {{'==', 'id', key}}, {mode = 'write'}, }) t.assert_equals(err, nil) t.assert_equals(result, 1) - result, err = g.cluster.main_server.net_box:call('crud.count', { + result, err = g.router:call('crud.count', { 'customers', {{'==', 'id', key}}, {force_map_call = true, mode = 'write'}, }) @@ -873,7 +885,7 @@ local read_impl = function(cg, space, conditions, opts) opts = table.deepcopy(opts) or {} opts.mode = 'write' - return cg.cluster.main_server:call('crud.count', {space, conditions, opts}) + return cg.router:call('crud.count', {space, conditions, opts}) end pgroup.test_gh_418_count_with_secondary_noneq_index_condition = function(g) diff --git a/test/integration/custom_bucket_id_test.lua b/test/integration/custom_bucket_id_test.lua index e4063484..a3d32b9b 100644 --- a/test/integration/custom_bucket_id_test.lua +++ b/test/integration/custom_bucket_id_test.lua @@ -6,13 +6,12 @@ local helpers = require('test.helper') local pgroup = t.group('custom_bucket_id', helpers.backend_matrix({ {engine = 'memtx'}, - {engine = 'vinyl'}, })) pgroup.before_all(function(g) helpers.start_default_cluster(g, 'srv_simple_operations') - g.space_format = g.cluster.servers[2].net_box.space.customers:format() + g.space_format = g.cluster:server('s1-master').net_box.space.customers:format() end) pgroup.after_all(function(g) @@ -24,7 +23,7 @@ pgroup.before_each(function(g) end) local function get_other_storage_bucket_id(g, key) - local bucket_id = g.cluster.main_server.net_box:eval([[ + local bucket_id = g.router:eval([[ local vshard = require('vshard') local key = ... @@ -38,7 +37,7 @@ local function get_other_storage_bucket_id(g, key) end local function check_get(g, space_name, id, bucket_id, tuple) - local result, err = g.cluster.main_server.net_box:call('crud.get', { + local result, err = g.router:call('crud.get', { space_name, id, {mode = 'write'}, }) @@ -47,7 +46,7 @@ local function check_get(g, space_name, id, bucket_id, tuple) t.assert_equals(#result.rows, 0) -- get w/ right bucket_id - local result, err = g.cluster.main_server.net_box:call('crud.get', { + local result, err = g.router:call('crud.get', { space_name, id, {bucket_id = bucket_id, mode = 'write'}, }) @@ -66,7 +65,7 @@ pgroup.test_update = function(g) } -- insert tuple - local result, err = g.cluster.main_server.net_box:call('crud.insert', { + local result, err = g.router:call('crud.insert', { 'customers', tuple, {bucket_id = bucket_id} }) @@ -75,7 +74,7 @@ pgroup.test_update = function(g) t.assert_equals(#result.rows, 1) -- update w/ default bucket_id - local result, err = g.cluster.main_server.net_box:call('crud.update', { + local result, err = g.router:call('crud.update', { 'customers', tuple[1], update_operations, }) @@ -85,7 +84,7 @@ pgroup.test_update = function(g) t.assert_equals(#result.rows, 0) -- update w/ right bucket_id - local result, err = g.cluster.main_server.net_box:call('crud.update', { + local result, err = g.router:call('crud.update', { 'customers', tuple[1], update_operations, {bucket_id = bucket_id}, }) @@ -99,7 +98,7 @@ pgroup.test_delete = function(g) local bucket_id = get_other_storage_bucket_id(g, tuple[1]) -- insert tuple - local result, err = g.cluster.main_server.net_box:call('crud.insert', { + local result, err = g.router:call('crud.insert', { 'customers', tuple, {bucket_id = bucket_id} }) @@ -108,7 +107,7 @@ pgroup.test_delete = function(g) t.assert_equals(#result.rows, 1) -- delete w/ default bucket_id - local result, err = g.cluster.main_server.net_box:call('crud.delete', { + local result, err = g.router:call('crud.delete', { 'customers', tuple[1], }) @@ -118,7 +117,7 @@ pgroup.test_delete = function(g) -- just get tuple to check it wasn't deleted -- get w/ right bucket_id - local result, err = g.cluster.main_server.net_box:call('crud.get', { + local result, err = g.router:call('crud.get', { 'customers', tuple[1], {bucket_id = bucket_id, mode = 'write'}, }) @@ -128,7 +127,7 @@ pgroup.test_delete = function(g) t.assert_equals(#result.rows, 1) -- delete w/ right bucket_id - local result, err = g.cluster.main_server.net_box:call('crud.delete', { + local result, err = g.router:call('crud.delete', { 'customers', tuple[1], {bucket_id = bucket_id}, }) @@ -136,7 +135,7 @@ pgroup.test_delete = function(g) t.assert_not_equals(result, nil) -- get w/ right bucket_id - local result, err = g.cluster.main_server.net_box:call('crud.get', { + local result, err = g.router:call('crud.get', { 'customers', tuple[1], {bucket_id = bucket_id, mode = 'write'}, }) @@ -154,7 +153,7 @@ pgroup.test_insert_object = function(g) local tuple = crud_utils.flatten(object, g.space_format, bucket_id) -- insert_object - local result, err = g.cluster.main_server.net_box:call('crud.insert_object', { + local result, err = g.router:call('crud.insert_object', { 'customers', object, {bucket_id = bucket_id}, }) @@ -172,7 +171,7 @@ pgroup.test_insert_object_bucket_id_opt = function(g) local tuple = crud_utils.flatten(object, g.space_format, bucket_id) -- insert_object - local result, err = g.cluster.main_server.net_box:call('crud.insert_object', { + local result, err = g.router:call('crud.insert_object', { 'customers', object, {bucket_id = bucket_id}, }) @@ -191,7 +190,7 @@ pgroup.test_insert_object_bucket_id_specified_twice = function(g) local tuple = crud_utils.flatten(object, g.space_format, bucket_id) -- insert_object, opts.bucket_id is different - local result, err = g.cluster.main_server.net_box:call('crud.insert_object', { + local result, err = g.router:call('crud.insert_object', { 'customers', object, {bucket_id = bucket_id + 1}, }) @@ -199,7 +198,7 @@ pgroup.test_insert_object_bucket_id_specified_twice = function(g) t.assert_str_contains(err.err, 'Tuple and opts.bucket_id contain different bucket_id values') -- insert_object, opts.bucket_id is the same - local result, err = g.cluster.main_server.net_box:call('crud.insert_object', { + local result, err = g.router:call('crud.insert_object', { 'customers', object, {bucket_id = bucket_id}, }) @@ -216,7 +215,7 @@ pgroup.test_insert = function(g) tuple[2] = bucket_id -- insert - local result, err = g.cluster.main_server.net_box:call('crud.insert', { + local result, err = g.router:call('crud.insert', { 'customers', tuple, }) @@ -235,7 +234,7 @@ pgroup.test_insert_bucket_id_opt = function(g) tuple_with_bucket_id[2] = bucket_id -- insert - local result, err = g.cluster.main_server.net_box:call('crud.insert', { + local result, err = g.router:call('crud.insert', { 'customers', tuple, {bucket_id = bucket_id}, }) @@ -252,7 +251,7 @@ pgroup.test_insert_bucket_id_specified_twice = function(g) tuple[2] = bucket_id -- insert, opts.bucket_id is different - local result, err = g.cluster.main_server.net_box:call('crud.insert', { + local result, err = g.router:call('crud.insert', { 'customers', tuple, {bucket_id = bucket_id + 1} }) @@ -260,7 +259,7 @@ pgroup.test_insert_bucket_id_specified_twice = function(g) t.assert_str_contains(err.err, 'Tuple and opts.bucket_id contain different bucket_id values') -- insert, opts.bucket_id is the same - local result, err = g.cluster.main_server.net_box:call('crud.insert', { + local result, err = g.router:call('crud.insert', { 'customers', tuple, {bucket_id = bucket_id} }) @@ -279,7 +278,7 @@ pgroup.test_replace_object = function(g) local tuple = crud_utils.flatten(object, g.space_format, bucket_id) -- replace_object - local result, err = g.cluster.main_server.net_box:call('crud.replace_object', { + local result, err = g.router:call('crud.replace_object', { 'customers', object, }) @@ -297,7 +296,7 @@ pgroup.test_replace_object_bucket_id_opt = function(g) local tuple = crud_utils.flatten(object, g.space_format, bucket_id) -- replace_object - local result, err = g.cluster.main_server.net_box:call('crud.replace_object', { + local result, err = g.router:call('crud.replace_object', { 'customers', object, {bucket_id = bucket_id} }) @@ -316,7 +315,7 @@ pgroup.test_replace_object_bucket_id_specified_twice = function(g) local tuple = crud_utils.flatten(object, g.space_format, bucket_id) -- replace_object, opts.bucket_id is different - local result, err = g.cluster.main_server.net_box:call('crud.replace_object', { + local result, err = g.router:call('crud.replace_object', { 'customers', object, {bucket_id = bucket_id + 1} }) @@ -324,7 +323,7 @@ pgroup.test_replace_object_bucket_id_specified_twice = function(g) t.assert_str_contains(err.err, 'Tuple and opts.bucket_id contain different bucket_id values') -- replace_object, opts.bucket_id is the same - local result, err = g.cluster.main_server.net_box:call('crud.replace_object', { + local result, err = g.router:call('crud.replace_object', { 'customers', object, {bucket_id = bucket_id} }) @@ -341,7 +340,7 @@ pgroup.test_replace = function(g) tuple[2] = bucket_id -- replace - local result, err = g.cluster.main_server.net_box:call('crud.replace', { + local result, err = g.router:call('crud.replace', { 'customers', tuple, {bucket_id = bucket_id} }) @@ -360,7 +359,7 @@ pgroup.test_replace_bucket_id_opt = function(g) tuple_with_bucket_id[2] = bucket_id -- replace - local result, err = g.cluster.main_server.net_box:call('crud.replace', { + local result, err = g.router:call('crud.replace', { 'customers', tuple, {bucket_id = bucket_id} }) @@ -377,7 +376,7 @@ pgroup.test_replace_bucket_id_specified_twice = function(g) tuple[2] = bucket_id -- replace, opts.bucket_id is different - local result, err = g.cluster.main_server.net_box:call('crud.replace', { + local result, err = g.router:call('crud.replace', { 'customers', tuple, {bucket_id = bucket_id + 1} }) @@ -385,7 +384,7 @@ pgroup.test_replace_bucket_id_specified_twice = function(g) t.assert_str_contains(err.err, 'Tuple and opts.bucket_id contain different bucket_id values') -- replace, opts.bucket_id is the same - local result, err = g.cluster.main_server.net_box:call('crud.replace', { + local result, err = g.router:call('crud.replace', { 'customers', tuple, {bucket_id = bucket_id} }) @@ -404,7 +403,7 @@ pgroup.test_upsert_object = function(g) local tuple = crud_utils.flatten(object, g.space_format, bucket_id) -- upsert_object - local result, err = g.cluster.main_server.net_box:call('crud.upsert_object', { + local result, err = g.router:call('crud.upsert_object', { 'customers', object, {}, }) @@ -422,7 +421,7 @@ pgroup.test_upsert_object_bucket_id_opt = function(g) local tuple = crud_utils.flatten(object, g.space_format, bucket_id) -- upsert_object - local result, err = g.cluster.main_server.net_box:call('crud.upsert_object', { + local result, err = g.router:call('crud.upsert_object', { 'customers', object, {}, {bucket_id = bucket_id} }) @@ -441,7 +440,7 @@ pgroup.test_upsert_object_bucket_id_specified_twice = function(g) local tuple = crud_utils.flatten(object, g.space_format, bucket_id) -- upsert_object, opts.bucket_id is different - local result, err = g.cluster.main_server.net_box:call('crud.upsert_object', { + local result, err = g.router:call('crud.upsert_object', { 'customers', object, {}, {bucket_id = bucket_id + 1} }) @@ -449,7 +448,7 @@ pgroup.test_upsert_object_bucket_id_specified_twice = function(g) t.assert_str_contains(err.err, 'Tuple and opts.bucket_id contain different bucket_id values') -- upsert_object, opts.bucket_id is the same - local result, err = g.cluster.main_server.net_box:call('crud.upsert_object', { + local result, err = g.router:call('crud.upsert_object', { 'customers', object, {}, {bucket_id = bucket_id} }) @@ -466,7 +465,7 @@ pgroup.test_upsert = function(g) tuple[2] = bucket_id -- upsert - local result, err = g.cluster.main_server.net_box:call('crud.upsert', { + local result, err = g.router:call('crud.upsert', { 'customers', tuple, {}, {bucket_id = bucket_id} }) @@ -485,7 +484,7 @@ pgroup.test_upsert_bucket_id_opt = function(g) tuple_with_bucket_id[2] = bucket_id -- upsert - local result, err = g.cluster.main_server.net_box:call('crud.upsert', { + local result, err = g.router:call('crud.upsert', { 'customers', tuple, {}, {bucket_id = bucket_id} }) @@ -502,7 +501,7 @@ pgroup.test_upsert_bucket_id_specified_twice = function(g) tuple[2] = bucket_id -- upsert, opts.bucket_id is different - local result, err = g.cluster.main_server.net_box:call('crud.upsert', { + local result, err = g.router:call('crud.upsert', { 'customers', tuple, {}, {bucket_id = bucket_id + 1} }) @@ -510,7 +509,7 @@ pgroup.test_upsert_bucket_id_specified_twice = function(g) t.assert_str_contains(err.err, 'Tuple and opts.bucket_id contain different bucket_id values') -- upsert, opts.bucket_id is the same - local result, err = g.cluster.main_server.net_box:call('crud.upsert', { + local result, err = g.router:call('crud.upsert', { 'customers', tuple, {}, {bucket_id = bucket_id} }) @@ -526,7 +525,7 @@ pgroup.test_select = function(g) local bucket_id = get_other_storage_bucket_id(g, tuple[1]) -- insert tuple - local result, err = g.cluster.main_server.net_box:call('crud.insert', { + local result, err = g.router:call('crud.insert', { 'customers', tuple, {bucket_id = bucket_id} }) @@ -537,7 +536,7 @@ pgroup.test_select = function(g) local conditions = {{'==', 'id', tuple[1]}} -- select w/ default bucket_id - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, }) @@ -547,7 +546,7 @@ pgroup.test_select = function(g) t.assert_equals(#result.rows, 0) -- select w/ right bucket_id - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {bucket_id = bucket_id, mode = 'write'}, }) diff --git a/test/integration/ddl_sharding_func_test.lua b/test/integration/ddl_sharding_func_test.lua index 83feb299..4d31502c 100644 --- a/test/integration/ddl_sharding_func_test.lua +++ b/test/integration/ddl_sharding_func_test.lua @@ -11,31 +11,18 @@ end local pgroup = t.group('ddl_sharding_func', helpers.backend_matrix({ {engine = 'memtx', space_name = 'customers_G_func'}, {engine = 'memtx', space_name = 'customers_body_func'}, - {engine = 'vinyl', space_name = 'customers_G_func'}, - {engine = 'vinyl', space_name = 'customers_body_func'}, })) local cache_group = t.group('ddl_sharding_func_cache', helpers.backend_matrix({ {engine = 'memtx'}, - {engine = 'vinyl'}, })) local vshard_group = t.group('ddl_vshard_sharding_func', helpers.backend_matrix({ {engine = 'memtx'}, - {engine = 'vinyl'}, })) local function before_all(g) helpers.start_default_cluster(g, 'srv_ddl') - - local result, err = g.cluster.main_server.net_box:eval([[ - local ddl = require('ddl') - - local ok, err = ddl.get_schema() - return ok, err - ]]) - t.assert_equals(type(result), 'table') - t.assert_equals(err, nil) end local function after_all(g) @@ -68,7 +55,7 @@ vshard_group.before_each(function(g) end) pgroup.test_insert_object = function(g) - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.insert_object', {g.params.space_name, {id = 158, name = 'Augustus', age = 48}}) t.assert_equals(err, nil) @@ -94,7 +81,7 @@ end pgroup.test_insert = function(g) -- Insert a tuple. - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.insert', {g.params.space_name, {27, box.NULL, 'Ivan', 25}}) t.assert_equals(err, nil) t.assert_equals(result.metadata, { @@ -118,7 +105,7 @@ pgroup.test_insert = function(g) end pgroup.test_insert_object_many = function(g) - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.insert_object_many', {g.params.space_name, {{id = 158, name = 'Augustus', age = 48}}}) t.assert_equals(err, nil) @@ -144,7 +131,7 @@ end pgroup.test_insert_many = function(g) -- Insert a tuple. - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.insert_many', {g.params.space_name, {{27, box.NULL, 'Ivan', 25}}}) t.assert_equals(err, nil) t.assert_equals(result.metadata, { @@ -182,7 +169,7 @@ pgroup.test_replace_object = function(g) t.assert_not_equals(result, nil) -- Replace an object. - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.replace_object', {g.params.space_name, {id = 8, name = 'John Doe', age = 25}}) t.assert_equals(err, nil) local objects = crud.unflatten_rows(result.rows, result.metadata) @@ -216,7 +203,7 @@ pgroup.test_replace = function(g) local tuple = {71, box.NULL, 'Augustus', 21} -- Replace a tuple. - local result, err = g.cluster.main_server.net_box:call('crud.replace', { + local result, err = g.router:call('crud.replace', { g.params.space_name, tuple }) t.assert_equals(err, nil) @@ -250,7 +237,7 @@ pgroup.test_replace_object_many = function(g) t.assert_not_equals(result, nil) -- Replace an object. - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.replace_object_many', {g.params.space_name, {{id = 8, name = 'John Doe', age = 25}}}) t.assert_equals(err, nil) local objects = crud.unflatten_rows(result.rows, result.metadata) @@ -284,7 +271,7 @@ pgroup.test_replace_many = function(g) local tuple = {71, box.NULL, 'Augustus', 21} -- Replace a tuple. - local result, err = g.cluster.main_server.net_box:call('crud.replace_many', { + local result, err = g.router:call('crud.replace_many', { g.params.space_name, {tuple} }) t.assert_equals(err, nil) @@ -305,7 +292,7 @@ end pgroup.test_upsert_object = function(g) -- Upsert an object first time. - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.upsert_object', {g.params.space_name, {id = 66, name = 'Jack Sparrow', age = 25}, {{'+', 'age', 26}}} ) @@ -329,7 +316,7 @@ pgroup.test_upsert_object = function(g) t.assert_equals(result, {66, 6, 'Jack Sparrow', 25}) -- Upsert the same query second time when tuple exists. - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.upsert_object', {g.params.space_name, {id = 66, name = 'Jack Sparrow', age = 25}, {{'+', 'age', 26}}} ) @@ -349,7 +336,7 @@ pgroup.test_upsert = function(g) local tuple = {14, box.NULL, 'John', 25} -- Upsert an object first time. - local result, err = g.cluster.main_server.net_box:call('crud.upsert', { + local result, err = g.router:call('crud.upsert', { g.params.space_name, tuple, {} }) t.assert_equals(err, nil) @@ -367,7 +354,7 @@ pgroup.test_upsert = function(g) t.assert_equals(result, {14, 4, 'John', 25}) -- Upsert the same query second time when tuple exists. - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.upsert_object', {g.params.space_name, {id = 14, name = 'John', age = 25}, {{'+', 'age', 26}}} ) @@ -385,7 +372,7 @@ end pgroup.test_upsert_object_many = function(g) -- Upsert an object first time. - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.upsert_object_many', {g.params.space_name, { { {id = 66, name = 'Jack Sparrow', age = 25}, {{'+', 'age', 26}} } }, } ) @@ -409,7 +396,7 @@ pgroup.test_upsert_object_many = function(g) t.assert_equals(result, {66, 6, 'Jack Sparrow', 25}) -- Upsert the same query second time when tuple exists. - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.upsert_object_many', {g.params.space_name, { { {id = 66, name = 'Jack Sparrow', age = 25}, {{'+', 'age', 26}} } }, } ) @@ -429,7 +416,7 @@ pgroup.test_upsert_many = function(g) local tuple = {14, box.NULL, 'John', 25} -- Upsert an object first time. - local result, err = g.cluster.main_server.net_box:call('crud.upsert_many', { + local result, err = g.router:call('crud.upsert_many', { g.params.space_name, { {tuple, {}} }, }) t.assert_equals(err, nil) @@ -447,7 +434,7 @@ pgroup.test_upsert_many = function(g) t.assert_equals(result, {14, 4, 'John', 25}) -- Upsert the same query second time when tuple exists. - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.upsert_many', {g.params.space_name, { {tuple, {{'+', 'age', 26}}} }, } ) @@ -473,7 +460,7 @@ pgroup.test_select = function(g) t.assert_not_equals(result, nil) local conditions = {{'==', 'id', 18}} - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { g.params.space_name, conditions, {mode = 'write'}, }) @@ -493,7 +480,7 @@ pgroup.test_select = function(g) -- select will be performed on s2 replicaset -- but tuple is on s1 replicaset -> result will be empty local conditions = {{'==', 'id', 19}} - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { g.params.space_name, conditions, {mode = 'write'}, }) @@ -520,7 +507,7 @@ pgroup.test_update = function(g) local update_operations = { {'+', 'age', 10}, } - local result, err = g.cluster.main_server.net_box:call('crud.update', { + local result, err = g.router:call('crud.update', { g.params.space_name, {12, 'Ivan'}, update_operations, }) t.assert_equals(err, nil) @@ -549,7 +536,7 @@ pgroup.test_update = function(g) -- calculated bucket_id will be id % 10 = 18 % 10 = 8 -> -- select will be performed on s2 replicaset -- but tuple is on s1 replicaset -> result will be empty - local result, err = g.cluster.main_server.net_box:call('crud.update', { + local result, err = g.router:call('crud.update', { g.params.space_name, {18, 'Ivan'}, update_operations, }) t.assert_equals(err, nil) @@ -570,7 +557,7 @@ pgroup.test_get = function(g) t.assert_not_equals(result, nil) -- Get a tuple. - local result, err = g.cluster.main_server.net_box:call('crud.get', { + local result, err = g.router:call('crud.get', { g.params.space_name, {12, 'Ivan'}, {mode = 'write'}, }) t.assert_equals(err, nil) @@ -587,7 +574,7 @@ pgroup.test_get = function(g) -- calculated bucket_id will be id % 10 = 18 % 10 = 8 -> -- select will be performed on s2 replicaset -- but tuple is on s1 replicaset -> result will be empty - local result, err = g.cluster.main_server.net_box:call('crud.get', { + local result, err = g.router:call('crud.get', { g.params.space_name, {18, 'Ivan'}, {mode = 'write'}, }) t.assert_equals(err, nil) @@ -610,7 +597,7 @@ pgroup.test_delete = function(g) t.assert_not_equals(result, nil) -- Delete tuple. - local _, err = g.cluster.main_server.net_box:call('crud.delete', { + local _, err = g.router:call('crud.delete', { g.params.space_name, {12, 'Ivan'}, }) t.assert_equals(err, nil) @@ -633,7 +620,7 @@ pgroup.test_delete = function(g) -- calculated bucket_id will be id % 10 = 18 % 10 = 8 -> -- select will be performed on s2 replicaset -- but tuple is on s1 replicaset -> result will be empty - local _, err = g.cluster.main_server.net_box:call('crud.delete', { + local _, err = g.router:call('crud.delete', { g.params.space_name, {18, 'Ivan'} }) t.assert_equals(err, nil) @@ -653,7 +640,7 @@ pgroup.test_count = function(g) t.assert_not_equals(result, nil) local conditions = {{'==', 'id', 18}} - local result, err = g.cluster.main_server.net_box:call('crud.count', { + local result, err = g.router:call('crud.count', { g.params.space_name, conditions, {mode = 'write'}, }) @@ -673,7 +660,7 @@ pgroup.test_count = function(g) -- but tuple is on s1 replicaset -> result will be empty -> -- count = 0 local conditions = {{'==', 'id', 19}} - local result, err = g.cluster.main_server.net_box:call('crud.count', { + local result, err = g.router:call('crud.count', { g.params.space_name, conditions, {mode = 'write'}, }) @@ -837,7 +824,7 @@ for name, case in pairs(known_bucket_id_write_cases) do end pgroup[test_name] = function(g) - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( case.func, { g.params.space_name, case.input_2, @@ -876,7 +863,7 @@ for name, case in pairs(known_bucket_id_read_cases) do pgroup.before_test(test_name, prepare_known_bucket_id_data) pgroup[test_name] = function(g) - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( case.func, { g.params.space_name, case.input_2, @@ -893,7 +880,7 @@ pgroup.before_test( prepare_known_bucket_id_data) pgroup.test_gh_278_pairs_with_explicit_bucket_id_and_ddl = function(g) - local obj, err = g.cluster.main_server.net_box:eval([[ + local obj, err = g.router:eval([[ local res = {} for _, row in crud.pairs(...) do table.insert(res, row) @@ -916,7 +903,7 @@ pgroup.before_test( prepare_known_bucket_id_data) pgroup.test_gh_278_count_with_explicit_bucket_id_and_ddl = function(g) - local obj, err = g.cluster.main_server.net_box:call('crud.count', { + local obj, err = g.router:call('crud.count', { g.params.space_name, {{ '==', 'id', known_bucket_id_key}}, {bucket_id = known_bucket_id, mode = 'write'}, @@ -980,7 +967,7 @@ for name, case in pairs(vshard_cases) do end -- Insert a tuple. - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.insert', {space_name, {1, box.NULL, 'Ivan', 25}}) t.assert_equals(err, nil) t.assert_equals(#result.rows, 1) @@ -997,7 +984,7 @@ for name, case in pairs(vshard_cases) do t.assert_equals(result, nil) local conditions = {{'==', 'id', 1}} - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { space_name, conditions, {mode = 'write'}, }) diff --git a/test/integration/ddl_sharding_info_reload_test.lua b/test/integration/ddl_sharding_info_reload_test.lua index e0add7a8..9d615cfb 100644 --- a/test/integration/ddl_sharding_info_reload_test.lua +++ b/test/integration/ddl_sharding_info_reload_test.lua @@ -11,22 +11,18 @@ end local pgroup_storage = t.group('ddl_storage_sharding_info', helpers.backend_matrix({ {engine = 'memtx'}, - {engine = 'vinyl'}, })) local pgroup_new_space = t.group('ddl_sharding_info_on_new_space', helpers.backend_matrix({ {engine = 'memtx'}, - {engine = 'vinyl'}, })) local pgroup_key_change = t.group('ddl_sharding_key_reload_after_schema_change', helpers.backend_matrix({ {engine = 'memtx'}, - {engine = 'vinyl'}, })) local pgroup_func_change = t.group('ddl_sharding_func_reload_after_schema_change', helpers.backend_matrix({ {engine = 'memtx'}, - {engine = 'vinyl'}, })) local select_limit = 100 @@ -64,7 +60,7 @@ pgroup_new_space.before_each(function(g) end) -- Fetch metadata schema. - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.insert', {'customers', {0, box.NULL, 'Emma', 22}} ) @@ -72,7 +68,7 @@ pgroup_new_space.before_each(function(g) t.assert_equals(err, nil) -- Assert space doesn't exist. - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.insert', {'customers_new', {1, box.NULL, 'Emma', 22}} ) @@ -90,7 +86,7 @@ pgroup_key_change.before_each(function(g) end) -- Assert schema is default: insert is sharded with default ddl info. - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.insert', {'customers', {0, box.NULL, 'Emma', 22}} ) t.assert_is_not(obj, nil) @@ -116,7 +112,7 @@ pgroup_func_change.before_each(function(g) end) -- Assert schema is default: insert is sharded with default ddl info. - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.insert', {'customers_pk', {0, box.NULL, 'Emma', 22}} ) t.assert_is_not(obj, nil) @@ -470,7 +466,7 @@ for name, case in pairs(new_space_cases) do end) -- Assert it is now possible to call opertions for a new space. - local obj, err = g.cluster.main_server.net_box:call(case.func, case.input) + local obj, err = g.router:call(case.func, case.input) t.assert_is_not(obj, nil) t.assert_equals(err, nil) @@ -584,7 +580,7 @@ for name, case in pairs(schema_change_sharding_key_cases) do end) -- Assert operation bucket_id is computed based on updated ddl info. - local obj, err = g.cluster.main_server.net_box:call(case.func, case.input) + local obj, err = g.router:call(case.func, case.input) t.assert_is_not(obj, nil) t.assert_equals(err, nil) @@ -607,7 +603,7 @@ pgroup_key_change.test_select = function(g) end) -- Assert operation bucket_id is computed based on updated ddl info. - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.select', { 'customers', @@ -627,7 +623,7 @@ pgroup_key_change.test_count = function(g) end) -- Assert operation bucket_id is computed based on updated ddl info. - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.count', { 'customers', @@ -657,8 +653,8 @@ pgroup_key_change.test_pairs = function(g) -- First pairs request fails and reloads sharding info. t.assert_error_msg_contains( "Please retry your request", - g.cluster.main_server.net_box.eval, - g.cluster.main_server.net_box, + g.router.eval, + g.router, pairs_eval, { 'customers', @@ -667,7 +663,7 @@ pgroup_key_change.test_pairs = function(g) }) -- Assert operation bucket_id is computed based on updated ddl info. - local obj, err = g.cluster.main_server.net_box:eval( + local obj, err = g.router:eval( pairs_eval, { 'customers', @@ -804,7 +800,7 @@ for name, case in pairs(schema_change_sharding_func_cases) do end) -- Assert operation bucket_id is computed based on updated ddl info. - local obj, err = g.cluster.main_server.net_box:call(case.func, case.input) + local obj, err = g.router:call(case.func, case.input) t.assert_is_not(obj, nil) t.assert_equals(err, nil) @@ -828,7 +824,7 @@ pgroup_func_change.test_select = function(g) end) -- Assert operation bucket_id is computed based on updated ddl info. - local obj, err = g.cluster.main_server.net_box:call('crud.select', { + local obj, err = g.router:call('crud.select', { 'customers_pk', {{'==', 'id', 1}}, {mode = 'write'}, }) t.assert_equals(err, nil) @@ -845,7 +841,7 @@ pgroup_func_change.test_get = function(g) end) -- Assert operation bucket_id is computed based on updated ddl info. - local obj, err = g.cluster.main_server.net_box:call('crud.get', { + local obj, err = g.router:call('crud.get', { 'customers_pk', 1, {mode = 'write'}, }) t.assert_equals(err, nil) @@ -862,7 +858,7 @@ pgroup_func_change.test_count = function(g) end) -- Assert operation bucket_id is computed based on updated ddl info. - local obj, err = g.cluster.main_server.net_box:call('crud.count', { + local obj, err = g.router:call('crud.count', { 'customers_pk', {{'==', 'id', 1}}, {mode = 'write'}, }) t.assert_equals(err, nil) @@ -880,13 +876,13 @@ pgroup_func_change.test_pairs = function(g) t.assert_error_msg_contains( "Please retry your request", - g.cluster.main_server.net_box.eval, - g.cluster.main_server.net_box, + g.router.eval, + g.router, pairs_eval, {'customers_pk', {{'==', 'id', 1}}, {mode = 'write'}}) -- Assert operation bucket_id is computed based on updated ddl info. - local obj, err = g.cluster.main_server.net_box:eval( + local obj, err = g.router:eval( pairs_eval, {'customers_pk', {{'==', 'id', 1}}, {mode = 'write'}}) t.assert_equals(err, nil) diff --git a/test/integration/ddl_sharding_key_test.lua b/test/integration/ddl_sharding_key_test.lua index 0af41a74..eea2c937 100644 --- a/test/integration/ddl_sharding_key_test.lua +++ b/test/integration/ddl_sharding_key_test.lua @@ -11,13 +11,12 @@ end local pgroup = t.group('ddl_sharding_key', helpers.backend_matrix({ {engine = 'memtx'}, - {engine = 'vinyl'}, })) pgroup.before_all(function(g) helpers.start_default_cluster(g, 'srv_ddl') - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local ddl = require('ddl') local ok, err = ddl.get_schema() @@ -26,7 +25,6 @@ pgroup.before_all(function(g) t.assert_equals(type(result), 'table') t.assert_equals(err, nil) - g.router = helpers.get_router(g.cluster, g.params.backend) g.router.net_box:eval([[ require('crud').cfg{ stats = true } ]]) @@ -48,7 +46,7 @@ pgroup.before_each(function(g) end) pgroup.test_insert_object = function(g) - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.insert_object', {'customers_name_key', {id = 1, name = 'Augustus', age = 48}}) t.assert_equals(err, nil) @@ -75,7 +73,7 @@ end pgroup.test_insert = function(g) -- Insert a tuple. - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.insert', {'customers_name_key', {2, box.NULL, 'Ivan', 20}}) t.assert_equals(err, nil) t.assert_equals(result.metadata, { @@ -99,7 +97,7 @@ pgroup.test_insert = function(g) end pgroup.test_insert_object_many = function(g) - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.insert_object_many', {'customers_name_key', {{id = 1, name = 'Augustus', age = 48}}}) t.assert_equals(err, nil) @@ -126,7 +124,7 @@ end pgroup.test_insert_many = function(g) -- Insert a tuple. - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.insert_many', {'customers_name_key', {{2, box.NULL, 'Ivan', 20}}}) t.assert_equals(err, nil) t.assert_equals(result.metadata, { @@ -166,7 +164,7 @@ pgroup.test_replace = function(g) local tuple = {7, box.NULL, 'Augustus', 21} -- Replace a tuple. - local result, err = g.cluster.main_server.net_box:call('crud.replace', { + local result, err = g.router:call('crud.replace', { 'customers_name_key', tuple }) t.assert_equals(err, nil) @@ -200,7 +198,7 @@ pgroup.test_replace_object = function(g) t.assert_not_equals(result, nil) -- Replace an object. - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.replace_object', {'customers_name_key', {id = 8, name = 'John Doe', age = 25}}) t.assert_equals(err, nil) local objects = crud.unflatten_rows(result.rows, result.metadata) @@ -234,7 +232,7 @@ pgroup.test_replace_many = function(g) local tuple = {7, box.NULL, 'Augustus', 21} -- Replace a tuple. - local result, err = g.cluster.main_server.net_box:call('crud.replace_many', { + local result, err = g.router:call('crud.replace_many', { 'customers_name_key', {tuple} }) t.assert_equals(err, nil) @@ -268,7 +266,7 @@ pgroup.test_replace_object_many = function(g) t.assert_not_equals(result, nil) -- Replace an object. - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.replace_object_many', {'customers_name_key', {{id = 8, name = 'John Doe', age = 25}}}) t.assert_equals(err, nil) local objects = crud.unflatten_rows(result.rows, result.metadata) @@ -287,7 +285,7 @@ end pgroup.test_upsert_object = function(g) -- Upsert an object first time. - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.upsert_object', {'customers_name_key', {id = 66, name = 'Jack Sparrow', age = 25}, { {'+', 'age', 25}, }}) @@ -311,7 +309,7 @@ pgroup.test_upsert_object = function(g) t.assert_equals(result, nil) -- Upsert the same query second time when tuple exists. - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.upsert_object', {'customers_name_key', {id = 66, name = 'Jack Sparrow', age = 25}, { {'+', 'age', 25}, }}) @@ -331,7 +329,7 @@ pgroup.test_upsert = function(g) local tuple = {1, box.NULL, 'John', 25} -- Upsert an object first time. - local result, err = g.cluster.main_server.net_box:call('crud.upsert', { + local result, err = g.router:call('crud.upsert', { 'customers_name_key', tuple, {} }) t.assert_equals(err, nil) @@ -349,7 +347,7 @@ pgroup.test_upsert = function(g) t.assert_equals(result, nil) -- Upsert the same query second time when tuple exists. - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.upsert_object', {'customers_name_key', {id = 1, name = 'John', age = 25}, { {'+', 'age', 25}, }}) @@ -367,7 +365,7 @@ end pgroup.test_upsert_object_many = function(g) -- Upsert an object first time. - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.upsert_object_many', {'customers_name_key', { { {id = 66, name = 'Jack Sparrow', age = 25}, {{'+', 'age', 25}} } }, }) @@ -392,7 +390,7 @@ pgroup.test_upsert_object_many = function(g) t.assert_equals(result, nil) -- Upsert the same query second time when tuple exists. - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.upsert_object_many', {'customers_name_key', { {{id = 66, name = 'Jack Sparrow', age = 25}, {{'+', 'age', 25}}} }, }) @@ -412,7 +410,7 @@ pgroup.test_upsert_many = function(g) local tuple = {1, box.NULL, 'John', 25} -- Upsert an object first time. - local result, err = g.cluster.main_server.net_box:call('crud.upsert_many', { + local result, err = g.router:call('crud.upsert_many', { 'customers_name_key', { {tuple, {}} }, }) t.assert_equals(err, nil) @@ -430,7 +428,7 @@ pgroup.test_upsert_many = function(g) t.assert_equals(result, nil) -- Upsert the same query second time when tuple exists. - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.upsert_many', {'customers_name_key', { {tuple, {{'+', 'age', 25}}} }, }) t.assert_equals(result.rows, nil) t.assert_equals(err, nil) @@ -462,7 +460,7 @@ pgroup.test_select = function(g) t.assert_not_equals(result, nil) local conditions = {{'==', 'name', 'Ptolemy'}} - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers_name_key', conditions, {mode = 'write'}, }) @@ -481,7 +479,7 @@ pgroup.test_count = function(g) t.assert_not_equals(result, nil) local conditions = {{'==', 'name', 'Ptolemy'}} - local result, err = g.cluster.main_server.net_box:call('crud.count', { + local result, err = g.router:call('crud.count', { 'customers_name_key', conditions, {mode = 'write'} }) @@ -596,7 +594,7 @@ pgroup.test_select_secondary_idx = function(g) local tuple = {2, box.NULL, 'Ivan', 20} -- insert tuple - local result, err = g.cluster.main_server.net_box:call('crud.insert', { + local result, err = g.router:call('crud.insert', { 'customers_secondary_idx_name_key', tuple }) @@ -606,7 +604,7 @@ pgroup.test_select_secondary_idx = function(g) local conditions = {{'==', 'name', 'Ivan'}} - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers_secondary_idx_name_key', conditions, {mode = 'write'}, }) @@ -633,7 +631,7 @@ pgroup.test_select_non_unique_index = function(g) }) t.assert_equals(#customers, 10) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { space_name, {{'==', 'name', 'Ivan Bunin'}}, {mode = 'write'}, }) t.assert_equals(err, nil) @@ -660,7 +658,7 @@ pgroup.test_update = function(g) local update_operations = { {'+', 'age', 10}, } - local result, err = g.cluster.main_server.net_box:call('crud.update', { + local result, err = g.router:call('crud.update', { 'customers_name_key', {2, 'Ivan'}, update_operations, }) t.assert_equals(err, nil) @@ -686,7 +684,7 @@ pgroup.test_get = function(g) t.assert_not_equals(result, nil) -- Get a tuple. - local result, err = g.cluster.main_server.net_box:call('crud.get', { + local result, err = g.router:call('crud.get', { 'customers_name_key', {7, 'Dimitrion'}, {mode = 'write'}, }) t.assert_equals(err, nil) @@ -709,7 +707,7 @@ pgroup.test_delete = function(g) t.assert_not_equals(result, nil) -- Delete tuple. - local _, err = g.cluster.main_server.net_box:call('crud.delete', { + local _, err = g.router:call('crud.delete', { 'customers_name_key', {7, 'Dimitrion'}, }) t.assert_equals(err, nil) @@ -727,7 +725,7 @@ pgroup.test_delete_incomplete_sharding_key = function(g) local tuple = {2, box.NULL, 'Viktor Pelevin', 58} -- insert tuple - local result, err = g.cluster.main_server.net_box:call('crud.insert', { + local result, err = g.router:call('crud.insert', { 'customers_age_key', tuple }) @@ -735,7 +733,7 @@ pgroup.test_delete_incomplete_sharding_key = function(g) t.assert_not_equals(result, nil) t.assert_equals(#result.rows, 1) - local result, err = g.cluster.main_server.net_box:call('crud.delete', { + local result, err = g.router:call('crud.delete', { 'customers_age_key', {58, 'Viktor Pelevin'} }) @@ -748,7 +746,7 @@ pgroup.test_get_incomplete_sharding_key = function(g) local tuple = {2, box.NULL, 'Viktor Pelevin', 58} -- insert tuple - local result, err = g.cluster.main_server.net_box:call('crud.insert', { + local result, err = g.router:call('crud.insert', { 'customers_age_key', tuple }) @@ -756,7 +754,7 @@ pgroup.test_get_incomplete_sharding_key = function(g) t.assert_not_equals(result, nil) t.assert_equals(#result.rows, 1) - local result, err = g.cluster.main_server.net_box:call('crud.get', { + local result, err = g.router:call('crud.get', { 'customers_age_key', {58, 'Viktor Pelevin'}, {mode = 'write'}, }) @@ -769,7 +767,7 @@ pgroup.test_update_incomplete_sharding_key = function(g) local tuple = {2, box.NULL, 'Viktor Pelevin', 58} -- insert tuple - local result, err = g.cluster.main_server.net_box:call('crud.insert', { + local result, err = g.router:call('crud.insert', { 'customers_age_key', tuple }) @@ -781,7 +779,7 @@ pgroup.test_update_incomplete_sharding_key = function(g) {'=', 'age', 60}, } - local result, err = g.cluster.main_server.net_box:call('crud.update', { + local result, err = g.router:call('crud.update', { 'customers_age_key', {2, 'Viktor Pelevin'}, update_operations, }) @@ -794,7 +792,7 @@ pgroup.test_get_secondary_idx = function(g) local tuple = {4, box.NULL, 'Leo', 44} -- insert tuple - local result, err = g.cluster.main_server.net_box:call('crud.insert', { + local result, err = g.router:call('crud.insert', { 'customers_secondary_idx_name_key', tuple }) @@ -803,7 +801,7 @@ pgroup.test_get_secondary_idx = function(g) t.assert_equals(#result.rows, 1) -- get - local result, err = g.cluster.main_server.net_box:call('crud.get', + local result, err = g.router:call('crud.get', {'customers_secondary_idx_name_key', {4, 'Leo'}, {mode = 'write'}, }) @@ -816,7 +814,7 @@ pgroup.test_update_secondary_idx = function(g) local tuple = {6, box.NULL, 'Victor', 58} -- insert tuple - local result, err = g.cluster.main_server.net_box:call('crud.insert', { + local result, err = g.router:call('crud.insert', { 'customers_secondary_idx_name_key', tuple }) @@ -828,7 +826,7 @@ pgroup.test_update_secondary_idx = function(g) {'=', 'age', 58}, } - local result, err = g.cluster.main_server.net_box:call('crud.update', { + local result, err = g.router:call('crud.update', { 'customers_secondary_idx_name_key', {6, 'Victor'}, update_operations, }) @@ -841,7 +839,7 @@ pgroup.test_delete_secondary_idx = function(g) local tuple = {8, box.NULL, 'Alexander', 37} -- insert tuple - local result, err = g.cluster.main_server.net_box:call('crud.insert', { + local result, err = g.router:call('crud.insert', { 'customers_secondary_idx_name_key', tuple }) @@ -849,7 +847,7 @@ pgroup.test_delete_secondary_idx = function(g) t.assert_not_equals(result, nil) t.assert_equals(#result.rows, 1) - local result, err = g.cluster.main_server.net_box:call('crud.delete', { + local result, err = g.router:call('crud.delete', { 'customers_secondary_idx_name_key', {8, 'Alexander'} }) @@ -1088,7 +1086,7 @@ for name, case in pairs(known_bucket_id_write_cases) do end pgroup[test_name] = function(g) - local obj, err = g.cluster.main_server.net_box:call(case.func, case.input) + local obj, err = g.router:call(case.func, case.input) t.assert_equals(err, nil) t.assert_is_not(obj, nil) @@ -1127,7 +1125,7 @@ for name, case in pairs(known_bucket_id_read_cases) do pgroup.before_test(test_name, prepare_known_bucket_id_data) pgroup[test_name] = function(g) - local obj, err = g.cluster.main_server.net_box:call(case.func, case.input) + local obj, err = g.router:call(case.func, case.input) t.assert_equals(err, nil) t.assert_is_not(obj, nil) t.assert_equals(obj.rows, {known_bucket_id_result_tuple}) @@ -1139,7 +1137,7 @@ pgroup.before_test( prepare_known_bucket_id_data) pgroup.test_gh_278_pairs_with_explicit_bucket_id_and_ddl = function(g) - local obj, err = g.cluster.main_server.net_box:eval([[ + local obj, err = g.router:eval([[ local res = {} for _, row in crud.pairs(...) do table.insert(res, row) @@ -1162,7 +1160,7 @@ pgroup.before_test( prepare_known_bucket_id_data) pgroup.test_gh_278_count_with_explicit_bucket_id_and_ddl = function(g) - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.count', { known_bucket_id_space, diff --git a/test/integration/insert_many_test.lua b/test/integration/insert_many_test.lua index c8a73cfb..05162c1a 100644 --- a/test/integration/insert_many_test.lua +++ b/test/integration/insert_many_test.lua @@ -7,7 +7,6 @@ local batching_utils = require('crud.common.batching_utils') local pgroup = t.group('insert_many', helpers.backend_matrix({ {engine = 'memtx'}, - {engine = 'vinyl'}, })) pgroup.before_all(function(g) @@ -24,7 +23,7 @@ end) pgroup.test_non_existent_space = function(g) -- insert_many - local result, errs = g.cluster.main_server.net_box:call('crud.insert_many', { + local result, errs = g.router:call('crud.insert_many', { 'non_existent_space', { {1, box.NULL, 'Alex', 59}, @@ -40,7 +39,7 @@ pgroup.test_non_existent_space = function(g) -- insert_object_many -- default: stop_on_error == false - local result, errs = g.cluster.main_server.net_box:call('crud.insert_object_many', { + local result, errs = g.router:call('crud.insert_object_many', { 'non_existent_space', { {id = 1, name = 'Fedor', age = 59}, @@ -60,7 +59,7 @@ pgroup.test_non_existent_space = function(g) -- insert_object_many -- stop_on_error == true - local result, errs = g.cluster.main_server.net_box:call('crud.insert_object_many', { + local result, errs = g.router:call('crud.insert_object_many', { 'non_existent_space', { {id = 1, name = 'Fedor', age = 59}, @@ -82,7 +81,7 @@ end pgroup.test_object_bad_format = function(g) -- bad format - local result, errs = g.cluster.main_server.net_box:call('crud.insert_object_many', { + local result, errs = g.router:call('crud.insert_object_many', { 'customers', { {id = 1, name = 'Fedor', age = 59}, @@ -114,7 +113,7 @@ pgroup.test_object_bad_format = function(g) t.assert_equals(result, {1, 477, 'Fedor', 59}) -- bad format - local result, errs = g.cluster.main_server.net_box:call('crud.insert_object_many', { + local result, errs = g.router:call('crud.insert_object_many', { 'customers', { {id = 1, name = 'Fedor', age = 59}, @@ -140,7 +139,7 @@ pgroup.test_object_bad_format = function(g) -- bad format -- two errors, default: stop_on_error == false - local result, errs = g.cluster.main_server.net_box:call('crud.insert_object_many', { + local result, errs = g.router:call('crud.insert_object_many', { 'customers', { {id = 1, name = 'Fedor'}, @@ -164,7 +163,7 @@ end pgroup.test_all_success = function(g) -- insert_many -- all success - local result, errs = g.cluster.main_server.net_box:call('crud.insert_many', { + local result, errs = g.router:call('crud.insert_many', { 'customers', { {1, box.NULL, 'Fedor', 59}, @@ -208,7 +207,7 @@ end pgroup.test_object_all_success = function(g) -- batch_insert_object -- all success - local result, errs = g.cluster.main_server.net_box:call('crud.insert_object_many', { + local result, errs = g.router:call('crud.insert_object_many', { 'customers', { {id = 1, name = 'Fedor', age = 59}, @@ -259,7 +258,7 @@ pgroup.test_one_error = function(g) -- insert_many -- default: stop_on_error = false, rollback_on_error = false -- one error on one storage without rollback - local result, errs = g.cluster.main_server.net_box:call('crud.insert_many', { + local result, errs = g.router:call('crud.insert_many', { 'customers', { {22, box.NULL, 'Alex', 34}, @@ -319,7 +318,7 @@ pgroup.test_object_one_error = function(g) -- batch_insert_object again -- default: stop_on_error = false, rollback_on_error = false -- one error on one storage without rollback - local result, errs = g.cluster.main_server.net_box:call('crud.insert_object_many', { + local result, errs = g.router:call('crud.insert_object_many', { 'customers', { {id = 22, name = 'Alex', age = 34}, @@ -384,7 +383,7 @@ pgroup.test_many_errors = function(g) -- insert_many -- fails for both: s1-master s2-master -- one error on each storage, one success on each storage - local result, errs = g.cluster.main_server.net_box:call('crud.insert_many', { + local result, errs = g.router:call('crud.insert_many', { 'customers', { {2, box.NULL, 'Alex', 34}, @@ -454,7 +453,7 @@ pgroup.test_object_many_errors = function(g) -- batch_insert_object again -- fails for both: s1-master s2-master -- one error on each storage, one success on each storage - local result, errs = g.cluster.main_server.net_box:call('crud.insert_object_many', { + local result, errs = g.router:call('crud.insert_object_many', { 'customers', { {id = 2, name = 'Alex', age = 34}, @@ -534,7 +533,7 @@ pgroup.test_no_success = function(g) -- insert_many again -- fails for both: s1-master s2-master -- no success - local result, errs = g.cluster.main_server.net_box:call('crud.insert_many', { + local result, errs = g.router:call('crud.insert_many', { 'customers', { {2, box.NULL, 'Alex', 34}, @@ -608,7 +607,7 @@ pgroup.test_object_no_success = function(g) -- batch_insert_object again -- fails for both: s1-master s2-master -- no success - local result, errs = g.cluster.main_server.net_box:call('crud.insert_object_many', { + local result, errs = g.router:call('crud.insert_object_many', { 'customers', { {id = 2, name = 'Alex', age = 34}, @@ -660,7 +659,7 @@ end pgroup.test_object_bad_format_stop_on_error = function(g) -- bad format -- two errors, stop_on_error == true - local result, errs = g.cluster.main_server.net_box:call('crud.insert_object_many', { + local result, errs = g.router:call('crud.insert_object_many', { 'customers', { {id = 1, name = 'Fedor'}, @@ -682,7 +681,7 @@ end pgroup.test_all_success_stop_on_error = function(g) -- insert_many -- all success - local result, errs = g.cluster.main_server.net_box:call('crud.insert_many', { + local result, errs = g.router:call('crud.insert_many', { 'customers', { {2, box.NULL, 'Anna', 23}, @@ -729,7 +728,7 @@ end pgroup.test_object_all_success_stop_on_error = function(g) -- batch_insert_object -- all success - local result, errs = g.cluster.main_server.net_box:call('crud.insert_object_many', { + local result, errs = g.router:call('crud.insert_object_many', { 'customers', { {id = 2, name = 'Anna', age = 23}, @@ -789,7 +788,7 @@ pgroup.test_partial_success_stop_on_error = function(g) -- stop_on_error = true, rollback_on_error = false -- one error on one storage without rollback, inserts stop by error on this storage -- inserts before error are successful - local result, errs = g.cluster.main_server.net_box:call('crud.insert_many', { + local result, errs = g.router:call('crud.insert_many', { 'customers', { {22, box.NULL, 'Alex', 34}, @@ -871,7 +870,7 @@ pgroup.test_object_partial_success_stop_on_error = function(g) -- stop_on_error = true, rollback_on_error = false -- one error on one storage without rollback, inserts stop by error on this storage -- inserts before error are successful - local result, errs = g.cluster.main_server.net_box:call('crud.insert_object_many', { + local result, errs = g.router:call('crud.insert_object_many', { 'customers', { {id = 22, name = 'Alex', age = 34}, @@ -957,7 +956,7 @@ pgroup.test_no_success_stop_on_error = function(g) -- insert_many -- fails for both: s1-master s2-master -- one error on each storage, all inserts stop by error - local result, errs = g.cluster.main_server.net_box:call('crud.insert_many', { + local result, errs = g.router:call('crud.insert_many', { 'customers', { {2, box.NULL, 'Alex', 34}, @@ -1038,7 +1037,7 @@ pgroup.test_object_no_success_stop_on_error = function(g) -- insert_object_many -- fails for both: s1-master s2-master -- one error on each storage, all inserts stop by error - local result, errs = g.cluster.main_server.net_box:call('crud.insert_object_many', { + local result, errs = g.router:call('crud.insert_object_many', { 'customers', { {id = 2, name = 'Alex', age = 34}, @@ -1102,7 +1101,7 @@ end pgroup.test_all_success_rollback_on_error = function(g) -- insert_many -- all success - local result, errs = g.cluster.main_server.net_box:call('crud.insert_many', { + local result, errs = g.router:call('crud.insert_many', { 'customers', { {2, box.NULL, 'Anna', 23}, @@ -1149,7 +1148,7 @@ end pgroup.test_object_all_success_rollback_on_error = function(g) -- insert_object_many -- all success - local result, errs = g.cluster.main_server.net_box:call('crud.insert_object_many', { + local result, errs = g.router:call('crud.insert_object_many', { 'customers', { {id = 2, name = 'Anna', age = 23}, @@ -1208,7 +1207,7 @@ pgroup.test_partial_success_rollback_on_error = function(g) -- insert_many -- stop_on_error = false, rollback_on_error = true -- two error on one storage with rollback - local result, errs = g.cluster.main_server.net_box:call('crud.insert_many', { + local result, errs = g.router:call('crud.insert_many', { 'customers', { {22, box.NULL, 'Alex', 34}, @@ -1291,7 +1290,7 @@ pgroup.test_object_partial_success_rollback_on_error = function(g) -- insert_object_many -- stop_on_error = false, rollback_on_error = true -- two error on one storage with rollback - local result, errs = g.cluster.main_server.net_box:call('crud.insert_object_many', { + local result, errs = g.router:call('crud.insert_object_many', { 'customers', { {id = 22, name = 'Alex', age = 34}, @@ -1384,7 +1383,7 @@ pgroup.test_no_success_rollback_on_error = function(g) -- insert_many -- fails for both: s1-master s2-master -- two errors on each storage with rollback - local result, errs = g.cluster.main_server.net_box:call('crud.insert_many', { + local result, errs = g.router:call('crud.insert_many', { 'customers', { {1, box.NULL, 'Olga', 27}, @@ -1479,7 +1478,7 @@ pgroup.test_object_no_success_rollback_on_error = function(g) -- insert_object_many -- fails for both: s1-master s2-master -- two errors on each storage with rollback - local result, errs = g.cluster.main_server.net_box:call('crud.insert_object_many', { + local result, errs = g.router:call('crud.insert_object_many', { 'customers', { {id = 1, name = 'Olga', age = 27}, @@ -1552,7 +1551,7 @@ end pgroup.test_all_success_rollback_and_stop_on_error = function(g) -- insert_many -- all success - local result, errs = g.cluster.main_server.net_box:call('crud.insert_many', { + local result, errs = g.router:call('crud.insert_many', { 'customers', { {2, box.NULL, 'Anna', 23}, @@ -1600,7 +1599,7 @@ end pgroup.test_object_all_success_rollback_and_stop_on_error = function(g) -- insert_object_many -- all success - local result, errs = g.cluster.main_server.net_box:call('crud.insert_object_many', { + local result, errs = g.router:call('crud.insert_object_many', { 'customers', { {id = 2, name = 'Anna', age = 23}, @@ -1661,7 +1660,7 @@ pgroup.test_partial_success_rollback_and_stop_on_error = function(g) -- stop_on_error = true, rollback_on_error = true -- two error on one storage with rollback, inserts stop by error on this storage -- inserts before error are rollbacked - local result, errs = g.cluster.main_server.net_box:call('crud.insert_many', { + local result, errs = g.router:call('crud.insert_many', { 'customers', { {22, box.NULL, 'Alex', 34}, @@ -1755,7 +1754,7 @@ pgroup.test_object_partial_success_rollback_and_stop_on_error = function(g) -- stop_on_error = true, rollback_on_error = true -- two error on one storage with rollback, inserts stop by error on this storage -- inserts before error are rollbacked - local result, errs = g.cluster.main_server.net_box:call('crud.insert_object_many', { + local result, errs = g.router:call('crud.insert_object_many', { 'customers', { {id = 22, name = 'Alex', age = 34}, @@ -1835,7 +1834,7 @@ end pgroup.test_partial_result = function(g) -- bad fields format - local result, errs = g.cluster.main_server.net_box:call('crud.insert_many', { + local result, errs = g.router:call('crud.insert_many', { 'customers', { {15, box.NULL, 'Fedor', 59}, @@ -1850,7 +1849,7 @@ pgroup.test_partial_result = function(g) t.assert_str_contains(errs[1].err, 'Space format doesn\'t contain field named "invalid"') -- insert_many - local result, errs = g.cluster.main_server.net_box:call('crud.insert_many', { + local result, errs = g.router:call('crud.insert_many', { 'customers', { {1, box.NULL, 'Fedor', 59}, @@ -1872,7 +1871,7 @@ end pgroup.test_object_partial_result = function(g) -- bad fields format - local result, errs = g.cluster.main_server.net_box:call('crud.insert_object_many', { + local result, errs = g.router:call('crud.insert_object_many', { 'customers', { {id = 15, name = 'Fedor', age = 59}, @@ -1887,7 +1886,7 @@ pgroup.test_object_partial_result = function(g) t.assert_str_contains(errs[1].err, 'Space format doesn\'t contain field named "invalid"') -- insert_object_many - local result, errs = g.cluster.main_server.net_box:call('crud.insert_object_many', { + local result, errs = g.router:call('crud.insert_object_many', { 'customers', { {id = 1, name = 'Fedor', age = 59}, @@ -1910,7 +1909,7 @@ end pgroup.test_opts_not_damaged = function(g) -- insert_many local batch_insert_opts = {timeout = 1, fields = {'name', 'age'}} - local new_batch_insert_opts, err = g.cluster.main_server:eval([[ + local new_batch_insert_opts, err = g.router:eval([[ local crud = require('crud') local batch_insert_opts = ... @@ -1927,7 +1926,7 @@ pgroup.test_opts_not_damaged = function(g) -- insert_object_many local batch_insert_opts = {timeout = 1, fields = {'name', 'age'}} - local new_batch_insert_opts, err = g.cluster.main_server:eval([[ + local new_batch_insert_opts, err = g.router:eval([[ local crud = require('crud') local batch_insert_opts = ... @@ -1945,7 +1944,7 @@ end pgroup.test_noreturn_opt = function(g) -- insert_many with noreturn, all tuples are correct - local result, errs = g.cluster.main_server.net_box:call('crud.insert_many', { + local result, errs = g.router:call('crud.insert_many', { 'customers', { {1, box.NULL, 'Fedor', 59}, @@ -1959,7 +1958,7 @@ pgroup.test_noreturn_opt = function(g) t.assert_equals(result, nil) -- insert_many with noreturn, some tuples are correct - local result, errs = g.cluster.main_server.net_box:call('crud.insert_many', { + local result, errs = g.router:call('crud.insert_many', { 'customers', { {1, box.NULL, 'Fedor', 59}, @@ -1974,7 +1973,7 @@ pgroup.test_noreturn_opt = function(g) t.assert_equals(result, nil) -- insert_many with noreturn, all tuples are not correct - local result, errs = g.cluster.main_server.net_box:call('crud.insert_many', { + local result, errs = g.router:call('crud.insert_many', { 'customers', { {1, box.NULL, 'Fedor', 59}, @@ -1989,7 +1988,7 @@ pgroup.test_noreturn_opt = function(g) t.assert_equals(result, nil) -- insert_object_many with noreturn, all tuples are correct - local result, errs = g.cluster.main_server.net_box:call('crud.insert_object_many', { + local result, errs = g.router:call('crud.insert_object_many', { 'customers', { {id = 10, name = 'Fedor', age = 59}, @@ -2003,7 +2002,7 @@ pgroup.test_noreturn_opt = function(g) t.assert_equals(result, nil) -- insert_object_many with noreturn, some tuples are correct - local result, errs = g.cluster.main_server.net_box:call('crud.insert_object_many', { + local result, errs = g.router:call('crud.insert_object_many', { 'customers', { {id = 40, name = 'Fedor', age = 59}, @@ -2018,7 +2017,7 @@ pgroup.test_noreturn_opt = function(g) t.assert_equals(result, nil) -- insert_object_many with noreturn, all tuples are not correct - local result, errs = g.cluster.main_server.net_box:call('crud.insert_object_many', { + local result, errs = g.router:call('crud.insert_object_many', { 'customers', { {id = box.NULL, name = 'Fedor', age = 59}, @@ -2034,7 +2033,7 @@ pgroup.test_noreturn_opt = function(g) end pgroup.test_zero_tuples = function(g) - local result, errs = g.cluster.main_server.net_box:call( + local result, errs = g.router:call( 'crud.insert_many', {'customers', {}}) t.assert_not_equals(errs, nil) @@ -2044,7 +2043,7 @@ pgroup.test_zero_tuples = function(g) end pgroup.test_zero_objects = function(g) - local result, errs = g.cluster.main_server.net_box:call( + local result, errs = g.router:call( 'crud.insert_object_many', {'customers', {}}) t.assert_not_equals(errs, nil) diff --git a/test/integration/len_test.lua b/test/integration/len_test.lua index a28fd397..19f71548 100644 --- a/test/integration/len_test.lua +++ b/test/integration/len_test.lua @@ -19,7 +19,7 @@ pgroup.before_each(function(g) end) pgroup.test_len_non_existent_space = function(g) - local result, err = g.cluster.main_server.net_box:call('crud.len', {'non_existent_space'}) + local result, err = g.router:call('crud.len', {'non_existent_space'}) t.assert_equals(result, nil) t.assert_str_contains(err.err, "Space \"non_existent_space\" doesn't exist") @@ -40,14 +40,14 @@ pgroup.test_len = function(g) helpers.insert_objects(g, 'customers', customers) - local result, err = g.cluster.main_server.net_box:call('crud.len', {'customers'}) + local result, err = g.router:call('crud.len', {'customers'}) t.assert_equals(err, nil) t.assert_equals(result, expected_len) end pgroup.test_len_empty_space = function(g) - local result, err = g.cluster.main_server.net_box:call('crud.len', {'customers'}) + local result, err = g.router:call('crud.len', {'customers'}) t.assert_equals(err, nil) t.assert_equals(result, 0) @@ -55,7 +55,7 @@ end pgroup.test_opts_not_damaged = function(g) local len_opts = {timeout = 1} - local new_len_opts, err = g.cluster.main_server:eval([[ + local new_len_opts, err = g.router:eval([[ local crud = require('crud') local len_opts = ... diff --git a/test/integration/migration_test.lua b/test/integration/migration_test.lua index 95a059d5..a4a59ee0 100644 --- a/test/integration/migration_test.lua +++ b/test/integration/migration_test.lua @@ -5,7 +5,6 @@ local helpers = require('test.helper') -- The migrations package requires cartridge as a dependency. local pgroup = t.group('migration', { {backend = helpers.backend.CARTRIDGE, engine = 'memtx'}, - {backend = helpers.backend.CARTRIDGE, engine = 'vinyl'}, }) pgroup.before_all(function(g) @@ -51,7 +50,7 @@ pgroup.test_gh_308_select_after_improper_ddl_space_drop = function(g) end) -- Ensure that crud request for existing space is ok. - local _, err = g.cluster.main_server.net_box:call('crud.select', { + local _, err = g.router:call('crud.select', { 'customers', nil, {first = 1, mode = 'write'}, }) t.assert_equals(err, nil) diff --git a/test/integration/pairs_readview_test.lua b/test/integration/pairs_readview_test.lua index 4577bc98..df0a7144 100644 --- a/test/integration/pairs_readview_test.lua +++ b/test/integration/pairs_readview_test.lua @@ -20,7 +20,7 @@ pgroup.before_all(function(g) g.space_format = g.cluster.servers[2].net_box.space.customers:format() - g.cluster.main_server.net_box:eval([[ + g.router:eval([[ require('crud').cfg{ stats = true } ]]) end) @@ -61,7 +61,7 @@ pgroup.test_pairs_no_conditions = function(g) } -- without conditions and options - local objects = g.cluster.main_server.net_box:eval([[ + local objects = g.router:eval([[ local crud = require('crud') local objects = {} @@ -78,7 +78,7 @@ pgroup.test_pairs_no_conditions = function(g) t.assert_equals(objects, raw_rows) -- with use_tomap=false (the raw tuples returned) - local objects = g.cluster.main_server.net_box:eval([[ + local objects = g.router:eval([[ local crud = require('crud') local objects = {} @@ -96,7 +96,7 @@ pgroup.test_pairs_no_conditions = function(g) t.assert_equals(objects, raw_rows) -- no after - local objects = g.cluster.main_server.net_box:eval([[ + local objects = g.router:eval([[ local crud = require('crud') local objects = {} @@ -115,7 +115,7 @@ pgroup.test_pairs_no_conditions = function(g) -- after obj 2 local after = crud_utils.flatten(customers[2], g.space_format) - local objects, err = g.cluster.main_server.net_box:eval([[ + local objects, err = g.router:eval([[ local crud = require('crud') local after = ... @@ -137,7 +137,7 @@ pgroup.test_pairs_no_conditions = function(g) -- after obj 4 (last) local after = crud_utils.flatten(customers[4], g.space_format) - local objects, err = g.cluster.main_server.net_box:eval([[ + local objects, err = g.router:eval([[ local crud = require('crud') local after = ... @@ -182,7 +182,7 @@ pgroup.test_ge_condition_with_index = function(g) } -- no after - local objects, err = g.cluster.main_server.net_box:eval([[ + local objects, err = g.router:eval([[ local crud = require('crud') local conditions = ... @@ -205,7 +205,7 @@ pgroup.test_ge_condition_with_index = function(g) -- after obj 3 local after = crud_utils.flatten(customers[3], g.space_format) - local objects, err = g.cluster.main_server.net_box:eval([[ + local objects, err = g.router:eval([[ local crud = require('crud') local conditions, after = ... @@ -250,7 +250,7 @@ pgroup.test_le_condition_with_index = function(g) } -- no after - local objects, err = g.cluster.main_server.net_box:eval([[ + local objects, err = g.router:eval([[ local crud = require('crud') local conditions = ... @@ -271,7 +271,7 @@ pgroup.test_le_condition_with_index = function(g) -- after obj 3 local after = crud_utils.flatten(customers[3], g.space_format) - local objects, err = g.cluster.main_server.net_box:eval([[ + local objects, err = g.router:eval([[ local crud = require('crud') local conditions, after = ... @@ -309,7 +309,7 @@ pgroup.test_first = function(g) table.sort(customers, function(obj1, obj2) return obj1.id < obj2.id end) -- w/ tomap - local objects, err = g.cluster.main_server.net_box:eval([[ + local objects, err = g.router:eval([[ local crud = require('crud') local objects = {} local foo, err = crud.readview({name = 'foo'}) @@ -325,7 +325,7 @@ pgroup.test_first = function(g) t.assert_equals(err, nil) t.assert_equals(objects, helpers.get_objects_by_idxs(customers, {1, 2})) - local tuples, err = g.cluster.main_server.net_box:eval([[ + local tuples, err = g.router:eval([[ local crud = require('crud') local tuples = {} local foo, err = crud.readview({name = 'foo'}) @@ -363,7 +363,7 @@ pgroup.test_negative_first = function(g) -- negative first t.assert_error_msg_contains("Negative first isn't allowed for pairs", function() - g.cluster.main_server.net_box:eval([[ + g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) if err ~= nil then @@ -376,7 +376,7 @@ pgroup.test_negative_first = function(g) end pgroup.test_empty_space = function(g) - local count = g.cluster.main_server.net_box:eval([[ + local count = g.router:eval([[ local crud = require('crud') local count = 0 local foo, err = crud.readview({name = 'foo'}) @@ -405,7 +405,7 @@ pgroup.test_luafun_compatibility = function(g) age = 33, city = "Los Angeles", }, }) - local count = g.cluster.main_server.net_box:eval([[ + local count = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) if err ~= nil then @@ -417,7 +417,7 @@ pgroup.test_luafun_compatibility = function(g) ]]) t.assert_equals(count, 3) - count = g.cluster.main_server.net_box:eval([[ + count = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) if err ~= nil then @@ -462,7 +462,7 @@ pgroup.test_pairs_partial_result = function(g) {id = 4, age = 46, name = "William", city = "Chicago"}, } - local objects = g.cluster.main_server.net_box:eval([[ + local objects = g.router:eval([[ local crud = require('crud') local conditions, fields = ... @@ -486,7 +486,7 @@ pgroup.test_pairs_partial_result = function(g) {id = 4, age = 46, name = "William", city = "Chicago"}, } - objects = g.cluster.main_server.net_box:eval([[ + objects = g.router:eval([[ local crud = require('crud') local conditions, fields = ... @@ -520,7 +520,7 @@ pgroup.test_pairs_partial_result = function(g) {id = 4, age = 46, name = "William"}, } - objects = g.cluster.main_server.net_box:eval([[ + objects = g.router:eval([[ local crud = require('crud') local conditions, fields = ... @@ -544,7 +544,7 @@ pgroup.test_pairs_partial_result = function(g) {id = 4, age = 46, name = "William"}, } - objects = g.cluster.main_server.net_box:eval([[ + objects = g.router:eval([[ local crud = require('crud') local conditions, fields = ... @@ -581,7 +581,7 @@ pgroup.test_pairs_partial_result = function(g) {id = 3, name = "David", age = 33}, } - objects = g.cluster.main_server.net_box:eval([[ + objects = g.router:eval([[ local crud = require('crud') local conditions, fields = ... @@ -605,7 +605,7 @@ pgroup.test_pairs_partial_result = function(g) {id = 3, name = "David", age = 33}, } - objects = g.cluster.main_server.net_box:eval([[ + objects = g.router:eval([[ local crud = require('crud') local conditions, fields = ... @@ -640,7 +640,7 @@ pgroup.test_pairs_partial_result = function(g) {id = 3, name = "David", city = "Los Angeles"}, } - objects = g.cluster.main_server.net_box:eval([[ + objects = g.router:eval([[ local crud = require('crud') local conditions, fields = ... @@ -666,7 +666,7 @@ pgroup.test_pairs_partial_result = function(g) {id = 3, name = "David", city = "Los Angeles"}, } - objects = g.cluster.main_server.net_box:eval([[ + objects = g.router:eval([[ local crud = require('crud') local conditions, fields = ... @@ -694,7 +694,7 @@ end pgroup.test_pairs_force_map_call = function(g) local key = 1 - local first_bucket_id = g.cluster.main_server.net_box:eval([[ + local first_bucket_id = g.router:eval([[ local vshard = require('vshard') local key = ... @@ -719,7 +719,7 @@ pgroup.test_pairs_force_map_call = function(g) local conditions = {{'==', 'id', key}} - local objects = g.cluster.main_server.net_box:eval([[ + local objects = g.router:eval([[ local crud = require('crud') local conditions = ... @@ -740,7 +740,7 @@ pgroup.test_pairs_force_map_call = function(g) t.assert_equals(err, nil) t.assert_equals(#objects, 1) - objects = g.cluster.main_server.net_box:eval([[ + objects = g.router:eval([[ local crud = require('crud') local conditions = ... @@ -787,7 +787,7 @@ pgroup.test_pairs_timeout = function(g) {4, 1161, 'William', 'White', 81, 'Chicago'}, } - local objects = g.cluster.main_server.net_box:eval([[ + local objects = g.router:eval([[ local crud = require('crud') local objects = {} @@ -830,7 +830,7 @@ pgroup.test_pairs_no_map_reduce = function(g) table.sort(customers, function(obj1, obj2) return obj1.id < obj2.id end) - local router = helpers.get_router(g.cluster, g.params.backend).net_box + local router = g.router local map_reduces_before = helpers.get_map_reduces_stat(router, 'customers') -- Case: no conditions, just bucket id. @@ -859,7 +859,7 @@ pgroup.test_pairs_no_map_reduce = function(g) -- Case: EQ on secondary index, which is not in the sharding -- index (primary index in the case). - local rows = g.cluster.main_server.net_box:eval([[ + local rows = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) if err ~= nil then @@ -886,7 +886,7 @@ local function read_impl(cg, space, conditions, opts) opts = table.deepcopy(opts) or {} opts.use_tomap = true - return cg.cluster.main_server:exec(function(space, conditions, opts) + return cg.router:exec(function(space, conditions, opts) local crud = require('crud') local rv, err = crud.readview() diff --git a/test/integration/pairs_test.lua b/test/integration/pairs_test.lua index d5f850ba..1744c490 100644 --- a/test/integration/pairs_test.lua +++ b/test/integration/pairs_test.lua @@ -7,15 +7,14 @@ local read_scenario = require('test.integration.read_scenario') local pgroup = t.group('pairs', helpers.backend_matrix({ {engine = 'memtx'}, - {engine = 'vinyl'}, })) pgroup.before_all(function(g) helpers.start_default_cluster(g, 'srv_select') - g.space_format = g.cluster.servers[2].net_box.space.customers:format() + g.space_format = g.cluster:server('s1-master').net_box.space.customers:format() - g.cluster.main_server.net_box:eval([[ + g.router:eval([[ require('crud').cfg{ stats = true } ]]) end) @@ -56,7 +55,7 @@ pgroup.test_pairs_no_conditions = function(g) } -- without conditions and options - local objects = g.cluster.main_server.net_box:eval([[ + local objects = g.router:eval([[ local crud = require('crud') local objects = {} @@ -69,7 +68,7 @@ pgroup.test_pairs_no_conditions = function(g) t.assert_equals(objects, raw_rows) -- with use_tomap=false (the raw tuples returned) - local objects = g.cluster.main_server.net_box:eval([[ + local objects = g.router:eval([[ local crud = require('crud') local objects = {} @@ -82,7 +81,7 @@ pgroup.test_pairs_no_conditions = function(g) t.assert_equals(objects, raw_rows) -- no after - local objects = g.cluster.main_server.net_box:eval([[ + local objects = g.router:eval([[ local crud = require('crud') local objects = {} @@ -97,7 +96,7 @@ pgroup.test_pairs_no_conditions = function(g) -- after obj 2 local after = crud_utils.flatten(customers[2], g.space_format) - local objects, err = g.cluster.main_server.net_box:eval([[ + local objects, err = g.router:eval([[ local crud = require('crud') local after = ... @@ -115,7 +114,7 @@ pgroup.test_pairs_no_conditions = function(g) -- after obj 4 (last) local after = crud_utils.flatten(customers[4], g.space_format) - local objects, err = g.cluster.main_server.net_box:eval([[ + local objects, err = g.router:eval([[ local crud = require('crud') local after = ... @@ -156,7 +155,7 @@ pgroup.test_ge_condition_with_index = function(g) } -- no after - local objects, err = g.cluster.main_server.net_box:eval([[ + local objects, err = g.router:eval([[ local crud = require('crud') local conditions = ... @@ -174,7 +173,7 @@ pgroup.test_ge_condition_with_index = function(g) -- after obj 3 local after = crud_utils.flatten(customers[3], g.space_format) - local objects, err = g.cluster.main_server.net_box:eval([[ + local objects, err = g.router:eval([[ local crud = require('crud') local conditions, after = ... @@ -215,7 +214,7 @@ pgroup.test_le_condition_with_index = function(g) } -- no after - local objects, err = g.cluster.main_server.net_box:eval([[ + local objects, err = g.router:eval([[ local crud = require('crud') local conditions = ... @@ -233,7 +232,7 @@ pgroup.test_le_condition_with_index = function(g) -- after obj 3 local after = crud_utils.flatten(customers[3], g.space_format) - local objects, err = g.cluster.main_server.net_box:eval([[ + local objects, err = g.router:eval([[ local crud = require('crud') local conditions, after = ... @@ -267,7 +266,7 @@ pgroup.test_first = function(g) table.sort(customers, function(obj1, obj2) return obj1.id < obj2.id end) -- w/ tomap - local objects, err = g.cluster.main_server.net_box:eval([[ + local objects, err = g.router:eval([[ local crud = require('crud') local objects = {} for _, object in crud.pairs('customers', nil, {first = 2, use_tomap = true, mode = 'write'}) do @@ -278,7 +277,7 @@ pgroup.test_first = function(g) t.assert_equals(err, nil) t.assert_equals(objects, helpers.get_objects_by_idxs(customers, {1, 2})) - local tuples, err = g.cluster.main_server.net_box:eval([[ + local tuples, err = g.router:eval([[ local crud = require('crud') local tuples = {} for _, tuple in crud.pairs('customers', nil, {first = 2}) do @@ -311,7 +310,7 @@ pgroup.test_negative_first = function(g) -- negative first t.assert_error_msg_contains("Negative first isn't allowed for pairs", function() - g.cluster.main_server.net_box:eval([[ + g.router:eval([[ local crud = require('crud') crud.pairs('customers', nil, {first = -10}) ]]) @@ -319,7 +318,7 @@ pgroup.test_negative_first = function(g) end pgroup.test_empty_space = function(g) - local count = g.cluster.main_server.net_box:eval([[ + local count = g.router:eval([[ local crud = require('crud') local count = 0 for _, object in crud.pairs('customers', nil, {mode = 'write'}) do @@ -343,14 +342,14 @@ pgroup.test_luafun_compatibility = function(g) age = 33, city = "Los Angeles", }, }) - local count = g.cluster.main_server.net_box:eval([[ + local count = g.router:eval([[ local crud = require('crud') local count = crud.pairs('customers', nil, {mode = 'write'}):map(function() return 1 end):sum() return count ]]) t.assert_equals(count, 3) - count = g.cluster.main_server.net_box:eval([[ + count = g.router:eval([[ local crud = require('crud') local count = crud.pairs( 'customers', @@ -393,7 +392,7 @@ pgroup.test_pairs_partial_result = function(g) {id = 4, age = 46, name = "William", city = "Chicago"}, } - local objects = g.cluster.main_server.net_box:eval([[ + local objects = g.router:eval([[ local crud = require('crud') local conditions, fields = ... @@ -413,13 +412,13 @@ pgroup.test_pairs_partial_result = function(g) {id = 4, age = 46, name = "William", city = "Chicago"}, } - objects = g.cluster.main_server.net_box:eval([[ + objects = g.router:eval([[ local crud = require('crud') local conditions, fields = ... local tuples = {} - for _, tuple in crud.pairs('customers', conditions, {fields = fields}) do + for _, tuple in crud.pairs('customers', conditions, {fields = fields, mode = 'write'}) do table.insert(tuples, tuple) end @@ -447,7 +446,7 @@ pgroup.test_pairs_partial_result = function(g) {id = 4, age = 46, name = "William"}, } - objects = g.cluster.main_server.net_box:eval([[ + objects = g.router:eval([[ local crud = require('crud') local conditions, fields = ... @@ -467,7 +466,7 @@ pgroup.test_pairs_partial_result = function(g) {id = 4, age = 46, name = "William"}, } - objects = g.cluster.main_server.net_box:eval([[ + objects = g.router:eval([[ local crud = require('crud') local conditions, fields = ... @@ -504,7 +503,7 @@ pgroup.test_pairs_partial_result = function(g) {id = 3, name = "David", age = 33}, } - objects = g.cluster.main_server.net_box:eval([[ + objects = g.router:eval([[ local crud = require('crud') local conditions, fields = ... @@ -524,7 +523,7 @@ pgroup.test_pairs_partial_result = function(g) {id = 3, name = "David", age = 33}, } - objects = g.cluster.main_server.net_box:eval([[ + objects = g.router:eval([[ local crud = require('crud') local conditions, fields = ... @@ -558,7 +557,7 @@ pgroup.test_pairs_partial_result = function(g) {id = 3, name = "David", city = "Los Angeles"}, } - objects = g.cluster.main_server.net_box:eval([[ + objects = g.router:eval([[ local crud = require('crud') local conditions, fields = ... @@ -578,7 +577,7 @@ pgroup.test_pairs_partial_result = function(g) {id = 3, name = "David", city = "Los Angeles"}, } - objects = g.cluster.main_server.net_box:eval([[ + objects = g.router:eval([[ local crud = require('crud') local conditions, fields = ... @@ -633,7 +632,7 @@ pgroup.test_pairs_cut_result = function(g) {name = "William", city = "Chicago"}, } - local objects = g.cluster.main_server.net_box:eval([[ + local objects = g.router:eval([[ local crud = require('crud') local conditions, fields = ... @@ -654,7 +653,7 @@ pgroup.test_pairs_cut_result = function(g) {"William", "Chicago"}, } - local tuples = g.cluster.main_server.net_box:eval([[ + local tuples = g.router:eval([[ local crud = require('crud') local conditions, fields = ... @@ -673,7 +672,7 @@ end pgroup.test_pairs_force_map_call = function(g) local key = 1 - local first_bucket_id = g.cluster.main_server.net_box:eval([[ + local first_bucket_id = g.router:eval([[ local vshard = require('vshard') local key = ... @@ -698,7 +697,7 @@ pgroup.test_pairs_force_map_call = function(g) local conditions = {{'==', 'id', key}} - local objects = g.cluster.main_server.net_box:eval([[ + local objects = g.router:eval([[ local crud = require('crud') local conditions = ... @@ -714,7 +713,7 @@ pgroup.test_pairs_force_map_call = function(g) t.assert_equals(err, nil) t.assert_equals(#objects, 1) - objects = g.cluster.main_server.net_box:eval([[ + objects = g.router:eval([[ local crud = require('crud') local conditions = ... @@ -760,7 +759,7 @@ pgroup.test_pairs_timeout = function(g) {4, 1161, 'William', 'White', 81, 'Chicago'}, } - local objects = g.cluster.main_server.net_box:eval([[ + local objects = g.router:eval([[ local crud = require('crud') local objects = {} @@ -810,7 +809,7 @@ pgroup.test_opts_not_damaged = function(g) fields = fields, mode = 'write', prefer_replica = false, balance = false, force_map_call = false, use_tomap = true, } - local new_pairs_opts, objects = g.cluster.main_server:eval([[ + local new_pairs_opts, objects = g.router:eval([[ local crud = require('crud') local pairs_opts = ... @@ -852,7 +851,7 @@ pgroup.test_pairs_no_map_reduce = function(g) table.sort(customers, function(obj1, obj2) return obj1.id < obj2.id end) - local router = helpers.get_router(g.cluster, g.params.backend).net_box + local router = g.router local map_reduces_before = helpers.get_map_reduces_stat(router, 'customers') -- Case: no conditions, just bucket id. @@ -875,7 +874,7 @@ pgroup.test_pairs_no_map_reduce = function(g) -- Case: EQ on secondary index, which is not in the sharding -- index (primary index in the case). - local rows = g.cluster.main_server.net_box:eval([[ + local rows = g.router:eval([[ local crud = require('crud') return crud.pairs(...):totable() @@ -898,7 +897,7 @@ local function read_impl(cg, space, conditions, opts) opts.mode = 'write' opts.use_tomap = true - return cg.cluster.main_server:exec(function(space, conditions, opts) + return cg.router:exec(function(space, conditions, opts) local crud = require('crud') local status, resp = pcall(function() diff --git a/test/integration/read_calls_strategies_test.lua b/test/integration/read_calls_strategies_test.lua index eec8606f..29e1275c 100644 --- a/test/integration/read_calls_strategies_test.lua +++ b/test/integration/read_calls_strategies_test.lua @@ -29,16 +29,16 @@ local pgroup = t.group('read_calls_strategies', helpers.backend_matrix({ pgroup.before_all(function(g) helpers.start_default_cluster(g, 'srv_read_calls_strategies') - g.space_format = g.cluster.servers[2].net_box.space.customers:format() + g.space_format = g.cluster:server('s1-master').net_box.space.customers:format() g.clear_vshard_calls = function() - g.cluster.main_server.net_box:call('clear_vshard_calls') + g.router:call('clear_vshard_calls') end g.get_vshard_call_strategies = function() -- Retries are possible, especially in CI, so we don't assert -- the quantity of calls, only strategies used. - local vshard_calls = g.cluster.main_server.net_box:eval('return _G.vshard_calls') + local vshard_calls = g.router:eval('return _G.vshard_calls') local vshard_call_strategies_map = {} for _, v in ipairs(vshard_calls) do @@ -54,20 +54,18 @@ pgroup.before_all(function(g) -- patch vshard.router.call* functions local vshard_call_names = {'callro', 'callbro', 'callre', 'callbre', 'callrw'} - g.cluster.main_server.net_box:call('patch_vshard_calls', {vshard_call_names}) + g.router:call('patch_vshard_calls', {vshard_call_names}) + + helpers.wait_cluster_replication_finished(g) end) pgroup.after_all(function(g) helpers.stop_cluster(g.cluster, g.params.backend) end) -pgroup.before_each(function(g) - helpers.truncate_space_on_cluster(g.cluster, 'customers') -end) - pgroup.test_get = function(g) g.clear_vshard_calls() - local _, err = g.cluster.main_server.net_box:call('crud.get', {'customers', 1, { + local _, err = g.router:call('crud.get', {'customers', 1, { mode = g.params.mode, balance = g.params.balance, prefer_replica = g.params.prefer_replica @@ -79,7 +77,7 @@ end pgroup.test_select = function(g) g.clear_vshard_calls() - local _, err = g.cluster.main_server.net_box:call('crud.select', {'customers', nil, { + local _, err = g.router:call('crud.select', {'customers', nil, { mode = g.params.mode, balance = g.params.balance, prefer_replica = g.params.prefer_replica, @@ -99,7 +97,7 @@ pgroup.test_pairs = function(g) prefer_replica = g.params.prefer_replica } - local _, err = g.cluster.main_server.net_box:eval([[ + local _, err = g.router:eval([[ local crud = require('crud') local opts = ... @@ -112,7 +110,7 @@ end pgroup.test_count = function(g) g.clear_vshard_calls() - local _, err = g.cluster.main_server.net_box:call('crud.count', {'customers', nil, { + local _, err = g.router:call('crud.count', {'customers', nil, { mode = g.params.mode, balance = g.params.balance, prefer_replica = g.params.prefer_replica, diff --git a/test/integration/readview_not_supported_test.lua b/test/integration/readview_not_supported_test.lua index fdada756..712f21a4 100644 --- a/test/integration/readview_not_supported_test.lua +++ b/test/integration/readview_not_supported_test.lua @@ -23,7 +23,7 @@ pgroup.after_all(function(g) end) pgroup.test_open = function(g) - local obj, err = g.cluster.main_server.net_box:eval([[ + local obj, err = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) return foo, err diff --git a/test/integration/replace_many_test.lua b/test/integration/replace_many_test.lua index 6b8c75aa..93874c9d 100644 --- a/test/integration/replace_many_test.lua +++ b/test/integration/replace_many_test.lua @@ -8,7 +8,6 @@ local batching_utils = require('crud.common.batching_utils') local pgroup = t.group('replace_many', helpers.backend_matrix({ {engine = 'memtx'}, - {engine = 'vinyl'}, })) pgroup.before_all(function(g) @@ -25,7 +24,7 @@ end) pgroup.test_non_existent_space = function(g) -- replace_many - local result, errs = g.cluster.main_server.net_box:call('crud.replace_many', { + local result, errs = g.router:call('crud.replace_many', { 'non_existent_space', { {1, box.NULL, 'Alex', 'alexpushkin'}, @@ -41,7 +40,7 @@ pgroup.test_non_existent_space = function(g) -- replace_object_many -- default: stop_on_error == false - local result, errs = g.cluster.main_server.net_box:call('crud.replace_object_many', { + local result, errs = g.router:call('crud.replace_object_many', { 'non_existent_space', { {id = 1, name = 'Fedor', login = 'FDost'}, @@ -61,7 +60,7 @@ pgroup.test_non_existent_space = function(g) -- replace_object_many -- stop_on_error == true - local result, errs = g.cluster.main_server.net_box:call('crud.replace_object_many', { + local result, errs = g.router:call('crud.replace_object_many', { 'non_existent_space', { {id = 1, name = 'Fedor', login = 'FDost'}, @@ -83,7 +82,7 @@ end pgroup.test_object_bad_format = function(g) -- bad format - local result, errs = g.cluster.main_server.net_box:call('crud.replace_object_many', { + local result, errs = g.router:call('crud.replace_object_many', { 'developers', { {id = 1, name = 'Fedor', login = 'FDost'}, @@ -115,7 +114,7 @@ pgroup.test_object_bad_format = function(g) t.assert_equals(result, {1, 477, 'Fedor', 'FDost'}) -- bad format - local result, errs = g.cluster.main_server.net_box:call('crud.replace_object_many', { + local result, errs = g.router:call('crud.replace_object_many', { 'developers', { {id = 4, name = 'Fedor', login = 'FDost'}, @@ -141,7 +140,7 @@ pgroup.test_object_bad_format = function(g) -- bad format -- two errors, default: stop_on_error == false - local result, errs = g.cluster.main_server.net_box:call('crud.replace_object_many', { + local result, errs = g.router:call('crud.replace_object_many', { 'developers', { {id = 1, name = 'Fedor'}, @@ -165,7 +164,7 @@ end pgroup.test_all_success = function(g) -- replace_many -- all success - local result, errs = g.cluster.main_server.net_box:call('crud.replace_many', { + local result, errs = g.router:call('crud.replace_many', { 'developers', { {1, box.NULL, 'Fedor', 'FDost'}, @@ -215,7 +214,7 @@ pgroup.test_object_all_success = function(g) -- replace_object_many -- all success - local result, errs = g.cluster.main_server.net_box:call('crud.replace_object_many', { + local result, errs = g.router:call('crud.replace_object_many', { 'developers', { {id = 1, name = 'Fedor', login = 'FDost'}, @@ -265,7 +264,7 @@ pgroup.test_one_error = function(g) -- replace_many -- failed for s1-master - local result, errs = g.cluster.main_server.net_box:call('crud.replace_many', { + local result, errs = g.router:call('crud.replace_many', { 'developers', { {4, box.NULL, 'Fedor', 'alexpushkin'}, @@ -318,7 +317,7 @@ pgroup.test_object_one_error = function(g) -- replace_object_many -- failed for s1-master - local result, errs = g.cluster.main_server.net_box:call('crud.replace_object_many', { + local result, errs = g.router:call('crud.replace_object_many', { 'developers', { {id = 4, name = 'Fedor', login = 'alexpushkin'}, @@ -377,7 +376,7 @@ pgroup.test_object_many_errors = function(g) -- replace_object_many -- fails for both: s1-master s2-master -- one error on each storage, one success on each storage - local result, errs = g.cluster.main_server.net_box:call('crud.replace_object_many', { + local result, errs = g.router:call('crud.replace_object_many', { 'developers', { {id = 4, name = 'Sergey', login = 's.ivanov'}, @@ -447,7 +446,7 @@ pgroup.test_many_errors = function(g) -- replace_many -- fails for both: s1-master s2-master -- one error on each storage, one success on each storage - local result, errs = g.cluster.main_server.net_box:call('crud.replace_many', { + local result, errs = g.router:call('crud.replace_many', { 'developers', { {4, box.NULL, 'Sergey', 's.ivanov'}, @@ -527,7 +526,7 @@ pgroup.test_no_success = function(g) -- replace_many -- fails for both: s1-master s2-master -- no success - local result, errs = g.cluster.main_server.net_box:call('crud.replace_many', { + local result, errs = g.router:call('crud.replace_many', { 'developers', { {4, box.NULL, 'Alex', 'a.smith'}, @@ -601,7 +600,7 @@ pgroup.test_object_no_success = function(g) -- replace_object_many -- fails for both: s1-master s2-master -- no success - local result, errs = g.cluster.main_server.net_box:call('crud.replace_object_many', { + local result, errs = g.router:call('crud.replace_object_many', { 'developers', { {id = 4, name = 'Alex', login = 'a.smith'}, @@ -653,7 +652,7 @@ end pgroup.test_object_bad_format_stop_on_error = function(g) -- bad format -- two errors, stop_on_error == true - local result, errs = g.cluster.main_server.net_box:call('crud.replace_object_many', { + local result, errs = g.router:call('crud.replace_object_many', { 'developers', { {id = 1, name = 'Fedor'}, @@ -675,7 +674,7 @@ end pgroup.test_all_success_stop_on_error = function(g) -- replace_many -- all success - local result, errs = g.cluster.main_server.net_box:call('crud.replace_many', { + local result, errs = g.router:call('crud.replace_many', { 'developers', { {1, box.NULL, 'Fedor', 'FDost'}, @@ -728,7 +727,7 @@ pgroup.test_object_all_success_stop_on_error = function(g) -- replace_object_many -- all success - local result, errs = g.cluster.main_server.net_box:call('crud.replace_object_many', { + local result, errs = g.router:call('crud.replace_object_many', { 'developers', { {id = 1, name = 'Fedor', login = 'FDost'}, @@ -788,7 +787,7 @@ pgroup.test_partial_success_stop_on_error = function(g) -- stop_on_error = true, rollback_on_error = false -- one error on one storage without rollback, inserts stop by error on this storage -- inserts before error are successful - local result, errs = g.cluster.main_server.net_box:call('crud.replace_many', { + local result, errs = g.router:call('crud.replace_many', { 'developers', { {22, box.NULL, 'Alex', 'alexpushkin'}, @@ -870,7 +869,7 @@ pgroup.test_object_partial_success_stop_on_error = function(g) -- stop_on_error = true, rollback_on_error = false -- one error on one storage without rollback, inserts stop by error on this storage -- inserts before error are successful - local result, errs = g.cluster.main_server.net_box:call('crud.replace_object_many', { + local result, errs = g.router:call('crud.replace_object_many', { 'developers', { {id = 22, name = 'Alex', login = 'alexpushkin'}, @@ -956,7 +955,7 @@ pgroup.test_no_success_stop_on_error = function(g) -- replace_many -- fails for both: s1-master s2-master -- one error on each storage, all inserts stop by error - local result, errs = g.cluster.main_server.net_box:call('crud.replace_many', { + local result, errs = g.router:call('crud.replace_many', { 'developers', { {71, box.NULL, 'Alex', 'AGolden'}, @@ -1037,7 +1036,7 @@ pgroup.test_object_no_success_stop_on_error = function(g) -- replace_object_many -- fails for both: s1-master s2-master -- one error on each storage, all inserts stop by error - local result, errs = g.cluster.main_server.net_box:call('crud.replace_object_many', { + local result, errs = g.router:call('crud.replace_object_many', { 'developers', { {id = 71, name = 'Alex', login = 'AGolden'}, @@ -1101,7 +1100,7 @@ end pgroup.test_all_success_rollback_on_error = function(g) -- replace_many -- all success - local result, errs = g.cluster.main_server.net_box:call('crud.replace_many', { + local result, errs = g.router:call('crud.replace_many', { 'developers', { {1, box.NULL, 'Fedor', 'FDost'}, @@ -1154,7 +1153,7 @@ pgroup.test_object_all_success_rollback_on_error = function(g) -- replace_object_many -- all success - local result, errs = g.cluster.main_server.net_box:call('crud.replace_object_many', { + local result, errs = g.router:call('crud.replace_object_many', { 'developers', { {id = 1, name = 'Fedor', login = 'FDost'}, @@ -1213,7 +1212,7 @@ pgroup.test_partial_success_rollback_on_error = function(g) -- replace_many -- stop_on_error = false, rollback_on_error = true -- two error on one storage with rollback - local result, errs = g.cluster.main_server.net_box:call('crud.replace_many', { + local result, errs = g.router:call('crud.replace_many', { 'developers', { {22, box.NULL, 'Alex', 'alexpushkin'}, @@ -1296,7 +1295,7 @@ pgroup.test_object_partial_success_rollback_on_error = function(g) -- replace_object_many -- stop_on_error = false, rollback_on_error = true -- two error on one storage with rollback - local result, errs = g.cluster.main_server.net_box:call('crud.replace_object_many', { + local result, errs = g.router:call('crud.replace_object_many', { 'developers', { {id = 22, name = 'Alex', login = 'alexpushkin'}, @@ -1389,7 +1388,7 @@ pgroup.test_no_success_rollback_on_error = function(g) -- replace_many -- fails for both: s1-master s2-master -- two errors on each storage with rollback - local result, errs = g.cluster.main_server.net_box:call('crud.replace_many', { + local result, errs = g.router:call('crud.replace_many', { 'developers', { {1, box.NULL, 'Eren', 'e.eger'}, @@ -1484,7 +1483,7 @@ pgroup.test_object_no_success_rollback_on_error = function(g) -- replace_object_many -- fails for both: s1-master s2-master -- two errors on each storage with rollback - local result, errs = g.cluster.main_server.net_box:call('crud.replace_object_many', { + local result, errs = g.router:call('crud.replace_object_many', { 'developers', { {id = 1, name = 'Eren', login = 'e.eger'}, @@ -1557,7 +1556,7 @@ end pgroup.test_all_success_rollback_and_stop_on_error = function(g) -- replace_many -- all success - local result, errs = g.cluster.main_server.net_box:call('crud.replace_many', { + local result, errs = g.router:call('crud.replace_many', { 'developers', { {1, box.NULL, 'Fedor', 'FDost'}, @@ -1611,7 +1610,7 @@ pgroup.test_object_all_success_rollback_and_stop_on_error = function(g) -- replace_object_many -- all success - local result, errs = g.cluster.main_server.net_box:call('crud.replace_object_many', { + local result, errs = g.router:call('crud.replace_object_many', { 'developers', { {id = 1, name = 'Fedor', login = 'FDost'}, @@ -1672,7 +1671,7 @@ pgroup.test_partial_success_rollback_and_stop_on_error = function(g) -- stop_on_error = true, rollback_on_error = true -- two error on one storage with rollback, inserts stop by error on this storage -- inserts before error are rollbacked - local result, errs = g.cluster.main_server.net_box:call('crud.replace_many', { + local result, errs = g.router:call('crud.replace_many', { 'developers', { {22, box.NULL, 'Alex', 'alexpushkin'}, @@ -1766,7 +1765,7 @@ pgroup.test_object_partial_success_rollback_and_stop_on_error = function(g) -- stop_on_error = true, rollback_on_error = true -- two error on one storage with rollback, inserts stop by error on this storage -- inserts before error are rollbacked - local result, errs = g.cluster.main_server.net_box:call('crud.replace_object_many', { + local result, errs = g.router:call('crud.replace_object_many', { 'developers', { {id = 22, name = 'Alex', login = 'alexpushkin'}, @@ -1846,7 +1845,7 @@ end pgroup.test_partial_result = function(g) -- bad fields format - local result, errs = g.cluster.main_server.net_box:call('crud.replace_many', { + local result, errs = g.router:call('crud.replace_many', { 'developers', { {1, box.NULL, 'Fedor', 'FDost'}, @@ -1861,7 +1860,7 @@ pgroup.test_partial_result = function(g) t.assert_str_contains(errs[1].err, 'Space format doesn\'t contain field named "invalid"') -- replace_many - local result, errs = g.cluster.main_server.net_box:call('crud.replace_many', { + local result, errs = g.router:call('crud.replace_many', { 'developers', { {1, box.NULL, 'Fedor', 'FDost'}, @@ -1883,7 +1882,7 @@ end pgroup.test_object_partial_result = function(g) -- bad fields format - local result, errs = g.cluster.main_server.net_box:call('crud.replace_object_many', { + local result, errs = g.router:call('crud.replace_object_many', { 'developers', { {id = 1, name = 'Fedor', login = 'FDost'}, @@ -1898,7 +1897,7 @@ pgroup.test_object_partial_result = function(g) t.assert_str_contains(errs[1].err, 'Space format doesn\'t contain field named "invalid"') -- replace_object_many - local result, errs = g.cluster.main_server.net_box:call('crud.replace_object_many', { + local result, errs = g.router:call('crud.replace_object_many', { 'developers', { {id = 1, name = 'Fedor', login = 'FDost'}, @@ -1921,7 +1920,7 @@ end pgroup.test_opts_not_damaged = function(g) -- replace_many local batch_replace_opts = {timeout = 1, fields = {'name', 'login'}} - local new_batch_replace_opts, err = g.cluster.main_server:eval([[ + local new_batch_replace_opts, err = g.router:eval([[ local crud = require('crud') local batch_replace_opts = ... @@ -1938,7 +1937,7 @@ pgroup.test_opts_not_damaged = function(g) -- replace_object_many local batch_replace_opts = {timeout = 1, fields = {'name', 'login'}} - local new_batch_replace_opts, err = g.cluster.main_server:eval([[ + local new_batch_replace_opts, err = g.router:eval([[ local crud = require('crud') local batch_replace_opts = ... @@ -1956,7 +1955,7 @@ end pgroup.test_noreturn_opt = function(g) -- replace_many with noreturn, all tuples are correct - local result, errs = g.cluster.main_server.net_box:call('crud.replace_many', { + local result, errs = g.router:call('crud.replace_many', { 'customers', { {1, box.NULL, 'Fedor', 59}, @@ -1970,7 +1969,7 @@ pgroup.test_noreturn_opt = function(g) t.assert_equals(result, nil) -- replace_many with noreturn, some tuples are correct - local result, errs = g.cluster.main_server.net_box:call('crud.replace_many', { + local result, errs = g.router:call('crud.replace_many', { 'customers', { {1, box.NULL, 'Fedor', 59}, @@ -1985,7 +1984,7 @@ pgroup.test_noreturn_opt = function(g) t.assert_equals(result, nil) -- replace_many with noreturn, all tuples are not correct - local result, errs = g.cluster.main_server.net_box:call('crud.replace_many', { + local result, errs = g.router:call('crud.replace_many', { 'customers', { {box.NULL, box.NULL, 'Fedor', 59}, @@ -2000,7 +1999,7 @@ pgroup.test_noreturn_opt = function(g) t.assert_equals(result, nil) -- replace_object_many with noreturn, all tuples are correct - local result, errs = g.cluster.main_server.net_box:call('crud.replace_object_many', { + local result, errs = g.router:call('crud.replace_object_many', { 'customers', { {id = 1, name = 'Fedor', age = 100}, @@ -2014,7 +2013,7 @@ pgroup.test_noreturn_opt = function(g) t.assert_equals(result, nil) -- replace_object_many with noreturn, some tuples are correct - local result, errs = g.cluster.main_server.net_box:call('crud.replace_object_many', { + local result, errs = g.router:call('crud.replace_object_many', { 'customers', { {id = 1, name = 'Fedor', age = 100}, @@ -2029,7 +2028,7 @@ pgroup.test_noreturn_opt = function(g) t.assert_equals(result, nil) -- replace_object_many with noreturn, all tuples are not correct - local result, errs = g.cluster.main_server.net_box:call('crud.replace_object_many', { + local result, errs = g.router:call('crud.replace_object_many', { 'customers', { {id = box.NULL, name = 'Fedor', age = 100}, @@ -2045,7 +2044,7 @@ pgroup.test_noreturn_opt = function(g) end pgroup.test_zero_tuples = function(g) - local result, errs = g.cluster.main_server.net_box:call( + local result, errs = g.router:call( 'crud.replace_many', {'customers', {}}) t.assert_not_equals(errs, nil) @@ -2055,7 +2054,7 @@ pgroup.test_zero_tuples = function(g) end pgroup.test_zero_objects = function(g) - local result, errs = g.cluster.main_server.net_box:call( + local result, errs = g.router:call( 'crud.replace_object_many', {'customers', {}}) t.assert_not_equals(errs, nil) diff --git a/test/integration/schema_test.lua b/test/integration/schema_test.lua index 71882dcf..bfea2664 100644 --- a/test/integration/schema_test.lua +++ b/test/integration/schema_test.lua @@ -7,13 +7,10 @@ local helpers = require('test.helper') local pgroup = t.group('schema', helpers.backend_matrix({ {engine = 'memtx'}, - {engine = 'vinyl'}, })) pgroup.before_all(function(g) helpers.start_default_cluster(g, 'srv_schema') - - g.router = helpers.get_router(g.cluster, g.params.backend) end) pgroup.after_all(function(g) diff --git a/test/integration/select_readview_test.lua b/test/integration/select_readview_test.lua index 87a5b7d6..aed46fed 100644 --- a/test/integration/select_readview_test.lua +++ b/test/integration/select_readview_test.lua @@ -16,9 +16,8 @@ local pgroup = t.group('select_readview', helpers.backend_matrix({ local function init_cluster(g) helpers.start_default_cluster(g, 'srv_select') - g.space_format = g.cluster.servers[2].net_box.space.customers:format() + g.space_format = g.cluster:server('s1-master').net_box.space.customers:format() - g.router = helpers.get_router(g.cluster, g.params.backend) g.router.net_box:eval([[ require('crud').cfg{ stats = true } ]]) @@ -63,7 +62,7 @@ local function set_master(cluster, uuid, master_uuid) end pgroup.test_non_existent_space = function(g) - local obj, err = g.cluster.main_server.net_box:eval([[ + local obj, err = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) if err ~= nil then @@ -81,7 +80,7 @@ pgroup.test_non_existent_space = function(g) end pgroup.test_select_no_index = function(g) - local obj, err = g.cluster.main_server.net_box:eval([[ + local obj, err = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) if err ~= nil then @@ -102,7 +101,7 @@ pgroup.test_invalid_value_type = function(g) {'=', 'id', 'not_number'} } - local obj, err = g.cluster.main_server.net_box:eval([[ + local obj, err = g.router:eval([[ local crud = require('crud') local conditions = ... @@ -139,7 +138,7 @@ pgroup.test_gc_on_storage = function(g) }) - local _, err = g.cluster.main_server.net_box:eval([[ + local _, err = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) if err ~= nil then @@ -155,7 +154,7 @@ pgroup.test_gc_on_storage = function(g) collectgarbage("collect")]]) end) - local obj, err = g.cluster.main_server.net_box:eval([[ + local obj, err = g.router:eval([[ local crud = require('crud') local foo = rawget(_G, 'foo') local result, err = foo:select('customers', nil, {fullscan = true}) @@ -174,7 +173,7 @@ pgroup.test_gc_on_storage = function(g) end pgroup.test_gc_rv_not_referenced_on_router = function(g) - local _, err = g.cluster.main_server.net_box:eval([[ + local _, err = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) if err ~= nil then @@ -213,7 +212,7 @@ pgroup.test_gc_rv_referenced_on_router = function(g) }, }) - local _, err = g.cluster.main_server.net_box:eval([[ + local _, err = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) if err ~= nil then @@ -225,7 +224,7 @@ pgroup.test_gc_rv_referenced_on_router = function(g) ]]) fiber.sleep(1) t.assert_equals(err, nil) - local obj, err = g.cluster.main_server.net_box:eval([[ + local obj, err = g.router:eval([[ local crud = require('crud') local foo = rawget(_G, 'foo') local result, err = foo:select('customers', nil, {fullscan = true}) @@ -244,7 +243,7 @@ pgroup.test_gc_rv_referenced_on_router = function(g) end pgroup.test_close = function(g) - local _, err = g.cluster.main_server.net_box:eval([[ + local _, err = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) if err ~= nil then @@ -280,7 +279,7 @@ pgroup.test_select_all = function(g) }, }) - local obj, err = g.cluster.main_server.net_box:eval([[ + local obj, err = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) if err ~= nil then @@ -321,7 +320,7 @@ pgroup.test_select_with_same_name = function(g) table.sort(customers, function(obj1, obj2) return obj1.id < obj2.id end) - local obj, err = g.cluster.main_server.net_box:eval([[ + local obj, err = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) if err ~= nil then @@ -368,7 +367,7 @@ pgroup.test_select_without_name = function(g) table.sort(customers, function(obj1, obj2) return obj1.id < obj2.id end) - local obj, err = g.cluster.main_server.net_box:eval([[ + local obj, err = g.router:eval([[ local crud = require('crud') local boo, err = crud.readview({name = nil}) if err ~= nil then @@ -409,7 +408,7 @@ pgroup.test_select_with_insert = function(g) table.sort(customers, function(obj1, obj2) return obj1.id < obj2.id end) - local obj, err = g.cluster.main_server.net_box:eval([[ + local obj, err = g.router:eval([[ local crud = require('crud') local boo, err = crud.readview({name = 'foo'}) if err ~= nil then @@ -436,7 +435,7 @@ pgroup.test_select_with_insert = function(g) }, }) - local obj, err = g.cluster.main_server.net_box:eval([[ + local obj, err = g.router:eval([[ local crud = require('crud') local boo = rawget(_G, 'boo') @@ -474,7 +473,7 @@ pgroup.test_select_with_delete = function(g) table.sort(customers, function(obj1, obj2) return obj1.id < obj2.id end) - local obj, err = g.cluster.main_server.net_box:eval([[ + local obj, err = g.router:eval([[ local crud = require('crud') local boo, err = crud.readview({}) if err ~= nil then @@ -494,10 +493,10 @@ pgroup.test_select_with_delete = function(g) {4, 1161, "William", "White", 81, "Chicago"}, }) - local _, err = g.cluster.main_server.net_box:call('crud.delete', {'customers', 3}) + local _, err = g.router:call('crud.delete', {'customers', 3}) t.assert_equals(err, nil) - local obj, err = g.cluster.main_server.net_box:eval([[ + local obj, err = g.router:eval([[ local crud = require('crud') local boo = rawget(_G, 'boo') @@ -548,7 +547,7 @@ pgroup.test_select_all_with_batch_size = function(g) table.sort(customers, function(obj1, obj2) return obj1.id < obj2.id end) -- batch size 1 - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) if err ~= nil then @@ -565,7 +564,7 @@ pgroup.test_select_all_with_batch_size = function(g) t.assert_equals(objects, customers) -- batch size 3 - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local bar, err = crud.readview({name = 'bar'}) if err ~= nil then @@ -617,7 +616,7 @@ pgroup.test_eq_condition_with_index = function(g) } -- no after - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions = ... @@ -639,7 +638,7 @@ pgroup.test_eq_condition_with_index = function(g) -- after obj 3 local after = crud_utils.flatten(customers[3], g.space_format) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, after = ... @@ -660,7 +659,7 @@ pgroup.test_eq_condition_with_index = function(g) -- after obj 5 with negative first local after = crud_utils.flatten(customers[5], g.space_format) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, after = ... @@ -682,7 +681,7 @@ pgroup.test_eq_condition_with_index = function(g) -- after obj 8 local after = crud_utils.flatten(customers[8], g.space_format) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, after = ... @@ -703,7 +702,7 @@ pgroup.test_eq_condition_with_index = function(g) -- after obj 8 with negative first local after = crud_utils.flatten(customers[8], g.space_format) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, after = ... @@ -724,7 +723,7 @@ pgroup.test_eq_condition_with_index = function(g) -- after obj 2 local after = crud_utils.flatten(customers[2], g.space_format) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, after = ... @@ -745,7 +744,7 @@ pgroup.test_eq_condition_with_index = function(g) -- after obj 2 with negative first local after = crud_utils.flatten(customers[2], g.space_format) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, after = ... @@ -789,7 +788,7 @@ pgroup.test_lt_condition_with_index = function(g) } -- no after - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions= ... @@ -810,7 +809,7 @@ pgroup.test_lt_condition_with_index = function(g) -- after obj 1 local after = crud_utils.flatten(customers[1], g.space_format) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, after = ... @@ -859,7 +858,7 @@ pgroup.test_multiple_conditions = function(g) } -- no after - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions= ... @@ -880,7 +879,7 @@ pgroup.test_multiple_conditions = function(g) -- after obj 5 local after = crud_utils.flatten(customers[5], g.space_format) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, after = ... @@ -924,7 +923,7 @@ pgroup.test_composite_index = function(g) } -- no after - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions= ... @@ -945,7 +944,7 @@ pgroup.test_composite_index = function(g) -- after obj 2 local after = crud_utils.flatten(customers[2], g.space_format) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, after = ... @@ -969,7 +968,7 @@ pgroup.test_composite_index = function(g) {'==', 'full_name', "Elizabeth"}, } - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions= ... @@ -990,7 +989,7 @@ pgroup.test_composite_index = function(g) -- first 1 - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions= ... @@ -1009,7 +1008,7 @@ pgroup.test_composite_index = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(customers, {2})) -- in full_name order -- first 1 with full specified key - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions= ... @@ -1042,7 +1041,7 @@ pgroup.test_composite_primary_index = function(g) local conditions = {{'=', 'id', {5, 'Ukrainian', 55}}} - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions= ... @@ -1059,7 +1058,7 @@ pgroup.test_composite_primary_index = function(g) t.assert_equals(err, nil) t.assert_equals(#result.rows, 1) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions= ... @@ -1076,7 +1075,7 @@ pgroup.test_composite_primary_index = function(g) t.assert_equals(err, nil) t.assert_equals(#result.rows, 1) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions= ... @@ -1093,7 +1092,7 @@ pgroup.test_composite_primary_index = function(g) t.assert_equals(err, nil) t.assert_equals(#result.rows, 1) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, after = ... @@ -1144,7 +1143,7 @@ pgroup.test_select_with_batch_size_1 = function(g) -- LE local conditions = {{'<=', 'age', 35}} - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions= ... @@ -1165,7 +1164,7 @@ pgroup.test_select_with_batch_size_1 = function(g) -- LT local conditions = {{'<', 'age', 35}} - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions= ... @@ -1186,7 +1185,7 @@ pgroup.test_select_with_batch_size_1 = function(g) -- GE local conditions = {{'>=', 'age', 35}} - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions= ... @@ -1207,7 +1206,7 @@ pgroup.test_select_with_batch_size_1 = function(g) -- GT local conditions = {{'>', 'age', 35}} - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions= ... @@ -1244,7 +1243,7 @@ pgroup.test_select_by_full_sharding_key = function(g) table.sort(customers, function(obj1, obj2) return obj1.id < obj2.id end) local conditions = {{'==', 'id', 3}} - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions= ... @@ -1291,7 +1290,7 @@ pgroup.test_select_with_collations = function(g) -- full name index - unicode ci collation (case-insensitive) local conditions = {{'==', 'name', "Elizabeth"}} - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions= ... @@ -1312,7 +1311,7 @@ pgroup.test_select_with_collations = function(g) -- city - no collation (case-sensitive) local conditions = {{'==', 'city', "oxford"}} - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions= ... @@ -1342,7 +1341,7 @@ pgroup.test_multipart_primary_index = function(g) }) local conditions = {{'=', 'primary', 0}} - local result_0, err = g.cluster.main_server.net_box:eval([[ + local result_0, err = g.router:eval([[ local crud = require('crud') local conditions= ... @@ -1360,7 +1359,7 @@ pgroup.test_multipart_primary_index = function(g) local objects = crud.unflatten_rows(result_0.rows, result_0.metadata) t.assert_equals(objects, helpers.get_objects_by_idxs(coords, {1, 2, 3})) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, after= ... @@ -1379,7 +1378,7 @@ pgroup.test_multipart_primary_index = function(g) local objects = crud.unflatten_rows(result.rows, result.metadata) t.assert_equals(objects, helpers.get_objects_by_idxs(coords, {2, 3})) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, after= ... @@ -1398,7 +1397,7 @@ pgroup.test_multipart_primary_index = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(coords, {1, 2})) local new_conditions = {{'=', 'y', 1}, {'=', 'primary', 0}} - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, after= ... @@ -1417,7 +1416,7 @@ pgroup.test_multipart_primary_index = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(coords, {2})) local conditions = {{'=', 'primary', {0, 2}}} - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, after= ... @@ -1436,7 +1435,7 @@ pgroup.test_multipart_primary_index = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(coords, {3})) local conditions_ge = {{'>=', 'primary', 0}} - local result_ge_0, err = g.cluster.main_server.net_box:eval([[ + local result_ge_0, err = g.router:eval([[ local crud = require('crud') local conditions= ... @@ -1454,7 +1453,7 @@ pgroup.test_multipart_primary_index = function(g) local objects = crud.unflatten_rows(result_ge_0.rows, result_ge_0.metadata) t.assert_equals(objects, helpers.get_objects_by_idxs(coords, {1, 2, 3, 4, 5})) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, after= ... @@ -1472,7 +1471,7 @@ pgroup.test_multipart_primary_index = function(g) local objects = crud.unflatten_rows(result.rows, result.metadata) t.assert_equals(objects, helpers.get_objects_by_idxs(coords, {2, 3, 4, 5})) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, after= ... @@ -1509,7 +1508,7 @@ pgroup.test_select_partial_result_bad_input = function(g) }) local conditions = {{'>=', 'age', 33}} - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions= ... @@ -1559,7 +1558,7 @@ pgroup.test_select_partial_result = function(g) {id = 4, age = 46, name = "William", city = "Chicago"}, } - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, fields= ... @@ -1584,7 +1583,7 @@ pgroup.test_select_partial_result = function(g) {id = 4, age = 46, name = "William", city = "Chicago"}, } - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, fields, after= ... @@ -1614,7 +1613,7 @@ pgroup.test_select_partial_result = function(g) {id = 4, age = 46, name = "William"}, } - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, fields= ... @@ -1639,7 +1638,7 @@ pgroup.test_select_partial_result = function(g) {id = 4, age = 46, name = "William"}, } - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, fields, after= ... @@ -1672,7 +1671,7 @@ pgroup.test_select_partial_result = function(g) {id = 3, name = "David", age = 33}, } - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, fields= ... @@ -1697,7 +1696,7 @@ pgroup.test_select_partial_result = function(g) {id = 3, name = "David", age = 33}, } - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, fields, after= ... @@ -1728,7 +1727,7 @@ pgroup.test_select_partial_result = function(g) {id = 3, name = "David", city = "Los Angeles"}, } - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, fields= ... @@ -1753,7 +1752,7 @@ pgroup.test_select_partial_result = function(g) {id = 3, name = "David", city = "Los Angeles"}, } - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions, fields, after= ... @@ -1776,7 +1775,7 @@ end pgroup.test_select_force_map_call = function(g) local key = 1 - local first_bucket_id = g.cluster.main_server.net_box:eval([[ + local first_bucket_id = g.router:eval([[ local vshard = require('vshard') local key = ... @@ -1799,7 +1798,7 @@ pgroup.test_select_force_map_call = function(g) table.sort(customers, function(obj1, obj2) return obj1.bucket_id < obj2.bucket_id end) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) @@ -1815,7 +1814,7 @@ pgroup.test_select_force_map_call = function(g) t.assert_equals(err, nil) t.assert_equals(#result.rows, 1) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) @@ -1854,7 +1853,7 @@ pgroup.test_jsonpath = function(g) age = 17, additional = { a = 55 }, }, }) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) @@ -1875,7 +1874,7 @@ pgroup.test_jsonpath = function(g) {id = 4, name = "Pavel", last_name = "White"}, } t.assert_equals(objects, expected_objects) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) @@ -1932,7 +1931,7 @@ pgroup.test_jsonpath_index_field = function(g) }) -- PK jsonpath index - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) @@ -1961,7 +1960,7 @@ pgroup.test_jsonpath_index_field = function(g) t.assert_equals(objects, expected_objects) -- Secondary jsonpath index (partial) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) @@ -1991,7 +1990,7 @@ pgroup.test_jsonpath_index_field = function(g) t.assert_equals(objects, expected_objects) -- Secondary jsonpath index (full) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) @@ -2075,7 +2074,7 @@ pgroup.test_jsonpath_index_field_pagination = function(g) -- Pagination (primary index) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) @@ -2093,7 +2092,7 @@ pgroup.test_jsonpath_index_field_pagination = function(g) local objects = crud.unflatten_rows(result.rows, result.metadata) t.assert_equals(objects, helpers.get_objects_by_idxs(cars, {1, 2})) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local foo = rawget(_G, 'foo') @@ -2109,7 +2108,7 @@ pgroup.test_jsonpath_index_field_pagination = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(cars, {3, 4})) -- Reverse pagination (primary index) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local foo = rawget(_G, 'foo') @@ -2125,7 +2124,7 @@ pgroup.test_jsonpath_index_field_pagination = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(cars, {1, 2})) -- Pagination (secondary index - 1 field) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local foo = rawget(_G, 'foo') @@ -2160,7 +2159,7 @@ pgroup.test_select_timeout = function(g) table.sort(customers, function(obj1, obj2) return obj1.id < obj2.id end) - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) @@ -2211,7 +2210,7 @@ pgroup.test_select_no_map_reduce = function(g) local map_reduces_before = helpers.get_map_reduces_stat(router, 'customers') -- Case: no conditions, just bucket id. - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) @@ -2234,7 +2233,7 @@ pgroup.test_select_no_map_reduce = function(g) -- Case: EQ on secondary index, which is not in the sharding -- index (primary index in the case). - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) @@ -2257,7 +2256,7 @@ pgroup.test_select_no_map_reduce = function(g) end pgroup.test_select_yield_every_0 = function(g) - local resp, err = g.cluster.main_server.net_box:eval([[ + local resp, err = g.router:eval([[ local crud = require('crud') local foo, err = crud.readview({name = 'foo'}) @@ -2290,7 +2289,7 @@ pgroup.test_stop_select = function(g) }, }) - local _, err = g.cluster.main_server.net_box:eval([[ + local _, err = g.router:eval([[ local crud = require('crud') local foo = crud.readview({name = 'foo'}) rawset(_G, 'foo', foo) @@ -2299,7 +2298,7 @@ pgroup.test_stop_select = function(g) t.assert_equals(err, nil) g.cluster:server('s2-master'):stop() - local _, err = g.cluster.main_server.net_box:eval([[ + local _, err = g.router:eval([[ local crud = require('crud') local foo = rawget(_G, 'foo', foo) local result, err = foo:select('customers', nil, {fullscan = true}) @@ -2309,6 +2308,8 @@ pgroup.test_stop_select = function(g) g.cluster:server('s2-master'):start() if g.params.backend == helpers.backend.VSHARD then + g.cluster:server('s2-master'):wait_for_rw() + local bootstrap_key if type(g.params.backend_cfg) == 'table' and g.params.backend_cfg.identification_mode == 'name_as_key' then @@ -2323,7 +2324,9 @@ pgroup.test_stop_select = function(g) end, {g.cfg, bootstrap_key}) end - local _, err = g.cluster.main_server.net_box:eval([[ + helpers.wait_crud_is_ready_on_cluster(g) + + local _, err = g.router:eval([[ local crud = require('crud') local foo = rawget(_G, 'foo', foo) foo:close() @@ -2359,7 +2362,7 @@ pgroup.test_select_switch_master = function(g) }, }) - local _, err = g.cluster.main_server.net_box:eval([[ + local _, err = g.router:eval([[ local crud = require('crud') local temp, err = crud.readview({name = 'temp'}) if err ~= nil then @@ -2373,7 +2376,7 @@ pgroup.test_select_switch_master = function(g) local replicasets = helpers.get_test_cartridge_replicasets() set_master(g.cluster, replicasets[2].uuid, replicasets[2].servers[2].instance_uuid) - local obj, err = g.cluster.main_server.net_box:eval([[ + local obj, err = g.router:eval([[ local crud = require('crud') local temp = rawget(_G, 'temp') local result, err = temp:select('customers', nil, {fullscan = true}) @@ -2417,7 +2420,7 @@ pgroup.test_select_switch_master_first = function(g) }, }) - local obj, err = g.cluster.main_server.net_box:eval([[ + local obj, err = g.router:eval([[ local crud = require('crud') local temp, err = crud.readview({name = 'temp'}) if err ~= nil then @@ -2434,7 +2437,7 @@ pgroup.test_select_switch_master_first = function(g) local replicasets = helpers.get_test_cartridge_replicasets() set_master(g.cluster, replicasets[3].uuid, replicasets[3].servers[2].instance_uuid) - local obj, err = g.cluster.main_server.net_box:eval([[ + local obj, err = g.router:eval([[ local crud = require('crud') local temp = rawget(_G, 'temp') local result, err = temp:select('customers', nil, {fullscan = true}) @@ -2476,7 +2479,7 @@ pgroup.test_select_closed_readview = function(g) }, }) - local _, err = g.cluster.main_server.net_box:eval([[ + local _, err = g.router:eval([[ local crud = require('crud') local temp, err = crud.readview({name = 'temp'}) if err ~= nil then @@ -2495,7 +2498,7 @@ pgroup.test_select_closed_readview = function(g) end local function read_impl(cg, space, conditions, opts) - return cg.cluster.main_server:exec(function(space, conditions, opts) + return cg.router:exec(function(space, conditions, opts) opts = table.deepcopy(opts) or {} opts.fullscan = true diff --git a/test/integration/select_test.lua b/test/integration/select_test.lua index 70b834e9..b97f0e8a 100644 --- a/test/integration/select_test.lua +++ b/test/integration/select_test.lua @@ -8,15 +8,13 @@ local read_scenario = require('test.integration.read_scenario') local pgroup = t.group('select', helpers.backend_matrix({ {engine = 'memtx'}, - {engine = 'vinyl'}, })) pgroup.before_all(function(g) helpers.start_default_cluster(g, 'srv_select') - g.space_format = g.cluster.servers[2].net_box.space.customers:format() + g.space_format = g.cluster:server('s1-master').net_box.space.customers:format() - g.router = helpers.get_router(g.cluster, g.params.backend) g.router.net_box:eval([[ require('crud').cfg{ stats = true } ]]) @@ -39,8 +37,10 @@ end) pgroup.test_non_existent_space = function(g) -- insert - local obj, err = g.cluster.main_server.net_box:call('crud.select', { - 'non_existent_space', nil, {fullscan = true}, + local obj, err = g.router:call('crud.select', { + 'non_existent_space', + nil, + {fullscan = true, mode = 'write'}, }) t.assert_equals(obj, nil) @@ -48,8 +48,10 @@ pgroup.test_non_existent_space = function(g) end pgroup.test_select_no_index = function(g) - local obj, err = g.cluster.main_server.net_box:call('crud.select', { - 'no_index_space', nil, {fullscan = true}, + local obj, err = g.router:call('crud.select', { + 'no_index_space', + nil, + {fullscan = true, mode = 'write'}, }) t.assert_equals(obj, nil) @@ -61,7 +63,7 @@ pgroup.test_not_valid_value_type = function(g) {'=', 'id', 'not_number'} } - local obj, err = g.cluster.main_server.net_box:eval([[ + local obj, err = g.router:eval([[ local crud = require('crud') local conditions = ... @@ -192,7 +194,7 @@ pgroup.test_select_all = function(g) table.sort(customers, function(obj1, obj2) return obj1.id < obj2.id end) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', nil, {fullscan = true, mode = 'write'}, }) @@ -213,7 +215,7 @@ pgroup.test_select_all = function(g) }) -- no after - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', nil, {fullscan = true, mode = 'write'}, }) @@ -223,7 +225,7 @@ pgroup.test_select_all = function(g) -- after obj 2 local after = crud_utils.flatten(customers[2], g.space_format) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', nil, {after = after, fullscan = true, mode = 'write'}, }) @@ -233,7 +235,7 @@ pgroup.test_select_all = function(g) -- after obj 4 (last) local after = crud_utils.flatten(customers[4], g.space_format) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', nil, {after = after, fullscan = true, mode = 'write'}, }) @@ -263,7 +265,7 @@ pgroup.test_select_all_with_first = function(g) -- first 2 local first = 2 - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', nil, {first = first, mode = 'write'}, }) @@ -273,7 +275,7 @@ pgroup.test_select_all_with_first = function(g) -- first 0 local first = 0 - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', nil, {first = first, mode = 'write'}, }) @@ -317,7 +319,7 @@ pgroup.test_negative_first = function(g) -- first -4 after 6 local first = -4 local after = crud_utils.flatten(customers[6], g.space_format) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', nil, {first = first, after = after, mode = 'write'}, }) @@ -332,7 +334,7 @@ pgroup.test_negative_first = function(g) } local first = -2 local after = crud_utils.flatten(customers[5], g.space_format) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {first = first, after = after, mode = 'write'}, }) @@ -347,7 +349,7 @@ pgroup.test_negative_first = function(g) } local first = -2 local after = crud_utils.flatten(customers[5], g.space_format) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {first = first, after = after, mode = 'write'}, }) @@ -362,7 +364,7 @@ pgroup.test_negative_first = function(g) } local first = -2 local after = crud_utils.flatten(customers[5], g.space_format) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {first = first, after = after, mode = 'write'}, }) @@ -377,7 +379,7 @@ pgroup.test_negative_first = function(g) } local first = -2 local after = crud_utils.flatten(customers[5], g.space_format) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {first = first, after = after, mode = 'write'}, }) @@ -424,7 +426,7 @@ pgroup.test_positive_first = function(g) } local first = 10 local after = crud_utils.flatten(customers[5], g.space_format) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {first = first, after = after, mode = 'write'}, }) @@ -439,7 +441,7 @@ pgroup.test_positive_first = function(g) } local first = 10 local after = crud_utils.flatten(customers[5], g.space_format) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {first = first, after = after, mode = 'write'}, }) @@ -454,7 +456,7 @@ pgroup.test_positive_first = function(g) } local first = 10 local after = crud_utils.flatten(customers[5], g.space_format) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {first = first, after = after, mode = 'write'}, }) @@ -469,7 +471,7 @@ pgroup.test_positive_first = function(g) } local first = 10 local after = crud_utils.flatten(customers[2], g.space_format) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {first = first, after = after, mode = 'write'}, }) @@ -511,7 +513,7 @@ pgroup.test_negative_first_with_batch_size = function(g) -- negative first w/o after local first = -10 - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', nil, {first = first, mode = 'write'}, }) @@ -523,7 +525,7 @@ pgroup.test_negative_first_with_batch_size = function(g) local first = -3 local after = crud_utils.flatten(customers[5], g.space_format) local batch_size = 1 - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', nil, {first = first, after = after, batch_size = batch_size, mode = 'write'}, }) @@ -539,7 +541,7 @@ pgroup.test_negative_first_with_batch_size = function(g) local first = -2 local after = crud_utils.flatten(customers[5], g.space_format) local batch_size = 1 - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {first = first, after = after, batch_size = batch_size, mode = 'write'}, }) @@ -555,7 +557,7 @@ pgroup.test_negative_first_with_batch_size = function(g) local first = -2 local after = crud_utils.flatten(customers[5], g.space_format) local batch_size = 1 - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {first = first, after = after, batch_size = batch_size, mode = 'write'}, }) @@ -571,7 +573,7 @@ pgroup.test_negative_first_with_batch_size = function(g) local first = -2 local after = crud_utils.flatten(customers[5], g.space_format) local batch_size = 1 - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {first = first, after = after, batch_size = batch_size, mode = 'write'}, }) @@ -587,7 +589,7 @@ pgroup.test_negative_first_with_batch_size = function(g) local first = -2 local after = crud_utils.flatten(customers[5], g.space_format) local batch_size = 1 - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {first = first, after = after, batch_size = batch_size, mode = 'write'}, }) @@ -628,7 +630,7 @@ pgroup.test_select_all_with_batch_size = function(g) table.sort(customers, function(obj1, obj2) return obj1.id < obj2.id end) -- batch size 1 - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', nil, {batch_size = 1, fullscan = true, mode = 'write'}, }) @@ -637,7 +639,7 @@ pgroup.test_select_all_with_batch_size = function(g) t.assert_equals(objects, customers) -- batch size 3 - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', nil, {batch_size = 3, fullscan = true, mode = 'write'}, }) @@ -646,7 +648,7 @@ pgroup.test_select_all_with_batch_size = function(g) t.assert_equals(objects, customers) -- batch size 3 and first 6 - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', nil, {batch_size = 3, first = 6, mode = 'write'}, }) @@ -672,7 +674,7 @@ pgroup.test_select_by_primary_index = function(g) table.sort(customers, function(obj1, obj2) return obj1.id < obj2.id end) local conditions = {{'==', 'id_index', 3}} - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') local conditions = ... @@ -722,7 +724,7 @@ pgroup.test_eq_condition_with_index = function(g) } -- no after - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {mode = 'write'}, }) @@ -732,7 +734,7 @@ pgroup.test_eq_condition_with_index = function(g) -- after obj 3 local after = crud_utils.flatten(customers[3], g.space_format) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {after = after, mode = 'write'}, }) @@ -742,7 +744,7 @@ pgroup.test_eq_condition_with_index = function(g) -- after obj 5 with negative first local after = crud_utils.flatten(customers[5], g.space_format) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {after = after, first = -10, mode = 'write'}, }) @@ -752,7 +754,7 @@ pgroup.test_eq_condition_with_index = function(g) -- after obj 8 local after = crud_utils.flatten(customers[8], g.space_format) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {after = after, first = 10, mode = 'write'}, }) @@ -762,7 +764,7 @@ pgroup.test_eq_condition_with_index = function(g) -- after obj 8 with negative first local after = crud_utils.flatten(customers[8], g.space_format) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {after = after, first = -10, mode = 'write'}, }) @@ -772,7 +774,7 @@ pgroup.test_eq_condition_with_index = function(g) -- after obj 2 local after = crud_utils.flatten(customers[2], g.space_format) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {after = after, first = 10, mode = 'write'}, }) @@ -782,7 +784,7 @@ pgroup.test_eq_condition_with_index = function(g) -- after obj 2 with negative first local after = crud_utils.flatten(customers[2], g.space_format) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {after = after, first = -10, mode = 'write'}, }) @@ -815,7 +817,7 @@ pgroup.test_ge_condition_with_index = function(g) } -- no after - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {fullscan = true, mode = 'write'}, }) @@ -825,7 +827,7 @@ pgroup.test_ge_condition_with_index = function(g) -- after obj 3 local after = crud_utils.flatten(customers[3], g.space_format) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {after = after, fullscan = true, mode = 'write'}, }) @@ -858,7 +860,7 @@ pgroup.test_le_condition_with_index = function(g) } -- no after - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {fullscan = true, mode = 'write'}, }) @@ -868,7 +870,7 @@ pgroup.test_le_condition_with_index = function(g) -- after obj 3 local after = crud_utils.flatten(customers[3], g.space_format) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {after = after, fullscan = true, mode = 'write'}, }) @@ -878,7 +880,7 @@ pgroup.test_le_condition_with_index = function(g) -- after obj 2 local after = crud_utils.flatten(customers[2], g.space_format) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {after = after, mode = 'write'}, }) @@ -911,7 +913,7 @@ pgroup.test_lt_condition_with_index = function(g) } -- no after - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {fullscan = true, mode = 'write'}, }) @@ -921,7 +923,7 @@ pgroup.test_lt_condition_with_index = function(g) -- after obj 1 local after = crud_utils.flatten(customers[1], g.space_format) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {after = after, fullscan = true, mode = 'write'}, }) @@ -959,7 +961,7 @@ pgroup.test_multiple_conditions = function(g) } -- no after - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {mode = 'write'}, }) @@ -969,7 +971,7 @@ pgroup.test_multiple_conditions = function(g) -- after obj 5 local after = crud_utils.flatten(customers[5], g.space_format) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {after = after, fullscan = true, mode = 'write'}, }) @@ -1002,7 +1004,7 @@ pgroup.test_composite_index = function(g) } -- no after - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {fullscan = true, mode = 'write'}, }) @@ -1012,7 +1014,7 @@ pgroup.test_composite_index = function(g) -- after obj 2 local after = crud_utils.flatten(customers[2], g.space_format) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {after = after, fullscan = true, mode = 'write'}, }) @@ -1025,7 +1027,7 @@ pgroup.test_composite_index = function(g) {'==', 'full_name', "Elizabeth"}, } - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {mode = 'write'}, }) @@ -1034,7 +1036,7 @@ pgroup.test_composite_index = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(customers, {2, 1})) -- in full_name order -- first 1 - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {first = 1, mode = 'write'}, }) t.assert_equals(err, nil) @@ -1042,7 +1044,7 @@ pgroup.test_composite_index = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(customers, {2})) -- in full_name order -- first 1 with full specified key - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', {{'==', 'full_name', {'Elizabeth', 'Johnson'}}}, {first = 1,mode = 'write'}, }) t.assert_equals(err, nil) @@ -1064,25 +1066,25 @@ pgroup.test_composite_primary_index = function(g) local conditions = {{'=', 'id', {5, 'Ukrainian', 55}}} - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'book_translation', conditions, {mode = 'write'}, }) t.assert_equals(err, nil) t.assert_equals(#result.rows, 1) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'book_translation', conditions, {first = 2, mode = 'write'}, }) t.assert_equals(err, nil) t.assert_equals(#result.rows, 1) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'book_translation', conditions, {first = 1, mode = 'write'}, }) t.assert_equals(err, nil) t.assert_equals(#result.rows, 1) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'book_translation', conditions, {first = 1, after = result.rows[1], mode = 'write'}, }) t.assert_equals(err, nil) @@ -1122,7 +1124,7 @@ pgroup.test_select_with_batch_size_1 = function(g) -- LE local conditions = {{'<=', 'age', 35}} - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {batch_size = 1, fullscan = true, mode = 'write'}, }) @@ -1132,7 +1134,7 @@ pgroup.test_select_with_batch_size_1 = function(g) -- LT local conditions = {{'<', 'age', 35}} - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {batch_size = 1, fullscan = true, mode = 'write'}, }) @@ -1142,7 +1144,7 @@ pgroup.test_select_with_batch_size_1 = function(g) -- GE local conditions = {{'>=', 'age', 35}} - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {batch_size = 1, fullscan = true, mode = 'write'}, }) @@ -1152,7 +1154,7 @@ pgroup.test_select_with_batch_size_1 = function(g) -- GT local conditions = {{'>', 'age', 35}} - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {batch_size = 1, fullscan = true, mode = 'write'}, }) @@ -1178,7 +1180,7 @@ pgroup.test_select_by_full_sharding_key = function(g) table.sort(customers, function(obj1, obj2) return obj1.id < obj2.id end) local conditions = {{'==', 'id', 3}} - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {mode = 'write'}, }) @@ -1214,7 +1216,7 @@ pgroup.test_select_with_collations = function(g) -- full name index - unicode ci collation (case-insensitive) local conditions = {{'==', 'name', "Elizabeth"}} - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {mode = 'write'}, }) @@ -1224,7 +1226,7 @@ pgroup.test_select_with_collations = function(g) -- city - no collation (case-sensitive) local conditions = {{'==', 'city', "oxford"}} - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {mode = 'write'}, }) @@ -1243,21 +1245,21 @@ pgroup.test_multipart_primary_index = function(g) }) local conditions = {{'=', 'primary', 0}} - local result_0, err = g.cluster.main_server.net_box:call('crud.select', { + local result_0, err = g.router:call('crud.select', { 'coord', conditions, {mode = 'write'}, }) t.assert_equals(err, nil) local objects = crud.unflatten_rows(result_0.rows, result_0.metadata) t.assert_equals(objects, helpers.get_objects_by_idxs(coords, {1, 2, 3})) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'coord', conditions, {after = result_0.rows[1], mode = 'write'}, }) t.assert_equals(err, nil) local objects = crud.unflatten_rows(result.rows, result.metadata) t.assert_equals(objects, helpers.get_objects_by_idxs(coords, {2, 3})) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'coord', conditions, {after = result_0.rows[3], first = -2, mode = 'write'}, }) t.assert_equals(err, nil) @@ -1265,7 +1267,7 @@ pgroup.test_multipart_primary_index = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(coords, {1, 2})) local new_conditions = {{'=', 'y', 1}, {'=', 'primary', 0}} - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'coord', new_conditions, {after = result_0.rows[3], first = -2, mode = 'write'}, }) t.assert_equals(err, nil) @@ -1273,7 +1275,7 @@ pgroup.test_multipart_primary_index = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(coords, {2})) local conditions = {{'=', 'primary', {0, 2}}} - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'coord', conditions, {mode = 'write'}, }) t.assert_equals(err, nil) @@ -1281,21 +1283,21 @@ pgroup.test_multipart_primary_index = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(coords, {3})) local conditions_ge = {{'>=', 'primary', 0}} - local result_ge_0, err = g.cluster.main_server.net_box:call('crud.select', { + local result_ge_0, err = g.router:call('crud.select', { 'coord', conditions_ge, {fullscan = true, mode = 'write'}, }) t.assert_equals(err, nil) local objects = crud.unflatten_rows(result_ge_0.rows, result_ge_0.metadata) t.assert_equals(objects, helpers.get_objects_by_idxs(coords, {1, 2, 3, 4, 5})) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'coord', conditions_ge, {after = result_ge_0.rows[1], fullscan = true, mode = 'write'}, }) t.assert_equals(err, nil) local objects = crud.unflatten_rows(result.rows, result.metadata) t.assert_equals(objects, helpers.get_objects_by_idxs(coords, {2, 3, 4, 5})) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'coord', conditions_ge, {after = result_ge_0.rows[3], first = -3, mode = 'write'}, }) t.assert_equals(err, nil) @@ -1321,7 +1323,7 @@ pgroup.test_select_partial_result_bad_input = function(g) }) local conditions = {{'>=', 'age', 33}} - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {fields = {'id', 'mame'}, fullscan = true, mode = 'write'}, }) @@ -1360,7 +1362,7 @@ pgroup.test_select_partial_result = function(g) {id = 4, age = 46, name = "William", city = "Chicago"}, } - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {fields = fields, fullscan = true, mode = 'write'}, }) @@ -1374,7 +1376,7 @@ pgroup.test_select_partial_result = function(g) {id = 4, age = 46, name = "William", city = "Chicago"}, } - result, err = g.cluster.main_server.net_box:call('crud.select', { + result, err = g.router:call('crud.select', { 'customers', conditions, {after = result.rows[1], fields = fields, fullscan = true, mode = 'write'}, }) @@ -1393,7 +1395,7 @@ pgroup.test_select_partial_result = function(g) {id = 4, age = 46, name = "William"}, } - result, err = g.cluster.main_server.net_box:call('crud.select', { + result, err = g.router:call('crud.select', { 'customers', conditions, {fields = fields, fullscan = true, mode = 'write'}, }) @@ -1407,7 +1409,7 @@ pgroup.test_select_partial_result = function(g) {id = 4, age = 46, name = "William"}, } - result, err = g.cluster.main_server.net_box:call('crud.select', { + result, err = g.router:call('crud.select', { 'customers', conditions, {after = result.rows[1], fields = fields, fullscan = true, mode = 'write'}, }) @@ -1429,7 +1431,7 @@ pgroup.test_select_partial_result = function(g) {id = 3, name = "David", age = 33}, } - result, err = g.cluster.main_server.net_box:call('crud.select', { + result, err = g.router:call('crud.select', { 'customers', conditions, {fields = fields, fullscan = true, mode = 'write'}, }) @@ -1443,7 +1445,7 @@ pgroup.test_select_partial_result = function(g) {id = 3, name = "David", age = 33}, } - result, err = g.cluster.main_server.net_box:call('crud.select', { + result, err = g.router:call('crud.select', { 'customers', conditions, {after = result.rows[1], fields = fields, fullscan = true, mode = 'write'}, }) @@ -1462,7 +1464,7 @@ pgroup.test_select_partial_result = function(g) {id = 3, name = "David", city = "Los Angeles"}, } - result, err = g.cluster.main_server.net_box:call('crud.select', { + result, err = g.router:call('crud.select', { 'customers', conditions, {fields = fields, fullscan = true, mode = 'write'}, }) @@ -1476,7 +1478,7 @@ pgroup.test_select_partial_result = function(g) {id = 3, name = "David", city = "Los Angeles"}, } - result, err = g.cluster.main_server.net_box:call('crud.select', { + result, err = g.router:call('crud.select', { 'customers', conditions, {after = result.rows[1], fields = fields, fullscan = true, mode = 'write'}, }) @@ -1515,13 +1517,13 @@ pgroup.test_cut_selected_rows = function(g) } -- with fields option - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {fields = fields, fullscan = true, mode = 'write'}, }) t.assert_equals(err, nil) - result, err = g.cluster.main_server.net_box:call('crud.cut_rows', {result.rows, result.metadata, fields}) + result, err = g.router:call('crud.cut_rows', {result.rows, result.metadata, fields}) t.assert_equals(err, nil) local objects = crud.unflatten_rows(result.rows, result.metadata) @@ -1538,13 +1540,13 @@ pgroup.test_cut_selected_rows = function(g) {bucket_id = 1161, id = 4, name = "William"}, } - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', conditions, {fullscan = true, mode = 'write'}, }) t.assert_equals(err, nil) - result, err = g.cluster.main_server.net_box:call('crud.cut_rows', {result.rows, result.metadata, fields}) + result, err = g.router:call('crud.cut_rows', {result.rows, result.metadata, fields}) t.assert_equals(err, nil) local objects = crud.unflatten_rows(result.rows, result.metadata) @@ -1554,7 +1556,7 @@ end pgroup.test_select_force_map_call = function(g) local key = 1 - local first_bucket_id = g.cluster.main_server.net_box:eval([[ + local first_bucket_id = g.router:eval([[ local vshard = require('vshard') local key = ... @@ -1577,14 +1579,14 @@ pgroup.test_select_force_map_call = function(g) table.sort(customers, function(obj1, obj2) return obj1.bucket_id < obj2.bucket_id end) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', {{'==', 'id', key}}, {mode = 'write'}, }) t.assert_equals(err, nil) t.assert_equals(#result.rows, 1) - result, err = g.cluster.main_server.net_box:call('crud.select', { + result, err = g.router:call('crud.select', { 'customers', {{'==', 'id', key}}, {force_map_call = true, mode = 'write'}, }) @@ -1615,7 +1617,7 @@ pgroup.test_jsonpath = function(g) }, }) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'developers', {{'>=', '[5]', 40}}, {fields = {'name', 'last_name'}, fullscan = true, mode = 'write'}, }) t.assert_equals(err, nil) @@ -1627,7 +1629,7 @@ pgroup.test_jsonpath = function(g) } t.assert_equals(objects, expected_objects) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'developers', {{'<', '["age"]', 21}}, {fields = {'name', 'last_name'}, fullscan = true, mode = 'write'}, }) t.assert_equals(err, nil) @@ -1639,7 +1641,7 @@ pgroup.test_jsonpath = function(g) } t.assert_equals(objects, expected_objects) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'developers', {{'>=', '[6].a.b', 55}}, {fields = {'name', 'last_name'}, fullscan = true, mode = 'write'}, }) t.assert_equals(err, nil) @@ -1686,7 +1688,7 @@ pgroup.test_jsonpath_index_field = function(g) }) -- PK jsonpath index - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'cars', {{'<=', 'id_ind', 3}, {'<=', 'age', 5}}, {fields = {'id', 'age'}, fullscan = true, mode = 'write'}, }) t.assert_equals(err, nil) @@ -1705,7 +1707,7 @@ pgroup.test_jsonpath_index_field = function(g) t.assert_equals(objects, expected_objects) -- Secondary jsonpath index (partial) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'cars', {{'==', 'data_index', 'Yellow'}}, {fields = {'id', 'age'}, mode = 'write'}, }) t.assert_equals(err, nil) @@ -1726,7 +1728,7 @@ pgroup.test_jsonpath_index_field = function(g) t.assert_equals(objects, expected_objects) -- Secondary jsonpath index (full) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'cars', {{'==', 'data_index', {'Yellow', 'Mercedes'}}}, {fields = {'id', 'age'}, mode = 'write'}, }) t.assert_equals(err, nil) @@ -1801,7 +1803,7 @@ pgroup.test_jsonpath_index_field_pagination = function(g) -- Pagination (primary index) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'cars', nil, {first = 2, mode = 'write'}, }) t.assert_equals(err, nil) @@ -1809,7 +1811,7 @@ pgroup.test_jsonpath_index_field_pagination = function(g) local objects = crud.unflatten_rows(result.rows, result.metadata) t.assert_equals(objects, helpers.get_objects_by_idxs(cars, {1, 2})) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'cars', nil, {first = 2, after = result.rows[2], mode = 'write'}, }) t.assert_equals(err, nil) @@ -1818,7 +1820,7 @@ pgroup.test_jsonpath_index_field_pagination = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(cars, {3, 4})) -- Reverse pagination (primary index) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'cars', nil, {first = -2, after = result.rows[1], mode = 'write'}, }) t.assert_equals(err, nil) @@ -1827,7 +1829,7 @@ pgroup.test_jsonpath_index_field_pagination = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(cars, {1, 2})) -- Pagination (secondary index - 1 field) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'cars', {{'==', 'data_index', 'Yellow'}}, {first = 2, mode = 'write'}, }) t.assert_equals(err, nil) @@ -1835,7 +1837,7 @@ pgroup.test_jsonpath_index_field_pagination = function(g) local objects = crud.unflatten_rows(result.rows, result.metadata) t.assert_equals(objects, helpers.get_objects_by_idxs(cars, {1, 2})) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'cars', {{'==', 'data_index', 'Yellow'}}, {first = 2, after = result.rows[2], mode = 'write'}, }) t.assert_equals(err, nil) @@ -1844,7 +1846,7 @@ pgroup.test_jsonpath_index_field_pagination = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(cars, {3, 4})) -- Reverse pagination (secondary index - 1 field) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'cars', {{'==', 'data_index', 'Yellow'}}, {first = -2, after = result.rows[1], mode = 'write'}, }) t.assert_equals(err, nil) @@ -1853,7 +1855,7 @@ pgroup.test_jsonpath_index_field_pagination = function(g) t.assert_equals(objects, helpers.get_objects_by_idxs(cars, {1, 2})) -- Pagination (secondary index - 2 fields) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'cars', {{'>=', 'data_index', {'Yellow', 'E'}}}, {first = 2, mode = 'write'}, }) t.assert_equals(err, nil) @@ -1861,7 +1863,7 @@ pgroup.test_jsonpath_index_field_pagination = function(g) local objects = crud.unflatten_rows(result.rows, result.metadata) t.assert_equals(objects, helpers.get_objects_by_idxs(cars, {5, 6})) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'cars', {{'>=', 'data_index', {'Yellow', 'E'}}}, {first = 2, after = result.rows[2], mode = 'write'}, }) t.assert_equals(err, nil) @@ -1869,7 +1871,7 @@ pgroup.test_jsonpath_index_field_pagination = function(g) local objects = crud.unflatten_rows(result.rows, result.metadata) t.assert_equals(objects, helpers.get_objects_by_idxs(cars, {7, 8})) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'cars', {{'>=', 'data_index', {'Yellow', 'B'}}, {'<=', 'id_ind', 3}}, {first = -3, after = result.rows[1], mode = 'write'}, @@ -1899,7 +1901,7 @@ pgroup.test_select_timeout = function(g) table.sort(customers, function(obj1, obj2) return obj1.id < obj2.id end) - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', nil, {timeout = 1, fullscan = true, mode = 'write'}, }) @@ -1941,7 +1943,7 @@ pgroup.test_opts_not_damaged = function(g) fields = fields, mode = 'read', prefer_replica = false, balance = false, force_map_call = false, } - local new_select_opts, err = g.cluster.main_server:eval([[ + local new_select_opts, err = g.router:eval([[ local crud = require('crud') local select_opts = ... @@ -1984,7 +1986,7 @@ pgroup.test_select_no_map_reduce = function(g) local map_reduces_before = helpers.get_map_reduces_stat(router, 'customers') -- Case: no conditions, just bucket id. - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', nil, {bucket_id = 2804, timeout = 1, fullscan = true, mode = 'write'}, @@ -2000,7 +2002,7 @@ pgroup.test_select_no_map_reduce = function(g) -- Case: EQ on secondary index, which is not in the sharding -- index (primary index in the case). - local result, err = g.cluster.main_server.net_box:call('crud.select', { + local result, err = g.router:call('crud.select', { 'customers', {{'==', 'age', 81}}, {bucket_id = 1161, timeout = 1, mode = 'write'}, @@ -2043,7 +2045,7 @@ pgroup.after_test('test_storage_nil_err_is_processed', function(g) end) pgroup.test_storage_nil_err_is_processed = function(g) - local obj, err = g.cluster.main_server.net_box:call('crud.select', { + local obj, err = g.router:call('crud.select', { 'customers', {{'==', 'age', 101}} }) t.assert_equals(obj, nil) @@ -2072,7 +2074,7 @@ pgroup.after_test('test_storage_uninit_select_error_text', function(g) end) pgroup.test_storage_uninit_select_error_text = function(g) - local obj, err = g.cluster.main_server.net_box:call('crud.select', { + local obj, err = g.router:call('crud.select', { 'customers', {{'==', 'age', 101}} }) t.assert_equals(obj, nil) @@ -2104,7 +2106,7 @@ pgroup.after_test('test_storage_uninit_get_error_text', function(g) end) pgroup.test_storage_uninit_get_error_text = function(g) - local obj, err = g.cluster.main_server.net_box:call('crud.get', {'customers', 1}) + local obj, err = g.router:call('crud.get', {'customers', 1}) t.assert_equals(obj, nil) t.assert_str_contains(err.str, 'GetError') t.assert_str_contains(err.str, 'NotInitialized') @@ -2232,14 +2234,14 @@ for op, case in pairs(cases) do opts.yield_every = 1 reset_yield_counters_on_storages(g) - local resp, err = g.cluster.main_server.net_box:eval(case.eval, {'customers', conditions, opts}) + local resp, err = g.router:eval(case.eval, {'customers', conditions, opts}) t.assert_equals(err, nil) t.assert_equals(#resp.rows, 1000) local yield_count_on_each = get_yields_count(g) opts.yield_every = customers_count * 2 reset_yield_counters_on_storages(g) - local resp, err = g.cluster.main_server.net_box:eval(case.eval, {'customers', conditions, opts}) + local resp, err = g.router:eval(case.eval, {'customers', conditions, opts}) t.assert_equals(err, nil) t.assert_equals(#resp.rows, 1000) local yield_count_none = get_yields_count(g) @@ -2253,7 +2255,7 @@ for op, case in pairs(cases) do end pgroup.test_select_yield_every_0 = function(g) - local resp, err = g.cluster.main_server.net_box:call('crud.select', { + local resp, err = g.router:call('crud.select', { 'customers', nil, {yield_every = 0, fullscan = true, mode = 'write'}, }) t.assert_equals(resp, nil) @@ -2262,7 +2264,7 @@ end pgroup.test_pairs_yield_every_0 = function(g) t.assert_error_msg_contains("yield_every should be > 0", function() - g.cluster.main_server.net_box:call('crud.pairs', + g.router:call('crud.pairs', {'customers', nil, {yield_every = 0, mode = 'write'}, }) end) @@ -2273,7 +2275,7 @@ local function read_impl(cg, space, conditions, opts) opts.mode = 'write' opts.fullscan = true - local resp, err = cg.cluster.main_server:call('crud.select', {space, conditions, opts}) + local resp, err = cg.router:call('crud.select', {space, conditions, opts}) if err ~= nil then return nil, err diff --git a/test/integration/simple_operations_test.lua b/test/integration/simple_operations_test.lua index 5a419aeb..79387c1d 100644 --- a/test/integration/simple_operations_test.lua +++ b/test/integration/simple_operations_test.lua @@ -5,7 +5,6 @@ local helpers = require('test.helper') local pgroup = t.group('simple_operations', helpers.backend_matrix({ {engine = 'memtx'}, - {engine = 'vinyl'}, })) pgroup.before_all(function(g) @@ -24,61 +23,61 @@ pgroup.before_each(function(g) end) pgroup.test_non_existent_space = function(g) - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.insert', {'non_existent_space', {0, box.NULL, 'Fedor', 59}}) t.assert_equals(result, nil) t.assert_str_contains(err.err, 'Space "non_existent_space" doesn\'t exist') -- insert_object - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.insert_object', {'non_existent_space', {id = 0, name = 'Fedor', age = 59}}) t.assert_equals(result, nil) t.assert_str_contains(err.err, 'Space "non_existent_space" doesn\'t exist') -- get - local result, err = g.cluster.main_server.net_box:call('crud.get', {'non_existent_space', 0}) + local result, err = g.router:call('crud.get', {'non_existent_space', 0}) t.assert_equals(result, nil) t.assert_str_contains(err.err, 'Space "non_existent_space" doesn\'t exist') -- update - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.update', {'non_existent_space', 0, {{'+', 'age', 1}}}) t.assert_equals(result, nil) t.assert_str_contains(err.err, 'Space "non_existent_space" doesn\'t exist') -- delete - local result, err = g.cluster.main_server.net_box:call('crud.delete', {'non_existent_space', 0}) + local result, err = g.router:call('crud.delete', {'non_existent_space', 0}) t.assert_equals(result, nil) t.assert_str_contains(err.err, 'Space "non_existent_space" doesn\'t exist') -- replace - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.replace', {'non_existent_space', {0, box.NULL, 'Fedor', 59}}) t.assert_equals(result, nil) t.assert_str_contains(err.err, 'Space "non_existent_space" doesn\'t exist') -- replace_object - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.replace', {'non_existent_space', {id = 0, name = 'Fedor', age = 59}}) t.assert_equals(result, nil) t.assert_str_contains(err.err, 'Space "non_existent_space" doesn\'t exist') -- upsert - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.upsert', {'non_existent_space', {0, box.NULL, 'Fedor', 59}, {{'+', 'age', 1}}}) t.assert_equals(result, nil) t.assert_str_contains(err.err, 'Space "non_existent_space" doesn\'t exist') -- upsert_object - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.upsert', {'non_existent_space', {id = 0, name = 'Fedor', age = 59}, {{'+', 'age', 1}}}) t.assert_equals(result, nil) @@ -87,7 +86,7 @@ end pgroup.test_insert_object_get = function(g) -- insert_object - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.insert_object', {'customers', {id = 1, name = 'Fedor', age = 59}}) t.assert_equals(err, nil) @@ -101,7 +100,7 @@ pgroup.test_insert_object_get = function(g) t.assert_equals(objects, {{id = 1, name = 'Fedor', age = 59, bucket_id = 477}}) -- get - local result, err = g.cluster.main_server.net_box:call('crud.get', { + local result, err = g.router:call('crud.get', { 'customers', 1, {mode = 'write'}, }) @@ -111,14 +110,14 @@ pgroup.test_insert_object_get = function(g) t.assert_equals(objects, {{id = 1, name = 'Fedor', age = 59, bucket_id = 477}}) -- insert_object again - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.insert_object', {'customers', {id = 1, name = 'Alexander', age = 37}}) t.assert_equals(obj, nil) t.assert_str_contains(err.err, "Duplicate key exists") -- bad format - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.insert_object', {'customers', {id = 2, name = 'Alexander'}}) t.assert_equals(obj, nil) @@ -127,7 +126,7 @@ end pgroup.test_insert_get = function(g) -- insert - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.insert', {'customers', {2, box.NULL, 'Ivan', 20}}) t.assert_equals(err, nil) @@ -140,7 +139,7 @@ pgroup.test_insert_get = function(g) t.assert_equals(result.rows, {{2, 401, 'Ivan', 20}}) -- get - local result, err = g.cluster.main_server.net_box:call('crud.get', { + local result, err = g.router:call('crud.get', { 'customers', 2, {mode = 'write'}, }) @@ -149,13 +148,13 @@ pgroup.test_insert_get = function(g) t.assert_equals(result.rows, {{2, 401, 'Ivan', 20}}) -- insert again - local obj, err = g.cluster.main_server.net_box:call('crud.insert', {'customers', {2, box.NULL, 'Ivan', 20}}) + local obj, err = g.router:call('crud.insert', {'customers', {2, box.NULL, 'Ivan', 20}}) t.assert_equals(obj, nil) t.assert_str_contains(err.err, "Duplicate key exists") -- get non-existent - local result, err = g.cluster.main_server.net_box:eval([[ + local result, err = g.router:eval([[ local crud = require('crud') return crud.get('customers', 100, {mode = 'write'}) ]]) @@ -166,7 +165,7 @@ end pgroup.test_update = function(g) -- insert tuple - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.insert_object', {'customers', {id = 22, name = 'Leo', age = 72}}) t.assert_equals(err, nil) @@ -180,7 +179,7 @@ pgroup.test_update = function(g) t.assert_equals(objects, {{id = 22, name = 'Leo', age = 72, bucket_id = 655}}) -- update age and name fields - local result, err = g.cluster.main_server.net_box:call('crud.update', {'customers', 22, { + local result, err = g.router:call('crud.update', {'customers', 22, { {'+', 'age', 10}, {'=', 'name', 'Leo Tolstoy'}, }}) @@ -190,7 +189,7 @@ pgroup.test_update = function(g) t.assert_equals(objects, {{id = 22, name = 'Leo Tolstoy', age = 82, bucket_id = 655}}) -- get - local result, err = g.cluster.main_server.net_box:call('crud.get', { + local result, err = g.router:call('crud.get', { 'customers', 22, {mode = 'write'}, }) @@ -199,14 +198,14 @@ pgroup.test_update = function(g) t.assert_equals(objects, {{id = 22, name = 'Leo Tolstoy', age = 82, bucket_id = 655}}) -- bad key - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.update', {'customers', 'bad-key', {{'+', 'age', 10},}}) t.assert_equals(result, nil) t.assert_str_contains(err.err, "Supplied key type of part 0 does not match index part type:") -- update by field numbers - local result, err = g.cluster.main_server.net_box:call('crud.update', {'customers', 22, { + local result, err = g.router:call('crud.update', {'customers', 22, { {'-', 4, 10}, {'=', 3, 'Leo'} }}) @@ -216,7 +215,7 @@ pgroup.test_update = function(g) t.assert_equals(objects, {{id = 22, name = 'Leo', age = 72, bucket_id = 655}}) -- get - local result, err = g.cluster.main_server.net_box:call('crud.get', { + local result, err = g.router:call('crud.get', { 'customers', 22, {mode = 'write'}, }) @@ -227,7 +226,7 @@ end pgroup.test_delete = function(g) -- insert tuple - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.insert_object', {'customers', {id = 33, name = 'Mayakovsky', age = 36}}) t.assert_equals(err, nil) @@ -241,7 +240,7 @@ pgroup.test_delete = function(g) t.assert_equals(objects, {{id = 33, name = 'Mayakovsky', age = 36, bucket_id = 907}}) -- delete - local result, err = g.cluster.main_server.net_box:call('crud.delete', {'customers', 33}) + local result, err = g.router:call('crud.delete', {'customers', 33}) t.assert_equals(err, nil) if g.params.engine == 'memtx' then @@ -252,7 +251,7 @@ pgroup.test_delete = function(g) end -- get - local result, err = g.cluster.main_server.net_box:call('crud.get', { + local result, err = g.router:call('crud.get', { 'customers', 33, {mode = 'write'}, }) @@ -260,7 +259,7 @@ pgroup.test_delete = function(g) t.assert_equals(#result.rows, 0) -- bad key - local result, err = g.cluster.main_server.net_box:call('crud.delete', {'customers', 'bad-key'}) + local result, err = g.router:call('crud.delete', {'customers', 'bad-key'}) t.assert_equals(result, nil) t.assert_str_contains(err.err, "Supplied key type of part 0 does not match index part type:") @@ -268,7 +267,7 @@ end pgroup.test_replace_object = function(g) -- get - local result, err = g.cluster.main_server.net_box:call('crud.get', { + local result, err = g.router:call('crud.get', { 'customers', 44, {mode = 'write'}, }) @@ -282,7 +281,7 @@ pgroup.test_replace_object = function(g) t.assert_equals(#result.rows, 0) -- replace_object - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.replace_object', {'customers', {id = 44, name = 'John Doe', age = 25}}) t.assert_equals(err, nil) @@ -290,7 +289,7 @@ pgroup.test_replace_object = function(g) t.assert_equals(objects, {{id = 44, name = 'John Doe', age = 25, bucket_id = 2805}}) -- replace_object - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.replace_object', {'customers', {id = 44, name = 'Jane Doe', age = 18}}) t.assert_equals(err, nil) @@ -299,7 +298,7 @@ pgroup.test_replace_object = function(g) end pgroup.test_replace = function(g) - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.replace', {'customers', {45, box.NULL, 'John Fedor', 99}}) t.assert_equals(err, nil) @@ -312,7 +311,7 @@ pgroup.test_replace = function(g) t.assert_equals(result.rows, {{45, 392, 'John Fedor', 99}}) -- replace again - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.replace', {'customers', {45, box.NULL, 'John Fedor', 100}}) t.assert_equals(err, nil) @@ -321,7 +320,7 @@ end pgroup.test_upsert_object = function(g) -- upsert_object first time - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.upsert_object', {'customers', {id = 66, name = 'Jack Sparrow', age = 25}, { {'+', 'age', 25}, {'=', 'name', 'Leo Tolstoy'}, @@ -337,7 +336,7 @@ pgroup.test_upsert_object = function(g) t.assert_equals(err, nil) -- get - local result, err = g.cluster.main_server.net_box:call('crud.get', { + local result, err = g.router:call('crud.get', { 'customers', 66, {mode = 'write'}, }) @@ -346,7 +345,7 @@ pgroup.test_upsert_object = function(g) t.assert_equals(objects, {{id = 66, name = 'Jack Sparrow', age = 25, bucket_id = 486}}) -- upsert_object the same query second time when tuple exists - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.upsert_object', {'customers', {id = 66, name = 'Jack Sparrow', age = 25}, { {'+', 'age', 25}, {'=', 'name', 'Leo Tolstoy'}, @@ -356,7 +355,7 @@ pgroup.test_upsert_object = function(g) t.assert_equals(err, nil) -- get - local result, err = g.cluster.main_server.net_box:call('crud.get', { + local result, err = g.router:call('crud.get', { 'customers', 66, {mode = 'write'}, }) @@ -367,7 +366,7 @@ end pgroup.test_upsert = function(g) -- upsert tuple first time - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.upsert', {'customers', {67, box.NULL, 'Saltykov-Shchedrin', 63}, { {'=', 'name', 'Mikhail Saltykov-Shchedrin'}, }}) @@ -382,7 +381,7 @@ pgroup.test_upsert = function(g) t.assert_equals(err, nil) -- get - local result, err = g.cluster.main_server.net_box:call('crud.get', { + local result, err = g.router:call('crud.get', { 'customers', 67, {mode = 'write'}, }) @@ -390,7 +389,7 @@ pgroup.test_upsert = function(g) t.assert_equals(result.rows, {{67, 1143, 'Saltykov-Shchedrin', 63}}) -- upsert the same query second time when tuple exists - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.upsert', {'customers', {67, box.NULL, 'Saltykov-Shchedrin', 63}, { {'=', 'name', 'Mikhail Saltykov-Shchedrin'}}}) @@ -398,7 +397,7 @@ pgroup.test_upsert = function(g) t.assert_equals(err, nil) -- get - local result, err = g.cluster.main_server.net_box:call('crud.get', { + local result, err = g.router:call('crud.get', { 'customers', 67, {mode = 'write'}, }) @@ -407,7 +406,7 @@ pgroup.test_upsert = function(g) end pgroup.test_intermediate_nullable_fields_update = function(g) - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.insert', {'developers', {1, box.NULL}}) t.assert_equals(err, nil) @@ -425,7 +424,7 @@ pgroup.test_intermediate_nullable_fields_update = function(g) end end) - local result, err = g.cluster.main_server.net_box:call('crud.update', + local result, err = g.router:call('crud.update', {'developers', 1, {{'=', 'extra_3', { a = { b = {} } } }}, {fetch_latest_metadata = true}}) t.assert_equals(err, nil) objects = crud.unflatten_rows(result.rows, result.metadata) @@ -445,16 +444,16 @@ pgroup.test_intermediate_nullable_fields_update = function(g) -- (https://github.com/tarantool/tarantool/issues/3378). -- So before 2.8 update returns an error but after it update is correct. if helpers.tarantool_version_at_least(2, 8) then - local _, err = g.cluster.main_server.net_box:call('crud.update', + local _, err = g.router:call('crud.update', {'developers', 1, {{'=', '[5].a.b[1]', 3}, {'=', 'extra_5', 'extra_value_5'}}}) t.assert_equals(err, nil) elseif helpers.tarantool_version_at_least(2, 3) then - local _, err = g.cluster.main_server.net_box:call('crud.update', + local _, err = g.router:call('crud.update', {'developers', 1, {{'=', '[5].a.b[1]', 3}, {'=', 'extra_5', 'extra_value_5'}}}) t.assert_equals(err.err, "Failed to update: Field ''extra_5'' was not found in the tuple") end - result, err = g.cluster.main_server.net_box:call('crud.update', + result, err = g.router:call('crud.update', {'developers', 1, {{'=', 5, 'extra_value_3'}, {'=', 7, 'extra_value_5'}}}) t.assert_equals(err, nil) objects = crud.unflatten_rows(result.rows, result.metadata) @@ -470,7 +469,7 @@ pgroup.test_intermediate_nullable_fields_update = function(g) } }) - result, err = g.cluster.main_server.net_box:call('crud.update', + result, err = g.router:call('crud.update', {'developers', 1, { {'=', 14, 'extra_value_12'}, {'=', 'extra_9', 'extra_value_9'}, @@ -681,13 +680,13 @@ for case_name, case in pairs(gh_236_cases) do local result, err -- Perform request to fetch initial space format. - result, err = g.cluster.main_server.net_box:call( + result, err = g.router:call( 'crud.delete', {'countries', 3}) t.assert_not_equals(result, nil) t.assert_equals(err, nil) if case.need_pre_insert_data then - result, err = g.cluster.main_server.net_box:call( + result, err = g.router:call( 'crud.insert', {'countries', {3, box.NULL, 'vatican', 825, 'extra_test_data'}}) t.assert_equals(err, nil) t.assert_not_equals(result, nil) @@ -701,7 +700,7 @@ for case_name, case in pairs(gh_236_cases) do end) if case.operation_name ~= 'crud.pairs' then - result, err = g.cluster.main_server.net_box:call(case.operation_name, case.input) + result, err = g.router:call(case.operation_name, case.input) t.assert_equals(err, nil) local found_extra_field = false for _, v in pairs(result.metadata) do @@ -713,7 +712,7 @@ for case_name, case in pairs(gh_236_cases) do string.format('cannot find the expected metadata for case: %s', case.operation_name)) else - local object = g.cluster.main_server.net_box:eval([[ + local object = g.router:eval([[ local objects = {} for _, object in crud.pairs( 'countries', @@ -740,7 +739,7 @@ end pgroup.test_object_with_nullable_fields = function(g) -- Insert - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.insert_object', {'tags', {id = 1, is_green = true}}) t.assert_equals(err, nil) @@ -766,7 +765,7 @@ pgroup.test_object_with_nullable_fields = function(g) -- Update -- {1, 477, NULL, true, NULL, NULL, true, NULL, NULL, NULL, NULL, NULL} -- Shouldn't failed because of https://github.com/tarantool/tarantool/issues/3378 - result, err = g.cluster.main_server.net_box:call( + result, err = g.router:call( 'crud.update', {'tags', 1, {{'=', 'is_sweet', true}}}) t.assert_equals(err, nil) objects = crud.unflatten_rows(result.rows, result.metadata) @@ -789,7 +788,7 @@ pgroup.test_object_with_nullable_fields = function(g) -- Replace -- {2, 401, NULL, true, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL} - result, err = g.cluster.main_server.net_box:call( + result, err = g.router:call( 'crud.replace_object', {'tags', {id = 2, is_green = true}}) t.assert_equals(err, nil) objects = crud.unflatten_rows(result.rows, result.metadata) @@ -812,7 +811,7 @@ pgroup.test_object_with_nullable_fields = function(g) -- Upsert: first is insert then update -- {3, 2804, NULL, NULL, NULL, NULL, NULL, true, NULL, NULL, NULL, NULL} - local _, err = g.cluster.main_server.net_box:call( + local _, err = g.router:call( 'crud.upsert_object', {'tags', {id = 3, is_dirty = true}, { {'=', 'is_dirty', true}, }}) @@ -820,14 +819,14 @@ pgroup.test_object_with_nullable_fields = function(g) -- {3, 2804, NULL, NULL, NULL, NULL, NULL, true, NULL, true, true, NULL} -- Shouldn't failed because of https://github.com/tarantool/tarantool/issues/3378 - _, err = g.cluster.main_server.net_box:call( + _, err = g.router:call( 'crud.upsert_object', {'tags', {id = 3, is_dirty = true}, { {'=', 'is_useful', true}, }}) t.assert_equals(err, nil) -- Get - result, err = g.cluster.main_server.net_box:call('crud.get', { + result, err = g.router:call('crud.get', { 'tags', 3, {mode = 'write'}, }) t.assert_equals(err, nil) @@ -852,7 +851,7 @@ end pgroup.test_get_partial_result = function(g) -- insert_object - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.insert_object', { 'customers', {id = 1, name = 'Elizabeth', age = 24} @@ -870,7 +869,7 @@ pgroup.test_get_partial_result = function(g) t.assert_equals(objects, {{id = 1, name = 'Elizabeth', age = 24, bucket_id = 477}}) -- get - local result, err = g.cluster.main_server.net_box:call('crud.get', { + local result, err = g.router:call('crud.get', { 'customers', 1, {fields = {'id', 'name'}, mode = 'write'}, }) @@ -884,7 +883,7 @@ end pgroup.test_insert_tuple_partial_result = function(g) -- insert - local result, err = g.cluster.main_server.net_box:call( 'crud.insert', { + local result, err = g.router:call( 'crud.insert', { 'customers', {1, box.NULL, 'Elizabeth', 24}, {fields = {'id', 'name'}} }) @@ -898,7 +897,7 @@ end pgroup.test_insert_object_partial_result = function(g) -- insert_object - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.insert_object', { 'customers', {id = 1, name = 'Elizabeth', age = 24}, @@ -916,7 +915,7 @@ end pgroup.test_delete_partial_result = function(g) -- insert_object - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.insert_object', { 'customers', {id = 1, name = 'Elizabeth', age = 24} @@ -934,7 +933,7 @@ pgroup.test_delete_partial_result = function(g) t.assert_equals(objects, {{id = 1, name = 'Elizabeth', age = 24, bucket_id = 477}}) -- delete - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.delete', { 'customers', 1, {fields = {'id', 'name'}} } @@ -956,7 +955,7 @@ end pgroup.test_update_partial_result = function(g) -- insert_object - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.insert_object', { 'customers', {id = 1, name = 'Elizabeth', age = 23} @@ -974,7 +973,7 @@ pgroup.test_update_partial_result = function(g) t.assert_equals(objects, {{id = 1, name = 'Elizabeth', age = 23, bucket_id = 477}}) -- update - local result, err = g.cluster.main_server.net_box:call('crud.update', { + local result, err = g.router:call('crud.update', { 'customers', 1, {{'+', 'age', 1},}, {fields = {'id', 'age'}} }) @@ -987,7 +986,7 @@ pgroup.test_update_partial_result = function(g) end pgroup.test_replace_tuple_partial_result = function(g) - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.replace', { 'customers', {1, box.NULL, 'Elizabeth', 23}, @@ -1003,7 +1002,7 @@ pgroup.test_replace_tuple_partial_result = function(g) t.assert_equals(result.rows, {{1, 23}}) -- replace again - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.replace', { 'customers', {1, box.NULL, 'Elizabeth', 24}, @@ -1021,7 +1020,7 @@ end pgroup.test_replace_object_partial_result = function(g) -- get - local result, err = g.cluster.main_server.net_box:call('crud.get', { + local result, err = g.router:call('crud.get', { 'customers', 1, {mode = 'write'}, }) @@ -1035,7 +1034,7 @@ pgroup.test_replace_object_partial_result = function(g) }) -- replace_object - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.replace_object', { 'customers', {id = 1, name = 'Elizabeth', age = 23}, @@ -1052,7 +1051,7 @@ pgroup.test_replace_object_partial_result = function(g) t.assert_equals(objects, {{id = 1, age = 23}}) -- replace_object - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.replace_object', { 'customers', {id = 1, name = 'Elizabeth', age = 24}, @@ -1071,7 +1070,7 @@ end pgroup.test_upsert_tuple_partial_result = function(g) -- upsert tuple first time - local result, err = g.cluster.main_server.net_box:call('crud.upsert', { + local result, err = g.router:call('crud.upsert', { 'customers', {1, box.NULL, 'Elizabeth', 23}, {{'+', 'age', 1},}, @@ -1086,7 +1085,7 @@ pgroup.test_upsert_tuple_partial_result = function(g) }) -- upsert second time - result, err = g.cluster.main_server.net_box:call('crud.upsert', { + result, err = g.router:call('crud.upsert', { 'customers', {1, box.NULL, 'Elizabeth', 23}, {{'+', 'age', 1},}, @@ -1103,7 +1102,7 @@ end pgroup.test_upsert_object_partial_result = function(g) -- upsert_object first time - local result, err = g.cluster.main_server.net_box:call('crud.upsert_object', { + local result, err = g.router:call('crud.upsert_object', { 'customers', {id = 1, name = 'Elizabeth', age = 23}, {{'+', 'age', 1},}, @@ -1118,7 +1117,7 @@ pgroup.test_upsert_object_partial_result = function(g) }) -- upsert_object second time - result, err = g.cluster.main_server.net_box:call('crud.upsert_object', { + result, err = g.router:call('crud.upsert_object', { 'customers', {id = 1, name = 'Elizabeth', age = 23}, {{'+', 'age', 1},}, @@ -1135,7 +1134,7 @@ end pgroup.test_partial_result_with_nullable_fields = function(g) -- Insert - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.insert_object', {'tags', {id = 1, is_green = true}}) t.assert_equals(err, nil) @@ -1158,7 +1157,7 @@ pgroup.test_partial_result_with_nullable_fields = function(g) } }) - local result, err = g.cluster.main_server.net_box:call('crud.get', { + local result, err = g.router:call('crud.get', { 'tags', 1, {fields = {'id', 'is_sweet', 'is_green'}, mode = 'write'}, }) @@ -1174,7 +1173,7 @@ end pgroup.test_partial_result_bad_input = function(g) -- insert_object - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.insert_object', { 'customers', {id = 1, name = 'Elizabeth', age = 24}, @@ -1186,7 +1185,7 @@ pgroup.test_partial_result_bad_input = function(g) t.assert_str_contains(err.err, 'Space format doesn\'t contain field named "lastname"') -- get - result, err = g.cluster.main_server.net_box:call('crud.get', { + result, err = g.router:call('crud.get', { 'customers', 1, {fields = {'id', 'lastname', 'name'}, mode = 'write'}, }) @@ -1194,7 +1193,7 @@ pgroup.test_partial_result_bad_input = function(g) t.assert_str_contains(err.err, 'Space format doesn\'t contain field named "lastname"') -- update - result, err = g.cluster.main_server.net_box:call('crud.update', { + result, err = g.router:call('crud.update', { 'customers', 1, {{'+', 'age', 1},}, {fields = {'id', 'lastname', 'age'}} }) @@ -1203,7 +1202,7 @@ pgroup.test_partial_result_bad_input = function(g) t.assert_str_contains(err.err, 'Space format doesn\'t contain field named "lastname"') -- delete - result, err = g.cluster.main_server.net_box:call( + result, err = g.router:call( 'crud.delete', { 'customers', 1, {fields = {'id', 'lastname', 'name'}} @@ -1214,7 +1213,7 @@ pgroup.test_partial_result_bad_input = function(g) t.assert_str_contains(err.err, 'Space format doesn\'t contain field named "lastname"') -- replace - result, err = g.cluster.main_server.net_box:call( + result, err = g.router:call( 'crud.replace', { 'customers', {1, box.NULL, 'Elizabeth', 23}, @@ -1226,7 +1225,7 @@ pgroup.test_partial_result_bad_input = function(g) t.assert_str_contains(err.err, 'Space format doesn\'t contain field named "lastname"') -- replace_object - local result, err = g.cluster.main_server.net_box:call( + local result, err = g.router:call( 'crud.replace_object', { 'customers', {id = 1, name = 'Elizabeth', age = 24}, @@ -1238,7 +1237,7 @@ pgroup.test_partial_result_bad_input = function(g) t.assert_str_contains(err.err, 'Space format doesn\'t contain field named "lastname"') -- upsert - result, err = g.cluster.main_server.net_box:call('crud.upsert', { + result, err = g.router:call('crud.upsert', { 'customers', {1, box.NULL, 'Elizabeth', 24}, {{'+', 'age', 1},}, @@ -1249,7 +1248,7 @@ pgroup.test_partial_result_bad_input = function(g) t.assert_str_contains(err.err, 'Space format doesn\'t contain field named "lastname"') -- upsert_object - result, err = g.cluster.main_server.net_box:call('crud.upsert_object', { + result, err = g.router:call('crud.upsert_object', { 'customers', {id = 1, name = 'Elizabeth', age = 24}, {{'+', 'age', 1},}, @@ -1263,7 +1262,7 @@ end pgroup.test_tuple_not_damaged = function(g) -- insert local insert_tuple = {22, box.NULL, 'Elizabeth', 24} - local new_insert_tuple, err = g.cluster.main_server:eval([[ + local new_insert_tuple, err = g.router:eval([[ local crud = require('crud') local insert_tuple = ... @@ -1278,7 +1277,7 @@ pgroup.test_tuple_not_damaged = function(g) -- upsert local upsert_tuple = {33, box.NULL, 'Peter', 35} - local new_upsert_tuple, err = g.cluster.main_server:eval([[ + local new_upsert_tuple, err = g.router:eval([[ local crud = require('crud') local upsert_tuple = ... @@ -1293,7 +1292,7 @@ pgroup.test_tuple_not_damaged = function(g) -- replace local replace_tuple = {22, box.NULL, 'Elizabeth', 24} - local new_replace_tuple, err = g.cluster.main_server:eval([[ + local new_replace_tuple, err = g.router:eval([[ local crud = require('crud') local replace_tuple = ... @@ -1310,7 +1309,7 @@ end pgroup.test_opts_not_damaged = function(g) -- insert local insert_opts = {timeout = 1, bucket_id = 655, fields = {'name', 'age'}} - local new_insert_opts, err = g.cluster.main_server:eval([[ + local new_insert_opts, err = g.router:eval([[ local crud = require('crud') local insert_opts = ... @@ -1325,7 +1324,7 @@ pgroup.test_opts_not_damaged = function(g) -- insert_object local insert_opts = {timeout = 1, bucket_id = 477, fields = {'name', 'age'}} - local new_insert_opts, err = g.cluster.main_server:eval([[ + local new_insert_opts, err = g.router:eval([[ local crud = require('crud') local insert_opts = ... @@ -1340,7 +1339,7 @@ pgroup.test_opts_not_damaged = function(g) -- upsert local upsert_opts = {timeout = 1, bucket_id = 907, fields = {'name', 'age'}} - local new_upsert_opts, err = g.cluster.main_server:eval([[ + local new_upsert_opts, err = g.router:eval([[ local crud = require('crud') local upsert_opts = ... @@ -1355,7 +1354,7 @@ pgroup.test_opts_not_damaged = function(g) -- upsert_object local upsert_opts = {timeout = 1, bucket_id = 401, fields = {'name', 'age'}} - local new_upsert_opts, err = g.cluster.main_server:eval([[ + local new_upsert_opts, err = g.router:eval([[ local crud = require('crud') local upsert_opts = ... @@ -1372,7 +1371,7 @@ pgroup.test_opts_not_damaged = function(g) -- get local get_opts = {timeout = 1, bucket_id = 401, fields = {'name', 'age'}} - local new_get_opts, err = g.cluster.main_server:eval([[ + local new_get_opts, err = g.router:eval([[ local crud = require('crud') local get_opts = ... @@ -1387,7 +1386,7 @@ pgroup.test_opts_not_damaged = function(g) -- update local update_opts = {timeout = 1, bucket_id = 401, fields = {'name', 'age'}} - local new_update_opts, err = g.cluster.main_server:eval([[ + local new_update_opts, err = g.router:eval([[ local crud = require('crud') local update_opts = ... @@ -1402,7 +1401,7 @@ pgroup.test_opts_not_damaged = function(g) -- replace local replace_opts = {timeout = 1, bucket_id = 655, fields = {'name', 'age'}} - local new_replace_opts, err = g.cluster.main_server:eval([[ + local new_replace_opts, err = g.router:eval([[ local crud = require('crud') local replace_opts = ... @@ -1417,7 +1416,7 @@ pgroup.test_opts_not_damaged = function(g) -- replace_object local replace_opts = {timeout = 1, bucket_id = 477, fields = {'name', 'age'}} - local new_replace_opts, err = g.cluster.main_server:eval([[ + local new_replace_opts, err = g.router:eval([[ local crud = require('crud') local replace_opts = ... @@ -1432,7 +1431,7 @@ pgroup.test_opts_not_damaged = function(g) -- delete local delete_opts = {timeout = 1, bucket_id = 401, fields = {'name', 'age'}} - local new_delete_opts, err = g.cluster.main_server:eval([[ + local new_delete_opts, err = g.router:eval([[ local crud = require('crud') local delete_opts = ... @@ -1521,7 +1520,7 @@ for op, case in pairs(gh_328_success_cases) do local test_name = ('test_gh_328_%s_with_sequence'):format(op) pgroup[test_name] = function(g) - local result, err = g.cluster.main_server.net_box:call('crud.' .. op, case.args) + local result, err = g.router:call('crud.' .. op, case.args) t.assert_equals(err, nil) t.assert_equals(#result.rows, 1) @@ -1568,7 +1567,7 @@ for op, case in pairs(gh_328_error_cases) do local test_name = ('test_gh_328_%s_with_sequence_returns_error_without_option'):format(op) pgroup[test_name] = function(g) - local result, err = g.cluster.main_server.net_box:call('crud.' .. op, case.args) + local result, err = g.router:call('crud.' .. op, case.args) t.assert_equals(result, nil) if case.many then @@ -1590,63 +1589,63 @@ end pgroup.test_noreturn_opt = function(g) -- insert with noreturn success - local result, err = g.cluster.main_server.net_box:call('crud.insert', { + local result, err = g.router:call('crud.insert', { 'customers', {1, box.NULL, 'Elizabeth', 24}, {noreturn = true} }) t.assert_equals(err, nil) t.assert_equals(result, nil) -- insert with noreturn fail - local result, err = g.cluster.main_server.net_box:call('crud.insert', { + local result, err = g.router:call('crud.insert', { 'customers', {1, box.NULL, 'Elizabeth', 24}, {noreturn = true} }) t.assert_not_equals(err, nil) t.assert_equals(result, nil) -- insert_object with noreturn success - local result, err = g.cluster.main_server.net_box:call('crud.insert_object', { + local result, err = g.router:call('crud.insert_object', { 'customers', {id = 0, name = 'Fedor', age = 59}, {noreturn = true} }) t.assert_equals(err, nil) t.assert_equals(result, nil) -- insert_object with noreturn fail - local result, err = g.cluster.main_server.net_box:call('crud.insert_object', { + local result, err = g.router:call('crud.insert_object', { 'customers', {id = 0, name = 'Fedor', age = 59}, {noreturn = true} }) t.assert_not_equals(err, nil) t.assert_equals(result, nil) -- replace with noreturn success - local result, err = g.cluster.main_server.net_box:call('crud.replace', { + local result, err = g.router:call('crud.replace', { 'customers', {1, box.NULL, 'Elizabeth', 24}, {noreturn = true} }) t.assert_equals(err, nil) t.assert_equals(result, nil) -- replace with noreturn fail - local result, err = g.cluster.main_server.net_box:call('crud.replace', { + local result, err = g.router:call('crud.replace', { 'customers', {box.NULL, box.NULL, 'Elizabeth', 24}, {noreturn = true} }) t.assert_not_equals(err, nil) t.assert_equals(result, nil) -- replace_object with noreturn success - local result, err = g.cluster.main_server.net_box:call('crud.replace_object', { + local result, err = g.router:call('crud.replace_object', { 'customers', {id = 0, name = 'Fedor', age = 59}, {noreturn = true} }) t.assert_equals(err, nil) t.assert_equals(result, nil) -- replace_object with noreturn fail - local result, err = g.cluster.main_server.net_box:call('crud.replace_object', { + local result, err = g.router:call('crud.replace_object', { 'customers', {id = box.NULL, name = 'Fedor', age = 59}, {noreturn = true} }) t.assert_not_equals(err, nil) t.assert_equals(result, nil) -- upsert with noreturn success - local result, err = g.cluster.main_server.net_box:call('crud.upsert', { + local result, err = g.router:call('crud.upsert', { 'customers', {1, box.NULL, 'Alice', 22}, {{'+', 'age', 1}}, {noreturn = true} }) @@ -1654,7 +1653,7 @@ pgroup.test_noreturn_opt = function(g) t.assert_equals(result, nil) -- upsert with noreturn fail - local result, err = g.cluster.main_server.net_box:call('crud.upsert', { + local result, err = g.router:call('crud.upsert', { 'customers', {1, box.NULL, 'Alice', 22}, {{'+', 'unknown', 1}}, {noreturn = true} }) @@ -1662,7 +1661,7 @@ pgroup.test_noreturn_opt = function(g) t.assert_equals(result, nil) -- upsert_object with noreturn success - local result, err = g.cluster.main_server.net_box:call('crud.upsert_object', { + local result, err = g.router:call('crud.upsert_object', { 'customers', {id = 0, name = 'Fedor', age = 59}, {{'+', 'age', 1}}, {noreturn = true} }) @@ -1670,7 +1669,7 @@ pgroup.test_noreturn_opt = function(g) t.assert_equals(result, nil) -- upsert_object with noreturn fail - local result, err = g.cluster.main_server.net_box:call('crud.upsert_object', { + local result, err = g.router:call('crud.upsert_object', { 'customers', {id = 0, name = 'Fedor', age = 59}, {{'+', 'unknown', 1}}, {noreturn = true} }) @@ -1678,28 +1677,28 @@ pgroup.test_noreturn_opt = function(g) t.assert_equals(result, nil) -- update with noreturn success - local result, err = g.cluster.main_server.net_box:call('crud.update', { + local result, err = g.router:call('crud.update', { 'customers', 1, {{'+', 'age', 1},}, {noreturn = true} }) t.assert_equals(err, nil) t.assert_equals(result, nil) -- update with noreturn fail - local result, err = g.cluster.main_server.net_box:call('crud.update', { + local result, err = g.router:call('crud.update', { 'customers', {box.NULL, box.NULL, 'Elizabeth', 24}, {noreturn = true} }) t.assert_not_equals(err, nil) t.assert_equals(result, nil) -- delete with noreturn success - local result, err = g.cluster.main_server.net_box:call('crud.delete', { + local result, err = g.router:call('crud.delete', { 'customers', 1, {noreturn = true} }) t.assert_equals(err, nil) t.assert_equals(result, nil) -- delete with noreturn fail - local result, err = g.cluster.main_server.net_box:call('crud.delete', { + local result, err = g.router:call('crud.delete', { 'customers', {box.NULL, box.NULL, 'Elizabeth', 24}, {noreturn = true} }) t.assert_not_equals(err, nil) diff --git a/test/integration/stats_test.lua b/test/integration/stats_test.lua index c54ff47c..b9d23167 100644 --- a/test/integration/stats_test.lua +++ b/test/integration/stats_test.lua @@ -35,7 +35,6 @@ local new_space_name = 'newspace' local function before_all(g) helpers.start_default_cluster(g, 'srv_stats') - g.router = helpers.get_router(g.cluster, g.params.backend).net_box if g.params.args.driver == 'metrics' then local is_metrics_supported = g.router:eval([[ return require('crud.stats.metrics_registry').is_supported() @@ -58,7 +57,7 @@ local call_cfg = function(g, way, cfg) require('crud').cfg(...) ]], { cfg }) elseif way == 'role' then - g.cluster.main_server:upload_config{crud = cfg} + g.router:upload_config{crud = cfg} end end @@ -116,24 +115,28 @@ group_metrics.after_each(disable_stats) local function create_new_space(g) helpers.call_on_storages(g.cluster, function(server) - server.net_box:eval([[ - local space_name = ... - if not box.cfg.read_only then - local sp = box.schema.space.create(space_name, { format = { - {name = 'id', type = 'unsigned'}, - {name = 'bucket_id', type = 'unsigned'}, - }}) + server:exec(function(space_name) + if not box.info.ro then + local sp = box.schema.space.create(space_name, { + format = { + {name = 'id', type = 'unsigned'}, + {name = 'bucket_id', type = 'unsigned'}, + }, + if_not_exists = true, + }) sp:create_index('pk', { parts = { {field = 'id'} }, + if_not_exists = true, }) sp:create_index('bucket_id', { parts = { {field = 'bucket_id'} }, unique = false, + if_not_exists = true, }) end - ]], { new_space_name }) + end, {new_space_name}) end) end @@ -157,9 +160,10 @@ local eval = { pairs = [[ local space_name = select(1, ...) local conditions = select(2, ...) + local opts = select(3, ...) local result = {} - for _, v in crud.pairs(space_name, conditions, { batch_size = 1 }) do + for _, v in crud.pairs(space_name, conditions, opts) do table.insert(result, v) end @@ -169,8 +173,9 @@ local eval = { pairs_pcall = [[ local space_name = select(1, ...) local conditions = select(2, ...) + local opts = select(3, ...) - local _, err = pcall(crud.pairs, space_name, conditions, { batch_size = 1 }) + local _, err = pcall(crud.pairs, space_name, conditions, opts) return nil, tostring(err) ]], @@ -217,17 +222,17 @@ local simple_operation_cases = { }, get = { func = 'crud.get', - args = { space_name, { 12 } }, + args = { space_name, { 12 }, {mode = 'write'}, }, op = 'get', }, select = { func = 'crud.select', - args = { space_name, {{ '==', 'id_index', 3 }} }, + args = { space_name, {{ '==', 'id_index', 3 }}, {mode = 'write'}, }, op = 'select', }, pairs = { eval = eval.pairs, - args = { space_name, {{ '==', 'id_index', 3 }} }, + args = { space_name, {{ '==', 'id_index', 3 }}, {batch_size = 1, mode = 'write'}, }, op = 'select', }, replace = { @@ -336,17 +341,17 @@ local simple_operation_cases = { }, count = { func = 'crud.count', - args = { space_name, {{ '==', 'id_index', 3 }} }, + args = { space_name, {{ '==', 'id_index', 3 }}, {mode = 'write'}, }, op = 'count', }, min = { func = 'crud.min', - args = { space_name }, + args = { space_name, nil, {mode = 'write'}, }, op = 'borders', }, max = { func = 'crud.max', - args = { space_name }, + args = { space_name, nil, {mode = 'write'}, }, op = 'borders', }, insert_error = { @@ -375,19 +380,19 @@ local simple_operation_cases = { }, get_error = { func = 'crud.get', - args = { space_name, { 'id' } }, + args = { space_name, { 'id' }, {mode = 'write'}, }, op = 'get', expect_error = true, }, select_error = { func = 'crud.select', - args = { space_name, {{ '==', 'id_index', 'sdf' }} }, + args = { space_name, {{ '==', 'id_index', 'sdf' }}, {mode = 'write'}, }, op = 'select', expect_error = true, }, pairs_error = { eval = eval.pairs, - args = { space_name, {{ '%=', 'id_index', 'sdf' }} }, + args = { space_name, {{ '%=', 'id_index', 'sdf' }}, {batch_size = 1, mode = 'write'}, }, op = 'select', expect_error = true, pcall = true, @@ -454,19 +459,19 @@ local simple_operation_cases = { }, count_error = { func = 'crud.count', - args = { space_name, {{ '==', 'id_index', 'sdf' }} }, + args = { space_name, {{ '==', 'id_index', 'sdf' }}, {mode = 'write'}, }, op = 'count', expect_error = true, }, min_error = { func = 'crud.min', - args = { space_name, 'badindex' }, + args = { space_name, 'badindex', {mode = 'write'}, }, op = 'borders', expect_error = true, }, max_error = { func = 'crud.max', - args = { space_name, 'badindex' }, + args = { space_name, 'badindex', {mode = 'write'}, }, op = 'borders', expect_error = true, }, @@ -508,6 +513,7 @@ local select_cases = { select_by_primary_index = { func = 'crud.select', conditions = {{ '==', 'id_index', 3 }}, + opts = {mode = 'write'}, map_reduces = 0, tuples_fetched = 1, tuples_lookup = 1, @@ -515,6 +521,7 @@ local select_cases = { select_by_secondary_index = { func = 'crud.select', conditions = {{ '==', 'age_index', 46 }}, + opts = {mode = 'write'}, map_reduces = 1, tuples_fetched = 1, tuples_lookup = 1, @@ -522,14 +529,15 @@ local select_cases = { select_full_scan = { func = 'crud.select', conditions = {{ '>', 'id_index', 0 }, { '==', 'city', 'Kyoto' }}, + opts = {fullscan = true, mode = 'write'}, map_reduces = 1, tuples_fetched = 0, tuples_lookup = 4, - opts = {fullscan = true}, }, pairs_by_primary_index = { eval = eval.pairs, conditions = {{ '==', 'id_index', 3 }}, + opts = {batch_size = 1, mode = 'write'}, map_reduces = 0, tuples_fetched = 1, -- Since batch_size == 1, extra lookup is generated with @@ -539,6 +547,7 @@ local select_cases = { pairs_by_secondary_index = { eval = eval.pairs, conditions = {{ '==', 'age_index', 46 }}, + opts = {batch_size = 1, mode = 'write'}, map_reduces = 1, tuples_fetched = 1, -- Since batch_size == 1, extra lookup is generated with @@ -548,6 +557,7 @@ local select_cases = { pairs_full_scan = { eval = eval.pairs, conditions = {{ '>', 'id_index', 0 }, { '==', 'city', 'Kyoto' }}, + opts = {batch_size = 1, mode = 'write'}, map_reduces = 1, tuples_fetched = 0, tuples_lookup = 4, @@ -746,9 +756,9 @@ for name, case in pairs(select_cases) do -- Call operation. local _, err if case.eval ~= nil then - _, err = g.router:eval(case.eval, { space_name, case.conditions }) + _, err = g.router:eval(case.eval, { space_name, case.conditions, case.opts }) else - _, err = g.router:call(case.func, { space_name, case.conditions }) + _, err = g.router:call(case.func, { space_name, case.conditions, case.opts }) end t.assert_equals(err, nil) @@ -869,7 +879,7 @@ pgroup.test_role_reload_do_not_reset_observations = function(g) local stats_before = get_stats(g) - helpers.reload_roles(g.cluster:server('router')) + helpers.reload_roles(g.router) local stats_after = get_stats(g) t.assert_equals(stats_after, stats_before) @@ -885,7 +895,7 @@ pgroup.test_module_reload_do_not_reset_observations = function(g) local stats_before = get_stats(g) - helpers.reload_package(g.cluster:server('router')) + helpers.reload_package(g.router) local stats_after = get_stats(g) t.assert_equals(stats_after, stats_before) @@ -1091,7 +1101,7 @@ local function check_updated_per_call(g) local map_reduces_before = find_obs('tnt_crud_map_reduces', details_labels, metrics_before) local case = select_cases['select_by_secondary_index'] - local _, err = g.router:call(case.func, { space_name, case.conditions }) + local _, err = g.router:call(case.func, { space_name, case.conditions, case.opts }) t.assert_equals(err, nil) local metrics_after = get_metrics(g) @@ -1185,7 +1195,7 @@ group_metrics.test_role_reload_do_not_reset_metrics_observations = function(g) "See https://github.com/tarantool/metrics/issues/334") helpers.skip_old_tarantool_cartridge_hotreload() - helpers.reload_roles(g.cluster:server('router')) + helpers.reload_roles(g.router) g.router:eval("crud = require('crud')") local metrics = get_metrics(g) validate_metrics(g, metrics) @@ -1226,7 +1236,7 @@ group_metrics.test_stats_changed_in_metrics_registry_after_role_reload = functio "Cartridge roles reload is not supported") helpers.skip_old_tarantool_cartridge_hotreload() - helpers.reload_roles(g.cluster:server('router')) + helpers.reload_roles(g.router) g.router:eval("crud = require('crud')") check_updated_per_call(g) end diff --git a/test/integration/storages_state_test.lua b/test/integration/storages_state_test.lua index 9b7f348a..fc9baf58 100644 --- a/test/integration/storages_state_test.lua +++ b/test/integration/storages_state_test.lua @@ -16,7 +16,7 @@ local function wait_storages_init(g) local attempts_left = 5 local wait_for_init_timeout = 1 while (attempts_left > 0 and not storages_initialized) do - local results, err = g.cluster.main_server.net_box:call("crud.storage_info", {}) + local results, err = g.router:call("crud.storage_info", {}) t.assert_equals(err, nil, "Error getting storage status") storages_initialized = true local count = 0 @@ -84,7 +84,7 @@ end pgroup.test_crud_storage_status_of_stopped_servers = function(g) g.cluster:server("s2-replica"):stop() - local results, err = g.cluster.main_server.net_box:call("crud.storage_info", {}) + local results, err = g.router:call("crud.storage_info", {}) t.assert_equals(err, nil, "Error getting storages info") t.assert_equals(results, build_storage_info(g, { @@ -127,7 +127,7 @@ pgroup.test_disabled_storage_role = function(g) t.assert_not_equals(results, nil, "Failed to disable storage role") - local results, err = g.cluster.main_server.net_box:call("crud.storage_info", {}) + local results, err = g.router:call("crud.storage_info", {}) t.assert_equals(err, nil, "Error getting storages info") t.assert_equals(results, build_storage_info(g, { @@ -169,7 +169,7 @@ pgroup.test_storage_call_failure = function(g) t.assert_not_equals(results, nil, "Eval failed") - local results, err = g.cluster.main_server.net_box:call("crud.storage_info", {}) + local results, err = g.router:call("crud.storage_info", {}) t.assert_equals(err, nil, "Error getting storages info") t.assert_equals(results, build_storage_info(g, { { diff --git a/test/integration/truncate_test.lua b/test/integration/truncate_test.lua index b766dd96..3887c608 100644 --- a/test/integration/truncate_test.lua +++ b/test/integration/truncate_test.lua @@ -4,13 +4,12 @@ local helpers = require('test.helper') local pgroup = t.group('truncate', helpers.backend_matrix({ {engine = 'memtx'}, - {engine = 'vinyl'}, })) pgroup.before_all(function(g) helpers.start_default_cluster(g, 'srv_select') - g.space_format = g.cluster.servers[2].net_box.space.customers:format() + g.space_format = g.cluster:server('s1-master').net_box.space.customers:format() end) pgroup.after_all(function(g) @@ -24,7 +23,7 @@ end) pgroup.test_non_existent_space = function(g) -- insert - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.truncate', {'non_existent_space'} ) @@ -51,22 +50,30 @@ pgroup.test_truncate = function(g) table.sort(customers, function(obj1, obj2) return obj1.id < obj2.id end) - local result, err = g.cluster.main_server.net_box:call('crud.select', {'customers', nil, {fullscan = true}}) + local result, err = g.router:call('crud.select', { + 'customers', + nil, + {fullscan = true, mode = 'write'}, + }) t.assert_equals(err, nil) t.assert_gt(#result.rows, 0) - local result, err = g.cluster.main_server.net_box:call('crud.truncate', {'customers'}) + local result, err = g.router:call('crud.truncate', {'customers'}) t.assert_equals(err, nil) t.assert_equals(result, true) - local result, err = g.cluster.main_server.net_box:call('crud.select', {'customers', nil, {fullscan = true}}) + local result, err = g.router:call('crud.select', { + 'customers', + nil, + {fullscan = true, mode = 'write'}, + }) t.assert_equals(err, nil) t.assert_equals(#result.rows, 0) end pgroup.test_opts_not_damaged = function(g) local truncate_opts = {timeout = 1} - local new_truncate_opts, err = g.cluster.main_server:eval([[ + local new_truncate_opts, err = g.router:eval([[ local crud = require('crud') local truncate_opts = ... diff --git a/test/integration/updated_schema_test.lua b/test/integration/updated_schema_test.lua index 8edff056..07ec530c 100644 --- a/test/integration/updated_schema_test.lua +++ b/test/integration/updated_schema_test.lua @@ -2,13 +2,11 @@ local t = require('luatest') local helpers = require('test.helper') -local fiber = require('fiber') local crud = require('crud') local crud_utils = require('crud.common.utils') local pgroup = t.group('updated_schema', helpers.backend_matrix({ {engine = 'memtx'}, - {engine = 'vinyl'}, })) pgroup.before_all(function(g) @@ -22,7 +20,7 @@ end) pgroup.before_each(function(g) helpers.drop_space_on_cluster(g.cluster, 'customers') -- force schema update on router - g.cluster.main_server.net_box:eval([[ + g.router:eval([[ local vshard = require('vshard') for _, replicaset in pairs(vshard.router.routeall()) do if replicaset.locate_master ~= nil then @@ -44,7 +42,7 @@ end) pgroup.test_insert_non_existent_space = function(g) -- non-existent space err - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.insert', {'customers', {11, nil, 'XXX'}} ) @@ -59,7 +57,7 @@ pgroup.test_insert_non_existent_space = function(g) end) -- check that schema changes were applied - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.insert', {'customers', {11, nil, 'XXX'}} ) @@ -69,7 +67,7 @@ end pgroup.test_insert_object_non_existent_space = function(g) -- non-existent space err - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.insert_object', {'customers', {id = 11, value = 'XXX'}} ) @@ -84,7 +82,7 @@ pgroup.test_insert_object_non_existent_space = function(g) end) -- check that schema changes were applied - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.insert_object', {'customers', {id = 11, value = 'XXX'}} ) @@ -94,7 +92,7 @@ end pgroup.test_get_non_existent_space = function(g) -- non-existent space err - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.get', {'customers', 1} ) @@ -109,7 +107,7 @@ pgroup.test_get_non_existent_space = function(g) end) -- check that schema changes were applied - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.get', {'customers', 1} ) @@ -119,7 +117,7 @@ end pgroup.test_delete_non_existent_space = function(g) -- non-existent space err - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.delete', {'customers', 11} ) @@ -134,7 +132,7 @@ pgroup.test_delete_non_existent_space = function(g) end) -- check that schema changes were applied - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.delete', {'customers', 11} ) @@ -144,7 +142,7 @@ end pgroup.test_update_non_existent_space = function(g) -- non-existent space err - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.update', {'customers', 11, {{'=', 'value', 'YYY'}}} ) @@ -159,14 +157,14 @@ pgroup.test_update_non_existent_space = function(g) end) -- insert tuple - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.insert', {'customers', {11, nil, 'XXX'}} ) t.assert_is_not(obj, nil) t.assert_equals(err, nil) -- check that schema changes were applied - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.update', {'customers', 11, {{'=', 'value', 'YYY'}}} ) @@ -176,7 +174,7 @@ end pgroup.test_replace_non_existent_space = function(g) -- non-existent space err - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.replace', {'customers', {11, nil, 'XXX'}} ) @@ -191,7 +189,7 @@ pgroup.test_replace_non_existent_space = function(g) end) -- check that schema changes were applied - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.replace', {'customers', {11, nil, 'XXX'}} ) @@ -201,7 +199,7 @@ end pgroup.test_replace_object_non_existent_space = function(g) -- non-existent space err - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.replace_object', {'customers', {id = 11, value = 'XXX'}} ) @@ -216,7 +214,7 @@ pgroup.test_replace_object_non_existent_space = function(g) end) -- check that schema changes were applied - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.replace_object', {'customers', {id = 11, value = 'XXX'}} ) @@ -226,7 +224,7 @@ end pgroup.test_upsert_non_existent_space = function(g) -- non-existent space err - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.upsert', {'customers', {11, nil, 'XXX'}, {{'=', 'value', 'YYY'}}} ) @@ -241,7 +239,7 @@ pgroup.test_upsert_non_existent_space = function(g) end) -- check that schema changes were applied - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.upsert', {'customers', {11, nil, 'XXX'}, {{'=', 'value', 'YYY'}}} ) @@ -251,7 +249,7 @@ end pgroup.test_upsert_object_non_existent_space = function(g) -- non-existent space err - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.upsert_object', {'customers', {id = 11, value = 'XXX'}, {{'=', 'value', 'YYY'}}} ) @@ -266,7 +264,7 @@ pgroup.test_upsert_object_non_existent_space = function(g) end) -- check that schema changes were applied - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.upsert_object', {'customers', {id = 11, value = 'XXX'}, {{'=', 'value', 'YYY'}}} ) @@ -276,7 +274,7 @@ end pgroup.test_select_non_existent_space = function(g) -- non-existent space err - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.select', {'customers', nil, {fullscan = true}} ) @@ -291,7 +289,7 @@ pgroup.test_select_non_existent_space = function(g) end) -- check that schema changes were applied - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.select', {'customers', nil, {fullscan = true}} ) @@ -302,7 +300,7 @@ end pgroup.test_borders_non_existent_space = function(g) for _, border_func_name in ipairs({'crud.max', 'crud.min'}) do -- non-existent space err - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( border_func_name, {'customers'} ) @@ -319,7 +317,7 @@ pgroup.test_borders_non_existent_space = function(g) for _, border_func_name in ipairs({'crud.max', 'crud.min'}) do -- check that schema changes were applied - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( border_func_name, {'customers'} ) @@ -335,7 +333,7 @@ pgroup.test_insert_no_bucket_id_index = function(g) end) -- no bucket ID index error - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.insert', {'customers', {11, nil, 'XXX'}} ) @@ -349,7 +347,7 @@ pgroup.test_insert_no_bucket_id_index = function(g) end) -- check that schema changes were applied - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.insert', {'customers', {11, nil, 'XXX'}} ) @@ -364,7 +362,7 @@ pgroup.test_replace_no_bucket_id_index = function(g) end) -- no bucket ID index error - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.replace', {'customers', {11, nil, 'XXX'}} ) @@ -378,7 +376,7 @@ pgroup.test_replace_no_bucket_id_index = function(g) end) -- check that schema changes were applied - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.replace', {'customers', {11, nil, 'XXX'}} ) @@ -393,7 +391,7 @@ pgroup.test_upsert_no_bucket_id_index = function(g) end) -- no bucket ID index error - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.upsert', {'customers', {11, nil, 'XXX'}, {{'=', 'value', 'YYY'}}} ) @@ -407,7 +405,7 @@ pgroup.test_upsert_no_bucket_id_index = function(g) end) -- check that schema changes were applied - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.upsert', {'customers', {11, nil, 'XXX'}, {{'=', 'value', 'YYY'}}} ) @@ -423,7 +421,7 @@ pgroup.test_insert_field_type_changed = function(g) end) -- value should be string error - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.insert', {'customers', {11, nil, 123}} ) @@ -438,7 +436,7 @@ pgroup.test_insert_field_type_changed = function(g) -- check that schema changes were applied -- insert value unsigned - OK - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.insert', {'customers', {11, nil, 123}} ) @@ -454,7 +452,7 @@ pgroup.test_replace_field_type_changed = function(g) end) -- value should be string error - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.replace', {'customers', {11, nil, 123}} ) @@ -469,7 +467,7 @@ pgroup.test_replace_field_type_changed = function(g) -- check that schema changes were applied -- insert value unsigned - OK - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.replace', {'customers', {11, nil, 123}} ) @@ -485,7 +483,7 @@ pgroup.test_upsert_field_type_changed = function(g) end) -- value should be string error - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.upsert', {'customers', {11, nil, 123}, {{'=', 'value', 456}}} ) @@ -500,7 +498,7 @@ pgroup.test_upsert_field_type_changed = function(g) -- check that schema changes were applied -- insert value unsigned - OK - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.upsert', {'customers', {11, nil, 123}, {{'=', 'value', 456}}} ) @@ -515,14 +513,14 @@ pgroup.test_update_field_added = function(g) server.net_box:call('create_bucket_id_index') end) - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.insert', {'customers', {11, nil, 'XXX'}} ) t.assert_is_not(obj, nil) t.assert_equals(err, nil) -- unknown field error - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.update', {'customers', 11, {{'=', 'extra', 'EXTRRRRA'}}} ) @@ -541,7 +539,7 @@ pgroup.test_update_field_added = function(g) end) -- check that schema changes were applied - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.update', {'customers', 11, {{'=', 'extra', 'EXTRRRRA'}}} ) @@ -557,7 +555,7 @@ pgroup.test_upsert_field_added = function(g) end) -- unknown field error - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.upsert', {'customers', {11, nil, 'XXX'}, {{'=', 'extra', 'EXTRRRRA'}}} ) @@ -576,7 +574,7 @@ pgroup.test_upsert_field_added = function(g) end) -- check that schema changes were applied - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.upsert', {'customers', {11, nil, 'XXX'}, {{'=', 'extra', 'EXTRRRRA'}}} ) @@ -592,7 +590,7 @@ pgroup.test_select_field_added = function(g) end) -- unknown field (no results) - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.select', {'customers', {{'==', 'extra', 'EXTRRRRA'}}, {fullscan = true}} ) @@ -605,7 +603,7 @@ pgroup.test_select_field_added = function(g) end) -- check that schema changes were applied - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.select', {'customers', {{'==', 'extra', 'EXTRRRRA'}}, {fullscan = true}} ) @@ -621,7 +619,7 @@ pgroup.test_insert_object_field_type_changed = function(g) end) -- value should be string error - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.insert_object', {'customers', {id = 11, value = 123}} ) @@ -636,7 +634,7 @@ pgroup.test_insert_object_field_type_changed = function(g) -- check that schema changes were applied -- insert value unsigned - OK - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.insert_object', {'customers', {id = 11, value = 123}} ) @@ -652,7 +650,7 @@ pgroup.test_replace_object_field_type_changed = function(g) end) -- value should be string error - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.replace_object', {'customers', {id = 11, value = 123}} ) @@ -667,7 +665,7 @@ pgroup.test_replace_object_field_type_changed = function(g) -- check that schema changes were applied -- insert value unsigned - OK - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.replace_object', {'customers', {id = 11, value = 123}} ) @@ -683,7 +681,7 @@ pgroup.test_upsert_object_field_type_changed = function(g) end) -- value should be string error - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.upsert_object', {'customers', {id = 11, value = 123}, {}} ) @@ -698,7 +696,7 @@ pgroup.test_upsert_object_field_type_changed = function(g) -- check that schema changes were applied -- insert value unsigned - OK - local obj, err = g.cluster.main_server.net_box:call( + local obj, err = g.router:call( 'crud.upsert_object', {'customers', {id = 11, value = 123}, {}} ) @@ -715,9 +713,11 @@ pgroup.test_borders_value_index_added = function(g) for _, border_func_name in ipairs({'crud.max', 'crud.min'}) do -- non-existent space err - local obj, err = g.cluster.main_server.net_box:call( - border_func_name, {'customers', 'value_index'} - ) + local obj, err = g.router:call(border_func_name, { + 'customers', + 'value_index', + {mode = 'write'}, + }) t.assert_equals(obj, nil) t.assert_is_not(err, nil) @@ -731,9 +731,11 @@ pgroup.test_borders_value_index_added = function(g) for _, border_func_name in ipairs({'crud.max', 'crud.min'}) do -- check that schema changes were applied - local obj, err = g.cluster.main_server.net_box:call( - border_func_name, {'customers', 'value_index'} - ) + local obj, err = g.router:call(border_func_name, { + 'customers', + 'value_index', + {mode = 'write'}, + }) t.assert_is_not(obj, nil) t.assert_equals(err, nil) @@ -750,15 +752,17 @@ pgroup.test_alter_index_parts = function(g) for i = 0, 9 do -- Insert {0, 9}, {1, 8}, ..., {9, 0} paris in index - local _, err = g.cluster.main_server.net_box:call( + local _, err = g.router:call( 'crud.replace', {'customers', {i, nil, tostring(i), 9 - i}}) t.assert_equals(err, nil) end -- Check sort order before alter - local result, err = g.cluster.main_server.net_box:call( - 'crud.select', {'customers', {{'>=', 'number_value_index', {0, "0"}}}, {fullscan = true}} - ) + local result, err = g.router:call('crud.select', { + 'customers', + {{'>=', 'number_value_index', {0, "0"}}}, + {fullscan = true, mode = 'write'}, + }) t.assert_equals(err, nil) t.assert_equals(#result.rows, 10) @@ -773,19 +777,21 @@ pgroup.test_alter_index_parts = function(g) server.net_box:call('alter_number_value_index') end) - -- Wait for index rebuild and schema update - fiber.sleep(1) - - -- Sort order should be new - local result, err = g.cluster.main_server.net_box:call( - 'crud.select', {'customers', {{'>=', 'number_value_index', {"0", 0}}}, {fullscan = true}} - ) - t.assert_equals(err, nil) - t.assert_equals(#result.rows, 10) + -- Retry to wait for index rebuild and schema update. + -- Sort order should be new after rebuild. + t.helpers.retrying({timeout = 3, delay = 0.1}, function() + local result, err = g.router:call('crud.select', { + 'customers', + {{'>=', 'number_value_index', {"0", 0}}}, + {fullscan = true, mode = 'write'}, + }) + t.assert_equals(err, nil) + t.assert_equals(#result.rows, 10) - local objects = crud.unflatten_rows(result.rows, result.metadata) - for i = 0, 9 do - t.assert_equals(objects[i + 1].number, 9 - i) - t.assert_equals(objects[i + 1].value, tostring(i)) - end + local objects = crud.unflatten_rows(result.rows, result.metadata) + for i = 0, 9 do + t.assert_equals(objects[i + 1].number, 9 - i) + t.assert_equals(objects[i + 1].value, tostring(i)) + end + end) end diff --git a/test/integration/upsert_many_test.lua b/test/integration/upsert_many_test.lua index 4e938954..2bcb7d89 100644 --- a/test/integration/upsert_many_test.lua +++ b/test/integration/upsert_many_test.lua @@ -6,7 +6,6 @@ local batching_utils = require('crud.common.batching_utils') local pgroup = t.group('upsert_many', helpers.backend_matrix({ {engine = 'memtx'}, - {engine = 'vinyl'}, })) pgroup.before_all(function(g) @@ -23,7 +22,7 @@ end) pgroup.test_non_existent_space = function(g) -- upsert_many - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_many', { + local result, errs = g.router:call('crud.upsert_many', { 'non_existent_space', { {{1, box.NULL, 'Alex', 59}, {{'+', 'age', 1}}}, @@ -38,7 +37,7 @@ pgroup.test_non_existent_space = function(g) t.assert_str_contains(errs[1].err, 'Space "non_existent_space" doesn\'t exist') -- upsert_object_many - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_object_many', { + local result, errs = g.router:call('crud.upsert_object_many', { 'non_existent_space', { {{id = 1, name = 'Fedor', age = 59}, {{'+', 'age', 1}}}, @@ -57,7 +56,7 @@ pgroup.test_non_existent_space = function(g) t.assert_str_contains(errs[3].err, 'Space "non_existent_space" doesn\'t exist') -- upsert_object_many - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_object_many', { + local result, errs = g.router:call('crud.upsert_object_many', { 'non_existent_space', { {{id = 1, name = 'Fedor', age = 59}, {{'+', 'age', 1}}}, @@ -79,7 +78,7 @@ end pgroup.test_object_bad_format = function(g) -- bad format - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_object_many', { + local result, errs = g.router:call('crud.upsert_object_many', { 'customers', { {{id = 1, name = 'Fedor', age = 59}, {{'+', 'age', 12}}}, @@ -107,7 +106,7 @@ pgroup.test_object_bad_format = function(g) t.assert_equals(result, {1, 477, 'Fedor', 59}) -- bad format - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_object_many', { + local result, errs = g.router:call('crud.upsert_object_many', { 'customers', { {{id = 1, name = 'Fedor', age = 59}, {{'+', 'age', '1'}}}, @@ -133,7 +132,7 @@ pgroup.test_object_bad_format = function(g) -- bad format -- two errors, default: stop_on_error == false - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_object_many', { + local result, errs = g.router:call('crud.upsert_object_many', { 'customers', { {{id = 2, name = 'Anna'}, {{'+', 'age', 25}, {'=', 'name', 'Leo Tolstoy'},}}, @@ -154,7 +153,7 @@ end pgroup.test_all_success = function(g) -- upsert_many - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_many', { + local result, errs = g.router:call('crud.upsert_many', { 'customers', { {{1, box.NULL, 'Fedor', 59}, {{'+', 'age', 25}, {'=', 'name', 'Leo Tolstoy'},}}, @@ -191,7 +190,7 @@ end pgroup.test_object_all_success = function(g) -- upsert_object_many - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_object_many', { + local result, errs = g.router:call('crud.upsert_object_many', { 'customers', { {{id = 1, name = 'Fedor', age = 59}, {{'+', 'age', 25}, {'=', 'name', 'Leo Tolstoy'},}}, @@ -239,7 +238,7 @@ pgroup.test_one_error = function(g) -- upsert_many -- failed for s1-master - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_many', { + local result, errs = g.router:call('crud.upsert_many', { 'customers', { {{22, box.NULL, 'Alex', 34}, {{'=', 'name', 'Peter'},}}, @@ -294,7 +293,7 @@ pgroup.test_object_one_error = function(g) -- upsert_object_many -- failed for s1-master - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_object_many', { + local result, errs = g.router:call('crud.upsert_object_many', { 'customers', { {{id = 22, name = 'Alex', age = 34}, {{'=', 'name', 'Peter'},}}, @@ -349,7 +348,7 @@ pgroup.test_many_errors = function(g) -- upsert_many -- failed for both: s1-master s2-master - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_many', { + local result, errs = g.router:call('crud.upsert_many', { 'customers', { {{22, box.NULL, 'Alex', 34}, {{'=', 'name', 'Peter'},}}, @@ -417,7 +416,7 @@ pgroup.test_object_many_errors = function(g) -- upsert_object_many -- failed for both: s1-master s2-master - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_object_many', { + local result, errs = g.router:call('crud.upsert_object_many', { 'customers', { {{id = 22, name = 'Alex', age = 34}, {{'=', 'name', 'Peter'},}}, @@ -490,7 +489,7 @@ pgroup.test_no_success = function(g) -- upsert_many -- failed for both: s1-master s2-master - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_many', { + local result, errs = g.router:call('crud.upsert_many', { 'customers', { {{22, box.NULL, 'Alex', 34}, {{'=', 'name', 5},}}, @@ -563,7 +562,7 @@ pgroup.test_object_no_success = function(g) -- upsert_object_many -- failed for both: s1-master s2-master - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_object_many', { + local result, errs = g.router:call('crud.upsert_object_many', { 'customers', { {{id = 22, name = 'Alex', age = 34}, {{'=', 'name', 5},}}, @@ -621,7 +620,7 @@ end pgroup.test_object_bad_format_stop_on_error = function(g) -- bad format -- two errors, stop_on_error == true - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_object_many', { + local result, errs = g.router:call('crud.upsert_object_many', { 'customers', { {{id = 1, name = 'Fedor'}, {{'+', 'age', 12}}}, @@ -641,7 +640,7 @@ end pgroup.test_all_success_stop_on_error = function(g) -- upsert_many - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_many', { + local result, errs = g.router:call('crud.upsert_many', { 'customers', { {{1, box.NULL, 'Fedor', 59}, {{'+', 'age', 25}, {'=', 'name', 'Leo Tolstoy'},}}, @@ -681,7 +680,7 @@ end pgroup.test_object_all_success_stop_on_error = function(g) -- upsert_object_many - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_object_many', { + local result, errs = g.router:call('crud.upsert_object_many', { 'customers', { {{id = 1, name = 'Fedor', age = 59}, {{'+', 'age', 25}, {'=', 'name', 'Leo Tolstoy'},}}, @@ -735,7 +734,7 @@ pgroup.test_object_partial_success_stop_on_error = function(g) -- stop_on_error = true, rollback_on_error = false -- one error on one storage without rollback, inserts stop by error on this storage -- inserts before error are successful - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_object_many', { + local result, errs = g.router:call('crud.upsert_object_many', { 'customers', { {{id = 22, name = 'Alex', age = 34}, {{'+', 'age', 1}}}, @@ -816,7 +815,7 @@ pgroup.test_partial_success_stop_on_error = function(g) -- stop_on_error = true, rollback_on_error = false -- one error on one storage without rollback, inserts stop by error on this storage -- inserts before error are successful - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_many', { + local result, errs = g.router:call('crud.upsert_many', { 'customers', { {{22, box.NULL, 'Alex', 34}, {{'+', 'age', 1}}}, @@ -901,7 +900,7 @@ pgroup.test_no_success_stop_on_error = function(g) -- upsert_many -- fails for both: s1-master s2-master -- one error on each storage, all inserts stop by error - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_many', { + local result, errs = g.router:call('crud.upsert_many', { 'customers', { {{2, box.NULL, 'Alex', 34}, {{'+', 'age', '1'}}}, @@ -994,7 +993,7 @@ pgroup.test_object_no_success_stop_on_error = function(g) -- upsert_object_many -- fails for both: s1-master s2-master -- one error on each storage, all inserts stop by error - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_object_many', { + local result, errs = g.router:call('crud.upsert_object_many', { 'customers', { {{id = 2, name = 'Alex', age = 34}, {{'+', 'age', '1'}}}, @@ -1069,7 +1068,7 @@ end pgroup.test_all_success_rollback_on_error = function(g) -- upsert_many - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_many', { + local result, errs = g.router:call('crud.upsert_many', { 'customers', { {{1, box.NULL, 'Fedor', 59}, {{'+', 'age', 25}, {'=', 'name', 'Leo Tolstoy'},}}, @@ -1109,7 +1108,7 @@ end pgroup.test_object_all_success_rollback_on_error = function(g) -- upsert_object_many - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_object_many', { + local result, errs = g.router:call('crud.upsert_object_many', { 'customers', { {{id = 1, name = 'Fedor', age = 59}, {{'+', 'age', 25}, {'=', 'name', 'Leo Tolstoy'},}}, @@ -1167,7 +1166,7 @@ pgroup.test_object_partial_success_rollback_on_error = function(g) -- upsert_object_many -- stop_on_error = false, rollback_on_error = true -- two error on one storage with rollback - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_object_many', { + local result, errs = g.router:call('crud.upsert_object_many', { 'customers', { {{id = 22, name = 'Alex', age = 34}, {{'+', 'age', 1}}}, @@ -1262,7 +1261,7 @@ pgroup.test_partial_success_rollback_on_error = function(g) -- upsert_many -- stop_on_error = false, rollback_on_error = true -- two error on one storage with rollback - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_many', { + local result, errs = g.router:call('crud.upsert_many', { 'customers', { {{22, box.NULL, 'Peter', 24}, {{'+', 'age', 1}}}, @@ -1362,7 +1361,7 @@ pgroup.test_no_success_rollback_on_error = function(g) -- upsert_many -- fails for both: s1-master s2-master -- two errors on each storage with rollback - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_many', { + local result, errs = g.router:call('crud.upsert_many', { 'customers', { {{1, box.NULL, 'Olga', 27}, {{'+', 'age', 1}}}, @@ -1481,7 +1480,7 @@ pgroup.test_object_no_success_rollback_on_error = function(g) -- upsert_object_many -- fails for both: s1-master s2-master -- two errors on each storage with rollback - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_object_many', { + local result, errs = g.router:call('crud.upsert_object_many', { 'customers', { {{id = 1, name = 'Olga', age = 27}, {{'+', 'age', 1}}}, @@ -1578,7 +1577,7 @@ end pgroup.test_all_success_rollback_and_stop_on_error = function(g) -- upsert_many -- all success - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_many', { + local result, errs = g.router:call('crud.upsert_many', { 'customers', { {{2, box.NULL, 'Anna', 23}, {{'+', 'age', 1}}}, @@ -1620,7 +1619,7 @@ end pgroup.test_object_all_success_rollback_and_stop_on_error = function(g) -- upsert_object_many -- all success - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_object_many', { + local result, errs = g.router:call('crud.upsert_object_many', { 'customers', { {{id = 2, name = 'Anna', age = 23}, {{'+', 'age', 1}}}, @@ -1675,7 +1674,7 @@ pgroup.test_partial_success_rollback_and_stop_on_error = function(g) -- stop_on_error = true, rollback_on_error = true -- two error on one storage with rollback, inserts stop by error on this storage -- inserts before error are rollbacked - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_many', { + local result, errs = g.router:call('crud.upsert_many', { 'customers', { {{22, box.NULL, 'Alex', 34}, {{'+', 'age', 1}}}, @@ -1770,7 +1769,7 @@ pgroup.test_object_partial_success_rollback_and_stop_on_error = function(g) -- stop_on_error = true, rollback_on_error = true -- two error on one storage with rollback, inserts stop by error on this storage -- inserts before error are rollbacked - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_object_many', { + local result, errs = g.router:call('crud.upsert_object_many', { 'customers', { {{id = 22, name = 'Alex', age = 34}, {{'+', 'age', 1}}}, @@ -1851,7 +1850,7 @@ end pgroup.test_partial_result = function(g) -- bad fields format - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_many', { + local result, errs = g.router:call('crud.upsert_many', { 'customers', { {{15, box.NULL, 'Fedor', 59}, {{'+', 'age', 1}}}, @@ -1866,7 +1865,7 @@ pgroup.test_partial_result = function(g) t.assert_str_contains(errs[1].err, 'Space format doesn\'t contain field named "invalid"') -- upsert_many - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_many', { + local result, errs = g.router:call('crud.upsert_many', { 'customers', { {{1, box.NULL, 'Fedor', 59}, {{'+', 'age', 1}}}, @@ -1886,7 +1885,7 @@ end pgroup.test_object_partial_result = function(g) -- bad fields format - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_object_many', { + local result, errs = g.router:call('crud.upsert_object_many', { 'customers', { {{id = 15, name = 'Fedor', age = 59}, {{'+', 'age', 1}}}, @@ -1901,7 +1900,7 @@ pgroup.test_object_partial_result = function(g) t.assert_str_contains(errs[1].err, 'Space format doesn\'t contain field named "invalid"') -- upsert_object_many - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_object_many', { + local result, errs = g.router:call('crud.upsert_object_many', { 'customers', { {{id = 1, name = 'Fedor', age = 59}, {{'+', 'age', 1}}}, @@ -1922,7 +1921,7 @@ end pgroup.test_opts_not_damaged = function(g) -- upsert_many local batch_upsert_opts = {timeout = 1, fields = {'name', 'age'}} - local new_batch_upsert_opts, err = g.cluster.main_server:eval([[ + local new_batch_upsert_opts, err = g.router:eval([[ local crud = require('crud') local batch_upsert_opts = ... @@ -1939,7 +1938,7 @@ pgroup.test_opts_not_damaged = function(g) -- upsert_object_many local batch_upsert_opts = {timeout = 1, fields = {'name', 'age'}} - local new_batch_upsert_opts, err = g.cluster.main_server:eval([[ + local new_batch_upsert_opts, err = g.router:eval([[ local crud = require('crud') local batch_upsert_opts = ... @@ -1957,7 +1956,7 @@ end pgroup.test_noreturn_opt = function(g) -- upsert_many with noreturn, all tuples are correct - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_many', { + local result, errs = g.router:call('crud.upsert_many', { 'customers', { {{1, box.NULL, 'Alex', 59}, {{'+', 'age', 1}}}, @@ -1971,7 +1970,7 @@ pgroup.test_noreturn_opt = function(g) t.assert_equals(result, nil) -- upsert_many with noreturn, some tuples are correct - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_many', { + local result, errs = g.router:call('crud.upsert_many', { 'customers', { {{1, box.NULL, 'Alex', 59}, {{'+', 'age', 1}}}, @@ -1986,7 +1985,7 @@ pgroup.test_noreturn_opt = function(g) t.assert_equals(result, nil) -- upsert_many with noreturn, all tuples are not correct - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_many', { + local result, errs = g.router:call('crud.upsert_many', { 'customers', { {{box.NULL, box.NULL, 'Alex', 59}, {{'+', 'age', 1}}}, @@ -2001,7 +2000,7 @@ pgroup.test_noreturn_opt = function(g) t.assert_equals(result, nil) -- upsert_object_many with noreturn, all tuples are correct - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_object_many', { + local result, errs = g.router:call('crud.upsert_object_many', { 'customers', { {{id = 1, name = 'Fedor', age = 59}, {{'+', 'age', 1}}}, @@ -2015,7 +2014,7 @@ pgroup.test_noreturn_opt = function(g) t.assert_equals(result, nil) -- upsert_object_many with noreturn, some tuples are correct - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_object_many', { + local result, errs = g.router:call('crud.upsert_object_many', { 'customers', { {{id = 1, name = 'Fedor', age = 59}, {{'+', 'age', 1}}}, @@ -2030,7 +2029,7 @@ pgroup.test_noreturn_opt = function(g) t.assert_equals(result, nil) -- upsert_object_many with noreturn, all tuples are not correct - local result, errs = g.cluster.main_server.net_box:call('crud.upsert_object_many', { + local result, errs = g.router:call('crud.upsert_object_many', { 'customers', { {{id = box.NULL, name = 'Fedor', age = 59}, {{'+', 'age', 1}}}, @@ -2046,7 +2045,7 @@ pgroup.test_noreturn_opt = function(g) end pgroup.test_zero_tuples = function(g) - local result, errs = g.cluster.main_server.net_box:call( + local result, errs = g.router:call( 'crud.upsert_many', {'customers', {}}) t.assert_not_equals(errs, nil) @@ -2056,7 +2055,7 @@ pgroup.test_zero_tuples = function(g) end pgroup.test_zero_objects = function(g) - local result, errs = g.cluster.main_server.net_box:call( + local result, errs = g.router:call( 'crud.upsert_object_many', {'customers', {}}) t.assert_not_equals(errs, nil) diff --git a/test/integration/vshard_custom_test.lua b/test/integration/vshard_custom_test.lua index 2e164a0c..cfcb22df 100644 --- a/test/integration/vshard_custom_test.lua +++ b/test/integration/vshard_custom_test.lua @@ -7,14 +7,12 @@ local helpers = require('test.helper') local pgroup = t.group('vshard_custom', { {engine = 'memtx', option = 'group_name'}, {engine = 'memtx', option = 'router_object'}, - {engine = 'vinyl', option = 'group_name'}, - {engine = 'vinyl', option = 'router_object'}, }) pgroup.before_all(function(g) helpers.skip_cartridge_unsupported() - g.cluster = helpers.Cluster:new({ + g.cfg = { datadir = fio.tempdir(), server_command = helpers.entrypoint_cartridge('srv_vshard_custom'), use_vshard = true, @@ -82,10 +80,31 @@ pgroup.before_all(function(g) env = { ['ENGINE'] = g.params.engine, }, - }) + } + + g.cluster = helpers.Cluster:new(g.cfg) g.cluster:start() - g.router = g.cluster:server('router').net_box + + g.router = g.cluster:server('router') + + helpers.wait_crud_is_ready_on_cluster(g, { + backend = helpers.backend.CARTRIDGE, + vshard_group = 'customers', + storage_roles = { + 'customers-storage', + 'customers-storage-ddl', + }, + }) + + helpers.wait_crud_is_ready_on_cluster(g, { + backend = helpers.backend.CARTRIDGE, + vshard_group = 'locations', + storage_roles = { + 'locations-storage', + 'locations-storage-ddl', + }, + }) end) pgroup.after_all(function(g) helpers.stop_cartridge_cluster(g.cluster) end) diff --git a/test/performance/perf_test.lua b/test/performance/perf_test.lua index 975cf12f..24db407c 100644 --- a/test/performance/perf_test.lua +++ b/test/performance/perf_test.lua @@ -50,7 +50,8 @@ local vshard_cfg_template = { }, }, bucket_count = 3000, - storage_init = helpers.entrypoint_vshard_storage('srv_ddl'), + router_entrypoint = helpers.entrypoint_vshard_storage('srv_ddl'), + storage_entrypoint = helpers.entrypoint_vshard_storage('srv_ddl'), crud_init = true, } @@ -109,8 +110,6 @@ g.before_all(function(g) helpers.start_cluster(g, cartridge_cfg_template, vshard_cfg_template) - g.router = helpers.get_router(g.cluster, g.params.backend).net_box - g.router:eval([[ rawset(_G, 'crud', require('crud')) ]]) @@ -1152,7 +1151,7 @@ for name, case in pairs(cases) do local connections = {} - local router = helpers.get_router(g.cluster, g.params.backend) + local router = g.router for _ = 1, params.connection_count do local c = net_box:connect(router.net_box_uri, router.net_box_credentials) if c == nil then diff --git a/test/unit/call_test.lua b/test/unit/call_test.lua index f07cbcd4..4a9a7cc4 100644 --- a/test/unit/call_test.lua +++ b/test/unit/call_test.lua @@ -26,7 +26,7 @@ local vshard_cfg_template = { }, }, bucket_count = 3000, - all_init = helpers.entrypoint_vshard_all('srv_say_hi'), + all_entrypoint = helpers.entrypoint_vshard_all('srv_say_hi'), crud_init = true, } @@ -68,16 +68,16 @@ pgroup.before_all(function(g) helpers.start_cluster(g, cartridge_cfg_template, vshard_cfg_template) g.clear_vshard_calls = function() - g.cluster.main_server.net_box:call('clear_vshard_calls') + g.router:call('clear_vshard_calls') end g.get_vshard_calls = function() - return g.cluster.main_server.net_box:eval('return _G.vshard_calls') + return g.router:eval('return _G.vshard_calls') end -- patch vshard.router.call* functions local vshard_call_names = {'callro', 'callbro', 'callre', 'callbre', 'callrw'} - g.cluster.main_server.net_box:call('patch_vshard_calls', {vshard_call_names}) + g.router:call('patch_vshard_calls', {vshard_call_names}) end) pgroup.after_all(function(g) @@ -85,7 +85,7 @@ pgroup.after_all(function(g) end) pgroup.test_map_non_existent_func = function(g) - local results, err = g.cluster.main_server.net_box:eval([[ + local results, err = g.router:eval([[ local vshard = require('vshard') local call = require('crud.common.call') @@ -98,7 +98,7 @@ pgroup.test_map_non_existent_func = function(g) end pgroup.test_single_non_existent_func = function(g) - local results, err = g.cluster.main_server.net_box:eval([[ + local results, err = g.router:eval([[ local vshard = require('vshard') local call = require('crud.common.call') @@ -111,7 +111,7 @@ pgroup.test_single_non_existent_func = function(g) end pgroup.test_map_invalid_mode = function(g) - local results, err = g.cluster.main_server.net_box:eval([[ + local results, err = g.router:eval([[ local vshard = require('vshard') local call = require('crud.common.call') @@ -123,7 +123,7 @@ pgroup.test_map_invalid_mode = function(g) end pgroup.test_single_invalid_mode = function(g) - local results, err = g.cluster.main_server.net_box:eval([[ + local results, err = g.router:eval([[ local vshard = require('vshard') local call = require('crud.common.call') @@ -135,7 +135,7 @@ pgroup.test_single_invalid_mode = function(g) end pgroup.test_map_no_args = function(g) - local results_map, err = g.cluster.main_server.net_box:eval([[ + local results_map, err = g.router:eval([[ local vshard = require('vshard') local call = require('crud.common.call') @@ -149,7 +149,7 @@ pgroup.test_map_no_args = function(g) end pgroup.test_args = function(g) - local results_map, err = g.cluster.main_server.net_box:eval([[ + local results_map, err = g.router:eval([[ local vshard = require('vshard') local call = require('crud.common.call') @@ -165,7 +165,7 @@ end pgroup.test_timeout = function(g) local timeout = 0.2 - local results, err = g.cluster.main_server.net_box:eval([[ + local results, err = g.router:eval([[ local vshard = require('vshard') local call = require('crud.common.call') @@ -184,7 +184,7 @@ end local function check_single_vshard_call(g, exp_vshard_call, opts) g.clear_vshard_calls() - local _, err = g.cluster.main_server.net_box:eval([[ + local _, err = g.router:eval([[ local vshard = require('vshard') local call = require('crud.common.call') @@ -198,7 +198,7 @@ end local function check_map_vshard_call(g, exp_vshard_call, opts) g.clear_vshard_calls() - local _, err = g.cluster.main_server.net_box:eval([[ + local _, err = g.router:eval([[ local vshard = require('vshard') local call = require('crud.common.call') @@ -290,7 +290,7 @@ end pgroup.test_any_vshard_call = function(g) g.clear_vshard_calls() - local results, err = g.cluster.main_server.net_box:eval([[ + local results, err = g.router:eval([[ local vshard = require('vshard') local call = require('crud.common.call') @@ -304,7 +304,7 @@ end pgroup.test_any_vshard_call_timeout = function(g) local timeout = 0.2 - local results, err = g.cluster.main_server.net_box:eval([[ + local results, err = g.router:eval([[ local vshard = require('vshard') local call = require('crud.common.call') diff --git a/test/unit/not_initialized_test.lua b/test/unit/not_initialized_test.lua index 84e5c782..bbe215e1 100644 --- a/test/unit/not_initialized_test.lua +++ b/test/unit/not_initialized_test.lua @@ -18,7 +18,7 @@ local vshard_cfg_template = { }, }, bucket_count = 20, - storage_init = helpers.entrypoint_vshard_storage('srv_not_initialized'), + storage_entrypoint = helpers.entrypoint_vshard_storage('srv_not_initialized'), } local cartridge_cfg_template = { @@ -46,7 +46,11 @@ local cartridge_cfg_template = { } pgroup.before_all(function(g) - helpers.start_cluster(g, cartridge_cfg_template, vshard_cfg_template) + helpers.start_cluster(g, cartridge_cfg_template, vshard_cfg_template, { + wait_crud_is_ready = false, + }) + + g.router = g.cluster:server('router') end) pgroup.after_all(function(g) @@ -54,7 +58,7 @@ pgroup.after_all(function(g) end) pgroup.test_insert = function(g) - local results, err = g.cluster.main_server.net_box:eval([[ + local results, err = g.router:eval([[ local crud = require('crud') return crud.insert('customers', {id = 1, name = 'Fedor', age = 15}) ]]) diff --git a/test/unit/sharding_metadata_test.lua b/test/unit/sharding_metadata_test.lua index be2ce2a3..d18ecb3a 100644 --- a/test/unit/sharding_metadata_test.lua +++ b/test/unit/sharding_metadata_test.lua @@ -24,25 +24,25 @@ g.before_each(function() {name = 'sharding_func_body', type = 'string', is_nullable = true}, } - if type(box.cfg) ~= 'table' then - helpers.box_cfg() - end + helpers.box_cfg() -- Create a space _ddl_sharding_key with a tuple that -- contains a space name and it's sharding key. box.schema.space.create('_ddl_sharding_key', { format = sharding_key_format, + if_not_exists = true, }) - box.space._ddl_sharding_key:create_index('pk') + box.space._ddl_sharding_key:create_index('pk', {if_not_exists = true}) -- Create a space _ddl_sharding_func with a tuple that -- contains a space name and it's sharding func name/body. box.schema.space.create('_ddl_sharding_func', { format = sharding_func_format, + if_not_exists = true, }) - box.space._ddl_sharding_func:create_index('pk') + box.space._ddl_sharding_func:create_index('pk', {if_not_exists = true}) - box.schema.space.create('fetch_on_storage') + box.schema.space.create('fetch_on_storage', {if_not_exists = true}) end) -- Since Tarantool 3.0 triggers still live after a space drop. To properly diff --git a/test/unit/stats_test.lua b/test/unit/stats_test.lua index 4681ccf3..fdaf8c01 100644 --- a/test/unit/stats_test.lua +++ b/test/unit/stats_test.lua @@ -18,7 +18,6 @@ local space_name = 'customers' local function before_all(g) helpers.start_default_cluster(g, 'srv_stats') - g.router = helpers.get_router(g.cluster, g.params.backend).net_box helpers.prepare_simple_functions(g.router) g.router:eval("stats_module = require('crud.stats')") diff --git a/test/vshard_helpers/server.lua b/test/vshard_helpers/server.lua index 6ed2448f..c60bc34d 100644 --- a/test/vshard_helpers/server.lua +++ b/test/vshard_helpers/server.lua @@ -6,12 +6,12 @@ local fio = require('fio') local fun = require('fun') local json = require('json') local errno = require('errno') -local log = require('log') -local yaml = require('yaml') local checks = require('checks') local luatest = require('luatest') +local vclock_utils = require('test.vshard_helpers.vclock') + ffi.cdef([[ int kill(pid_t pid, int sig); ]]) @@ -114,6 +114,16 @@ function Server:wait_for_readiness() end) end +function Server:wait_for_rw() + return wait_cond('rw', self, function() + local ok, is_ready = pcall(function() + self:connect_net_box() + return self.net_box:eval('return box.info.ro') == false + end) + return ok and is_ready + end) +end + function Server:wait_election_leader() -- Include read-only property too because if an instance is a leader, it -- does not mean it finished the synchro queue ownership transition. It is @@ -331,38 +341,6 @@ function Server:grep_log(what, bytes, opts) return found end -function Server:get_vclock() - return self:exec(function() return box.info.vclock end) -end - -function Server:wait_vclock(to_vclock) - while true do - local vclock = self:get_vclock() - local ok = true - - for server_id, to_lsn in pairs(to_vclock) do - local lsn = vclock[server_id] - if lsn == nil or lsn < to_lsn then - ok = false - break - end - end - - if ok then - return - end - - log.info("wait vclock: %s to %s", - yaml.encode(vclock), yaml.encode(to_vclock)) - fiber.sleep(0.001) - end -end - -function Server:wait_vclock_of(other_server) - local vclock = other_server:get_vclock() - -- First component is for local changes. - vclock[0] = nil - return self:wait_vclock(vclock) -end +vclock_utils.extend_with_vclock_methods(Server) return Server diff --git a/test/vshard_helpers/vclock.lua b/test/vshard_helpers/vclock.lua new file mode 100644 index 00000000..415389ee --- /dev/null +++ b/test/vshard_helpers/vclock.lua @@ -0,0 +1,58 @@ +local fiber = require('fiber') +local log = require('log') +local yaml = require('yaml') + +-- Simple implementation without metatables. +local function extend_with(t, new_fields) + for k, v in pairs(new_fields) do + t[k] = v + end + + return t +end + +local function get_vclock(self) + return self:exec(function() return box.info.vclock end) +end + +local function wait_vclock(self, to_vclock) + while true do + local vclock = self:get_vclock() + local ok = true + + for server_id, to_lsn in pairs(to_vclock) do + local lsn = vclock[server_id] + if lsn == nil or lsn < to_lsn then + ok = false + break + end + end + + if ok then + return + end + + log.info("wait vclock: %s to %s", + yaml.encode(vclock), yaml.encode(to_vclock)) + fiber.sleep(0.001) + end +end + +local function wait_vclock_of(self, other_server) + local vclock = other_server:get_vclock() + -- First component is for local changes. + vclock[0] = nil + return self:wait_vclock(vclock) +end + +local function extend_with_vclock_methods(server) + return extend_with(server, { + get_vclock = get_vclock, + wait_vclock = wait_vclock, + wait_vclock_of = wait_vclock_of, + }) +end + +return { + extend_with_vclock_methods = extend_with_vclock_methods, +} diff --git a/test/vshard_helpers/vtest.lua b/test/vshard_helpers/vtest.lua index 7cc89ac7..7352c4eb 100644 --- a/test/vshard_helpers/vtest.lua +++ b/test/vshard_helpers/vtest.lua @@ -214,23 +214,33 @@ local function router_new(g, name, cfg) end -- --- Start a main_server router. +-- Start a router. -- -local function start_main_server(g, cfg, opts) +local function start_router(g, cfg, opts) local cfg = table.deepcopy(cfg) cfg.engine = nil - local router = router_new(g, 'main_server', cfg) - if opts.router_init ~= nil then - router:exec(function(router_init) - require(router_init)() - end, {opts.router_init}) + local router = router_new(g, 'router', cfg) + if opts.router_entrypoint ~= nil then + router:exec(function(router_entrypoint) + local entrypoint = require(router_entrypoint) + entrypoint.init() + if entrypoint.wait_until_ready ~= nil then + entrypoint.wait_until_ready() + end + end, {opts.router_entrypoint}) end - if opts.all_init ~= nil then - router:exec(function(all_init) - require(all_init)() - end, {opts.all_init}) + + if opts.all_entrypoint ~= nil then + router:exec(function(all_entrypoint) + local entrypoint = require(all_entrypoint) + entrypoint.init() + if entrypoint.wait_until_ready ~= nil then + entrypoint.wait_until_ready() + end + end, {opts.all_entrypoint}) end + if opts.crud_init then router:exec(function() require('crud').init_router() @@ -400,14 +410,14 @@ local function cluster_new(g, cfg) local replicas = {} local master_map = {} - local storage_init = cfg.storage_init - local router_init = cfg.router_init - local all_init = cfg.all_init + local storage_entrypoint = cfg.storage_entrypoint + local router_entrypoint = cfg.router_entrypoint + local all_entrypoint = cfg.all_entrypoint local crud_init = cfg.crud_init - cfg.storage_init = nil - cfg.router_init = nil - cfg.all_init = nil + cfg.storage_entrypoint = nil + cfg.router_entrypoint = nil + cfg.all_entrypoint = nil cfg.crud_init = nil for replicaset_id, replicaset in pairs(cfg.sharding) do @@ -495,6 +505,7 @@ local function cluster_new(g, cfg) for _, master in pairs(masters) do master:wait_for_readiness() + master:wait_for_rw() master:exec(function(cfg) -- Logged in as guest with 'super' access rights. Yet 'super' is not -- enough to grant 'replication' privilege. The simplest way - login @@ -533,17 +544,43 @@ local function cluster_new(g, cfg) end, {cfg}) end + -- Init on all servers. + for _, replica in pairs(all_servers) do + if storage_entrypoint ~= nil then + replica:exec(function(storage_entrypoint) + local entrypoint = require(storage_entrypoint) + entrypoint.init() + end, {storage_entrypoint}) + end + + if all_entrypoint ~= nil then + replica:exec(function(all_entrypoint) + local entrypoint = require(all_entrypoint) + entrypoint.init() + end, {all_entrypoint}) + end + end + + -- Wait until all servers are ready. for _, replica in pairs(all_servers) do - if storage_init ~= nil then - replica:exec(function(storage_init) - require(storage_init)() - end, {storage_init}) + if storage_entrypoint ~= nil then + replica:exec(function(storage_entrypoint) + local entrypoint = require(storage_entrypoint) + if entrypoint.wait_until_ready then + entrypoint.wait_until_ready() + end + end, {storage_entrypoint}) end - if all_init ~= nil then - replica:exec(function(all_init) - require(all_init)() - end, {all_init}) + + if all_entrypoint ~= nil then + replica:exec(function(all_entrypoint) + local entrypoint = require(all_entrypoint) + if entrypoint.wait_until_ready then + entrypoint.wait_until_ready() + end + end, {all_entrypoint}) end + if crud_init then replica:exec(function() require('crud').init_storage() @@ -551,9 +588,9 @@ local function cluster_new(g, cfg) end end - start_main_server(g, cfg, { - router_init = router_init, - all_init = all_init, + start_router(g, cfg, { + router_entrypoint = router_entrypoint, + all_entrypoint = all_entrypoint, crud_init = crud_init, })