diff --git a/src/box/box.cc b/src/box/box.cc index a3c71885ad102c746e47d7f77d9f2d96831f834a..b635f12c58eb1f99be4002690603679f9e4691bc 100644 --- a/src/box/box.cc +++ b/src/box/box.cc @@ -784,7 +784,10 @@ box_check_flightrec(void) cfg_geti64("flightrec_logs_max_msg_size"), cfg_geti("flightrec_logs_log_level"), cfg_getd("flightrec_metrics_interval"), - cfg_geti64("flightrec_metrics_period")) != 0) + cfg_geti64("flightrec_metrics_period"), + cfg_geti64("flightrec_requests_size"), + cfg_geti64("flightrec_requests_max_req_size"), + cfg_geti64("flightrec_requests_max_res_size")) != 0) diag_raise(); } diff --git a/src/box/flightrec.h b/src/box/flightrec.h index 566e7cad7afc6efa9acc99c6520276a3f3c97575..0544e071e7255969a136cfde4d399a1f9f7f3e2a 100644 --- a/src/box/flightrec.h +++ b/src/box/flightrec.h @@ -25,7 +25,9 @@ extern "C" { static inline void flightrec_init(const char *fr_dirname, size_t logs_size, size_t logs_max_msg_size, int logs_log_level, - double metrics_interval, size_t metrics_period) + double metrics_interval, size_t metrics_period, + size_t requests_size, size_t requests_max_req_size, + size_t requests_max_res_size) { (void)fr_dirname; (void)logs_size; @@ -33,6 +35,9 @@ flightrec_init(const char *fr_dirname, size_t logs_size, (void)logs_log_level; (void)metrics_interval; (void)metrics_period; + (void)requests_size; + (void)requests_max_req_size; + (void)requests_max_res_size; say_error("Flight recorder is not available in this build"); } @@ -46,16 +51,40 @@ flightrec_free(void) static inline int flightrec_check_cfg(int64_t logs_size, int64_t logs_max_msg_size, int logs_log_level, double metrics_interval, - int64_t metrics_period) + int64_t metrics_period, int64_t requests_size, + int64_t requests_max_req_size, + int64_t requests_max_res_size) { (void)logs_size; (void)logs_max_msg_size; (void)logs_log_level; (void)metrics_interval; (void)metrics_period; + (void)requests_size; + (void)requests_max_req_size; + (void)requests_max_res_size; return 0; } +/** No-op in OS version. */ +static inline void +flightrec_write_request(char *request_mspack, size_t len) +{ + (void)request_mspack; + (void)len; +} + +struct obuf; +struct obuf_svp; + +/** No-op in OS version. */ +static inline void +flightrec_write_response(struct obuf *buf, struct obuf_svp *svp) +{ + (void)buf; + (void)svp; +} + #if defined(__cplusplus) } /* extern "C" */ #endif /* defined(__cplusplus) */ diff --git a/src/box/iproto.cc b/src/box/iproto.cc index 78815938d2f88241658b1cc47daf42f5f4f6d42b..8a457239ad39a70124d7453b31a44edac9296104 100644 --- a/src/box/iproto.cc +++ b/src/box/iproto.cc @@ -70,6 +70,7 @@ #include "assoc.h" #include "txn.h" #include "on_shutdown.h" +#include "flightrec.h" enum { IPROTO_SALT_SIZE = 32, @@ -1883,6 +1884,7 @@ tx_accept_msg(struct cmsg *m) msg->connection->iproto_thread->tx.requests_in_progress++; rmean_collect(msg->connection->iproto_thread->tx.rmean, REQUESTS_IN_PROGRESS, 1); + flightrec_write_request(msg->p_ibuf->rpos, msg->len); return msg; } @@ -1894,7 +1896,9 @@ tx_end_msg(struct iproto_msg *msg, struct obuf_svp *svp) msg->stream->txn = txn_detach(); } msg->connection->iproto_thread->tx.requests_in_progress--; - (void)svp; + /* Log response to the flight recorder. */ + struct obuf *out = msg->connection->tx.p_obuf; + flightrec_write_response(out, svp); } /** diff --git a/src/box/lua/load_cfg.lua b/src/box/lua/load_cfg.lua index 50d0b4f9f167b8128a85c4697960a1f0c3cf4b99..11cc52aff50d0d11d0c11e9e84e9a7181165fc66 100644 --- a/src/box/lua/load_cfg.lua +++ b/src/box/lua/load_cfg.lua @@ -79,6 +79,9 @@ local default_cfg = { flightrec_logs_log_level = 6, flightrec_metrics_interval = 1.0, flightrec_metrics_period = 60 * 3, + flightrec_requests_size = 10485760, + flightrec_requests_max_req_size = 16384, + flightrec_requests_max_res_size = 16384, io_collect_interval = nil, readahead = 16320, @@ -202,6 +205,9 @@ local template_cfg = { flightrec_logs_log_level = 'number', flightrec_metrics_interval = 'number', flightrec_metrics_period = 'number', + flightrec_requests_size = 'number', + flightrec_requests_max_req_size = 'number', + flightrec_requests_max_res_size = 'number', io_collect_interval = 'number', readahead = 'number', diff --git a/src/main.cc b/src/main.cc index ffef0eb51f3051a4838ce99a8a30ceebcbdfed8c..a424073ed98e6f6378808d8c25ccc8548155b6ee 100644 --- a/src/main.cc +++ b/src/main.cc @@ -473,7 +473,10 @@ load_cfg(void) cfg_geti64("flightrec_logs_max_msg_size"), cfg_geti("flightrec_logs_log_level"), cfg_getd("flightrec_metrics_interval"), - cfg_geti("flightrec_metrics_period")); + cfg_geti("flightrec_metrics_period"), + cfg_geti("flightrec_requests_size"), + cfg_geti("flightrec_requests_max_req_size"), + cfg_geti("flightrec_requests_max_res_size")); } memtx_tx_manager_use_mvcc_engine = cfg_getb("memtx_use_mvcc_engine"); diff --git a/test/app-tap/init_script.result b/test/app-tap/init_script.result index ad79f6598a8ef62ecb05b96a0dc8a98272247ab3..d987b253d70573a55c8e80b9cb028cbd764ab218 100644 --- a/test/app-tap/init_script.result +++ b/test/app-tap/init_script.result @@ -24,6 +24,9 @@ flightrec_logs_max_msg_size:4096 flightrec_logs_size:10485760 flightrec_metrics_interval:1 flightrec_metrics_period:180 +flightrec_requests_max_req_size:16384 +flightrec_requests_max_res_size:16384 +flightrec_requests_size:10485760 force_recovery:false hot_standby:false iproto_threads:1 diff --git a/test/box/admin.result b/test/box/admin.result index e5fabc47530cb1ca1e04705e7e56240644bcf580..e77289e9488dec3a9cb8b664e7deba3df4aa3faf 100644 --- a/test/box/admin.result +++ b/test/box/admin.result @@ -69,6 +69,12 @@ cfg_filter(box.cfg) - 1 - - flightrec_metrics_period - 180 + - - flightrec_requests_max_req_size + - 16384 + - - flightrec_requests_max_res_size + - 16384 + - - flightrec_requests_size + - 10485760 - - force_recovery - false - - hot_standby diff --git a/test/box/cfg.result b/test/box/cfg.result index 8112032ce2f23eefe6f78a9783691d839a29d33c..c4e30fcecec6a99c8900f446e2e817b59c1c584d 100644 --- a/test/box/cfg.result +++ b/test/box/cfg.result @@ -57,6 +57,12 @@ cfg_filter(box.cfg) | - 1 | - - flightrec_metrics_period | - 180 + | - - flightrec_requests_max_req_size + | - 16384 + | - - flightrec_requests_max_res_size + | - 16384 + | - - flightrec_requests_size + | - 10485760 | - - force_recovery | - false | - - hot_standby @@ -210,6 +216,12 @@ cfg_filter(box.cfg) | - 1 | - - flightrec_metrics_period | - 180 + | - - flightrec_requests_max_req_size + | - 16384 + | - - flightrec_requests_max_res_size + | - 16384 + | - - flightrec_requests_size + | - 10485760 | - - force_recovery | - false | - - hot_standby