• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

tarantool / crud / 6534548167

16 Oct 2023 01:47PM UTC coverage: 89.22% (+0.06%) from 89.162%
6534548167

push

github

DifferentialOrange
crud: add execution access to a VShard user

The patch adds execution access on a stroage for crud functions
to a VShard storage user in the VShard manner [1].

1. https://github.com/tarantool/vshard/blob/b3c27b326/vshard/storage/init.lua#L777-L780

Closes #366

142 of 142 new or added lines in 19 files covered. (100.0%)

4668 of 5232 relevant lines covered (89.22%)

16942.66 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.0
/crud.lua
1
--- Tarantool module for performing operations across the cluster
2
--
3
-- @module crud
4

5
local cfg = require('crud.cfg')
360✔
6
local insert = require('crud.insert')
360✔
7
local insert_many = require('crud.insert_many')
360✔
8
local replace = require('crud.replace')
360✔
9
local replace_many = require('crud.replace_many')
360✔
10
local get = require('crud.get')
360✔
11
local update = require('crud.update')
360✔
12
local upsert = require('crud.upsert')
360✔
13
local upsert_many = require('crud.upsert_many')
360✔
14
local delete = require('crud.delete')
360✔
15
local select = require('crud.select')
360✔
16
local truncate = require('crud.truncate')
360✔
17
local len = require('crud.len')
360✔
18
local count = require('crud.count')
360✔
19
local borders = require('crud.borders')
360✔
20
local sharding_metadata = require('crud.common.sharding.sharding_metadata')
360✔
21
local utils = require('crud.common.utils')
360✔
22
local stats = require('crud.stats')
360✔
23
local readview = require('crud.readview')
360✔
24
local schema = require('crud.schema')
360✔
25

26
local vshard = require('vshard')
360✔
27
local luri = require('uri')
360✔
28

29
local crud = {}
360✔
30

31
-- @refer crud.version
32
-- @tfield string _VERSION
33
--  Module version.
34
crud._VERSION = require('crud.version')
720✔
35

36
--- CRUD operations.
37
-- @section crud
38

39
-- @refer insert.tuple
40
-- @function insert
41
crud.insert = stats.wrap(insert.tuple, stats.op.INSERT)
720✔
42

43
-- @refer insert.object
44
-- @function insert_object
45
crud.insert_object = stats.wrap(insert.object, stats.op.INSERT)
720✔
46

47
-- @refer insert_many.tuples
48
-- @function insert_many
49
crud.insert_many = stats.wrap(insert_many.tuples, stats.op.INSERT_MANY)
720✔
50

51
-- @refer insert_many.objects
52
-- @function insert_object_many
53
crud.insert_object_many = stats.wrap(insert_many.objects, stats.op.INSERT_MANY)
720✔
54

55
-- @refer get.call
56
-- @function get
57
crud.get = stats.wrap(get.call, stats.op.GET)
720✔
58

59
-- @refer replace.tuple
60
-- @function replace
61
crud.replace = stats.wrap(replace.tuple, stats.op.REPLACE)
720✔
62

63
-- @refer replace.object
64
-- @function replace_object
65
crud.replace_object = stats.wrap(replace.object, stats.op.REPLACE)
720✔
66

67
-- @refer replace_many.tuples
68
-- @function replace_many
69
crud.replace_many = stats.wrap(replace_many.tuples, stats.op.REPLACE_MANY)
720✔
70

71
-- @refer replace_many.objects
72
-- @function replace_object_many
73
crud.replace_object_many = stats.wrap(replace_many.objects, stats.op.REPLACE_MANY)
720✔
74

75
-- @refer update.call
76
-- @function update
77
crud.update = stats.wrap(update.call, stats.op.UPDATE)
720✔
78

79
-- @refer upsert.tuple
80
-- @function upsert
81
crud.upsert = stats.wrap(upsert.tuple, stats.op.UPSERT)
720✔
82

83
-- @refer upsert_many.tuples
84
-- @function upsert_many
85
crud.upsert_many = stats.wrap(upsert_many.tuples, stats.op.UPSERT_MANY)
720✔
86

87
-- @refer upsert_many.objects
88
-- @function upsert_object_many
89
crud.upsert_object_many = stats.wrap(upsert_many.objects, stats.op.UPSERT_MANY)
720✔
90

91
-- @refer upsert.object
92
-- @function upsert
93
crud.upsert_object = stats.wrap(upsert.object, stats.op.UPSERT)
720✔
94

95
-- @refer delete.call
96
-- @function delete
97
crud.delete = stats.wrap(delete.call, stats.op.DELETE)
720✔
98

99
-- @refer select.call
100
-- @function select
101
crud.select = stats.wrap(select.call, stats.op.SELECT)
720✔
102

