Skip to content

Commit 64fa2f9

Browse files
ddl: fetch sharding info hashes to router
Fetch sharding info hashes to router on ddl schema load. Hashes are stored in router metadata cache together with sharding info. Part of #212
1 parent 1d23e92 commit 64fa2f9

File tree

5 files changed

+33
-4
lines changed

5 files changed

+33
-4
lines changed

crud/common/sharding/router_metadata_cache.lua

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,17 @@ local router_metadata_cache = {}
44

55
router_metadata_cache.SHARDING_KEY_MAP_NAME = "sharding_key_as_index_obj_map"
66
router_metadata_cache.SHARDING_FUNC_MAP_NAME = "sharding_func_map"
7+
router_metadata_cache.META_HASH_MAP_NAME = "sharding_meta_hash_map"
78
router_metadata_cache[router_metadata_cache.SHARDING_KEY_MAP_NAME] = nil
89
router_metadata_cache[router_metadata_cache.SHARDING_FUNC_MAP_NAME] = nil
10+
router_metadata_cache[router_metadata_cache.META_HASH_MAP_NAME] = {}
911
router_metadata_cache.fetch_lock = fiber.channel(1)
1012
router_metadata_cache.is_part_of_pk = {}
1113

1214
function router_metadata_cache.drop_caches()
1315
router_metadata_cache[router_metadata_cache.SHARDING_KEY_MAP_NAME] = nil
1416
router_metadata_cache[router_metadata_cache.SHARDING_FUNC_MAP_NAME] = nil
17+
router_metadata_cache[router_metadata_cache.META_HASH_MAP_NAME] = {}
1518
if router_metadata_cache.fetch_lock ~= nil then
1619
router_metadata_cache.fetch_lock:close()
1720
end

