This is an automated email from the ASF dual-hosted git repository. iilyak pushed a commit to branch couch-stats-resource-tracker-v3-rebase-http-4 in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 660c9afdf0370b2171fd92a98d0d5413a09199a4 Author: ILYA Khlopotov <[email protected]> AuthorDate: Wed Jun 25 07:49:54 2025 -0700 Replace csrt_util:map_to_rctx/1 with csrt_entry:from_map/1 --- src/couch_stats/src/csrt_entry.erl | 51 +++++++++++++++++++++++- src/couch_stats/src/csrt_util.erl | 50 ----------------------- src/couch_stats/test/eunit/csrt_logger_tests.erl | 2 +- 3 files changed, 51 insertions(+), 52 deletions(-) diff --git a/src/couch_stats/src/csrt_entry.erl b/src/couch_stats/src/csrt_entry.erl index 61949c65f..263572341 100644 --- a/src/couch_stats/src/csrt_entry.erl +++ b/src/couch_stats/src/csrt_entry.erl @@ -17,7 +17,8 @@ -export([ value/2, - key/1 + key/1, + from_map/1 ]). -spec value(#rctx{}, rctx_field()) -> any(). @@ -92,3 +93,51 @@ key_from_binary(Other) -> key_error(Other). key_error(Key) -> {error, {invalid_key, Key}}. +-spec from_map(Map :: map()) -> rctx(). + +from_map(Map) -> + maps:fold(fun set_field/3, #rctx{}, Map). + +-spec set_field(Field :: rctx_field(), Val :: any(), Rctx :: rctx()) -> rctx(). +set_field(updated_at, Val, Rctx) -> + Rctx#rctx{updated_at = Val}; +set_field(started_at, Val, Rctx) -> + Rctx#rctx{started_at = Val}; +set_field(pid_ref, Val, Rctx) -> + Rctx#rctx{pid_ref = Val}; +set_field(nonce, Val, Rctx) -> + Rctx#rctx{nonce = Val}; +set_field(dbname, Val, Rctx) -> + Rctx#rctx{dbname = Val}; +set_field(username, Val, Rctx) -> + Rctx#rctx{username = Val}; +set_field(db_open, Val, Rctx) -> + Rctx#rctx{db_open = Val}; +set_field(docs_read, Val, Rctx) -> + Rctx#rctx{docs_read = Val}; +set_field(docs_written, Val, Rctx) -> + Rctx#rctx{docs_written = Val}; +set_field(js_filter, Val, Rctx) -> + Rctx#rctx{js_filter = Val}; +set_field(js_filtered_docs, Val, Rctx) -> + Rctx#rctx{js_filtered_docs = Val}; +set_field(rows_read, Val, Rctx) -> + Rctx#rctx{rows_read = Val}; +set_field(type, Val, Rctx) -> + Rctx#rctx{type = Val}; +set_field(get_kp_node, Val, Rctx) -> + Rctx#rctx{get_kp_node = Val}; +set_field(get_kv_node, Val, Rctx) -> + Rctx#rctx{get_kv_node = Val}; +%% "Example to extend CSRT" +%% set_field(write_kp_node, Val, Rctx) -> +%% Rctx#rctx{write_kp_node = Val}; +%% set_field(write_kv_node, Val, Rctx) -> +%% Rctx#rctx{write_kv_node = Val}; +set_field(changes_returned, Val, Rctx) -> + Rctx#rctx{changes_returned = Val}; +set_field(ioq_calls, Val, Rctx) -> + Rctx#rctx{ioq_calls = Val}; +set_field(_, _, Rctx) -> + %% Unknown key, could throw but just move on + Rctx. diff --git a/src/couch_stats/src/csrt_util.erl b/src/couch_stats/src/csrt_util.erl index 4da5dc610..21bfd8e7d 100644 --- a/src/couch_stats/src/csrt_util.erl +++ b/src/couch_stats/src/csrt_util.erl @@ -57,7 +57,6 @@ -export([ set_fabric_init_p/2, set_fabric_init_p/3, - map_to_rctx/1, rctx_record_info/0 ]). @@ -226,55 +225,6 @@ to_json(#rctx{} = Rctx) -> ioq_calls => Rctx#rctx.ioq_calls }. -%% NOTE: this does not do the inverse of to_json, should it convert types? --spec map_to_rctx(Map :: map()) -> rctx(). -map_to_rctx(Map) -> - maps:fold(fun map_to_rctx_field/3, #rctx{}, Map). - --spec map_to_rctx_field(Field :: rctx_field(), Val :: any(), Rctx :: rctx()) -> rctx(). -map_to_rctx_field(updated_at, Val, Rctx) -> - Rctx#rctx{updated_at = Val}; -map_to_rctx_field(started_at, Val, Rctx) -> - Rctx#rctx{started_at = Val}; -map_to_rctx_field(pid_ref, Val, Rctx) -> - Rctx#rctx{pid_ref = Val}; -map_to_rctx_field(nonce, Val, Rctx) -> - Rctx#rctx{nonce = Val}; -map_to_rctx_field(dbname, Val, Rctx) -> - Rctx#rctx{dbname = Val}; -map_to_rctx_field(username, Val, Rctx) -> - Rctx#rctx{username = Val}; -map_to_rctx_field(db_open, Val, Rctx) -> - Rctx#rctx{db_open = Val}; -map_to_rctx_field(docs_read, Val, Rctx) -> - Rctx#rctx{docs_read = Val}; -map_to_rctx_field(docs_written, Val, Rctx) -> - Rctx#rctx{docs_written = Val}; -map_to_rctx_field(js_filter, Val, Rctx) -> - Rctx#rctx{js_filter = Val}; -map_to_rctx_field(js_filtered_docs, Val, Rctx) -> - Rctx#rctx{js_filtered_docs = Val}; -map_to_rctx_field(rows_read, Val, Rctx) -> - Rctx#rctx{rows_read = Val}; -map_to_rctx_field(type, Val, Rctx) -> - Rctx#rctx{type = Val}; -map_to_rctx_field(get_kp_node, Val, Rctx) -> - Rctx#rctx{get_kp_node = Val}; -map_to_rctx_field(get_kv_node, Val, Rctx) -> - Rctx#rctx{get_kv_node = Val}; -%% "Example to extend CSRT" -%% map_to_rctx_field(write_kp_node, Val, Rctx) -> -%% Rctx#rctx{write_kp_node = Val}; -%% map_to_rctx_field(write_kv_node, Val, Rctx) -> -%% Rctx#rctx{write_kv_node = Val}; -map_to_rctx_field(changes_returned, Val, Rctx) -> - Rctx#rctx{changes_returned = Val}; -map_to_rctx_field(ioq_calls, Val, Rctx) -> - Rctx#rctx{ioq_calls = Val}; -map_to_rctx_field(_, _, Rctx) -> - %% Unknown key, could throw but just move on - Rctx. - -spec add_delta(T :: term(), Delta :: maybe_delta()) -> term_delta(). add_delta(T, undefined) -> T; diff --git a/src/couch_stats/test/eunit/csrt_logger_tests.erl b/src/couch_stats/test/eunit/csrt_logger_tests.erl index 74c88590b..484817313 100644 --- a/src/couch_stats/test/eunit/csrt_logger_tests.erl +++ b/src/couch_stats/test/eunit/csrt_logger_tests.erl @@ -170,7 +170,7 @@ rctx_gen(Opts0) -> '_do_changes' => true }, Opts = maps:merge(Base, Opts0), - csrt_util:map_to_rctx( + csrt_entry:from_map( maps:fold( fun %% Hack for changes because we need to modify both
