Closed
Description
Imagine user have a cluster with running CRUD module. He wants to update a schema or update sharding keys in _ddl_sharding_key
space. In such case we should update cache with sharding keys on router.
Now we have a mechanism to follow schema changes on storage (see option add_space_schema_hash
in CRUD operations and function schema.get_space_schema_hash()
).
Patch for this can look like this:
diff --git a/crud/borders.lua b/crud/borders.lua
index ac77cef..b702d09 100644
--- a/crud/borders.lua
+++ b/crud/borders.lua
@@ -108,9 +108,6 @@ local function call_get_border_on_router(border_name, space_name, index_name, op
local storage_result = storage_result[1]
if storage_result.err ~= nil then
local need_reload = schema.result_needs_reload(space, storage_result)
- if need_reload == true then
- sharding.schema_reload_actions(space_name, storage_result.ddl_sharding_key)
- end
return nil, BorderError:new("Failed to get %s: %s", border_name, storage_result.err), need_reload
end
diff --git a/crud/common/schema.lua b/crud/common/schema.lua
index 93afc01..bbfae66 100644
--- a/crud/common/schema.lua
+++ b/crud/common/schema.lua
@@ -214,7 +214,6 @@ function schema.wrap_func_result(space, func, args, opts)
else
result.res = filter_tuple_fields(func_res, opts.field_names)
end
- result.ddl_sharding_key = schema.fetch_ddl_sharding_key(box, space.name)
return result
end
diff --git a/crud/common/sharding.lua b/crud/common/sharding.lua
index 528b4fe..07d0275 100644
--- a/crud/common/sharding.lua
+++ b/crud/common/sharding.lua
@@ -109,14 +109,6 @@ function sharding.is_sharding_key_in_primary_index(space_name, primary_index, sh
return sharding_key_in_primary_index_cache[space_name]
end
-function sharding.schema_reload_actions(space_name, sharding_key)
- dev_checks('string', 'table')
-
- ddl_sharding_keys_cache[space_name] = sharding_key
- sharding_key_in_primary_index_cache[space_name] = nil
- sharding_key_fieldnos_cache[space_name] = nil
-end
-
-- Build an array with sharding key values.
local function build_sharding_key(key, index_parts, sharding_key_fieldno_map)
dev_checks('table', 'table', 'table')
diff --git a/crud/insert.lua b/crud/insert.lua
index 3b9fe1f..9d4332c 100644
--- a/crud/insert.lua
+++ b/crud/insert.lua
@@ -84,9 +84,6 @@ local function call_insert_on_router(space_name, tuple, opts)
if storage_result.err ~= nil then
local need_reload = schema.result_needs_reload(space, storage_result)
- if need_reload == true then
- sharding.schema_reload_actions(space_name, storage_result.ddl_sharding_key)
- end
return nil, InsertError:new("Failed to insert: %s", storage_result.err), need_reload
end
diff --git a/crud/replace.lua b/crud/replace.lua
index f52f331..26d5721 100644
--- a/crud/replace.lua
+++ b/crud/replace.lua
@@ -88,9 +88,6 @@ local function call_replace_on_router(space_name, tuple, opts)
if storage_result.err ~= nil then
local need_reload = schema.result_needs_reload(space, storage_result)
- if need_reload == true then
- sharding.schema_reload_actions(space_name, storage_result.ddl_sharding_key)
- end
return nil, ReplaceError:new("Failed to replace: %s", storage_result.err), need_reload
end
diff --git a/crud/upsert.lua b/crud/upsert.lua
index 87f16c0..d91d8ba 100644
--- a/crud/upsert.lua
+++ b/crud/upsert.lua
@@ -90,9 +90,6 @@ local function call_upsert_on_router(space_name, tuple, user_operations, opts)
if storage_result.err ~= nil then
local need_reload = schema.result_needs_reload(space, storage_result)
- if need_reload == true then
- sharding.schema_reload_actions(space_name, storage_result.ddl_sharding_key)
- end
return nil, UpsertError:new("Failed to upsert: %s", storage_result.err), need_reload
end
Things missed in a patch:
schema.get_space_schema_hash
follows only changes in spaces with data and not_ddl_sharding_key
and_ddl_sharding_func
.crud.insert()
does not setopts.add_space_schema_hash = true
(as opposite tocrud.insert_object()
.- anything else?
Part of #166