Skip to content

Commit ab2cf16

Browse files
authored
Add dbname to mango exec stats (#4990)
* WIP: include dbname in mango exec stats * Don't output dbname in exec stats http response * Make sure mango nouveau logs reports * Test that mango reports get the dbname in the stats * With compliant formatting * Switch to adding exec stats dbname during create * Add stats to explain cursor * Add stats to mango cursor special * Fix mango special cursor test
1 parent 4643fec commit ab2cf16

8 files changed

+132
-33
lines changed

src/mango/src/mango_cursor.erl

+3-1
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,7 @@ create_cursor(Db, {[], Trace0}, Selector, Opts) ->
424424
Skip = couch_util:get_value(skip, Opts, 0),
425425
Fields = couch_util:get_value(fields, Opts, all_fields),
426426
Bookmark = couch_util:get_value(bookmark, Opts),
427+
Stats = mango_execution_stats:stats_init(couch_db:name(Db)),
427428
{ok, #cursor{
428429
db = Db,
429430
index = none,
@@ -433,7 +434,8 @@ create_cursor(Db, {[], Trace0}, Selector, Opts) ->
433434
limit = Limit,
434435
skip = Skip,
435436
fields = Fields,
436-
bookmark = Bookmark
437+
bookmark = Bookmark,
438+
execution_stats = Stats
437439
}};
438440
create_cursor(Db, {Indexes, Trace0}, Selector, Opts) ->
439441
Trace1 = maps:merge(Trace0, #{filtered_indexes => sets:from_list(Indexes)}),

src/mango/src/mango_cursor.hrl

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
fields = undefined,
2626
user_fun,
2727
user_acc,
28-
execution_stats = #execution_stats{},
28+
execution_stats,
2929
bookmark,
3030
bookmark_docid,
3131
bookmark_key

src/mango/src/mango_cursor_nouveau.erl

+6-1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ create(Db, {Indexes, Trace}, Selector, Opts) ->
5353
Skip = couch_util:get_value(skip, Opts, 0),
5454
Fields = couch_util:get_value(fields, Opts, all_fields),
5555

56+
Stats = mango_execution_stats:stats_init(couch_db:name(Db)),
57+
5658
{ok, #cursor{
5759
db = Db,
5860
index = Index,
@@ -62,7 +64,8 @@ create(Db, {Indexes, Trace}, Selector, Opts) ->
6264
opts = Opts,
6365
limit = Limit,
6466
skip = Skip,
65-
fields = Fields
67+
fields = Fields,
68+
execution_stats = Stats
6669
}}.
6770

6871
explain(Cursor) ->
@@ -128,6 +131,8 @@ execute(Cursor, UserFun, UserAcc) ->
128131
{FinalUserAcc0, Stats1} = mango_execution_stats:maybe_add_stats(
129132
Opts, UserFun, Stats0, FinalUserAcc
130133
),
134+
%% This needs Stats1 as log_end is called in maybe_add_stats
135+
mango_execution_stats:log_stats(Stats1),
131136
FinalUserAcc1 = mango_cursor:maybe_add_warning(UserFun, Cursor, Stats1, FinalUserAcc0),
132137
{ok, FinalUserAcc1}
133138
end.

src/mango/src/mango_cursor_special.erl

+19-3
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ create(Db, {Indexes, Trace0}, Selector, Opts) ->
4545
Skip = couch_util:get_value(skip, Opts, 0),
4646
Fields = couch_util:get_value(fields, Opts, all_fields),
4747
Bookmark = couch_util:get_value(bookmark, Opts),
48+
Stats = mango_execution_stats:stats_init(couch_db:name(Db)),
4849

4950
IndexRanges1 = mango_cursor:maybe_noop_range(Selector, IndexRanges),
5051
Trace = maps:merge(Trace0, #{sorted_index_ranges => SortedIndexRanges}),
@@ -59,7 +60,8 @@ create(Db, {Indexes, Trace0}, Selector, Opts) ->
5960
limit = Limit,
6061
skip = Skip,
6162
fields = Fields,
62-
bookmark = Bookmark
63+
bookmark = Bookmark,
64+
execution_stats = Stats
6365
}}.
6466

6567
explain(Cursor) ->
@@ -74,13 +76,26 @@ handle_message(Msg, Cursor) ->
7476
-ifdef(TEST).
7577
-include_lib("couch/include/couch_eunit.hrl").
7678