crud/common/sharding/sharding_func.lua

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,12 @@ function sharding_func_module.construct_as_callable_obj_cache(metadata_map, spec
8282

8383
local result_err
8484

85-
cache.sharding_func_map = {}
85+
cache[cache.SHARDING_FUNC_MAP_NAME] = {}
86+
local func_cache = cache[cache.SHARDING_FUNC_MAP_NAME]
87+
88+
cache[cache.META_HASH_MAP_NAME][cache.SHARDING_FUNC_MAP_NAME] = {}
89+
local func_hash_cache = cache[cache.META_HASH_MAP_NAME][cache.SHARDING_FUNC_MAP_NAME]
90+
8691
for space_name, metadata in pairs(metadata_map) do
8792
if metadata.sharding_func_def ~= nil then
8893
local sharding_func, err = as_callable_object(metadata.sharding_func_def,
@@ -96,7 +101,8 @@ function sharding_func_module.construct_as_callable_obj_cache(metadata_map, spec
96101
end
97102
end
98103

99-
cache.sharding_func_map[space_name] = sharding_func
104+
func_cache[space_name] = sharding_func
105+
func_hash_cache[space_name] = metadata.sharding_func_hash
100106
end
101107
end
102108

crud/common/sharding/sharding_key.lua

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,12 @@ function sharding_key_module.construct_as_index_obj_cache(metadata_map, specifie
102102

103103
local result_err
104104

105-
cache.sharding_key_as_index_obj_map = {}
105+
cache[cache.SHARDING_KEY_MAP_NAME] = {}
106+
local key_cache = cache[cache.SHARDING_KEY_MAP_NAME]
107+
108+
cache[cache.META_HASH_MAP_NAME][cache.SHARDING_KEY_MAP_NAME] = {}
109+
local key_hash_cache = cache[cache.META_HASH_MAP_NAME][cache.SHARDING_KEY_MAP_NAME]
110+
106111
for space_name, metadata in pairs(metadata_map) do
107112
if metadata.sharding_key_def ~= nil then
108113
local sharding_key_as_index_obj, err = as_index_object(space_name,
@@ -117,7 +122,8 @@ function sharding_key_module.construct_as_index_obj_cache(metadata_map, specifie
117122
end
118123
end
119124

120-
cache.sharding_key_as_index_obj_map[space_name] = sharding_key_as_index_obj
125+
key_cache[space_name] = sharding_key_as_index_obj
126+
key_hash_cache[space_name] = metadata.sharding_key_hash
121127
end
122128
end
123129

crud/common/sharding/sharding_metadata.lua

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ function sharding_metadata_module.fetch_on_storage()
6060
local space_format = box.space[space_name]:format()
6161
metadata_map[space_name] = {
6262
sharding_key_def = sharding_key_def,
63+
sharding_key_hash = storage_cache.get_sharding_key_hash(space_name),
6364
space_format = space_format,
6465
}
6566
end
@@ -71,6 +72,7 @@ function sharding_metadata_module.fetch_on_storage()
7172
local sharding_func_def = sharding_utils.extract_sharding_func_def(tuple)
7273
metadata_map[space_name] = metadata_map[space_name] or {}
7374
metadata_map[space_name].sharding_func_def = sharding_func_def
75+
metadata_map[space_name].sharding_func_hash = storage_cache.get_sharding_func_hash(space_name)
7476
end
7577
end
7678

@@ -99,6 +101,10 @@ local _fetch_on_router = locked(function(timeout, space_name, metadata_map_name)
99101
if metadata_map == nil then
100102
cache[cache.SHARDING_KEY_MAP_NAME] = {}
101103
cache[cache.SHARDING_FUNC_MAP_NAME] = {}
104+
cache[cache.META_HASH_MAP_NAME] = {
105+
[cache.SHARDING_KEY_MAP_NAME] = {},
106+
[cache.SHARDING_FUNC_MAP_NAME] = {},
107+
}
102108
return
103109
end
104110

test/unit/sharding_metadata_test.lua

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ local ffi = require('ffi')
33
local sharding_metadata_module = require('crud.common.sharding.sharding_metadata')
44
local sharding_key_module = require('crud.common.sharding.sharding_key')
55
local sharding_func_module = require('crud.common.sharding.sharding_func')
6+
local sharding_utils = require('crud.common.sharding.utils')
67
local cache = require('crud.common.sharding.router_metadata_cache')
8+
local storage_cache = require('crud.common.sharding.storage_metadata_cache')
79
local utils = require('crud.common.utils')
810

911
local helpers = require('test.helper')
@@ -55,6 +57,7 @@ g.after_each(function()
5557

5658
box.space.fetch_on_storage:drop()
5759
cache.drop_caches()
60+
storage_cache.drop_caches()
5861
end)
5962

6063
g.test_as_index_object_positive = function()
@@ -119,7 +122,9 @@ g.test_fetch_sharding_metadata_on_storage_positive = function()
119122
t.assert_equals(metadata_map, {
120123
[space_name] = {
121124
sharding_key_def = sharding_key_def,
125+
sharding_key_hash = sharding_utils.compute_hash(sharding_key_def),
122126
sharding_func_def = sharding_func_def,
127+
sharding_func_hash = sharding_utils.compute_hash(sharding_func_def),
123128
space_format = {}
124129
},
125130
})
@@ -137,6 +142,7 @@ g.test_fetch_sharding_key_on_storage_positive = function()
137142
t.assert_equals(metadata_map, {
138143
[space_name] = {
139144
sharding_key_def = sharding_key_def,
145+
sharding_key_hash = sharding_utils.compute_hash(sharding_key_def),
140146
space_format = {}
141147
},
142148
})
@@ -154,6 +160,7 @@ g.test_fetch_sharding_func_name_on_storage_positive = function()
154160
t.assert_equals(metadata_map, {
155161
[space_name] = {
156162
sharding_func_def = sharding_func_def,
163+
sharding_func_hash = sharding_utils.compute_hash(sharding_func_def),
157164
},
158165
})
159166
end
@@ -170,6 +177,7 @@ g.test_fetch_sharding_func_body_on_storage_positive = function()
170177
t.assert_equals(metadata_map, {
171178
[space_name] = {
172179
sharding_func_def = {body = sharding_func_def},
180+
sharding_func_hash = sharding_utils.compute_hash({body = sharding_func_def}),
173181
},
174182
})
175183
end

0 commit comments

Comments
 (0)