diff --git a/core/include/dap_common.h b/core/include/dap_common.h index f97fe1acd3ecc6240afee2a25b593bfd8ec22401..9af6174c5007f37c07c5b276b97ecf5567a0461a 100755 --- a/core/include/dap_common.h +++ b/core/include/dap_common.h @@ -471,6 +471,9 @@ typedef enum dap_log_level { L_ERROR = 7, L_CRITICAL = 8, L_TOTAL, +#ifdef DAP_TPS_TEST + L_TPS = 15, +#endif } dap_log_level_t; diff --git a/core/src/dap_common.c b/core/src/dap_common.c index d43ef6e5aa6cecf43ce28c6490121a183151a97c..acae11e5bb17887353c1232b923f823998f9b620 100755 --- a/core/src/dap_common.c +++ b/core/src/dap_common.c @@ -95,7 +95,11 @@ static const char *s_log_level_tag[ 16 ] = { " [---] ", // = 12 " [---] ", // = 13 " [---] ", // = 14 +#ifdef DAP_TPS_TEST + " [TPS] ", // L_TPS = 15 +#else " [---] ", // = 15 +#endif }; const char *s_ansi_seq_color[ 16 ] = { @@ -115,7 +119,11 @@ const char *s_ansi_seq_color[ 16 ] = { "", // = 12 "", // = 13 "", // = 14 +#ifdef DAP_TPS_TEST + "\x1b[1;32;40m", // L_TPS = 15, +#else "", // = 15 +#endif }; static unsigned int s_ansi_seq_color_len[16] = {0}; @@ -388,6 +396,15 @@ static void print_it(unsigned a_off, const char *a_fmt, va_list va) { void _log_it(const char * func_name, int line_num, const char *a_log_tag, enum dap_log_level a_ll, const char *a_fmt, ...) { if ( a_ll < s_dap_log_level || a_ll >= 16 || !a_log_tag ) return; +#ifdef DAP_TPS_TEST + if (a_ll != L_TPS) { + FILE *l_file = fopen("/opt/cellframe-node/share/ca/without_logs.txt", "r"); + if (l_file) { + fclose(l_file); + return; + } + } +#endif static _Thread_local char s_format[LOG_FORMAT_LEN] = { '\0' }; unsigned offset = s_ansi_seq_color_len[a_ll]; memcpy(s_format, s_ansi_seq_color[a_ll], offset); diff --git a/global-db/dap_global_db.c b/global-db/dap_global_db.c index f0c02bdd2f314973a87c18424942f3d36d481923..e73f920cc732fc9afc703ec8076ff7302b0db4ab 100644 --- a/global-db/dap_global_db.c +++ b/global-db/dap_global_db.c @@ -1193,6 +1193,11 @@ static void s_msg_opcode_set_multiple_zc(struct queue_io_msg * a_msg) { int l_ret = 0; size_t i=0; +#ifdef DAP_TPS_TEST + FILE *l_mempool_file = fopen("/opt/cellframe-node/share/ca/mempool_start.txt", "a"); + fclose(l_mempool_file); + log_it(L_TPS, "Start write %zu records to mempool", a_msg->values_count); +#endif if(a_msg->values_count>0) { dap_store_obj_t l_store_obj = {}; for(; i < a_msg->values_count && l_ret == 0 ; i++ ) { @@ -1206,6 +1211,11 @@ static void s_msg_opcode_set_multiple_zc(struct queue_io_msg * a_msg) a_msg->values, a_msg->callback_arg); } dap_global_db_objs_delete( a_msg->values, a_msg->values_count); +#ifdef DAP_TPS_TEST + l_mempool_file = fopen("/opt/cellframe-node/share/ca/mempool_finish.txt", "a"); + fclose(l_mempool_file); + log_it(L_TPS, "Finish write %zu records to mempool ", a_msg->values_count); +#endif } /* *** Pin/unpin functions group *** */ diff --git a/global-db/dap_global_db_driver_sqlite.c b/global-db/dap_global_db_driver_sqlite.c index 30ebb641e14aa7a406e487bf5b6df6acd9f947b6..20c8ffdf9ac2604c99f4619c7c83150f5a85ac1b 100644 --- a/global-db/dap_global_db_driver_sqlite.c +++ b/global-db/dap_global_db_driver_sqlite.c @@ -464,13 +464,12 @@ static dap_global_db_pkt_pack_t *s_db_sqlite_get_by_hash(const char *a_group, da char *l_str_query_count = sqlite3_mprintf("SELECT COUNT(*) FROM '%s' " " WHERE driver_key IN (%s)", l_table_name, l_blob_str); - char *l_str_query_size = sqlite3_mprintf("SELECT SUM(LENGTH(key) + LENGTH(value) + LENGTH(sign)) FROM '%s' " + char *l_str_query_size = sqlite3_mprintf("SELECT SUM(LENGTH(key)) + SUM(LENGTH(value)) + SUM(LENGTH(sign)) FROM '%s' " " WHERE driver_key IN (%s)", l_table_name, l_blob_str); char *l_str_query = sqlite3_mprintf("SELECT * FROM '%s'" " WHERE driver_key IN (%s) ORDER BY driver_key", l_table_name, l_blob_str); - DAP_DEL_MULTY(l_table_name, l_blob_str); if (!l_str_query_count || !l_str_query) { log_it(L_ERROR, "Error in SQL request forming"); goto clean_and_ret; @@ -506,7 +505,7 @@ static dap_global_db_pkt_pack_t *s_db_sqlite_get_by_hash(const char *a_group, da size_t l_data_size = l_count * (sizeof(dap_global_db_pkt_t) + l_group_name_len + 1) + l_size; DAP_NEW_Z_SIZE_RET_VAL(l_ret, dap_global_db_pkt_pack_t, sizeof(dap_global_db_pkt_pack_t) + l_data_size, NULL, l_str_query_count, l_str_query); // data forming - for (size_t i = 0; i < l_count && s_db_sqlite_step(l_stmt) == SQLITE_ROW; ++i) { + for (size_t i = 0; i < l_count && l_ret->data_size < l_data_size && s_db_sqlite_step(l_stmt) == SQLITE_ROW; ++i) { dap_global_db_pkt_t *l_cur_pkt = (dap_global_db_pkt_t *)(l_ret->data + l_ret->data_size); size_t l_count_col = sqlite3_column_count(l_stmt); l_cur_pkt->group_len = l_group_name_len; @@ -522,8 +521,9 @@ static dap_global_db_pkt_pack_t *s_db_sqlite_get_by_hash(const char *a_group, da continue; } if (j == 1 && sqlite3_column_type(l_stmt, j) == SQLITE_TEXT) { - l_cur_pkt->key_len = sqlite3_column_bytes(l_stmt, j) + 1; + l_cur_pkt->key_len = sqlite3_column_bytes(l_stmt, j); memcpy(l_cur_pkt->data + l_cur_pkt->data_len, sqlite3_column_text(l_stmt, j), l_cur_pkt->key_len); + l_cur_pkt->key_len++; l_cur_pkt->data_len += l_cur_pkt->key_len; continue; } @@ -539,9 +539,13 @@ static dap_global_db_pkt_pack_t *s_db_sqlite_get_by_hash(const char *a_group, da continue; } if (j == 4 && sqlite3_column_type(l_stmt, j) == SQLITE_BLOB) { - if (sqlite3_column_bytes(l_stmt, j)) { + size_t l_sign_size = sqlite3_column_bytes(l_stmt, j); + if (l_sign_size) { dap_sign_t *l_sign = (dap_sign_t *)sqlite3_column_blob(l_stmt, j); - size_t l_sign_size = dap_sign_get_size(l_sign); + if (l_sign_size != dap_sign_get_size(l_sign)) { + log_it(L_ERROR, "Wrong sign size from global_db"); + goto clean_and_ret; + } memcpy(l_cur_pkt->data + l_cur_pkt->data_len, sqlite3_column_blob(l_stmt, j), l_sign_size); l_cur_pkt->data_len += l_sign_size; } @@ -556,6 +560,7 @@ static dap_global_db_pkt_pack_t *s_db_sqlite_get_by_hash(const char *a_group, da } clean_and_ret: s_db_sqlite_clean(l_conn, 3, l_str_query, l_str_query_count, l_str_query_size, l_stmt, l_stmt_count, l_stmt_size); + DAP_DEL_MULTY(l_table_name, l_blob_str); return l_ret; }