1
- local vshard = require (' vshard' )
2
1
local errors = require (' errors' )
3
2
4
3
local BucketIDError = errors .new_class (" BucketIDError" , {capture_stack = false })
@@ -13,8 +12,7 @@ local sharding_utils = require('crud.common.sharding.utils')
13
12
14
13
local sharding = {}
15
14
16
- function sharding .get_replicasets_by_bucket_id (bucket_id )
17
- local vshard_router = vshard .router .static
15
+ function sharding .get_replicasets_by_bucket_id (vshard_router , bucket_id )
18
16
local replicaset , err = vshard_router :route (bucket_id )
19
17
if replicaset == nil then
20
18
return nil , GetReplicasetsError :new (" Failed to get replicaset for bucket_id %s: %s" , bucket_id , err .err )
@@ -25,14 +23,13 @@ function sharding.get_replicasets_by_bucket_id(bucket_id)
25
23
}
26
24
end
27
25
28
- function sharding .key_get_bucket_id (space_name , key , specified_bucket_id )
29
- dev_checks (' string' , ' ?' , ' ?number|cdata' )
26
+ function sharding .key_get_bucket_id (vshard_router , space_name , key , specified_bucket_id )
27
+ dev_checks (' table ' , ' string' , ' ?' , ' ?number|cdata' )
30
28
31
29
if specified_bucket_id ~= nil then
32
30
return { bucket_id = specified_bucket_id }
33
31
end
34
32
35
- local vshard_router = vshard .router .static
36
33
local sharding_func_data , err = sharding_metadata_module .fetch_sharding_func_on_router (vshard_router , space_name )
37
34
if err ~= nil then
38
35
return nil , err
@@ -48,13 +45,12 @@ function sharding.key_get_bucket_id(space_name, key, specified_bucket_id)
48
45
return { bucket_id = vshard_router :bucket_id_strcrc32 (key ) }
49
46
end
50
47
51
- function sharding .tuple_get_bucket_id (tuple , space , specified_bucket_id )
48
+ function sharding .tuple_get_bucket_id (vshard_router , tuple , space , specified_bucket_id )
52
49
if specified_bucket_id ~= nil then
53
50
return { bucket_id = specified_bucket_id }
54
51
end
55
52
56
53
local sharding_index_parts = space .index [0 ].parts
57
- local vshard_router = vshard .router .static
58
54
local sharding_key_data , err = sharding_metadata_module .fetch_sharding_key_on_router (vshard_router , space .name )
59
55
if err ~= nil then
60
56
return nil , err
@@ -64,7 +60,7 @@ function sharding.tuple_get_bucket_id(tuple, space, specified_bucket_id)
64
60
end
65
61
local key = utils .extract_key (tuple , sharding_index_parts )
66
62
67
- local bucket_id_data , err = sharding .key_get_bucket_id (space .name , key , nil )
63
+ local bucket_id_data , err = sharding .key_get_bucket_id (vshard_router , space .name , key , nil )
68
64
if err ~= nil then
69
65
return nil , err
70
66
end
@@ -76,7 +72,7 @@ function sharding.tuple_get_bucket_id(tuple, space, specified_bucket_id)
76
72
}
77
73
end
78
74
79
- function sharding .tuple_set_and_return_bucket_id (tuple , space , specified_bucket_id )
75
+ function sharding .tuple_set_and_return_bucket_id (vshard_router , tuple , space , specified_bucket_id )
80
76
local bucket_id_fieldno , err = utils .get_bucket_id_fieldno (space )
81
77
if err ~= nil then
82
78
return nil , BucketIDError :new (" Failed to get bucket ID fieldno: %s" , err )
@@ -98,7 +94,7 @@ function sharding.tuple_set_and_return_bucket_id(tuple, space, specified_bucket_
98
94
local sharding_data = { bucket_id = tuple [bucket_id_fieldno ] }
99
95
100
96
if sharding_data .bucket_id == nil then
101
- sharding_data , err = sharding .tuple_get_bucket_id (tuple , space )
97
+ sharding_data , err = sharding .tuple_get_bucket_id (vshard_router , tuple , space )
102
98
if err ~= nil then
103
99
return nil , err
104
100
end
@@ -144,18 +140,18 @@ function sharding.batching_result_needs_sharding_reload(errs, tuples_count)
144
140
return sharding_errs_count == tuples_count
145
141
end
146
142
147
- function sharding .wrap_method (method , space_name , ...)
143
+ function sharding .wrap_method (vshard_router , method , space_name , ...)
148
144
local i = 0
149
145
150
146
local res , err , need_reload
151
147
while true do
152
- res , err , need_reload = method (space_name , ... )
148
+ res , err , need_reload = method (vshard_router , space_name , ... )
153
149
154
150
if err == nil or need_reload ~= const .NEED_SHARDING_RELOAD then
155
151
break
156
152
end
157
153
158
- sharding_metadata_module .reload_sharding_cache (space_name )
154
+ sharding_metadata_module .reload_sharding_cache (vshard_router , space_name )
159
155
160
156
i = i + 1
161
157
@@ -169,12 +165,12 @@ end
169
165
170
166
-- This wrapper assumes reload is performed inside the method and
171
167
-- expect ShardingHashMismatchError error to be thrown.
172
- function sharding .wrap_select_method (method , space_name , ...)
168
+ function sharding .wrap_select_method (vshard_router , method , space_name , ...)
173
169
local i = 0
174
170
175
171
local ok , res , err
176
172
while true do
177
- ok , res , err = pcall (method , space_name , ... )
173
+ ok , res , err = pcall (method , vshard_router , space_name , ... )
178
174
179
175
if ok == true then
180
176
break
212
208
-- @return [1] batches
213
209
-- Map where key is a replicaset and value
214
210
-- is table of tuples related to this replicaset
215
- function sharding .split_tuples_by_replicaset (tuples , space , opts )
216
- dev_checks (' table' , ' table' , {
211
+ function sharding .split_tuples_by_replicaset (vshard_router , tuples , space , opts )
212
+ dev_checks (' table' , ' table' , ' table ' , {
217
213
operations = ' ?table' ,
218
214
})
219
215
@@ -227,7 +223,7 @@ function sharding.split_tuples_by_replicaset(tuples, space, opts)
227
223
local sharding_data
228
224
local err
229
225
for i , tuple in ipairs (tuples ) do
230
- sharding_data , err = sharding .tuple_set_and_return_bucket_id (tuple , space )
226
+ sharding_data , err = sharding .tuple_set_and_return_bucket_id (vshard_router , tuple , space )
231
227
if err ~= nil then
232
228
return nil , BucketIDError :new (" Failed to get bucket ID: %s" , err )
233
229
end
@@ -244,7 +240,6 @@ function sharding.split_tuples_by_replicaset(tuples, space, opts)
244
240
skip_sharding_hash_check = false
245
241
end
246
242
247
- local vshard_router = vshard .router .static
248
243
local replicaset , err = vshard_router :route (sharding_data .bucket_id )
249
244
if replicaset == nil then
250
245
return nil , GetReplicasetsError :new (
0 commit comments