77-
create_test() ->
79+
create_test_() ->
80+
{
81+
foreach,
82+
fun() ->
83+
meck:expect(couch_db, name, fun(A) when is_atom(A) -> atom_to_binary(A) end)
84+
end,
85+
fun(_) -> meck:unload() end,
86+
[
87+
?TDEF_FE(t_create)
88+
]
89+
}.
90+
91+
t_create(_) ->
7892
Index = #idx{type = <<"special">>, def = all_docs},
7993
Indexes = [Index],
8094
Ranges = [{'$gt', null, '$lt', mango_json_max}],
8195
Trace = #{},
8296
Selector = {[]},
8397
Options = [{limit, limit}, {skip, skip}, {fields, fields}, {bookmark, bookmark}],
98+
Stats = mango_execution_stats:stats_init(couch_db:name(db)),
8499
Cursor =
85100
#cursor{
86101
db = db,
@@ -92,7 +107,8 @@ create_test() ->
92107
skip = skip,
93108
fields = fields,
94109
bookmark = bookmark,
95-
trace = #{sorted_index_ranges => [{Index, Ranges, 0}]}
110+
trace = #{sorted_index_ranges => [{Index, Ranges, 0}]},
111+
execution_stats = Stats
96112
},
97113
?assertEqual({ok, Cursor}, create(db, {Indexes, Trace}, Selector, Options)).
98114

src/mango/src/mango_cursor_text.erl

+17-8
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,9 @@ create(Db, {Indexes, Trace}, Selector, Opts0) ->
5050
?MANGO_ERROR(multiple_text_indexes)
5151
end,
5252

53-
Opts = unpack_bookmark(couch_db:name(Db), Opts0),
53+
DbName = couch_db:name(Db),
54+
Opts = unpack_bookmark(DbName, Opts0),
55+
Stats = mango_execution_stats:stats_init(DbName),
5456

5557
DreyfusLimit = get_dreyfus_limit(),
5658
Limit = erlang:min(DreyfusLimit, couch_util:get_value(limit, Opts, mango_opts:default_limit())),
@@ -66,7 +68,8 @@ create(Db, {Indexes, Trace}, Selector, Opts0) ->
6668
opts = Opts,
6769
limit = Limit,
6870
skip = Skip,
69-
fields = Fields
71+
fields = Fields,
72+
execution_stats = Stats
7073
}}.
7174

7275
explain(Cursor) ->
@@ -389,36 +392,42 @@ t_create_regular(_) ->
389392
Limit = 10,
390393
Options = [{limit, Limit}, {skip, skip}, {fields, fields}, {bookmark, bookmark}],
391394
Options1 = [{limit, Limit}, {skip, skip}, {fields, fields}, {bookmark, unpacked_bookmark}],
395+
Db = db,
396+
Stats = mango_execution_stats:stats_init(couch_db:name(Db)),
392397
Cursor = #cursor{
393-
db = db,
398+
db = Db,
394399
index = Index,
395400
ranges = null,
396401
trace = Trace,
397402
selector = selector,
398403
opts = Options1,
399404
limit = Limit,
400405
skip = skip,
401-
fields = fields
406+
fields = fields,
407+
execution_stats = Stats
402408
},
403409
meck:expect(dreyfus_bookmark, unpack, [db_name, bookmark], meck:val(unpacked_bookmark)),
404-
?assertEqual({ok, Cursor}, create(db, {Indexes, Trace}, selector, Options)).
410+
?assertEqual({ok, Cursor}, create(Db, {Indexes, Trace}, selector, Options)).
405411

406412
t_create_no_bookmark(_) ->
407413
Limit = 99,
408414
Options = [{limit, Limit}, {skip, skip}, {fields, fields}, {bookmark, nil}],
409415
Options1 = [{limit, Limit}, {skip, skip}, {fields, fields}, {bookmark, []}],
416+
Db = db,
417+
Stats = mango_execution_stats:stats_init(couch_db:name(Db)),
410418
Cursor = #cursor{
411-
db = db,
419+
db = Db,
412420
index = index,
413421
ranges = null,
414422
trace = trace,
415423
selector = selector,
416424
opts = Options1,
417425
limit = Limit,
418426
skip = skip,
419-
fields = fields
427+
fields = fields,
428+
execution_stats = Stats
420429
},
421-
?assertEqual({ok, Cursor}, create(db, {[index], trace}, selector, Options)).
430+
?assertEqual({ok, Cursor}, create(Db, {[index], trace}, selector, Options)).
422431

423432
t_create_invalid_bookmark(_) ->
424433
Options = [{bookmark, invalid}],

0 commit comments

Comments
 (0)