Skip to content

Commit 327278a

Browse files
committed
Add stats collection and pert tests for batch methods
Since we have PR #244 it will be nice to collect statistics for batch operations too. To establish the effectiveness of `crud.batch_insert()` method compared to `crud.insert()`, perf tests were added. `crud.insert()` in the loop and `crud.batch_insert()` are compared for different batch sizes. Closes #193
1 parent 0cec3de commit 327278a

File tree

4 files changed

+262
-11
lines changed

4 files changed

+262
-11
lines changed

crud.lua

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ crud.insert_object = stats.wrap(insert.object, stats.op.INSERT)
3636

3737
-- @refer batch_insert.tuples_batch
3838
-- @function insert_many
39-
crud.insert_many = batch_insert.tuples_batch
39+
crud.insert_many = stats.wrap(batch_insert.tuples_batch, stats.op.INSERT_MANY)
4040

4141
-- @refer batch_insert.objects_batch
4242
-- @function insert_object_many
43-
crud.insert_object_many = batch_insert.objects_batch
43+
crud.insert_object_many = stats.wrap(batch_insert.objects_batch, stats.op.INSERT_MANY)
4444

4545
-- @refer get.call
4646
-- @function get
@@ -56,11 +56,11 @@ crud.replace_object = stats.wrap(replace.object, stats.op.REPLACE)
5656

5757
-- @refer batch_replace.tuples_batch
5858
-- @function replace_many
59-
crud.replace_many = batch_replace.tuples_batch
59+
crud.replace_many = stats.wrap(batch_replace.tuples_batch, stats.op.REPLACE_MANY)
6060

6161
-- @refer batch_replace.objects_batch
6262
-- @function replace_object_many
63-
crud.replace_object_many = batch_replace.objects_batch
63+
crud.replace_object_many = stats.wrap(batch_replace.objects_batch, stats.op.REPLACE_MANY)
6464

6565
-- @refer update.call
6666
-- @function update
@@ -72,11 +72,11 @@ crud.upsert = stats.wrap(upsert.tuple, stats.op.UPSERT)
7272

7373
-- @refer batch_upsert.tuples_batch
7474
-- @function upsert_many
75-
crud.upsert_many = batch_upsert.tuples_batch
75+
crud.upsert_many = stats.wrap(batch_upsert.tuples_batch, stats.op.UPSERT_MANY)
7676

7777
-- @refer batch_upsert.objects_batch
7878
-- @function upsert_object_many
79-
crud.upsert_object_many = batch_upsert.objects_batch
79+
crud.upsert_object_many = stats.wrap(batch_upsert.objects_batch, stats.op.UPSERT_MANY)
8080

8181
-- @refer upsert.object
8282
-- @function upsert

crud/stats/operation.lua

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,18 @@
66
return {
77
-- INSERT identifies both `insert` and `insert_object`.
88
INSERT = 'insert',
9+
-- INSERT_MANY identifies both `insert_many` and `insert_object_many`.
10+
INSERT_MANY = 'insert_many',
911
GET = 'get',
1012
-- REPLACE identifies both `replace` and `replace_object`.
1113
REPLACE = 'replace',
14+
-- REPLACE_MANY identifies both `replace_many` and `replace_object_many`.
15+
REPLACE_MANY = 'replace_many',
1216
UPDATE = 'update',
1317
-- UPSERT identifies both `upsert` and `upsert_object`.
1418
UPSERT = 'upsert',
19+
-- UPSERT_MANY identifies both `upsert_many` and `upsert_object_many`.
20+
UPSERT_MANY = 'upsert_many',
1521
DELETE = 'delete',
1622
-- SELECT identifies both `pairs` and `select`.
1723
SELECT = 'select',

test/integration/stats_test.lua

Lines changed: 124 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,30 @@ local simple_operation_cases = {
171171
},
172172
op = 'insert',
173173
},
174+
{
175+
name = 'insert_many',
176+
func = 'crud.insert_many',
177+
args = {
178+
space_name,
179+
{
180+
{ 21, box.NULL, 'Ivan', 'Ivanov', 20, 'Moscow' },
181+
{ 31, box.NULL, 'Oleg', 'Petrov', 25, 'Moscow' },
182+
}
183+
},
184+
op = 'insert_many',
185+
},
186+
{
187+
name = 'insert_object_many',
188+
func = 'crud.insert_object_many',
189+
args = {
190+
space_name,
191+
{
192+
{ id = 22, name = 'Ivan', last_name = 'Ivanov', age = 20, city = 'Moscow' },
193+
{ id = 32, name = 'Oleg', last_name = 'Petrov', age = 25, city = 'Moscow' },
194+
}
195+
},
196+
op = 'insert_many',
197+
},
174198
{
175199
name = 'get',
176200
func = 'crud.get',
@@ -207,6 +231,30 @@ local simple_operation_cases = {
207231
},
208232
op = 'replace',
209233
},
234+
{
235+
name = 'replace_many',
236+
func = 'crud.replace_many',
237+
args = {
238+
space_name,
239+
{
240+
{ 21, box.NULL, 'Peter', 'Ivanov', 40, 'Moscow' },
241+
{ 31, box.NULL, 'Ivan', 'Petrov', 35, 'Moscow' },
242+
}
243+
},
244+
op = 'replace_many',
245+
},
246+
{
247+
name = 'replace_object_many',
248+
func = 'crud.replace_object_many',
249+
args = {
250+
space_name,
251+
{
252+
{ id = 22, name = 'Peter', last_name = 'Ivanov', age = 40, city = 'Moscow' },
253+
{ id = 32, name = 'Ivan', last_name = 'Petrov', age = 35, city = 'Moscow' },
254+
}
255+
},
256+
op = 'replace_many',
257+
},
210258
{
211259
name = 'update',
212260
prepare = function(g)
@@ -239,6 +287,38 @@ local simple_operation_cases = {
239287
},
240288
op = 'upsert',
241289
},
290+
{
291+
name = 'upsert_many',
292+
func = 'crud.upsert_many',
293+
args = {
294+
space_name,
295+
{
296+
{ 26, box.NULL, 'Ivan', 'Ivanov', 20, 'Moscow' },
297+
{ 36, box.NULL, 'Oleg', 'Petrov', 25, 'Moscow' },
298+
},
299+
{
300+
{{'+', 'age', 1}},
301+
{{'+', 'age', 1}},
302+
},
303+
},
304+
op = 'upsert_many',
305+
},
306+
{
307+
name = 'upsert_object_many',
308+
func = 'crud.upsert_object_many',
309+
args = {
310+
space_name,
311+
{
312+
{ id = 27, name = 'Ivan', last_name = 'Ivanov', age = 20, city = 'Moscow' },
313+
{ id = 37, name = 'Oleg', last_name = 'Petrov', age = 25, city = 'Moscow' },
314+
},
315+
{
316+
{{'+', 'age', 1}},
317+
{{'+', 'age', 1}}
318+
},
319+
},
320+
op = 'upsert_many',
321+
},
242322
{
243323
name = 'delete',
244324
func = 'crud.delete',
@@ -289,6 +369,20 @@ local simple_operation_cases = {
289369
op = 'insert',
290370
expect_error = true,
291371
},
372+
{
373+
name = 'insert_many_error',
374+
func = 'crud.insert_many',
375+
args = { space_name, {{ 'id' }} },
376+
op = 'insert_many',
377+
expect_error = true,
378+
},
379+
{
380+
name = 'insert_object_many_error',
381+
func = 'crud.insert_object_many',
382+
args = { space_name, {{ 'id' }} },
383+
op = 'insert_many',
384+
expect_error = true,
385+
},
292386
{
293387
name = 'get_error',
294388
func = 'crud.get',
@@ -325,6 +419,20 @@ local simple_operation_cases = {
325419
op = 'replace',
326420
expect_error = true,
327421
},
422+
{
423+
name = 'replace_many_error',
424+
func = 'crud.replace_many',
425+
args = { space_name, {{ 'id' }} },
426+
op = 'replace_many',
427+
expect_error = true,
428+
},
429+
{
430+
name = 'replace_object_many_error',
431+
func = 'crud.replace_object_many',
432+
args = { space_name, {{ 'id' }} },
433+
op = 'replace_many',
434+
expect_error = true,
435+
},
328436
{
329437
name = 'update_error',
330438
func = 'crud.update',
@@ -346,6 +454,20 @@ local simple_operation_cases = {
346454
op = 'upsert',
347455
expect_error = true,
348456
},
457+
{
458+
name = 'upsert_many_error',
459+
func = 'crud.upsert_many',
460+
args = { space_name, {{ 'id' }}, {{{'+', 'age', 1}}} },
461+
op = 'upsert_many',
462+
expect_error = true,
463+
},
464+
{
465+
name = 'upsert_object_many_error',
466+
func = 'crud.upsert_object_many',
467+
args = { space_name, {{ 'id' }}, {{{'+', 'age', 1}}} },
468+
op = 'upsert_many',
469+
expect_error = true,
470+
},
349471
{
350472
name = 'delete_error',
351473
func = 'crud.delete',
@@ -807,8 +929,8 @@ local function validate_metrics(g, metrics)
807929
t.assert_type(stats_sum, 'table', '`tnt_crud_stats` summary metrics found')
808930

809931

810-
local expected_operations = { 'insert', 'batch_insert', 'get', 'replace', 'update',
811-
'upsert', 'batch_upsert', 'delete', 'select', 'truncate', 'len', 'count', 'borders' }
932+
local expected_operations = { 'insert', 'insert_many', 'get', 'replace', 'replace_many', 'update',
933+
'upsert', 'upsert_many', 'delete', 'select', 'truncate', 'len', 'count', 'borders' }
812934

813935
if g.params.quantiles == true then
814936
t.assert_items_equals(get_unique_label_values(quantile_stats, 'operation'), expected_operations,

0 commit comments

Comments
 (0)