103
-- @refer select.pairs
104
-- @function pairs
105
crud.pairs = stats.wrap(select.pairs, stats.op.SELECT, { pairs = true })
720✔
106

107
-- @refer utils.unflatten_rows
108
-- @function unflatten_rows
109
crud.unflatten_rows = utils.unflatten_rows
360✔
110

111
-- @refer truncate.call
112
-- @function truncate
113
crud.truncate = stats.wrap(truncate.call, stats.op.TRUNCATE)
720✔
114

115
-- @refer len.call
116
-- @function len
117
crud.len = stats.wrap(len.call, stats.op.LEN)
720✔
118

119
-- @refer count.call
120
-- @function count
121
crud.count = stats.wrap(count.call, stats.op.COUNT)
720✔
122

123
-- @refer borders.min
124
-- @function min
125
crud.min = stats.wrap(borders.min, stats.op.BORDERS)
720✔
126

127
-- @refer borders.max
128
-- @function max
129
crud.max = stats.wrap(borders.max, stats.op.BORDERS)
720✔
130

131
-- @refer utils.cut_rows
132
-- @function cut_rows
133
crud.cut_rows = utils.cut_rows
360✔
134

135
-- @refer utils.cut_objects
136
-- @function cut_objects
137
crud.cut_objects = utils.cut_objects
360✔
138

139
-- @refer cfg.cfg
140
-- @function cfg
141
crud.cfg = cfg.cfg
360✔
142

143
-- @refer stats.get
144
-- @function stats
145
crud.stats = stats.get
360✔
146

147
-- @refer stats.reset
148
-- @function reset_stats
149
crud.reset_stats = stats.reset
360✔
150

151
-- @refer utils.storage_info
152
-- @function storage_info
153
crud.storage_info = utils.storage_info
360✔
154

155
-- @refer readview.new
156
-- @function readview
157
crud.readview = readview.new
360✔
158

159
-- @refer schema.call
160
-- @function schema
161
crud.schema = schema.call
360✔
162

163
--- Initializes crud on node
164
--
165
-- Exports all functions that are used for calls
166
-- and CRUD operations.
167
--
168
-- @function init
169
--
170
function crud.init_storage()
360✔
171
    if type(box.cfg) ~= 'table' then
287✔
172
        error('box.cfg() must be called first')
2✔
173
    end
174

175
    local user = nil
285✔
176
    if not box.info.ro then
285✔
177
        local ok, storage_info = pcall(vshard.storage.info)
152✔
178
        if not ok then
152✔
179
            error('vshard.storage.cfg() must be called first')
2✔
180
        end
181

182
        local box_info = box.info()
150✔
183
        local replicaset_uuid
184
        if box_info.replicaset ~= nil then
150✔
185
            replicaset_uuid = box_info.replicaset.uuid
×
186
        else
187
            replicaset_uuid = box_info.cluster.uuid
150✔
188
        end
189
        local replicaset_info = storage_info.replicasets[replicaset_uuid]
150✔
190
        if replicaset_info == nil or replicaset_info.master == nil then
150✔
191
            error(string.format('Failed to find a vshard configuration for ' ..
×
192
                ' replicaset with replicaset_uuid %s.',
193
                replicaset_uuid))
×
194
        end
195
        user = luri.parse(replicaset_info.master.uri).login or 'guest'
300✔
196
    end
197

198
    if rawget(_G, '_crud') == nil then
283✔
199
        rawset(_G, '_crud', {})
283✔
200
    end
201

202
    insert.init(user)
283✔
203
    insert_many.init(user)
283✔
204
    get.init(user)
283✔
205
    replace.init(user)
283✔
206
    replace_many.init(user)
283✔
207
    update.init(user)
283✔
208
    upsert.init(user)
283✔
209
    upsert_many.init(user)
283✔
210
    delete.init(user)
283✔
211
    select.init(user)
283✔
212
    truncate.init(user)
283✔
213
    len.init(user)
283✔
214
    count.init(user)
283✔
215
    borders.init(user)
283✔
216
    sharding_metadata.init(user)
283✔
217
    readview.init(user)
283✔
218

219
    utils.init_storage_call(user, 'storage_info_on_storage',
566✔
220
        utils.storage_info_on_storage
283✔
221
    )
283✔
222
end
223

224
function crud.init_router()
360✔
225
   rawset(_G, 'crud', crud)
71✔
226
end
227

228
function crud.stop_router()
360✔
229
    rawset(_G, 'crud', nil)
1✔
230
end
231

232
function crud.stop_storage()
360✔
233
    rawset(_G, '_crud', nil)
1✔
234
end
235

236
return crud
360✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc