From 03e1664de72ef32f5678746adfa77fe07b284e00 Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Thu, 18 Feb 2021 17:16:43 +0800 Subject: [PATCH 1/8] [TD-2984] : combine taosdemo and taosdemox. --- src/kit/taosdemox/taosdemox.c | 53 ++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/src/kit/taosdemox/taosdemox.c b/src/kit/taosdemox/taosdemox.c index deb2a47645..a73fc726e1 100644 --- a/src/kit/taosdemox/taosdemox.c +++ b/src/kit/taosdemox/taosdemox.c @@ -5072,6 +5072,18 @@ int main(int argc, char *argv[]) { printf("Failed to read %s\n", g_args.metaFile); return 1; } + if (INSERT_MODE == g_jsonType) { + if (g_Dbs.cfgDir[0]) taos_options(TSDB_OPTION_CONFIGDIR, g_Dbs.cfgDir); + (void)insertTestProcess(); + } else if (QUERY_MODE == g_jsonType) { + if (g_queryInfo.cfgDir[0]) taos_options(TSDB_OPTION_CONFIGDIR, g_queryInfo.cfgDir); + (void)queryTestProcess(); + } else if (SUBSCRIBE_MODE == g_jsonType) { + if (g_queryInfo.cfgDir[0]) taos_options(TSDB_OPTION_CONFIGDIR, g_queryInfo.cfgDir); + (void)subscribeTestProcess(); + } else { + ; + } } else { memset(&g_Dbs, 0, sizeof(SDbs)); @@ -5079,7 +5091,8 @@ int main(int argc, char *argv[]) { setParaFromArg(); if (NULL != g_args.sqlFile) { - TAOS* qtaos = taos_connect(g_Dbs.host, g_Dbs.user, g_Dbs.password, g_Dbs.db[0].dbName, g_Dbs.port); + TAOS* qtaos = taos_connect( + g_Dbs.host, g_Dbs.user, g_Dbs.password, g_Dbs.db[0].dbName, g_Dbs.port); querySqlFile(qtaos, g_args.sqlFile); taos_close(qtaos); return 0; @@ -5089,22 +5102,28 @@ int main(int argc, char *argv[]) { if (g_Dbs.insert_only) return 0; // select - - //printf("At present, there is no integration of taosdemo, please wait patiently!\n"); - return 0; - } - - if (INSERT_MODE == g_jsonType) { - if (g_Dbs.cfgDir[0]) taos_options(TSDB_OPTION_CONFIGDIR, g_Dbs.cfgDir); - (void)insertTestProcess(); - } else if (QUERY_MODE == g_jsonType) { - if (g_queryInfo.cfgDir[0]) taos_options(TSDB_OPTION_CONFIGDIR, g_queryInfo.cfgDir); - (void)queryTestProcess(); - } else if (SUBSCRIBE_MODE == g_jsonType) { - if (g_queryInfo.cfgDir[0]) taos_options(TSDB_OPTION_CONFIGDIR, g_queryInfo.cfgDir); - (void)subscribeTestProcess(); - } else { - ; + if (false == insert_only) { + // query data + pthread_t read_id; + info *rInfo = malloc(sizeof(info)); + rInfo->start_time = 1500000000000; + rInfo->start_table_id = 0; + rInfo->end_table_id = ntables - 1; + rInfo->do_aggreFunc = do_aggreFunc; + rInfo->nrecords_per_table = nrecords_per_table; + rInfo->taos = taos_connect(ip_addr, user, pass, db_name, port); + strcpy(rInfo->tb_prefix, tb_prefix); + strcpy(rInfo->fp, arguments.output_file); + + if (!use_metric) { + pthread_create(&read_id, NULL, readTable, rInfo); + } else { + pthread_create(&read_id, NULL, readMetric, rInfo); + } + pthread_join(read_id, NULL); + taos_close(rInfo->taos); + free(rInfo); + } } taos_cleanup(); From f2fc2fe82ef548d92d885f6aa7e2d721c7af09a6 Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Fri, 19 Feb 2021 06:35:49 +0000 Subject: [PATCH 2/8] [TD-2984] : combine taosdemo and taosdemox. --- packaging/deb/DEBIAN/prerm | 1 - packaging/deb/makedeb.sh | 1 - packaging/rpm/tdengine.spec | 2 - packaging/tools/install.sh | 2 - packaging/tools/install_client.sh | 2 - packaging/tools/install_client_power.sh | 2 - packaging/tools/install_power.sh | 2 - packaging/tools/makeclient.sh | 2 +- packaging/tools/makeclient_power.sh | 1 - packaging/tools/makepkg.sh | 2 +- packaging/tools/makepkg_power.sh | 1 - packaging/tools/post.sh | 2 - packaging/tools/remove.sh | 1 - packaging/tools/remove_client.sh | 1 - packaging/tools/remove_client_power.sh | 1 - packaging/tools/remove_power.sh | 1 - src/kit/CMakeLists.txt | 1 - src/kit/taosdemo/CMakeLists.txt | 46 +- src/kit/{taosdemox => taosdemo}/insert.json | 0 src/kit/{taosdemox => taosdemo}/query.json | 0 .../{taosdemox => taosdemo}/subscribe.json | 0 src/kit/taosdemo/taosdemo.c | 6132 +++++++++++++---- src/kit/taosdemox/CMakeLists.txt | 47 - src/kit/taosdemox/taosdemox.c | 5132 -------------- ...taosdemoxWrapper.py => taosdemoWrapper.py} | 10 +- tests/pytest/tools/lowaTest.py | 2 +- 26 files changed, 4885 insertions(+), 6509 deletions(-) rename src/kit/{taosdemox => taosdemo}/insert.json (100%) rename src/kit/{taosdemox => taosdemo}/query.json (100%) rename src/kit/{taosdemox => taosdemo}/subscribe.json (100%) delete mode 100644 src/kit/taosdemox/CMakeLists.txt delete mode 100644 src/kit/taosdemox/taosdemox.c rename tests/pytest/cluster/clusterEnvSetup/{taosdemoxWrapper.py => taosdemoWrapper.py} (92%) diff --git a/packaging/deb/DEBIAN/prerm b/packaging/deb/DEBIAN/prerm index 3d57ece2ad..d24502a1cb 100644 --- a/packaging/deb/DEBIAN/prerm +++ b/packaging/deb/DEBIAN/prerm @@ -26,7 +26,6 @@ else ${csudo} rm -f ${bin_link_dir}/taos || : ${csudo} rm -f ${bin_link_dir}/taosd || : ${csudo} rm -f ${bin_link_dir}/taosdemo || : - ${csudo} rm -f ${bin_link_dir}/taosdemox || : ${csudo} rm -f ${bin_link_dir}/taosdump || : ${csudo} rm -f ${cfg_link_dir}/* || : ${csudo} rm -f ${inc_link_dir}/taos.h || : diff --git a/packaging/deb/makedeb.sh b/packaging/deb/makedeb.sh index 850c636940..36870b2ebe 100755 --- a/packaging/deb/makedeb.sh +++ b/packaging/deb/makedeb.sh @@ -51,7 +51,6 @@ cp ${compile_dir}/../packaging/tools/startPre.sh ${pkg_dir}${install_home_pat cp ${compile_dir}/../packaging/tools/set_core.sh ${pkg_dir}${install_home_path}/bin cp ${compile_dir}/../packaging/tools/taosd-dump-cfg.gdb ${pkg_dir}${install_home_path}/bin cp ${compile_dir}/build/bin/taosdemo ${pkg_dir}${install_home_path}/bin -cp ${compile_dir}/build/bin/taosdemox ${pkg_dir}${install_home_path}/bin cp ${compile_dir}/build/bin/taosdump ${pkg_dir}${install_home_path}/bin cp ${compile_dir}/build/bin/taosd ${pkg_dir}${install_home_path}/bin cp ${compile_dir}/build/bin/taos ${pkg_dir}${install_home_path}/bin diff --git a/packaging/rpm/tdengine.spec b/packaging/rpm/tdengine.spec index d20a6c91cd..cd0e3c32ef 100644 --- a/packaging/rpm/tdengine.spec +++ b/packaging/rpm/tdengine.spec @@ -61,7 +61,6 @@ cp %{_compiledir}/../packaging/tools/taosd-dump-cfg.gdb %{buildroot}%{homepat cp %{_compiledir}/build/bin/taos %{buildroot}%{homepath}/bin cp %{_compiledir}/build/bin/taosd %{buildroot}%{homepath}/bin cp %{_compiledir}/build/bin/taosdemo %{buildroot}%{homepath}/bin -cp %{_compiledir}/build/bin/taosdemox %{buildroot}%{homepath}/bin cp %{_compiledir}/build/bin/taosdump %{buildroot}%{homepath}/bin cp %{_compiledir}/build/lib/${libfile} %{buildroot}%{homepath}/driver cp %{_compiledir}/../src/inc/taos.h %{buildroot}%{homepath}/include @@ -139,7 +138,6 @@ if [ $1 -eq 0 ];then ${csudo} rm -f ${bin_link_dir}/taos || : ${csudo} rm -f ${bin_link_dir}/taosd || : ${csudo} rm -f ${bin_link_dir}/taosdemo || : - ${csudo} rm -f ${bin_link_dir}/taosdemox || : ${csudo} rm -f ${bin_link_dir}/taosdump || : ${csudo} rm -f ${cfg_link_dir}/* || : ${csudo} rm -f ${inc_link_dir}/taos.h || : diff --git a/packaging/tools/install.sh b/packaging/tools/install.sh index 0fed7b531f..dca3dd2ff6 100755 --- a/packaging/tools/install.sh +++ b/packaging/tools/install.sh @@ -179,7 +179,6 @@ function install_bin() { ${csudo} rm -f ${bin_link_dir}/taos || : ${csudo} rm -f ${bin_link_dir}/taosd || : ${csudo} rm -f ${bin_link_dir}/taosdemo || : - ${csudo} rm -f ${bin_link_dir}/taosdemox || : ${csudo} rm -f ${bin_link_dir}/taosdump || : ${csudo} rm -f ${bin_link_dir}/rmtaos || : ${csudo} rm -f ${bin_link_dir}/tarbitrator || : @@ -191,7 +190,6 @@ function install_bin() { [ -x ${install_main_dir}/bin/taos ] && ${csudo} ln -s ${install_main_dir}/bin/taos ${bin_link_dir}/taos || : [ -x ${install_main_dir}/bin/taosd ] && ${csudo} ln -s ${install_main_dir}/bin/taosd ${bin_link_dir}/taosd || : [ -x ${install_main_dir}/bin/taosdemo ] && ${csudo} ln -s ${install_main_dir}/bin/taosdemo ${bin_link_dir}/taosdemo || : - [ -x ${install_main_dir}/bin/taosdemox ] && ${csudo} ln -s ${install_main_dir}/bin/taosdemox ${bin_link_dir}/taosdemox || : [ -x ${install_main_dir}/bin/taosdump ] && ${csudo} ln -s ${install_main_dir}/bin/taosdump ${bin_link_dir}/taosdump || : [ -x ${install_main_dir}/bin/remove.sh ] && ${csudo} ln -s ${install_main_dir}/bin/remove.sh ${bin_link_dir}/rmtaos || : [ -x ${install_main_dir}/bin/set_core.sh ] && ${csudo} ln -s ${install_main_dir}/bin/set_core.sh ${bin_link_dir}/set_core || : diff --git a/packaging/tools/install_client.sh b/packaging/tools/install_client.sh index d52428dc83..0a0a6633e3 100755 --- a/packaging/tools/install_client.sh +++ b/packaging/tools/install_client.sh @@ -86,7 +86,6 @@ function install_bin() { ${csudo} rm -f ${bin_link_dir}/taos || : if [ "$osType" != "Darwin" ]; then ${csudo} rm -f ${bin_link_dir}/taosdemo || : - ${csudo} rm -f ${bin_link_dir}/taosdemox || : ${csudo} rm -f ${bin_link_dir}/taosdump || : fi ${csudo} rm -f ${bin_link_dir}/rmtaos || : @@ -98,7 +97,6 @@ function install_bin() { [ -x ${install_main_dir}/bin/taos ] && ${csudo} ln -s ${install_main_dir}/bin/taos ${bin_link_dir}/taos || : if [ "$osType" != "Darwin" ]; then [ -x ${install_main_dir}/bin/taosdemo ] && ${csudo} ln -s ${install_main_dir}/bin/taosdemo ${bin_link_dir}/taosdemo || : - [ -x ${install_main_dir}/bin/taosdemox ] && ${csudo} ln -s ${install_main_dir}/bin/taosdemox ${bin_link_dir}/taosdemox || : [ -x ${install_main_dir}/bin/taosdump ] && ${csudo} ln -s ${install_main_dir}/bin/taosdump ${bin_link_dir}/taosdump || : fi [ -x ${install_main_dir}/bin/remove_client.sh ] && ${csudo} ln -s ${install_main_dir}/bin/remove_client.sh ${bin_link_dir}/rmtaos || : diff --git a/packaging/tools/install_client_power.sh b/packaging/tools/install_client_power.sh index 04fd23d5ab..8d7463366f 100755 --- a/packaging/tools/install_client_power.sh +++ b/packaging/tools/install_client_power.sh @@ -86,7 +86,6 @@ function install_bin() { ${csudo} rm -f ${bin_link_dir}/power || : if [ "$osType" != "Darwin" ]; then ${csudo} rm -f ${bin_link_dir}/powerdemo || : - ${csudo} rm -f ${bin_link_dir}/powerdemox || : ${csudo} rm -f ${bin_link_dir}/powerdump || : fi ${csudo} rm -f ${bin_link_dir}/rmpower || : @@ -98,7 +97,6 @@ function install_bin() { [ -x ${install_main_dir}/bin/power ] && ${csudo} ln -s ${install_main_dir}/bin/power ${bin_link_dir}/power || : if [ "$osType" != "Darwin" ]; then [ -x ${install_main_dir}/bin/powerdemo ] && ${csudo} ln -s ${install_main_dir}/bin/powerdemo ${bin_link_dir}/powerdemo || : - [ -x ${install_main_dir}/bin/powerdemox ] && ${csudo} ln -s ${install_main_dir}/bin/powerdemox ${bin_link_dir}/powerdemox || : [ -x ${install_main_dir}/bin/powerdump ] && ${csudo} ln -s ${install_main_dir}/bin/powerdump ${bin_link_dir}/powerdump || : fi [ -x ${install_main_dir}/bin/remove_client_power.sh ] && ${csudo} ln -s ${install_main_dir}/bin/remove_client_power.sh ${bin_link_dir}/rmpower || : diff --git a/packaging/tools/install_power.sh b/packaging/tools/install_power.sh index 58e19b1399..ba6ace4009 100755 --- a/packaging/tools/install_power.sh +++ b/packaging/tools/install_power.sh @@ -174,7 +174,6 @@ function install_bin() { ${csudo} rm -f ${bin_link_dir}/power || : ${csudo} rm -f ${bin_link_dir}/powerd || : ${csudo} rm -f ${bin_link_dir}/powerdemo || : - ${csudo} rm -f ${bin_link_dir}/powerdemox || : ${csudo} rm -f ${bin_link_dir}/rmpower || : ${csudo} rm -f ${bin_link_dir}/tarbitrator || : ${csudo} rm -f ${bin_link_dir}/set_core || : @@ -185,7 +184,6 @@ function install_bin() { [ -x ${install_main_dir}/bin/power ] && ${csudo} ln -s ${install_main_dir}/bin/power ${bin_link_dir}/power || : [ -x ${install_main_dir}/bin/powerd ] && ${csudo} ln -s ${install_main_dir}/bin/powerd ${bin_link_dir}/powerd || : [ -x ${install_main_dir}/bin/powerdemo ] && ${csudo} ln -s ${install_main_dir}/bin/powerdemo ${bin_link_dir}/powerdemo || : - [ -x ${install_main_dir}/bin/powerdemox ] && ${csudo} ln -s ${install_main_dir}/bin/powerdemox ${bin_link_dir}/powerdemox || : [ -x ${install_main_dir}/bin/remove_power.sh ] && ${csudo} ln -s ${install_main_dir}/bin/remove_power.sh ${bin_link_dir}/rmpower || : [ -x ${install_main_dir}/bin/set_core.sh ] && ${csudo} ln -s ${install_main_dir}/bin/set_core.sh ${bin_link_dir}/set_core || : [ -x ${install_main_dir}/bin/tarbitrator ] && ${csudo} ln -s ${install_main_dir}/bin/tarbitrator ${bin_link_dir}/tarbitrator || : diff --git a/packaging/tools/makeclient.sh b/packaging/tools/makeclient.sh index 52a4e05906..96c51c3e12 100755 --- a/packaging/tools/makeclient.sh +++ b/packaging/tools/makeclient.sh @@ -45,7 +45,7 @@ if [ "$osType" != "Darwin" ]; then strip ${build_dir}/bin/taos bin_files="${build_dir}/bin/taos ${script_dir}/remove_client.sh" else - bin_files="${build_dir}/bin/taos ${build_dir}/bin/taosdump ${build_dir}/bin/taosdemo ${build_dir}/bin/taosdemox\ + bin_files="${build_dir}/bin/taos ${build_dir}/bin/taosdump ${build_dir}/bin/taosdemo \ ${script_dir}/remove_client.sh ${script_dir}/set_core.sh ${script_dir}/get_client.sh ${script_dir}/taosd-dump-cfg.gdb" fi lib_files="${build_dir}/lib/libtaos.so.${version}" diff --git a/packaging/tools/makeclient_power.sh b/packaging/tools/makeclient_power.sh index 15f8994e94..be9851068b 100755 --- a/packaging/tools/makeclient_power.sh +++ b/packaging/tools/makeclient_power.sh @@ -77,7 +77,6 @@ if [ "$osType" != "Darwin" ]; then cp ${build_dir}/bin/taos ${install_dir}/bin/power cp ${script_dir}/remove_power.sh ${install_dir}/bin cp ${build_dir}/bin/taosdemo ${install_dir}/bin/powerdemo - cp ${build_dir}/bin/taosdemox ${install_dir}/bin/powerdemox cp ${build_dir}/bin/taosdump ${install_dir}/bin/powerdump cp ${script_dir}/set_core.sh ${install_dir}/bin cp ${script_dir}/get_client.sh ${install_dir}/bin diff --git a/packaging/tools/makepkg.sh b/packaging/tools/makepkg.sh index 267338ed06..52f7770763 100755 --- a/packaging/tools/makepkg.sh +++ b/packaging/tools/makepkg.sh @@ -36,7 +36,7 @@ if [ "$pagMode" == "lite" ]; then strip ${build_dir}/bin/taos bin_files="${build_dir}/bin/taosd ${build_dir}/bin/taos ${script_dir}/remove.sh" else - bin_files="${build_dir}/bin/taosd ${build_dir}/bin/taos ${build_dir}/bin/taosdump ${build_dir}/bin/taosdemo ${build_dir}/bin/taosdemox ${build_dir}/bin/tarbitrator\ + bin_files="${build_dir}/bin/taosd ${build_dir}/bin/taos ${build_dir}/bin/taosdump ${build_dir}/bin/taosdemo ${build_dir}/bin/tarbitrator\ ${script_dir}/remove.sh ${script_dir}/set_core.sh ${script_dir}/startPre.sh ${script_dir}/taosd-dump-cfg.gdb" fi diff --git a/packaging/tools/makepkg_power.sh b/packaging/tools/makepkg_power.sh index 7227a08b7a..80a0f62aa7 100755 --- a/packaging/tools/makepkg_power.sh +++ b/packaging/tools/makepkg_power.sh @@ -78,7 +78,6 @@ else cp ${build_dir}/bin/taosd ${install_dir}/bin/powerd cp ${script_dir}/remove_power.sh ${install_dir}/bin cp ${build_dir}/bin/taosdemo ${install_dir}/bin/powerdemo - cp ${build_dir}/bin/taosdemox ${install_dir}/bin/powerdemox cp ${build_dir}/bin/taosdump ${install_dir}/bin/powerdump cp ${build_dir}/bin/tarbitrator ${install_dir}/bin cp ${script_dir}/set_core.sh ${install_dir}/bin diff --git a/packaging/tools/post.sh b/packaging/tools/post.sh index c6ef73932d..8665b3fec3 100755 --- a/packaging/tools/post.sh +++ b/packaging/tools/post.sh @@ -96,7 +96,6 @@ function install_bin() { ${csudo} rm -f ${bin_link_dir}/taos || : ${csudo} rm -f ${bin_link_dir}/taosd || : ${csudo} rm -f ${bin_link_dir}/taosdemo || : - ${csudo} rm -f ${bin_link_dir}/taosdemox || : ${csudo} rm -f ${bin_link_dir}/taosdump || : ${csudo} rm -f ${bin_link_dir}/rmtaos || : ${csudo} rm -f ${bin_link_dir}/set_core || : @@ -107,7 +106,6 @@ function install_bin() { [ -x ${bin_dir}/taos ] && ${csudo} ln -s ${bin_dir}/taos ${bin_link_dir}/taos || : [ -x ${bin_dir}/taosd ] && ${csudo} ln -s ${bin_dir}/taosd ${bin_link_dir}/taosd || : [ -x ${bin_dir}/taosdemo ] && ${csudo} ln -s ${bin_dir}/taosdemo ${bin_link_dir}/taosdemo || : - [ -x ${bin_dir}/taosdemox ] && ${csudo} ln -s ${bin_dir}/taosdemox ${bin_link_dir}/taosdemox || : [ -x ${bin_dir}/taosdump ] && ${csudo} ln -s ${bin_dir}/taosdump ${bin_link_dir}/taosdump || : [ -x ${bin_dir}/set_core.sh ] && ${csudo} ln -s ${bin_dir}/set_core.sh ${bin_link_dir}/set_core || : } diff --git a/packaging/tools/remove.sh b/packaging/tools/remove.sh index 8d96ef851c..2f2660d446 100755 --- a/packaging/tools/remove.sh +++ b/packaging/tools/remove.sh @@ -72,7 +72,6 @@ function clean_bin() { ${csudo} rm -f ${bin_link_dir}/taos || : ${csudo} rm -f ${bin_link_dir}/taosd || : ${csudo} rm -f ${bin_link_dir}/taosdemo || : - ${csudo} rm -f ${bin_link_dir}/taosdemox || : ${csudo} rm -f ${bin_link_dir}/taosdump || : ${csudo} rm -f ${bin_link_dir}/rmtaos || : ${csudo} rm -f ${bin_link_dir}/tarbitrator || : diff --git a/packaging/tools/remove_client.sh b/packaging/tools/remove_client.sh index e84cdd2620..7579162dc6 100755 --- a/packaging/tools/remove_client.sh +++ b/packaging/tools/remove_client.sh @@ -38,7 +38,6 @@ function clean_bin() { # Remove link ${csudo} rm -f ${bin_link_dir}/taos || : ${csudo} rm -f ${bin_link_dir}/taosdemo || : - ${csudo} rm -f ${bin_link_dir}/taosdemox || : ${csudo} rm -f ${bin_link_dir}/taosdump || : ${csudo} rm -f ${bin_link_dir}/rmtaos || : ${csudo} rm -f ${bin_link_dir}/set_core || : diff --git a/packaging/tools/remove_client_power.sh b/packaging/tools/remove_client_power.sh index 1842e86a5b..580c46e207 100755 --- a/packaging/tools/remove_client_power.sh +++ b/packaging/tools/remove_client_power.sh @@ -38,7 +38,6 @@ function clean_bin() { # Remove link ${csudo} rm -f ${bin_link_dir}/power || : ${csudo} rm -f ${bin_link_dir}/powerdemo || : - ${csudo} rm -f ${bin_link_dir}/powerdemox || : ${csudo} rm -f ${bin_link_dir}/powerdump || : ${csudo} rm -f ${bin_link_dir}/rmpower || : ${csudo} rm -f ${bin_link_dir}/set_core || : diff --git a/packaging/tools/remove_power.sh b/packaging/tools/remove_power.sh index 59073105de..816869cf44 100755 --- a/packaging/tools/remove_power.sh +++ b/packaging/tools/remove_power.sh @@ -72,7 +72,6 @@ function clean_bin() { ${csudo} rm -f ${bin_link_dir}/power || : ${csudo} rm -f ${bin_link_dir}/powerd || : ${csudo} rm -f ${bin_link_dir}/powerdemo || : - ${csudo} rm -f ${bin_link_dir}/powerdemox || : ${csudo} rm -f ${bin_link_dir}/powerdump || : ${csudo} rm -f ${bin_link_dir}/rmpower || : ${csudo} rm -f ${bin_link_dir}/tarbitrator || : diff --git a/src/kit/CMakeLists.txt b/src/kit/CMakeLists.txt index bf52784300..66e8cf7398 100644 --- a/src/kit/CMakeLists.txt +++ b/src/kit/CMakeLists.txt @@ -3,5 +3,4 @@ PROJECT(TDengine) ADD_SUBDIRECTORY(shell) ADD_SUBDIRECTORY(taosdemo) -ADD_SUBDIRECTORY(taosdemox) ADD_SUBDIRECTORY(taosdump) diff --git a/src/kit/taosdemo/CMakeLists.txt b/src/kit/taosdemo/CMakeLists.txt index 390e10cc26..921d621140 100644 --- a/src/kit/taosdemo/CMakeLists.txt +++ b/src/kit/taosdemo/CMakeLists.txt @@ -2,28 +2,46 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(TDengine) INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/client/inc) -INCLUDE_DIRECTORIES(inc) +INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/libcurl/include) IF (TD_LINUX) AUX_SOURCE_DIRECTORY(. SRC) ADD_EXECUTABLE(taosdemo ${SRC}) - IF (TD_SOMODE_STATIC) - TARGET_LINK_LIBRARIES(taosdemo taos_static) - ELSE () - TARGET_LINK_LIBRARIES(taosdemo taos) + #find_program(HAVE_CURL NAMES curl) + IF ((NOT TD_ARM_64) AND (NOT TD_ARM_32)) + ADD_DEFINITIONS(-DTD_LOWA_CURL) + LINK_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/libcurl/lib) + ADD_LIBRARY(curl STATIC IMPORTED) + SET_PROPERTY(TARGET curl PROPERTY IMPORTED_LOCATION ${TD_COMMUNITY_DIR}/deps/libcurl/lib/libcurl.a) + TARGET_LINK_LIBRARIES(taosdemo curl) ENDIF () -ELSEIF (TD_WINDOWS) - AUX_SOURCE_DIRECTORY(. SRC) - ADD_EXECUTABLE(taosdemo ${SRC}) - TARGET_LINK_LIBRARIES(taosdemo taos_static) -ELSEIF (TD_DARWIN) - AUX_SOURCE_DIRECTORY(. SRC) - ADD_EXECUTABLE(taosdemo ${SRC}) IF (TD_SOMODE_STATIC) - TARGET_LINK_LIBRARIES(taosdemo taos_static) + TARGET_LINK_LIBRARIES(taosdemo taos_static cJson) ELSE () - TARGET_LINK_LIBRARIES(taosdemo taos) + TARGET_LINK_LIBRARIES(taosdemo taos cJson) ENDIF () ENDIF () + +IF (TD_DARWIN) + # missing a few dependencies, such as + # AUX_SOURCE_DIRECTORY(. SRC) + # ADD_EXECUTABLE(taosdemo ${SRC}) + # + # #find_program(HAVE_CURL NAMES curl) + # IF ((NOT TD_ARM_64) AND (NOT TD_ARM_32)) + # ADD_DEFINITIONS(-DTD_LOWA_CURL) + # LINK_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/libcurl/lib) + # ADD_LIBRARY(curl STATIC IMPORTED) + # SET_PROPERTY(TARGET curl PROPERTY IMPORTED_LOCATION ${TD_COMMUNITY_DIR}/deps/libcurl/lib/libcurl.a) + # TARGET_LINK_LIBRARIES(taosdemo curl) + # ENDIF () + # + # IF (TD_SOMODE_STATIC) + # TARGET_LINK_LIBRARIES(taosdemo taos_static cJson) + # ELSE () + # TARGET_LINK_LIBRARIES(taosdemo taos cJson) + # ENDIF () +ENDIF () + diff --git a/src/kit/taosdemox/insert.json b/src/kit/taosdemo/insert.json similarity index 100% rename from src/kit/taosdemox/insert.json rename to src/kit/taosdemo/insert.json diff --git a/src/kit/taosdemox/query.json b/src/kit/taosdemo/query.json similarity index 100% rename from src/kit/taosdemox/query.json rename to src/kit/taosdemo/query.json diff --git a/src/kit/taosdemox/subscribe.json b/src/kit/taosdemo/subscribe.json similarity index 100% rename from src/kit/taosdemox/subscribe.json rename to src/kit/taosdemo/subscribe.json diff --git a/src/kit/taosdemo/taosdemo.c b/src/kit/taosdemo/taosdemo.c index abcadd64b1..85e2039e42 100644 --- a/src/kit/taosdemo/taosdemo.c +++ b/src/kit/taosdemo/taosdemo.c @@ -13,10 +13,21 @@ * along with this program. If not, see . */ + +/* + when in some thread query return error, thread don't exit, but return, otherwise coredump in other thread. +*/ + #define _GNU_SOURCE +#define CURL_STATICLIB + +#ifdef TD_LOWA_CURL +#include "curl/curl.h" +#endif #ifdef LINUX #include "os.h" + #include "cJSON.h" #include #include #include @@ -39,6 +50,11 @@ #include #include #include "os.h" + + #pragma comment ( lib, "libcurl.lib" ) + #pragma comment ( lib, "ws2_32.lib" ) + #pragma comment ( lib, "winmm.lib" ) + #pragma comment ( lib, "wldap32.lib" ) #endif #include "taos.h" @@ -46,17 +62,115 @@ extern char configDir[]; -#define BUFFER_SIZE 65536 -#define MAX_DB_NAME_SIZE 64 -#define MAX_TB_NAME_SIZE 64 -#define MAX_DATA_SIZE 16000 -#define MAX_NUM_DATATYPE 10 -#define OPT_ABORT 1 /* –abort */ -#define STRING_LEN 60000 -#define MAX_PREPARED_RAND 1000000 +#define INSERT_JSON_NAME "insert.json" +#define QUERY_JSON_NAME "query.json" +#define SUBSCRIBE_JSON_NAME "subscribe.json" + +#define INSERT_MODE 0 +#define QUERY_MODE 1 +#define SUBSCRIBE_MODE 2 + +#define MAX_SQL_SIZE 65536 +#define BUFFER_SIZE (65536*2) +#define MAX_DB_NAME_SIZE 64 +#define MAX_TB_NAME_SIZE 64 +#define MAX_DATA_SIZE 16000 +#define MAX_NUM_DATATYPE 10 +#define OPT_ABORT 1 /* –abort */ +#define STRING_LEN 60000 +#define MAX_PREPARED_RAND 1000000 +//#define MAX_SQL_SIZE 65536 +#define MAX_FILE_NAME_LEN 256 + +#define MAX_SAMPLES_ONCE_FROM_FILE 10000 +#define MAX_NUM_DATATYPE 10 + +#define MAX_DB_COUNT 8 +#define MAX_SUPER_TABLE_COUNT 8 +#define MAX_COLUMN_COUNT 1024 +#define MAX_TAG_COUNT 128 + +#define MAX_QUERY_SQL_COUNT 10 +#define MAX_QUERY_SQL_LENGTH 256 + +#define MAX_DATABASE_COUNT 256 + +typedef enum CREATE_SUB_TALBE_MOD_EN { + PRE_CREATE_SUBTBL, + AUTO_CREATE_SUBTBL, + NO_CREATE_SUBTBL +} CREATE_SUB_TALBE_MOD_EN; + +typedef enum TALBE_EXISTS_EN { + TBL_ALREADY_EXISTS, + TBL_NO_EXISTS, + TBL_EXISTS_BUTT +} TALBE_EXISTS_EN; + +enum MODE { + SYNC, + ASYNC, + MODE_BUT +}; + +enum QUERY_TYPE { + NO_INSERT_TYPE, + INSERT_TYPE, + QUERY_TYPE_BUT +} ; + +enum _show_db_index { + TSDB_SHOW_DB_NAME_INDEX, + TSDB_SHOW_DB_CREATED_TIME_INDEX, + TSDB_SHOW_DB_NTABLES_INDEX, + TSDB_SHOW_DB_VGROUPS_INDEX, + TSDB_SHOW_DB_REPLICA_INDEX, + TSDB_SHOW_DB_QUORUM_INDEX, + TSDB_SHOW_DB_DAYS_INDEX, + TSDB_SHOW_DB_KEEP_INDEX, + TSDB_SHOW_DB_CACHE_INDEX, + TSDB_SHOW_DB_BLOCKS_INDEX, + TSDB_SHOW_DB_MINROWS_INDEX, + TSDB_SHOW_DB_MAXROWS_INDEX, + TSDB_SHOW_DB_WALLEVEL_INDEX, + TSDB_SHOW_DB_FSYNC_INDEX, + TSDB_SHOW_DB_COMP_INDEX, + TSDB_SHOW_DB_CACHELAST_INDEX, + TSDB_SHOW_DB_PRECISION_INDEX, + TSDB_SHOW_DB_UPDATE_INDEX, + TSDB_SHOW_DB_STATUS_INDEX, + TSDB_MAX_SHOW_DB +}; + +// -----------------------------------------SHOW TABLES CONFIGURE ------------------------------------- +enum _show_stables_index { + TSDB_SHOW_STABLES_NAME_INDEX, + TSDB_SHOW_STABLES_CREATED_TIME_INDEX, + TSDB_SHOW_STABLES_COLUMNS_INDEX, + TSDB_SHOW_STABLES_METRIC_INDEX, + TSDB_SHOW_STABLES_UID_INDEX, + TSDB_SHOW_STABLES_TID_INDEX, + TSDB_SHOW_STABLES_VGID_INDEX, + TSDB_MAX_SHOW_STABLES +}; +enum _describe_table_index { + TSDB_DESCRIBE_METRIC_FIELD_INDEX, + TSDB_DESCRIBE_METRIC_TYPE_INDEX, + TSDB_DESCRIBE_METRIC_LENGTH_INDEX, + TSDB_DESCRIBE_METRIC_NOTE_INDEX, + TSDB_MAX_DESCRIBE_METRIC +}; + +typedef struct { + char field[TSDB_COL_NAME_LEN + 1]; + char type[16]; + int length; + char note[128]; +} SColDes; /* Used by main to communicate with parse_opt. */ -typedef struct DemoArguments { +typedef struct SArguments_S { + char * metaFile; char * host; uint16_t port; char * user; @@ -78,370 +192,419 @@ typedef struct DemoArguments { int num_of_tables; int num_of_DPT; int abort; - int order; - int rate; + int disorderRatio; + int disorderRange; int method_of_delete; char ** arg_list; -} SDemoArguments; +} SArguments; + +typedef struct SColumn_S { + char field[TSDB_COL_NAME_LEN + 1]; + char dataType[MAX_TB_NAME_SIZE]; + int dataLen; + char note[128]; +} StrColumn; + +typedef struct SSuperTable_S { + char sTblName[MAX_TB_NAME_SIZE]; + int childTblCount; + bool superTblExists; // 0: no, 1: yes + bool childTblExists; // 0: no, 1: yes + int batchCreateTableNum; // 0: no batch, > 0: batch table number in one sql + int8_t autoCreateTable; // 0: create sub table, 1: auto create sub table + char childTblPrefix[MAX_TB_NAME_SIZE]; + char dataSource[MAX_TB_NAME_SIZE]; // rand_gen or sample + char insertMode[MAX_TB_NAME_SIZE]; // taosc, restful + int insertRate; // 0: unlimit > 0 rows/s + + int multiThreadWriteOneTbl; // 0: no, 1: yes + int numberOfTblInOneSql; // 0/1: one table, > 1: number of tbl + int rowsPerTbl; // + int disorderRatio; // 0: no disorder, >0: x% + int disorderRange; // ms or us by database precision + int maxSqlLen; // + + int64_t insertRows; // 0: no limit + int timeStampStep; + char startTimestamp[MAX_TB_NAME_SIZE]; // + char sampleFormat[MAX_TB_NAME_SIZE]; // csv, json + char sampleFile[MAX_FILE_NAME_LEN]; + char tagsFile[MAX_FILE_NAME_LEN]; + + int columnCount; + StrColumn columns[MAX_COLUMN_COUNT]; + int tagCount; + StrColumn tags[MAX_TAG_COUNT]; + + char* childTblName; + char* colsOfCreatChildTable; + int lenOfOneRow; + int lenOfTagOfOneRow; + + char* sampleDataBuf; + int sampleDataBufSize; + //int sampleRowCount; + //int sampleUsePos; + + int tagSource; // 0: rand, 1: tag sample + char* tagDataBuf; + int tagSampleCount; + int tagUsePos; + + // statistics + int64_t totalRowsInserted; + int64_t totalAffectedRows; +} SSuperTable; + +typedef struct { + char name[TSDB_DB_NAME_LEN + 1]; + char create_time[32]; + int32_t ntables; + int32_t vgroups; + int16_t replica; + int16_t quorum; + int16_t days; + char keeplist[32]; + int32_t cache; //MB + int32_t blocks; + int32_t minrows; + int32_t maxrows; + int8_t wallevel; + int32_t fsync; + int8_t comp; + int8_t cachelast; + char precision[8]; // time resolution + int8_t update; + char status[16]; +} SDbInfo; + +typedef struct SDbCfg_S { +// int maxtablesPerVnode; + int minRows; + int maxRows; + int comp; + int walLevel; + int fsync; + int replica; + int update; + int keep; + int days; + int cache; + int blocks; + int quorum; + char precision[MAX_TB_NAME_SIZE]; +} SDbCfg; + +typedef struct SDataBase_S { + char dbName[MAX_DB_NAME_SIZE]; + int drop; // 0: use exists, 1: if exists, drop then new create + SDbCfg dbCfg; + int superTblCount; + SSuperTable superTbls[MAX_SUPER_TABLE_COUNT]; +} SDataBase; + +typedef struct SDbs_S { + char cfgDir[MAX_FILE_NAME_LEN]; + char host[MAX_DB_NAME_SIZE]; + uint16_t port; + char user[MAX_DB_NAME_SIZE]; + char password[MAX_DB_NAME_SIZE]; + char resultFile[MAX_FILE_NAME_LEN]; + bool use_metric; + bool insert_only; + bool do_aggreFunc; + bool queryMode; + + int threadCount; + int threadCountByCreateTbl; + int dbCount; + SDataBase db[MAX_DB_COUNT]; + + // statistics + int64_t totalRowsInserted; + int64_t totalAffectedRows; +} SDbs; + +typedef struct SuperQueryInfo_S { + int rate; // 0: unlimit > 0 loop/s + int concurrent; + int sqlCount; + int subscribeMode; // 0: sync, 1: async + int subscribeInterval; // ms + int subscribeRestart; + int subscribeKeepProgress; + char sql[MAX_QUERY_SQL_COUNT][MAX_QUERY_SQL_LENGTH]; + char result[MAX_QUERY_SQL_COUNT][MAX_FILE_NAME_LEN]; + TAOS_SUB* tsub[MAX_QUERY_SQL_COUNT]; +} SuperQueryInfo; + +typedef struct SubQueryInfo_S { + char sTblName[MAX_TB_NAME_SIZE]; + int rate; // 0: unlimit > 0 loop/s + int threadCnt; + int subscribeMode; // 0: sync, 1: async + int subscribeInterval; // ms + int subscribeRestart; + int subscribeKeepProgress; + int childTblCount; + char childTblPrefix[MAX_TB_NAME_SIZE]; + int sqlCount; + char sql[MAX_QUERY_SQL_COUNT][MAX_QUERY_SQL_LENGTH]; + char result[MAX_QUERY_SQL_COUNT][MAX_FILE_NAME_LEN]; + TAOS_SUB* tsub[MAX_QUERY_SQL_COUNT]; + + char* childTblName; +} SubQueryInfo; + +typedef struct SQueryMetaInfo_S { + char cfgDir[MAX_FILE_NAME_LEN]; + char host[MAX_DB_NAME_SIZE]; + uint16_t port; + char user[MAX_DB_NAME_SIZE]; + char password[MAX_DB_NAME_SIZE]; + char dbName[MAX_DB_NAME_SIZE]; + char queryMode[MAX_TB_NAME_SIZE]; // taosc, restful + + SuperQueryInfo superQueryInfo; + SubQueryInfo subQueryInfo; +} SQueryMetaInfo; + +typedef struct SThreadInfo_S { + TAOS *taos; + #ifdef TD_LOWA_CURL + CURL *curl_handle; + #endif + int threadID; + char db_name[MAX_DB_NAME_SIZE]; + char fp[4096]; + char tb_prefix[MAX_TB_NAME_SIZE]; + int start_table_id; + int end_table_id; + int data_of_rate; + int64_t start_time; + char* cols; + bool use_metric; + SSuperTable* superTblInfo; + + // for async insert + tsem_t lock_sem; + int64_t counter; + int64_t st; + int64_t et; + int64_t lastTs; + int nrecords_per_request; + + // statistics + int64_t totalRowsInserted; + int64_t totalAffectedRows; +} threadInfo; + +typedef struct curlMemInfo_S { + char *buf; + size_t sizeleft; + } curlMemInfo; + + #ifdef LINUX /* The options we understand. */ static struct argp_option options[] = { - {0, 'h', "host", 0, "The host to connect to TDengine. Default is localhost.", 0}, - {0, 'p', "port", 0, "The TCP/IP port number to use for the connection. Default is 0.", 1}, - {0, 'u', "user", 0, "The TDengine user name to use when connecting to the server. Default is 'root'.", 2}, - #ifdef _TD_POWER_ - {0, 'P', "password", 0, "The password to use when connecting to the server. Default is 'powerdb'.", 3}, - #else - {0, 'P', "password", 0, "The password to use when connecting to the server. Default is 'taosdata'.", 3}, - #endif - {0, 'd', "database", 0, "Destination database. Default is 'test'.", 3}, - {0, 'a', "replica", 0, "Set the replica parameters of the database, Default 1, min: 1, max: 3.", 3}, - {0, 'm', "table_prefix", 0, "Table prefix name. Default is 't'.", 3}, - {0, 's', "sql file", 0, "The select sql file.", 3}, - {0, 'M', 0, 0, "Use metric flag.", 13}, - {0, 'o', "outputfile", 0, "Direct output to the named file. Default is './output.txt'.", 14}, - {0, 'q', "query_mode", 0, "Query mode--0: SYNC, 1: ASYNC. Default is SYNC.", 6}, - {0, 'b', "type_of_cols", 0, "The data_type of columns: 'INT', 'TINYINT', 'SMALLINT', 'BIGINT', 'FLOAT', 'DOUBLE', 'BINARY'. Default is 'INT'.", 7}, - {0, 'w', "length_of_binary", 0, "The length of data_type 'BINARY'. Only applicable when type of cols is 'BINARY'. Default is 8", 8}, - {0, 'l', "num_of_cols_per_record", 0, "The number of columns per record. Default is 3.", 8}, - {0, 'T', "num_of_threads", 0, "The number of threads. Default is 10.", 9}, - {0, 'r', "num_of_records_per_req", 0, "The number of records per request. Default is 1000.", 10}, - {0, 't', "num_of_tables", 0, "The number of tables. Default is 10000.", 11}, - {0, 'n', "num_of_records_per_table", 0, "The number of records per table. Default is 100000.", 12}, + {0, 'f', "meta file", 0, "The meta data to the execution procedure, if use -f, all others options invalid. Default is NULL.", 0}, #ifdef _TD_POWER_ - {0, 'c', "config_directory", 0, "Configuration directory. Default is '/etc/power/'.", 14}, + {0, 'c', "config_directory", 0, "Configuration directory. Default is '/etc/power/'.", 1}, + {0, 'P', "password", 0, "The password to use when connecting to the server. Default is 'powerdb'.", 2}, #else - {0, 'c', "config_directory", 0, "Configuration directory. Default is '/etc/taos/'.", 14}, - #endif - {0, 'x', 0, 0, "Insert only flag.", 13}, - {0, 'y', 0, 0, "Default input yes for prompt", 13}, - {0, 'O', "order", 0, "Insert mode--0: In order, 1: Out of order. Default is in order.", 14}, - {0, 'R', "rate", 0, "Out of order data's rate--if order=1 Default 10, min: 0, max: 50.", 14}, - {0, 'D', "delete table", 0, "Delete data methods——0: don't delete, 1: delete by table, 2: delete by stable, 3: delete by database", 14}, + {0, 'c', "config_directory", 0, "Configuration directory. Default is '/etc/taos/'.", 1}, + {0, 'P', "password", 0, "The password to use when connecting to the server. Default is 'taosdata'.", 2}, + #endif + {0, 'h', "host", 0, "The host to connect to TDengine. Default is localhost.", 2}, + {0, 'p', "port", 0, "The TCP/IP port number to use for the connection. Default is 0.", 2}, + {0, 'u', "user", 0, "The TDengine user name to use when connecting to the server. Default is 'root'.", 2}, + {0, 'd', "database", 0, "Destination database. Default is 'test'.", 3}, + {0, 'a', "replica", 0, "Set the replica parameters of the database, Default 1, min: 1, max: 3.", 4}, + {0, 'm', "table_prefix", 0, "Table prefix name. Default is 't'.", 4}, + {0, 's', "sql file", 0, "The select sql file.", 6}, + {0, 'M', 0, 0, "Use metric flag.", 4}, + {0, 'o', "outputfile", 0, "Direct output to the named file. Default is './output.txt'.", 6}, + {0, 'q', "query_mode", 0, "Query mode--0: SYNC, 1: ASYNC. Default is SYNC.", 4}, + {0, 'b', "type_of_cols", 0, "The data_type of columns, default: TINYINT,SMALLINT,INT,BIGINT,FLOAT,DOUBLE,BINARY,NCHAR,BOOL,TIMESTAMP.", 4}, + {0, 'w', "length_of_chartype", 0, "The length of data_type 'BINARY' or 'NCHAR'. Default is 16", 4}, + {0, 'l', "num_of_cols_per_record", 0, "The number of columns per record. Default is 10.", 4}, + {0, 'T', "num_of_threads", 0, "The number of threads. Default is 10.", 4}, + // {0, 'r', "num_of_records_per_req", 0, "The number of records per request. Default is 100.", 4}, + {0, 't', "num_of_tables", 0, "The number of tables. Default is 10000.", 4}, + {0, 'n', "num_of_records_per_table", 0, "The number of records per table. Default is 10000.", 4}, + {0, 'x', 0, 0, "Not insert only flag.", 4}, + {0, 'y', 0, 0, "Default input yes for prompt.", 4}, + {0, 'O', "disorderRatio", 0, "Insert mode--0: In order, > 0: disorder ratio. Default is in order.", 4}, + {0, 'R', "disorderRang", 0, "Out of order data's range, ms, default is 1000.", 4}, + //{0, 'D', "delete database", 0, "if elete database if exists. 0: no, 1: yes, default is 1", 5}, {0}}; - /* Parse a single option. */ - static error_t parse_opt(int key, char *arg, struct argp_state *state) { - /* Get the input argument from argp_parse, which we - know is a pointer to our arguments structure. */ - SDemoArguments *arguments = state->input; - wordexp_t full_path; - char **sptr; - switch (key) { - case 'h': - arguments->host = arg; - break; - case 'p': - arguments->port = atoi(arg); - break; - case 'u': - arguments->user = arg; - break; - case 'P': - arguments->password = arg; - break; - case 'o': - arguments->output_file = arg; - break; - case 's': - arguments->sqlFile = arg; - break; - case 'q': - arguments->mode = atoi(arg); - break; - case 'T': - arguments->num_of_threads = atoi(arg); - break; - case 'r': - arguments->num_of_RPR = atoi(arg); - break; - case 't': - arguments->num_of_tables = atoi(arg); - break; - case 'n': - arguments->num_of_DPT = atoi(arg); - break; - case 'd': - arguments->database = arg; - break; - case 'l': - arguments->num_of_CPR = atoi(arg); - break; - case 'b': - sptr = arguments->datatype; - if (strstr(arg, ",") == NULL) { - if (strcasecmp(arg, "INT") != 0 && strcasecmp(arg, "FLOAT") != 0 && - strcasecmp(arg, "TINYINT") != 0 && strcasecmp(arg, "BOOL") != 0 && - strcasecmp(arg, "SMALLINT") != 0 && - strcasecmp(arg, "BIGINT") != 0 && strcasecmp(arg, "DOUBLE") != 0 && - strcasecmp(arg, "BINARY") && strcasecmp(arg, "NCHAR")) { +/* Parse a single option. */ +static error_t parse_opt(int key, char *arg, struct argp_state *state) { + // Get the input argument from argp_parse, which we know is a pointer to our arguments structure. + SArguments *arguments = state->input; + wordexp_t full_path; + char **sptr; + switch (key) { + case 'f': + arguments->metaFile = arg; + break; + case 'h': + arguments->host = arg; + break; + case 'p': + arguments->port = atoi(arg); + break; + case 'u': + arguments->user = arg; + break; + case 'P': + arguments->password = arg; + break; + case 'o': + arguments->output_file = arg; + break; + case 's': + arguments->sqlFile = arg; + break; + case 'q': + arguments->mode = atoi(arg); + break; + case 'T': + arguments->num_of_threads = atoi(arg); + break; + //case 'r': + // arguments->num_of_RPR = atoi(arg); + // break; + case 't': + arguments->num_of_tables = atoi(arg); + break; + case 'n': + arguments->num_of_DPT = atoi(arg); + break; + case 'd': + arguments->database = arg; + break; + case 'l': + arguments->num_of_CPR = atoi(arg); + break; + case 'b': + sptr = arguments->datatype; + if (strstr(arg, ",") == NULL) { + if (strcasecmp(arg, "INT") != 0 && strcasecmp(arg, "FLOAT") != 0 && + strcasecmp(arg, "TINYINT") != 0 && strcasecmp(arg, "BOOL") != 0 && + strcasecmp(arg, "SMALLINT") != 0 && strcasecmp(arg, "TIMESTAMP") != 0 && + strcasecmp(arg, "BIGINT") != 0 && strcasecmp(arg, "DOUBLE") != 0 && + strcasecmp(arg, "BINARY") != 0 && strcasecmp(arg, "NCHAR") != 0) { + argp_error(state, "Invalid data_type!"); + } + sptr[0] = arg; + } else { + int index = 0; + char *dupstr = strdup(arg); + char *running = dupstr; + char *token = strsep(&running, ","); + while (token != NULL) { + if (strcasecmp(token, "INT") != 0 && strcasecmp(token, "FLOAT") != 0 && + strcasecmp(token, "TINYINT") != 0 && strcasecmp(token, "BOOL") != 0 && + strcasecmp(token, "SMALLINT") != 0 && strcasecmp(token, "TIMESTAMP") != 0 && + strcasecmp(token, "BIGINT") != 0 && strcasecmp(token, "DOUBLE") != 0 && + strcasecmp(token, "BINARY") != 0 && strcasecmp(token, "NCHAR") != 0) { argp_error(state, "Invalid data_type!"); } - sptr[0] = arg; - } else { - int index = 0; - char *dupstr = strdup(arg); - char *running = dupstr; - char *token = strsep(&running, ","); - while (token != NULL) { - if (strcasecmp(token, "INT") != 0 && - strcasecmp(token, "FLOAT") != 0 && - strcasecmp(token, "TINYINT") != 0 && - strcasecmp(token, "BOOL") != 0 && - strcasecmp(token, "SMALLINT") != 0 && - strcasecmp(token, "BIGINT") != 0 && - strcasecmp(token, "DOUBLE") != 0 && strcasecmp(token, "BINARY") && strcasecmp(token, "NCHAR")) { - argp_error(state, "Invalid data_type!"); - } - sptr[index++] = token; - token = strsep(&running, ","); - if (index >= MAX_NUM_DATATYPE) break; - } + sptr[index++] = token; + token = strsep(&running, ","); + if (index >= MAX_NUM_DATATYPE) break; } - break; - case 'w': - arguments->len_of_binary = atoi(arg); - break; - case 'm': - arguments->tb_prefix = arg; - break; - case 'M': - arguments->use_metric = true; - break; - case 'x': - arguments->insert_only = true; - break; - case 'y': - arguments->answer_yes = true; - break; - case 'c': - if (wordexp(arg, &full_path, 0) != 0) { - fprintf(stderr, "Invalid path %s\n", arg); - return -1; - } - taos_options(TSDB_OPTION_CONFIGDIR, full_path.we_wordv[0]); - wordfree(&full_path); - break; - case 'O': - arguments->order = atoi(arg); - if (arguments->order > 1 || arguments->order < 0) - { - arguments->order = 0; - } else if (arguments->order == 1) - { - arguments->rate = 10; - } - break; - case 'R': - arguments->rate = atoi(arg); - if (arguments->order == 1 && (arguments->rate > 50 || arguments->rate <= 0)) - { - arguments->rate = 10; - } - break; - case 'a': - arguments->replica = atoi(arg); - if (arguments->replica > 3 || arguments->replica < 1) - { - arguments->replica = 1; - } - break; - case 'D': - arguments->method_of_delete = atoi(arg); - if (arguments->method_of_delete < 0 || arguments->method_of_delete > 3) - { - arguments->method_of_delete = 0; - } - break; - case OPT_ABORT: - arguments->abort = 1; - break; - case ARGP_KEY_ARG: - /*arguments->arg_list = &state->argv[state->next-1]; - state->next = state->argc;*/ - argp_usage(state); - break; + } + break; + case 'w': + arguments->len_of_binary = atoi(arg); + break; + case 'm': + arguments->tb_prefix = arg; + break; + case 'M': + arguments->use_metric = true; + break; + case 'x': + arguments->insert_only = true; + case 'y': + arguments->answer_yes = true; + break; + case 'c': + if (wordexp(arg, &full_path, 0) != 0) { + fprintf(stderr, "Invalid path %s\n", arg); + return -1; + } + taos_options(TSDB_OPTION_CONFIGDIR, full_path.we_wordv[0]); + wordfree(&full_path); + break; + case 'O': + arguments->disorderRatio = atoi(arg); + if (arguments->disorderRatio < 0 || arguments->disorderRatio > 100) + { + argp_error(state, "Invalid disorder ratio, should 1 ~ 100!"); + } + break; + case 'R': + arguments->disorderRange = atoi(arg); + break; + case 'a': + arguments->replica = atoi(arg); + if (arguments->replica > 3 || arguments->replica < 1) + { + arguments->replica = 1; + } + break; + //case 'D': + // arguments->method_of_delete = atoi(arg); + // break; + case OPT_ABORT: + arguments->abort = 1; + break; + case ARGP_KEY_ARG: + /*arguments->arg_list = &state->argv[state->next-1]; + state->next = state->argc;*/ + argp_usage(state); + break; - default: - return ARGP_ERR_UNKNOWN; - } - return 0; + default: + return ARGP_ERR_UNKNOWN; } + return 0; +} - static struct argp argp = {options, parse_opt, 0, 0}; +static struct argp argp = {options, parse_opt, 0, 0}; - void parse_args(int argc, char *argv[], SDemoArguments *arguments) { - argp_parse(&argp, argc, argv, 0, 0, arguments); - if (arguments->abort) { - #ifndef _ALPINE - error(10, 0, "ABORTED"); - #else - abort(); - #endif - } +void parse_args(int argc, char *argv[], SArguments *arguments) { + argp_parse(&argp, argc, argv, 0, 0, arguments); + if (arguments->abort) { + #ifndef _ALPINE + error(10, 0, "ABORTED"); + #else + abort(); + #endif } +} #else void printHelp() { char indent[10] = " "; - printf("%s%s\n", indent, "-h"); - printf("%s%s%s\n", indent, indent, "host, The host to connect to TDengine. Default is localhost."); - printf("%s%s\n", indent, "-p"); - printf("%s%s%s\n", indent, indent, "port, The TCP/IP port number to use for the connection. Default is 0."); - printf("%s%s\n", indent, "-u"); - printf("%s%s%s\n", indent, indent, "user, The user name to use when connecting to the server. Default is 'root'."); - printf("%s%s\n", indent, "-p"); - #ifdef _TD_POWER_ - printf("%s%s%s\n", indent, indent, "password, The password to use when connecting to the server. Default is 'powerdb'."); - #else - printf("%s%s%s\n", indent, indent, "password, The password to use when connecting to the server. Default is 'taosdata'."); - #endif - printf("%s%s\n", indent, "-d"); - printf("%s%s%s\n", indent, indent, "database, Destination database. Default is 'test'."); - printf("%s%s\n", indent, "-a"); - printf("%s%s%s\n", indent, indent, "replica, Set the replica parameters of the database, Default 1, min: 1, max: 3."); - printf("%s%s\n", indent, "-m"); - printf("%s%s%s\n", indent, indent, "table_prefix, Table prefix name. Default is 't'."); - printf("%s%s\n", indent, "-s"); - printf("%s%s%s\n", indent, indent, "sql file, The select sql file."); - printf("%s%s\n", indent, "-M"); - printf("%s%s%s\n", indent, indent, "meteric, Use metric flag."); - printf("%s%s\n", indent, "-o"); - printf("%s%s%s\n", indent, indent, "outputfile, Direct output to the named file. Default is './output.txt'."); - printf("%s%s\n", indent, "-q"); - printf("%s%s%s\n", indent, indent, "query_mode, Query mode--0: SYNC, 1: ASYNC. Default is SYNC."); - printf("%s%s\n", indent, "-b"); - printf("%s%s%s\n", indent, indent, "type_of_cols, data_type of columns: 'INT', 'TINYINT', 'SMALLINT', 'BIGINT', 'FLOAT', 'DOUBLE', 'BINARY'. Default is 'INT'."); - printf("%s%s\n", indent, "-w"); - printf("%s%s%s\n", indent, indent, "length_of_binary, The length of data_type 'BINARY'. Only applicable when type of cols is 'BINARY'. Default is 8"); - printf("%s%s\n", indent, "-l"); - printf("%s%s%s\n", indent, indent, "num_of_cols_per_record, The number of columns per record. Default is 3."); - printf("%s%s\n", indent, "-T"); - printf("%s%s%s\n", indent, indent, "num_of_threads, The number of threads. Default is 10."); - printf("%s%s\n", indent, "-r"); - printf("%s%s%s\n", indent, indent, "num_of_records_per_req, The number of records per request. Default is 1000."); - printf("%s%s\n", indent, "-t"); - printf("%s%s%s\n", indent, indent, "num_of_tables, The number of tables. Default is 10000."); - printf("%s%s\n", indent, "-n"); - printf("%s%s%s\n", indent, indent, "num_of_records_per_table, The number of records per table. Default is 100000."); + printf("%s%s\n", indent, "-f"); + printf("%s%s%s\n", indent, indent, "The meta file to the execution procedure. Default is './meta.json'."); printf("%s%s\n", indent, "-c"); - #ifdef _TD_POWER_ - printf("%s%s%s\n", indent, indent, "config_directory, Configuration directory. Default is '/etc/power/'."); - #else printf("%s%s%s\n", indent, indent, "config_directory, Configuration directory. Default is '/etc/taos/'."); - #endif - printf("%s%s\n", indent, "-x"); - printf("%s%s%s\n", indent, indent, "flag, Insert only flag."); - printf("%s%s\n", indent, "-y"); - printf("%s%s%s\n", indent, indent, "flag, Anser Yes for prompt."); - printf("%s%s\n", indent, "-O"); - printf("%s%s%s\n", indent, indent, "order, Insert mode--0: In order, 1: Out of order. Default is in order."); - printf("%s%s\n", indent, "-R"); - printf("%s%s%s\n", indent, indent, "rate, Out of order data's rate--if order=1 Default 10, min: 0, max: 50."); - printf("%s%s\n", indent, "-D"); - printf("%s%s%s\n", indent, indent, "Delete data methods 0: don't delete, 1: delete by table, 2: delete by stable, 3: delete by database."); } - void parse_args(int argc, char *argv[], SDemoArguments *arguments) { - char **sptr; + void parse_args(int argc, char *argv[], SArguments *arguments) { for (int i = 1; i < argc; i++) { - if (strcmp(argv[i], "-h") == 0) { - arguments->host = argv[++i]; - } else if (strcmp(argv[i], "-p") == 0) { - arguments->port = atoi(argv[++i]); - } else if (strcmp(argv[i], "-u") == 0) { - arguments->user = argv[++i]; - } else if (strcmp(argv[i], "-P") == 0) { - arguments->password = argv[++i]; - } else if (strcmp(argv[i], "-o") == 0) { - arguments->output_file = argv[++i]; - } else if (strcmp(argv[i], "-s") == 0) { - arguments->sqlFile = argv[++i]; - } else if (strcmp(argv[i], "-q") == 0) { - arguments->mode = atoi(argv[++i]); - } else if (strcmp(argv[i], "-T") == 0) { - arguments->num_of_threads = atoi(argv[++i]); - } else if (strcmp(argv[i], "-r") == 0) { - arguments->num_of_RPR = atoi(argv[++i]); - } else if (strcmp(argv[i], "-t") == 0) { - arguments->num_of_tables = atoi(argv[++i]); - } else if (strcmp(argv[i], "-n") == 0) { - arguments->num_of_DPT = atoi(argv[++i]); - } else if (strcmp(argv[i], "-d") == 0) { - arguments->database = argv[++i]; - } else if (strcmp(argv[i], "-l") == 0) { - arguments->num_of_CPR = atoi(argv[++i]); - } else if (strcmp(argv[i], "-b") == 0) { - sptr = arguments->datatype; - ++i; - if (strstr(argv[i], ",") == NULL) { - if (strcasecmp(argv[i], "INT") != 0 && strcasecmp(argv[i], "FLOAT") != 0 && - strcasecmp(argv[i], "TINYINT") != 0 && strcasecmp(argv[i], "BOOL") != 0 && - strcasecmp(argv[i], "SMALLINT") != 0 && - strcasecmp(argv[i], "BIGINT") != 0 && strcasecmp(argv[i], "DOUBLE") != 0 && - strcasecmp(argv[i], "BINARY") && strcasecmp(argv[i], "NCHAR")) { - fprintf(stderr, "Invalid data_type!\n"); - printHelp(); - exit(EXIT_FAILURE); - } - sptr[0] = argv[i]; - } else { - int index = 0; - char *dupstr = strdup(argv[i]); - char *running = dupstr; - char *token = strsep(&running, ","); - while (token != NULL) { - if (strcasecmp(token, "INT") != 0 && - strcasecmp(token, "FLOAT") != 0 && - strcasecmp(token, "TINYINT") != 0 && - strcasecmp(token, "BOOL") != 0 && - strcasecmp(token, "SMALLINT") != 0 && - strcasecmp(token, "BIGINT") != 0 && - strcasecmp(token, "DOUBLE") != 0 && strcasecmp(token, "BINARY") && strcasecmp(token, "NCHAR")) { - fprintf(stderr, "Invalid data_type!\n"); - printHelp(); - exit(EXIT_FAILURE); - } - sptr[index++] = token; - token = strsep(&running, ","); - if (index >= MAX_NUM_DATATYPE) break; - } - } - } else if (strcmp(argv[i], "-w") == 0) { - arguments->len_of_binary = atoi(argv[++i]); - } else if (strcmp(argv[i], "-m") == 0) { - arguments->tb_prefix = argv[++i]; - } else if (strcmp(argv[i], "-M") == 0) { - arguments->use_metric = true; - } else if (strcmp(argv[i], "-x") == 0) { - arguments->insert_only = true; - } else if (strcmp(argv[i], "-y") == 0) { - arguments->answer_yes = true; + if (strcmp(argv[i], "-f") == 0) { + arguments->metaFile = argv[++i]; } else if (strcmp(argv[i], "-c") == 0) { strcpy(configDir, argv[++i]); - } else if (strcmp(argv[i], "-O") == 0) { - arguments->order = atoi(argv[++i]); - if (arguments->order > 1 || arguments->order < 0) { - arguments->order = 0; - } else if (arguments->order == 1) { - arguments->rate = 10; - } - } else if (strcmp(argv[i], "-R") == 0) { - arguments->rate = atoi(argv[++i]); - if (arguments->order == 1 && (arguments->rate > 50 || arguments->rate <= 0)) { - arguments->rate = 10; - } - } else if (strcmp(argv[i], "-a") == 0) { - arguments->replica = atoi(argv[++i]); - if (arguments->rate > 3 || arguments->rate < 1) { - arguments->rate = 1; - } - } else if (strcmp(argv[i], "-D") == 0) { - arguments->method_of_delete = atoi(argv[++i]); - if (arguments->method_of_delete < 0 || arguments->method_of_delete > 3) { - arguments->method_of_delete = 0; - } } else if (strcmp(argv[i], "--help") == 0) { printHelp(); exit(EXIT_FAILURE); @@ -452,319 +615,1527 @@ typedef struct DemoArguments { } } } - #endif -/* ******************************* Structure - * definition******************************* */ -enum MODE { - SYNC, ASYNC +static bool getInfoFromJsonFile(char* file); +//static int generateOneRowDataForStb(SSuperTable* stbInfo); +//static int getDataIntoMemForStb(SSuperTable* stbInfo); +static void init_rand_data(); +static int createDatabases(); +static void createChildTables(); +static int queryDbExec(TAOS *taos, char *command, int type); + +/* ************ Global variables ************ */ + +int32_t randint[MAX_PREPARED_RAND]; +int64_t randbigint[MAX_PREPARED_RAND]; +float randfloat[MAX_PREPARED_RAND]; +double randdouble[MAX_PREPARED_RAND]; +char *aggreFunc[] = {"*", "count(*)", "avg(col0)", "sum(col0)", "max(col0)", "min(col0)", "first(col0)", "last(col0)"}; + +SArguments g_args = {NULL, + "127.0.0.1", // host + 6030, // port + "root", // user + #ifdef _TD_POWER_ + "powerdb", // password + #else + "taosdata", // password + #endif + "test", // database + 1, // replica + "t", // tb_prefix + NULL, // sqlFile + false, // use_metric + false, // insert_only + false, // answer_yes; + "./output.txt", // output_file + 0, // mode : sync or async + { + "TINYINT", // datatype + "SMALLINT", + "INT", + "BIGINT", + "FLOAT", + "DOUBLE", + "BINARY", + "NCHAR", + "BOOL", + "TIMESTAMP" + }, + 16, // len_of_binary + 10, // num_of_CPR + 10, // num_of_connections/thread + 100, // num_of_RPR + 10000, // num_of_tables + 10000, // num_of_DPT + 0, // abort + 0, // disorderRatio + 1000, // disorderRange + 1, // method_of_delete + NULL // arg_list }; -typedef struct { - TAOS *taos; - int threadID; - char db_name[MAX_DB_NAME_SIZE]; - char fp[4096]; - char **datatype; - int len_of_binary; - char tb_prefix[MAX_TB_NAME_SIZE]; - int start_table_id; - int end_table_id; - int ncols_per_record; - int nrecords_per_table; - int nrecords_per_request; - int data_of_order; - int data_of_rate; - int64_t start_time; - bool do_aggreFunc; - - char* cols; - bool use_metric; - - tsem_t mutex_sem; - int notFinished; - tsem_t lock_sem; - int counter; - - // insert delay statitics - int64_t cntDelay; - int64_t totalDelay; - int64_t avgDelay; - int64_t maxDelay; - int64_t minDelay; - -} info; - -typedef struct { - TAOS *taos; - - char tb_name[MAX_TB_NAME_SIZE]; - int64_t timestamp; - int target; - int counter; - int nrecords_per_request; - int ncols_per_record; - char **data_type; - int len_of_binary; - int data_of_order; - int data_of_rate; - - tsem_t *mutex_sem; - int *notFinished; - tsem_t *lock_sem; -} sTable; - -/* ******************************* Global - * variables******************************* */ -char *aggreFunc[] = {"*", "count(*)", "avg(f1)", "sum(f1)", "max(f1)", "min(f1)", "first(f1)", "last(f1)"}; -void queryDB(TAOS *taos, char *command); +static int g_jsonType = 0; +static SDbs g_Dbs; +static int g_totalChildTables = 0; +static SQueryMetaInfo g_queryInfo; +static FILE * g_fpOfInsertResult = NULL; -void *readTable(void *sarg); -void *readMetric(void *sarg); - -void *syncWrite(void *sarg); - -void *deleteTable(); - -void *asyncWrite(void *sarg); - -int generateData(char *res, char **data_type, int num_of_cols, int64_t timestamp, int len_of_binary); - -void rand_string(char *str, int size); - -void init_rand_data(); - -double getCurrentTime(); - -void callBack(void *param, TAOS_RES *res, int code); -void multiThreadCreateTable(char* cols, bool use_metric, int threads, int ntables, char* db_name, char* tb_prefix, char *ip_addr, uint16_t port, char *user, char *pass); -void querySqlFile(TAOS* taos, char* sqlFile); - -int main(int argc, char *argv[]) { - SDemoArguments arguments = { NULL, // host - 0, // port - "root", // user - #ifdef _TD_POWER_ - "powerdb", // password - #else - "taosdata", // password - #endif - "test", // database - 1, // replica - "t", // tb_prefix - NULL, - false, // use_metric - false, // insert_only - false, // answer_yes - "./output.txt", // output_file - 0, // mode - { - "int", // datatype - "int", - "int", - "int", - "int", - "int", - "int", - "float" - }, - 8, // len_of_binary - 1, // num_of_CPR - 1, // num_of_connections/thread - 1, // num_of_RPR - 1, // num_of_tables - 50000, // num_of_DPT - 0, // abort - 0, // order - 0, // rate - 0, // method_of_delete - NULL // arg_list - }; - - /* Parse our arguments; every option seen by parse_opt will be - reflected in arguments. */ - // For demo use, change default values for some parameters; - arguments.num_of_tables = 10000; - arguments.num_of_CPR = 3; - arguments.num_of_threads = 10; - arguments.num_of_DPT = 100000; - arguments.num_of_RPR = 1000; - arguments.use_metric = true; - arguments.insert_only = false; - arguments.answer_yes = false; - // end change - - parse_args(argc, argv, &arguments); - - enum MODE query_mode = arguments.mode; - char *ip_addr = arguments.host; - uint16_t port = arguments.port; - char *user = arguments.user; - char *pass = arguments.password; - char *db_name = arguments.database; - char *tb_prefix = arguments.tb_prefix; - int len_of_binary = arguments.len_of_binary; - int ncols_per_record = arguments.num_of_CPR; - int order = arguments.order; - int rate = arguments.rate; - int method_of_delete = arguments.method_of_delete; - int ntables = arguments.num_of_tables; - int threads = arguments.num_of_threads; - int nrecords_per_table = arguments.num_of_DPT; - int nrecords_per_request = arguments.num_of_RPR; - bool use_metric = arguments.use_metric; - bool insert_only = arguments.insert_only; - bool answer_yes = arguments.answer_yes; - char **data_type = arguments.datatype; - int count_data_type = 0; - char dataString[STRING_LEN]; - bool do_aggreFunc = true; - int replica = arguments.replica; - - if (NULL != arguments.sqlFile) { - TAOS* qtaos = taos_connect(ip_addr, user, pass, db_name, port); - querySqlFile(qtaos, arguments.sqlFile); - taos_close(qtaos); - return 0; +void tmfclose(FILE *fp) { + if (NULL != fp) { + fclose(fp); } - init_rand_data(); +} - memset(dataString, 0, STRING_LEN); - int len = 0; - - if (strcasecmp(data_type[0], "BINARY") == 0 || strcasecmp(data_type[0], "BOOL") == 0 || strcasecmp(data_type[0], "NCHAR") == 0 ) { - do_aggreFunc = false; +void tmfree(char *buf) { + if (NULL != buf) { + free(buf); } - for (; count_data_type <= MAX_NUM_DATATYPE; count_data_type++) { - if (data_type[count_data_type] == NULL) { +} + +static int queryDbExec(TAOS *taos, char *command, int type) { + int i; + TAOS_RES *res = NULL; + int32_t code = -1; + + for (i = 0; i < 5; i++) { + if (NULL != res) { + taos_free_result(res); + res = NULL; + } + + res = taos_query(taos, command); + code = taos_errno(res); + if (0 == code) { break; + } + } + + if (code != 0) { + fprintf(stderr, "Failed to run %s, reason: %s\n", command, taos_errstr(res)); + taos_free_result(res); + //taos_close(taos); + return -1; + } + + if (INSERT_TYPE == type) { + int affectedRows = taos_affected_rows(res); + taos_free_result(res); + return affectedRows; + } + + taos_free_result(res); + return 0; +} + +static void getResult(TAOS_RES *res, char* resultFileName) { + TAOS_ROW row = NULL; + int num_rows = 0; + int num_fields = taos_field_count(res); + TAOS_FIELD *fields = taos_fetch_fields(res); + + FILE *fp = NULL; + if (resultFileName[0] != 0) { + fp = fopen(resultFileName, "at"); + if (fp == NULL) { + fprintf(stderr, "failed to open result file: %s, result will not save to file\n", resultFileName); + } + } + + char* databuf = (char*) calloc(1, 100*1024*1024); + if (databuf == NULL) { + fprintf(stderr, "failed to malloc, warning: save result to file slowly!\n"); + return ; + } + + int totalLen = 0; + char temp[16000]; + + // fetch the records row by row + while ((row = taos_fetch_row(res))) { + if (totalLen >= 100*1024*1024 - 32000) { + if (fp) fprintf(fp, "%s", databuf); + totalLen = 0; + memset(databuf, 0, 100*1024*1024); + } + num_rows++; + int len = taos_print_row(temp, row, fields, num_fields); + len += sprintf(temp + len, "\n"); + //printf("query result:%s\n", temp); + memcpy(databuf + totalLen, temp, len); + totalLen += len; + } + + if (fp) fprintf(fp, "%s", databuf); + tmfclose(fp); + free(databuf); +} + +static void selectAndGetResult(TAOS *taos, char *command, char* resultFileName) { + TAOS_RES *res = taos_query(taos, command); + if (res == NULL || taos_errno(res) != 0) { + printf("failed to sql:%s, reason:%s\n", command, taos_errstr(res)); + taos_free_result(res); + return; + } + + getResult(res, resultFileName); + taos_free_result(res); +} + +double getCurrentTime() { + struct timeval tv; + if (gettimeofday(&tv, NULL) != 0) { + perror("Failed to get current time in ms"); + return 0.0; + } + + return tv.tv_sec + tv.tv_usec / 1E6; +} + +static int32_t rand_bool(){ + static int cursor; + cursor++; + cursor = cursor % MAX_PREPARED_RAND; + return randint[cursor] % 2; +} + +static int32_t rand_tinyint(){ + static int cursor; + cursor++; + cursor = cursor % MAX_PREPARED_RAND; + return randint[cursor] % 128; +} + +static int32_t rand_smallint(){ + static int cursor; + cursor++; + cursor = cursor % MAX_PREPARED_RAND; + return randint[cursor] % 32767; +} + +static int32_t rand_int(){ + static int cursor; + cursor++; + cursor = cursor % MAX_PREPARED_RAND; + return randint[cursor]; +} + +static int64_t rand_bigint(){ + static int cursor; + cursor++; + cursor = cursor % MAX_PREPARED_RAND; + return randbigint[cursor]; + +} + +static float rand_float(){ + static int cursor; + cursor++; + cursor = cursor % MAX_PREPARED_RAND; + return randfloat[cursor]; +} + +static const char charset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; +void rand_string(char *str, int size) { + str[0] = 0; + if (size > 0) { + //--size; + int n; + for (n = 0; n < size; n++) { + int key = rand_tinyint() % (int)(sizeof(charset) - 1); + str[n] = charset[key]; + } + str[n] = 0; + } +} + +static double rand_double() { + static int cursor; + cursor++; + cursor = cursor % MAX_PREPARED_RAND; + return randdouble[cursor]; + +} + +static void init_rand_data() { + for (int i = 0; i < MAX_PREPARED_RAND; i++){ + randint[i] = (int)(rand() % 65535); + randbigint[i] = (int64_t)(rand() % 2147483648); + randfloat[i] = (float)(rand() / 1000.0); + randdouble[i] = (double)(rand() / 1000000.0); + } +} + +static void printfInsertMeta() { + printf("\033[1m\033[40;32m================ insert.json parse result START ================\033[0m\n"); + printf("host: \033[33m%s:%u\033[0m\n", g_Dbs.host, g_Dbs.port); + printf("user: \033[33m%s\033[0m\n", g_Dbs.user); + printf("password: \033[33m%s\033[0m\n", g_Dbs.password); + printf("resultFile: \033[33m%s\033[0m\n", g_Dbs.resultFile); + printf("thread num of insert data: \033[33m%d\033[0m\n", g_Dbs.threadCount); + printf("thread num of create table: \033[33m%d\033[0m\n", g_Dbs.threadCountByCreateTbl); + + printf("database count: \033[33m%d\033[0m\n", g_Dbs.dbCount); + for (int i = 0; i < g_Dbs.dbCount; i++) { + printf("database[\033[33m%d\033[0m]:\n", i); + printf(" database name: \033[33m%s\033[0m\n", g_Dbs.db[i].dbName); + if (0 == g_Dbs.db[i].drop) { + printf(" drop: \033[33mno\033[0m\n"); + }else { + printf(" drop: \033[33myes\033[0m\n"); } - len += snprintf(dataString + len, STRING_LEN - len, "%s ", data_type[count_data_type]); + if (g_Dbs.db[i].dbCfg.blocks > 0) { + printf(" blocks: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.blocks); + } + if (g_Dbs.db[i].dbCfg.cache > 0) { + printf(" cache: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.cache); + } + if (g_Dbs.db[i].dbCfg.days > 0) { + printf(" days: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.days); + } + if (g_Dbs.db[i].dbCfg.keep > 0) { + printf(" keep: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.keep); + } + if (g_Dbs.db[i].dbCfg.replica > 0) { + printf(" replica: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.replica); + } + if (g_Dbs.db[i].dbCfg.update > 0) { + printf(" update: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.update); + } + if (g_Dbs.db[i].dbCfg.minRows > 0) { + printf(" minRows: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.minRows); + } + if (g_Dbs.db[i].dbCfg.maxRows > 0) { + printf(" maxRows: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.maxRows); + } + if (g_Dbs.db[i].dbCfg.comp > 0) { + printf(" comp: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.comp); + } + if (g_Dbs.db[i].dbCfg.walLevel > 0) { + printf(" walLevel: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.walLevel); + } + if (g_Dbs.db[i].dbCfg.fsync > 0) { + printf(" fsync: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.fsync); + } + if (g_Dbs.db[i].dbCfg.quorum > 0) { + printf(" quorum: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.quorum); + } + if (g_Dbs.db[i].dbCfg.precision[0] != 0) { + if ((0 == strncasecmp(g_Dbs.db[i].dbCfg.precision, "ms", 2)) || (0 == strncasecmp(g_Dbs.db[i].dbCfg.precision, "us", 2))) { + printf(" precision: \033[33m%s\033[0m\n", g_Dbs.db[i].dbCfg.precision); + } else { + printf(" precision error: \033[33m%s\033[0m\n", g_Dbs.db[i].dbCfg.precision); + exit(EXIT_FAILURE); + } + } + + printf(" super table count: \033[33m%d\033[0m\n", g_Dbs.db[i].superTblCount); + for (int j = 0; j < g_Dbs.db[i].superTblCount; j++) { + printf(" super table[\033[33m%d\033[0m]:\n", j); + + printf(" stbName: \033[33m%s\033[0m\n", g_Dbs.db[i].superTbls[j].sTblName); + + if (PRE_CREATE_SUBTBL == g_Dbs.db[i].superTbls[j].autoCreateTable) { + printf(" autoCreateTable: \033[33m%s\033[0m\n", "no"); + } else if (AUTO_CREATE_SUBTBL == g_Dbs.db[i].superTbls[j].autoCreateTable) { + printf(" autoCreateTable: \033[33m%s\033[0m\n", "yes"); + } else { + printf(" autoCreateTable: \033[33m%s\033[0m\n", "error"); + } + + if (TBL_NO_EXISTS == g_Dbs.db[i].superTbls[j].childTblExists) { + printf(" childTblExists: \033[33m%s\033[0m\n", "no"); + } else if (TBL_ALREADY_EXISTS == g_Dbs.db[i].superTbls[j].childTblExists) { + printf(" childTblExists: \033[33m%s\033[0m\n", "yes"); + } else { + printf(" childTblExists: \033[33m%s\033[0m\n", "error"); + } + + printf(" childTblCount: \033[33m%d\033[0m\n", g_Dbs.db[i].superTbls[j].childTblCount); + printf(" childTblPrefix: \033[33m%s\033[0m\n", g_Dbs.db[i].superTbls[j].childTblPrefix); + printf(" dataSource: \033[33m%s\033[0m\n", g_Dbs.db[i].superTbls[j].dataSource); + printf(" insertMode: \033[33m%s\033[0m\n", g_Dbs.db[i].superTbls[j].insertMode); + printf(" insertRate: \033[33m%d\033[0m\n", g_Dbs.db[i].superTbls[j].insertRate); + printf(" insertRows: \033[33m%"PRId64"\033[0m\n", g_Dbs.db[i].superTbls[j].insertRows); + + if (0 == g_Dbs.db[i].superTbls[j].multiThreadWriteOneTbl) { + printf(" multiThreadWriteOneTbl: \033[33mno\033[0m\n"); + }else { + printf(" multiThreadWriteOneTbl: \033[33myes\033[0m\n"); + } + printf(" numberOfTblInOneSql: \033[33m%d\033[0m\n", g_Dbs.db[i].superTbls[j].numberOfTblInOneSql); + printf(" rowsPerTbl: \033[33m%d\033[0m\n", g_Dbs.db[i].superTbls[j].rowsPerTbl); + printf(" disorderRange: \033[33m%d\033[0m\n", g_Dbs.db[i].superTbls[j].disorderRange); + printf(" disorderRatio: \033[33m%d\033[0m\n", g_Dbs.db[i].superTbls[j].disorderRatio); + printf(" maxSqlLen: \033[33m%d\033[0m\n", g_Dbs.db[i].superTbls[j].maxSqlLen); + + printf(" timeStampStep: \033[33m%d\033[0m\n", g_Dbs.db[i].superTbls[j].timeStampStep); + printf(" startTimestamp: \033[33m%s\033[0m\n", g_Dbs.db[i].superTbls[j].startTimestamp); + printf(" sampleFormat: \033[33m%s\033[0m\n", g_Dbs.db[i].superTbls[j].sampleFormat); + printf(" sampleFile: \033[33m%s\033[0m\n", g_Dbs.db[i].superTbls[j].sampleFile); + printf(" tagsFile: \033[33m%s\033[0m\n", g_Dbs.db[i].superTbls[j].tagsFile); + + printf(" columnCount: \033[33m%d\033[0m\n ", g_Dbs.db[i].superTbls[j].columnCount); + for (int k = 0; k < g_Dbs.db[i].superTbls[j].columnCount; k++) { + //printf("dataType:%s, dataLen:%d\t", g_Dbs.db[i].superTbls[j].columns[k].dataType, g_Dbs.db[i].superTbls[j].columns[k].dataLen); + if ((0 == strncasecmp(g_Dbs.db[i].superTbls[j].columns[k].dataType, "binary", 6)) || (0 == strncasecmp(g_Dbs.db[i].superTbls[j].columns[k].dataType, "nchar", 5))) { + printf("column[\033[33m%d\033[0m]:\033[33m%s(%d)\033[0m ", k, g_Dbs.db[i].superTbls[j].columns[k].dataType, g_Dbs.db[i].superTbls[j].columns[k].dataLen); + } else { + printf("column[%d]:\033[33m%s\033[0m ", k, g_Dbs.db[i].superTbls[j].columns[k].dataType); + } + } + printf("\n"); + + printf(" tagCount: \033[33m%d\033[0m\n ", g_Dbs.db[i].superTbls[j].tagCount); + for (int k = 0; k < g_Dbs.db[i].superTbls[j].tagCount; k++) { + //printf("dataType:%s, dataLen:%d\t", g_Dbs.db[i].superTbls[j].tags[k].dataType, g_Dbs.db[i].superTbls[j].tags[k].dataLen); + if ((0 == strncasecmp(g_Dbs.db[i].superTbls[j].tags[k].dataType, "binary", 6)) || (0 == strncasecmp(g_Dbs.db[i].superTbls[j].tags[k].dataType, "nchar", 5))) { + printf("tag[%d]:\033[33m%s(%d)\033[0m ", k, g_Dbs.db[i].superTbls[j].tags[k].dataType, g_Dbs.db[i].superTbls[j].tags[k].dataLen); + } else { + printf("tag[%d]:\033[33m%s\033[0m ", k, g_Dbs.db[i].superTbls[j].tags[k].dataType); + } + } + printf("\n"); + } + printf("\n"); + } + printf("\033[1m\033[40;32m================ insert.json parse result END================\033[0m\n"); +} + +static void printfInsertMetaToFile(FILE* fp) { + fprintf(fp, "================ insert.json parse result START================\n"); + fprintf(fp, "host: %s:%u\n", g_Dbs.host, g_Dbs.port); + fprintf(fp, "user: %s\n", g_Dbs.user); + fprintf(fp, "password: %s\n", g_Dbs.password); + fprintf(fp, "resultFile: %s\n", g_Dbs.resultFile); + fprintf(fp, "thread num of insert data: %d\n", g_Dbs.threadCount); + fprintf(fp, "thread num of create table: %d\n", g_Dbs.threadCountByCreateTbl); + + fprintf(fp, "database count: %d\n", g_Dbs.dbCount); + for (int i = 0; i < g_Dbs.dbCount; i++) { + fprintf(fp, "database[%d]:\n", i); + fprintf(fp, " database name: %s\n", g_Dbs.db[i].dbName); + if (0 == g_Dbs.db[i].drop) { + fprintf(fp, " drop: no\n"); + }else { + fprintf(fp, " drop: yes\n"); + } + + if (g_Dbs.db[i].dbCfg.blocks > 0) { + fprintf(fp, " blocks: %d\n", g_Dbs.db[i].dbCfg.blocks); + } + if (g_Dbs.db[i].dbCfg.cache > 0) { + fprintf(fp, " cache: %d\n", g_Dbs.db[i].dbCfg.cache); + } + if (g_Dbs.db[i].dbCfg.days > 0) { + fprintf(fp, " days: %d\n", g_Dbs.db[i].dbCfg.days); + } + if (g_Dbs.db[i].dbCfg.keep > 0) { + fprintf(fp, " keep: %d\n", g_Dbs.db[i].dbCfg.keep); + } + if (g_Dbs.db[i].dbCfg.replica > 0) { + fprintf(fp, " replica: %d\n", g_Dbs.db[i].dbCfg.replica); + } + if (g_Dbs.db[i].dbCfg.update > 0) { + fprintf(fp, " update: %d\n", g_Dbs.db[i].dbCfg.update); + } + if (g_Dbs.db[i].dbCfg.minRows > 0) { + fprintf(fp, " minRows: %d\n", g_Dbs.db[i].dbCfg.minRows); + } + if (g_Dbs.db[i].dbCfg.maxRows > 0) { + fprintf(fp, " maxRows: %d\n", g_Dbs.db[i].dbCfg.maxRows); + } + if (g_Dbs.db[i].dbCfg.comp > 0) { + fprintf(fp, " comp: %d\n", g_Dbs.db[i].dbCfg.comp); + } + if (g_Dbs.db[i].dbCfg.walLevel > 0) { + fprintf(fp, " walLevel: %d\n", g_Dbs.db[i].dbCfg.walLevel); + } + if (g_Dbs.db[i].dbCfg.fsync > 0) { + fprintf(fp, " fsync: %d\n", g_Dbs.db[i].dbCfg.fsync); + } + if (g_Dbs.db[i].dbCfg.quorum > 0) { + fprintf(fp, " quorum: %d\n", g_Dbs.db[i].dbCfg.quorum); + } + if (g_Dbs.db[i].dbCfg.precision[0] != 0) { + if ((0 == strncasecmp(g_Dbs.db[i].dbCfg.precision, "ms", 2)) || (0 == strncasecmp(g_Dbs.db[i].dbCfg.precision, "us", 2))) { + fprintf(fp, " precision: %s\n", g_Dbs.db[i].dbCfg.precision); + } else { + fprintf(fp, " precision error: %s\n", g_Dbs.db[i].dbCfg.precision); + } + } + + fprintf(fp, " super table count: %d\n", g_Dbs.db[i].superTblCount); + for (int j = 0; j < g_Dbs.db[i].superTblCount; j++) { + fprintf(fp, " super table[%d]:\n", j); + + fprintf(fp, " stbName: %s\n", g_Dbs.db[i].superTbls[j].sTblName); + + if (PRE_CREATE_SUBTBL == g_Dbs.db[i].superTbls[j].autoCreateTable) { + fprintf(fp, " autoCreateTable: %s\n", "no"); + } else if (AUTO_CREATE_SUBTBL == g_Dbs.db[i].superTbls[j].autoCreateTable) { + fprintf(fp, " autoCreateTable: %s\n", "yes"); + } else { + fprintf(fp, " autoCreateTable: %s\n", "error"); + } + + if (TBL_NO_EXISTS == g_Dbs.db[i].superTbls[j].childTblExists) { + fprintf(fp, " childTblExists: %s\n", "no"); + } else if (TBL_ALREADY_EXISTS == g_Dbs.db[i].superTbls[j].childTblExists) { + fprintf(fp, " childTblExists: %s\n", "yes"); + } else { + fprintf(fp, " childTblExists: %s\n", "error"); + } + + fprintf(fp, " childTblCount: %d\n", g_Dbs.db[i].superTbls[j].childTblCount); + fprintf(fp, " childTblPrefix: %s\n", g_Dbs.db[i].superTbls[j].childTblPrefix); + fprintf(fp, " dataSource: %s\n", g_Dbs.db[i].superTbls[j].dataSource); + fprintf(fp, " insertMode: %s\n", g_Dbs.db[i].superTbls[j].insertMode); + fprintf(fp, " insertRate: %d\n", g_Dbs.db[i].superTbls[j].insertRate); + fprintf(fp, " insertRows: %"PRId64"\n", g_Dbs.db[i].superTbls[j].insertRows); + + if (0 == g_Dbs.db[i].superTbls[j].multiThreadWriteOneTbl) { + fprintf(fp, " multiThreadWriteOneTbl: no\n"); + }else { + fprintf(fp, " multiThreadWriteOneTbl: yes\n"); + } + fprintf(fp, " numberOfTblInOneSql: %d\n", g_Dbs.db[i].superTbls[j].numberOfTblInOneSql); + fprintf(fp, " rowsPerTbl: %d\n", g_Dbs.db[i].superTbls[j].rowsPerTbl); + fprintf(fp, " disorderRange: %d\n", g_Dbs.db[i].superTbls[j].disorderRange); + fprintf(fp, " disorderRatio: %d\n", g_Dbs.db[i].superTbls[j].disorderRatio); + fprintf(fp, " maxSqlLen: %d\n", g_Dbs.db[i].superTbls[j].maxSqlLen); + + fprintf(fp, " timeStampStep: %d\n", g_Dbs.db[i].superTbls[j].timeStampStep); + fprintf(fp, " startTimestamp: %s\n", g_Dbs.db[i].superTbls[j].startTimestamp); + fprintf(fp, " sampleFormat: %s\n", g_Dbs.db[i].superTbls[j].sampleFormat); + fprintf(fp, " sampleFile: %s\n", g_Dbs.db[i].superTbls[j].sampleFile); + fprintf(fp, " tagsFile: %s\n", g_Dbs.db[i].superTbls[j].tagsFile); + + fprintf(fp, " columnCount: %d\n ", g_Dbs.db[i].superTbls[j].columnCount); + for (int k = 0; k < g_Dbs.db[i].superTbls[j].columnCount; k++) { + //printf("dataType:%s, dataLen:%d\t", g_Dbs.db[i].superTbls[j].columns[k].dataType, g_Dbs.db[i].superTbls[j].columns[k].dataLen); + if ((0 == strncasecmp(g_Dbs.db[i].superTbls[j].columns[k].dataType, "binary", 6)) || (0 == strncasecmp(g_Dbs.db[i].superTbls[j].columns[k].dataType, "nchar", 5))) { + fprintf(fp, "column[%d]:%s(%d) ", k, g_Dbs.db[i].superTbls[j].columns[k].dataType, g_Dbs.db[i].superTbls[j].columns[k].dataLen); + } else { + fprintf(fp, "column[%d]:%s ", k, g_Dbs.db[i].superTbls[j].columns[k].dataType); + } + } + fprintf(fp, "\n"); + + fprintf(fp, " tagCount: %d\n ", g_Dbs.db[i].superTbls[j].tagCount); + for (int k = 0; k < g_Dbs.db[i].superTbls[j].tagCount; k++) { + //printf("dataType:%s, dataLen:%d\t", g_Dbs.db[i].superTbls[j].tags[k].dataType, g_Dbs.db[i].superTbls[j].tags[k].dataLen); + if ((0 == strncasecmp(g_Dbs.db[i].superTbls[j].tags[k].dataType, "binary", 6)) || (0 == strncasecmp(g_Dbs.db[i].superTbls[j].tags[k].dataType, "nchar", 5))) { + fprintf(fp, "tag[%d]:%s(%d) ", k, g_Dbs.db[i].superTbls[j].tags[k].dataType, g_Dbs.db[i].superTbls[j].tags[k].dataLen); + } else { + fprintf(fp, "tag[%d]:%s ", k, g_Dbs.db[i].superTbls[j].tags[k].dataType); + } + } + fprintf(fp, "\n"); + } + fprintf(fp, "\n"); + } + fprintf(fp, "================ insert.json parse result END ================\n\n"); +} + +static void printfQueryMeta() { + printf("\033[1m\033[40;32m================ query.json parse result ================\033[0m\n"); + printf("host: \033[33m%s:%u\033[0m\n", g_queryInfo.host, g_queryInfo.port); + printf("user: \033[33m%s\033[0m\n", g_queryInfo.user); + printf("password: \033[33m%s\033[0m\n", g_queryInfo.password); + printf("database name: \033[33m%s\033[0m\n", g_queryInfo.dbName); + + printf("\n"); + printf("specified table query info: \n"); + printf("query interval: \033[33m%d\033[0m\n", g_queryInfo.superQueryInfo.rate); + printf("concurrent: \033[33m%d\033[0m\n", g_queryInfo.superQueryInfo.concurrent); + printf("sqlCount: \033[33m%d\033[0m\n", g_queryInfo.superQueryInfo.sqlCount); + + if (SUBSCRIBE_MODE == g_jsonType) { + printf("mod: \033[33m%d\033[0m\n", g_queryInfo.superQueryInfo.subscribeMode); + printf("interval: \033[33m%d\033[0m\n", g_queryInfo.superQueryInfo.subscribeInterval); + printf("restart: \033[33m%d\033[0m\n", g_queryInfo.superQueryInfo.subscribeRestart); + printf("keepProgress: \033[33m%d\033[0m\n", g_queryInfo.superQueryInfo.subscribeKeepProgress); } - FILE *fp = fopen(arguments.output_file, "a"); - if (NULL == fp) { - fprintf(stderr, "Failed to open %s for writing\n", arguments.output_file); - return 1; - }; - time_t tTime = time(NULL); - struct tm tm = *localtime(&tTime); - printf("###################################################################\n"); - printf("# Server IP: %s:%hu\n", ip_addr == NULL ? "localhost" : ip_addr, port); - printf("# User: %s\n", user); - printf("# Password: %s\n", pass); - printf("# Use metric: %s\n", use_metric ? "true" : "false"); - printf("# Datatype of Columns: %s\n", dataString); - printf("# Binary Length(If applicable): %d\n", - (strncasecmp(dataString, "BINARY", 6) == 0 || strncasecmp(dataString, "NCHAR", 5) == 0) ? len_of_binary : -1); - printf("# Number of Columns per record: %d\n", ncols_per_record); - printf("# Number of Threads: %d\n", threads); - printf("# Number of Tables: %d\n", ntables); - printf("# Number of Data per Table: %d\n", nrecords_per_table); - printf("# Records/Request: %d\n", nrecords_per_request); - printf("# Database name: %s\n", db_name); - printf("# Table prefix: %s\n", tb_prefix); - if (order == 1) - { - printf("# Data order: %d\n", order); - printf("# Data out of order rate: %d\n", rate); - + for (int i = 0; i < g_queryInfo.superQueryInfo.sqlCount; i++) { + printf(" sql[%d]: \033[33m%s\033[0m\n", i, g_queryInfo.superQueryInfo.sql[i]); } - printf("# Delete method: %d\n", method_of_delete); - printf("# Test time: %d-%02d-%02d %02d:%02d:%02d\n", tm.tm_year + 1900, tm.tm_mon + 1, - tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); + printf("\n"); + printf("super table query info: \n"); + printf("query interval: \033[33m%d\033[0m\n", g_queryInfo.subQueryInfo.rate); + printf("threadCnt: \033[33m%d\033[0m\n", g_queryInfo.subQueryInfo.threadCnt); + printf("childTblCount: \033[33m%d\033[0m\n", g_queryInfo.subQueryInfo.childTblCount); + printf("stable name: \033[33m%s\033[0m\n", g_queryInfo.subQueryInfo.sTblName); - if (!answer_yes) { - printf("###################################################################\n\n"); - printf("Press enter key to continue"); - (void)getchar(); + if (SUBSCRIBE_MODE == g_jsonType) { + printf("mod: \033[33m%d\033[0m\n", g_queryInfo.subQueryInfo.subscribeMode); + printf("interval: \033[33m%d\033[0m\n", g_queryInfo.subQueryInfo.subscribeInterval); + printf("restart: \033[33m%d\033[0m\n", g_queryInfo.subQueryInfo.subscribeRestart); + printf("keepProgress: \033[33m%d\033[0m\n", g_queryInfo.subQueryInfo.subscribeKeepProgress); + } + + printf("sqlCount: \033[33m%d\033[0m\n", g_queryInfo.subQueryInfo.sqlCount); + for (int i = 0; i < g_queryInfo.subQueryInfo.sqlCount; i++) { + printf(" sql[%d]: \033[33m%s\033[0m\n", i, g_queryInfo.subQueryInfo.sql[i]); + } + printf("\n"); + printf("\033[1m\033[40;32m================ query.json parse result ================\033[0m\n"); +} + + +static char* xFormatTimestamp(char* buf, int64_t val, int precision) { + time_t tt; + if (precision == TSDB_TIME_PRECISION_MICRO) { + tt = (time_t)(val / 1000000); + } else { + tt = (time_t)(val / 1000); } - fprintf(fp, "###################################################################\n"); - fprintf(fp, "# Server IP: %s:%hu\n", ip_addr == NULL ? "localhost" : ip_addr, port); - fprintf(fp, "# User: %s\n", user); - fprintf(fp, "# Password: %s\n", pass); - fprintf(fp, "# Use metric: %s\n", use_metric ? "true" : "false"); - fprintf(fp, "# Datatype of Columns: %s\n", dataString); - fprintf(fp, "# Binary Length(If applicable): %d\n", - (strncasecmp(dataString, "BINARY", 6) == 0 || strncasecmp(dataString, "NCHAR", 5) == 0) ? len_of_binary : -1); - fprintf(fp, "# Number of Columns per record: %d\n", ncols_per_record); - fprintf(fp, "# Number of Threads: %d\n", threads); - fprintf(fp, "# Number of Tables: %d\n", ntables); - fprintf(fp, "# Number of Data per Table: %d\n", nrecords_per_table); - fprintf(fp, "# Records/Request: %d\n", nrecords_per_request); - fprintf(fp, "# Database name: %s\n", db_name); - fprintf(fp, "# Table prefix: %s\n", tb_prefix); - if (order == 1) - { - printf("# Data order: %d\n", order); - printf("# Data out of order rate: %d\n", rate); - +/* comment out as it make testcases like select_with_tags.sim fail. + but in windows, this may cause the call to localtime crash if tt < 0, + need to find a better solution. + if (tt < 0) { + tt = 0; } - fprintf(fp, "# Test time: %d-%02d-%02d %02d:%02d:%02d\n", tm.tm_year + 1900, tm.tm_mon + 1, - tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); - fprintf(fp, "###################################################################\n\n"); - fprintf(fp, "| WRecords | Records/Second | Requests/Second | WLatency(ms) |\n"); + */ +#ifdef WINDOWS + if (tt < 0) tt = 0; +#endif + + struct tm* ptm = localtime(&tt); + size_t pos = strftime(buf, 32, "%Y-%m-%d %H:%M:%S", ptm); + + if (precision == TSDB_TIME_PRECISION_MICRO) { + sprintf(buf + pos, ".%06d", (int)(val % 1000000)); + } else { + sprintf(buf + pos, ".%03d", (int)(val % 1000)); + } + + return buf; +} + +static void xDumpFieldToFile(FILE* fp, const char* val, TAOS_FIELD* field, int32_t length, int precision) { + if (val == NULL) { + fprintf(fp, "%s", TSDB_DATA_NULL_STR); + return; + } + + char buf[TSDB_MAX_BYTES_PER_ROW]; + switch (field->type) { + case TSDB_DATA_TYPE_BOOL: + fprintf(fp, "%d", ((((int32_t)(*((char *)val))) == 1) ? 1 : 0)); + break; + case TSDB_DATA_TYPE_TINYINT: + fprintf(fp, "%d", *((int8_t *)val)); + break; + case TSDB_DATA_TYPE_SMALLINT: + fprintf(fp, "%d", *((int16_t *)val)); + break; + case TSDB_DATA_TYPE_INT: + fprintf(fp, "%d", *((int32_t *)val)); + break; + case TSDB_DATA_TYPE_BIGINT: + fprintf(fp, "%" PRId64, *((int64_t *)val)); + break; + case TSDB_DATA_TYPE_FLOAT: + fprintf(fp, "%.5f", GET_FLOAT_VAL(val)); + break; + case TSDB_DATA_TYPE_DOUBLE: + fprintf(fp, "%.9f", GET_DOUBLE_VAL(val)); + break; + case TSDB_DATA_TYPE_BINARY: + case TSDB_DATA_TYPE_NCHAR: + memcpy(buf, val, length); + buf[length] = 0; + fprintf(fp, "\'%s\'", buf); + break; + case TSDB_DATA_TYPE_TIMESTAMP: + xFormatTimestamp(buf, *(int64_t*)val, precision); + fprintf(fp, "'%s'", buf); + break; + default: + break; + } +} + +static int xDumpResultToFile(const char* fname, TAOS_RES* tres) { + TAOS_ROW row = taos_fetch_row(tres); + if (row == NULL) { + return 0; + } + + FILE* fp = fopen(fname, "at"); + if (fp == NULL) { + fprintf(stderr, "ERROR: failed to open file: %s\n", fname); + return -1; + } + + int num_fields = taos_num_fields(tres); + TAOS_FIELD *fields = taos_fetch_fields(tres); + int precision = taos_result_precision(tres); + + for (int col = 0; col < num_fields; col++) { + if (col > 0) { + fprintf(fp, ","); + } + fprintf(fp, "%s", fields[col].name); + } + fputc('\n', fp); + + int numOfRows = 0; + do { + int32_t* length = taos_fetch_lengths(tres); + for (int i = 0; i < num_fields; i++) { + if (i > 0) { + fputc(',', fp); + } + xDumpFieldToFile(fp, (const char*)row[i], fields +i, length[i], precision); + } + fputc('\n', fp); + + numOfRows++; + row = taos_fetch_row(tres); + } while( row != NULL); + + fclose(fp); + + return numOfRows; +} + +static int getDbFromServer(TAOS * taos, SDbInfo** dbInfos) { + TAOS_RES * res; + TAOS_ROW row = NULL; + int count = 0; + + res = taos_query(taos, "show databases;"); + int32_t code = taos_errno(res); + + if (code != 0) { + fprintf(stderr, "failed to run , reason: %s\n", taos_errstr(res)); + return -1; + } + + TAOS_FIELD *fields = taos_fetch_fields(res); + + while ((row = taos_fetch_row(res)) != NULL) { + // sys database name : 'log' + if (strncasecmp(row[TSDB_SHOW_DB_NAME_INDEX], "log", fields[TSDB_SHOW_DB_NAME_INDEX].bytes) == 0) continue; + + dbInfos[count] = (SDbInfo *)calloc(1, sizeof(SDbInfo)); + if (dbInfos[count] == NULL) { + fprintf(stderr, "failed to allocate memory for some dbInfo[%d]\n", count); + return -1; + } + + strncpy(dbInfos[count]->name, (char *)row[TSDB_SHOW_DB_NAME_INDEX], fields[TSDB_SHOW_DB_NAME_INDEX].bytes); + xFormatTimestamp(dbInfos[count]->create_time, *(int64_t*)row[TSDB_SHOW_DB_CREATED_TIME_INDEX], TSDB_TIME_PRECISION_MILLI); + dbInfos[count]->ntables = *((int32_t *)row[TSDB_SHOW_DB_NTABLES_INDEX]); + dbInfos[count]->vgroups = *((int32_t *)row[TSDB_SHOW_DB_VGROUPS_INDEX]); + dbInfos[count]->replica = *((int16_t *)row[TSDB_SHOW_DB_REPLICA_INDEX]); + dbInfos[count]->quorum = *((int16_t *)row[TSDB_SHOW_DB_QUORUM_INDEX]); + dbInfos[count]->days = *((int16_t *)row[TSDB_SHOW_DB_DAYS_INDEX]); + + strncpy(dbInfos[count]->keeplist, (char *)row[TSDB_SHOW_DB_KEEP_INDEX], fields[TSDB_SHOW_DB_KEEP_INDEX].bytes); + dbInfos[count]->cache = *((int32_t *)row[TSDB_SHOW_DB_CACHE_INDEX]); + dbInfos[count]->blocks = *((int32_t *)row[TSDB_SHOW_DB_BLOCKS_INDEX]); + dbInfos[count]->minrows = *((int32_t *)row[TSDB_SHOW_DB_MINROWS_INDEX]); + dbInfos[count]->maxrows = *((int32_t *)row[TSDB_SHOW_DB_MAXROWS_INDEX]); + dbInfos[count]->wallevel = *((int8_t *)row[TSDB_SHOW_DB_WALLEVEL_INDEX]); + dbInfos[count]->fsync = *((int32_t *)row[TSDB_SHOW_DB_FSYNC_INDEX]); + dbInfos[count]->comp = (int8_t)(*((int8_t *)row[TSDB_SHOW_DB_COMP_INDEX])); + dbInfos[count]->cachelast = (int8_t)(*((int8_t *)row[TSDB_SHOW_DB_CACHELAST_INDEX])); + + strncpy(dbInfos[count]->precision, (char *)row[TSDB_SHOW_DB_PRECISION_INDEX], fields[TSDB_SHOW_DB_PRECISION_INDEX].bytes); + dbInfos[count]->update = *((int8_t *)row[TSDB_SHOW_DB_UPDATE_INDEX]); + strncpy(dbInfos[count]->status, (char *)row[TSDB_SHOW_DB_STATUS_INDEX], fields[TSDB_SHOW_DB_STATUS_INDEX].bytes); + + count++; + if (count > MAX_DATABASE_COUNT) { + fprintf(stderr, "The database count overflow than %d\n", MAX_DATABASE_COUNT); + break; + } + } + + return count; +} + +static void printfDbInfoForQueryToFile(char* filename, SDbInfo* dbInfos, int index) { + FILE *fp = NULL; + if (filename[0] != 0) { + fp = fopen(filename, "at"); + if (fp == NULL) { + fprintf(stderr, "failed to open file: %s\n", filename); + return; + } + } + + fprintf(fp, "================ database[%d] ================\n", index); + fprintf(fp, "name: %s\n", dbInfos->name); + fprintf(fp, "created_time: %s\n", dbInfos->create_time); + fprintf(fp, "ntables: %d\n", dbInfos->ntables); + fprintf(fp, "vgroups: %d\n", dbInfos->vgroups); + fprintf(fp, "replica: %d\n", dbInfos->replica); + fprintf(fp, "quorum: %d\n", dbInfos->quorum); + fprintf(fp, "days: %d\n", dbInfos->days); + fprintf(fp, "keep0,keep1,keep(D): %s\n", dbInfos->keeplist); + fprintf(fp, "cache(MB): %d\n", dbInfos->cache); + fprintf(fp, "blocks: %d\n", dbInfos->blocks); + fprintf(fp, "minrows: %d\n", dbInfos->minrows); + fprintf(fp, "maxrows: %d\n", dbInfos->maxrows); + fprintf(fp, "wallevel: %d\n", dbInfos->wallevel); + fprintf(fp, "fsync: %d\n", dbInfos->fsync); + fprintf(fp, "comp: %d\n", dbInfos->comp); + fprintf(fp, "cachelast: %d\n", dbInfos->cachelast); + fprintf(fp, "precision: %s\n", dbInfos->precision); + fprintf(fp, "update: %d\n", dbInfos->update); + fprintf(fp, "status: %s\n", dbInfos->status); + fprintf(fp, "\n"); + + fclose(fp); +} + +static void printfQuerySystemInfo(TAOS * taos) { + char filename[MAX_QUERY_SQL_LENGTH+1] = {0}; + char buffer[MAX_QUERY_SQL_LENGTH+1] = {0}; + TAOS_RES* res; + + time_t t; + struct tm* lt; + time(&t); + lt = localtime(&t); + snprintf(filename, MAX_QUERY_SQL_LENGTH, "querySystemInfo-%d-%d-%d %d:%d:%d", lt->tm_year+1900, lt->tm_mon, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec); + + // show variables + res = taos_query(taos, "show variables;"); + //getResult(res, filename); + xDumpResultToFile(filename, res); + + // show dnodes + res = taos_query(taos, "show dnodes;"); + xDumpResultToFile(filename, res); + //getResult(res, filename); + + // show databases + res = taos_query(taos, "show databases;"); + SDbInfo** dbInfos = (SDbInfo **)calloc(MAX_DATABASE_COUNT, sizeof(SDbInfo *)); + if (dbInfos == NULL) { + fprintf(stderr, "failed to allocate memory\n"); + return; + } + int dbCount = getDbFromServer(taos, dbInfos); + if (dbCount <= 0) return; + + for (int i = 0; i < dbCount; i++) { + // printf database info + printfDbInfoForQueryToFile(filename, dbInfos[i], i); + + // show db.vgroups + snprintf(buffer, MAX_QUERY_SQL_LENGTH, "show %s.vgroups;", dbInfos[i]->name); + res = taos_query(taos, buffer); + xDumpResultToFile(filename, res); + + // show db.stables + snprintf(buffer, MAX_QUERY_SQL_LENGTH, "show %s.stables;", dbInfos[i]->name); + res = taos_query(taos, buffer); + xDumpResultToFile(filename, res); + + free(dbInfos[i]); + } + + free(dbInfos); + +} + + +#ifdef TD_LOWA_CURL +static size_t responseCallback(void *contents, size_t size, size_t nmemb, void *userp) +{ + size_t realsize = size * nmemb; + curlMemInfo* mem = (curlMemInfo*)userp; + + char *ptr = realloc(mem->buf, mem->sizeleft + realsize + 1); + if(ptr == NULL) { + /* out of memory! */ + printf("not enough memory (realloc returned NULL)\n"); + return 0; + } + + mem->buf = ptr; + memcpy(&(mem->buf[mem->sizeleft]), contents, realsize); + mem->sizeleft += realsize; + mem->buf[mem->sizeleft] = 0; + + //printf("result:%s\n\n", mem->buf); + + return realsize; +} + +void curlProceLogin(void) +{ + CURL *curl_handle; + CURLcode res; + + curlMemInfo chunk; + + chunk.buf = malloc(1); /* will be grown as needed by the realloc above */ + chunk.sizeleft = 0; /* no data at this point */ + + //curl_global_init(CURL_GLOBAL_ALL); + + /* init the curl session */ + curl_handle = curl_easy_init(); + + curl_easy_setopt(curl_handle,CURLOPT_POSTFIELDS,""); + curl_easy_setopt(curl_handle, CURLOPT_POST, 1); + + char dstUrl[128] = {0}; + snprintf(dstUrl, 128, "http://%s:6041/rest/login/root/taosdata", g_Dbs.host); + + /* specify URL to get */ + curl_easy_setopt(curl_handle, CURLOPT_URL, dstUrl); + + /* send all data to this function */ + curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, responseCallback); + + /* we pass our 'chunk' struct to the callback function */ + curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk); + + /* do it! */ + res = curl_easy_perform(curl_handle); + + /* check for errors */ + if(res != CURLE_OK) { + fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); + } + else { + //printf("response len:%lu, content: %s \n", (unsigned long)chunk.sizeleft, chunk.buf); + ; + } + + /* cleanup curl stuff */ + curl_easy_cleanup(curl_handle); + + free(chunk.buf); + + /* we're done with libcurl, so clean it up */ + //curl_global_cleanup(); + + return; +} + +int curlProceSql(char* host, uint16_t port, char* sqlstr, CURL *curl_handle) +{ + //curlProceLogin(); + + //CURL *curl_handle; + CURLcode res; + + curlMemInfo chunk; + + chunk.buf = malloc(1); /* will be grown as needed by the realloc above */ + chunk.sizeleft = 0; /* no data at this point */ + + + char dstUrl[128] = {0}; + snprintf(dstUrl, 128, "http://%s:%u/rest/sql", host, port+TSDB_PORT_HTTP); + + //curl_global_init(CURL_GLOBAL_ALL); + + /* init the curl session */ + //curl_handle = curl_easy_init(); + + //curl_easy_setopt(curl_handle,CURLOPT_POSTFIELDS,""); + curl_easy_setopt(curl_handle, CURLOPT_POST, 1L); + + /* specify URL to get */ + curl_easy_setopt(curl_handle, CURLOPT_URL, dstUrl); + + /* enable TCP keep-alive for this transfer */ + curl_easy_setopt(curl_handle, CURLOPT_TCP_KEEPALIVE, 1L); + /* keep-alive idle time to 120 seconds */ + curl_easy_setopt(curl_handle, CURLOPT_TCP_KEEPIDLE, 120L); + /* interval time between keep-alive probes: 60 seconds */ + curl_easy_setopt(curl_handle, CURLOPT_TCP_KEEPINTVL, 60L); + + /* send all data to this function */ + curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, responseCallback); + + /* we pass our 'chunk' struct to the callback function */ + curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk); + + struct curl_slist *list = NULL; + list = curl_slist_append(list, "Authorization: Basic cm9vdDp0YW9zZGF0YQ=="); + curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, list); + curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, list); + + /* Set the expected upload size. */ + curl_easy_setopt(curl_handle, CURLOPT_POSTFIELDSIZE_LARGE, (curl_off_t)strlen(sqlstr)); + curl_easy_setopt(curl_handle, CURLOPT_POSTFIELDS, sqlstr); + + /* get it! */ + res = curl_easy_perform(curl_handle); + + /* check for errors */ + if(res != CURLE_OK) { + fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); + return -1; + } + else { + /* curl_easy_perform() block end and return result */ + //printf("[%32.32s] sql response len:%lu, content: %s \n\n", sqlstr, (unsigned long)chunk.sizeleft, chunk.buf); + ; + } + + curl_slist_free_all(list); /* free the list again */ + + /* cleanup curl stuff */ + //curl_easy_cleanup(curl_handle); + + free(chunk.buf); + + /* we're done with libcurl, so clean it up */ + //curl_global_cleanup(); + + return 0; +} +#endif + +char* getTagValueFromTagSample( SSuperTable* stbInfo, int tagUsePos) { + char* dataBuf = (char*)calloc(TSDB_MAX_SQL_LEN+1, 1); + if (NULL == dataBuf) { + printf("calloc failed! size:%d\n", TSDB_MAX_SQL_LEN+1); + return NULL; + } + + int dataLen = 0; + dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, "(%s)", stbInfo->tagDataBuf + stbInfo->lenOfTagOfOneRow * tagUsePos); + + return dataBuf; +} + +char* generateTagVaulesForStb(SSuperTable* stbInfo) { + char* dataBuf = (char*)calloc(TSDB_MAX_SQL_LEN+1, 1); + if (NULL == dataBuf) { + printf("calloc failed! size:%d\n", TSDB_MAX_SQL_LEN+1); + return NULL; + } + + int dataLen = 0; + dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, "("); + for (int i = 0; i < stbInfo->tagCount; i++) { + if ((0 == strncasecmp(stbInfo->tags[i].dataType, "binary", 6)) || (0 == strncasecmp(stbInfo->tags[i].dataType, "nchar", 5))) { + if (stbInfo->tags[i].dataLen > TSDB_MAX_BINARY_LEN) { + printf("binary or nchar length overflow, max size:%u\n", (uint32_t)TSDB_MAX_BINARY_LEN); + tmfree(dataBuf); + return NULL; + } + + char* buf = (char*)calloc(stbInfo->tags[i].dataLen+1, 1); + if (NULL == buf) { + printf("calloc failed! size:%d\n", stbInfo->tags[i].dataLen); + tmfree(dataBuf); + return NULL; + } + rand_string(buf, stbInfo->tags[i].dataLen); + dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, "\'%s\', ", buf); + tmfree(buf); + } else if (0 == strncasecmp(stbInfo->tags[i].dataType, "int", 3)) { + dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, "%d, ", rand_int()); + } else if (0 == strncasecmp(stbInfo->tags[i].dataType, "bigint", 6)) { + dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, "%"PRId64", ", rand_bigint()); + } else if (0 == strncasecmp(stbInfo->tags[i].dataType, "float", 5)) { + dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, "%f, ", rand_float()); + } else if (0 == strncasecmp(stbInfo->tags[i].dataType, "double", 6)) { + dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, "%f, ", rand_double()); + } else if (0 == strncasecmp(stbInfo->tags[i].dataType, "smallint", 8)) { + dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, "%d, ", rand_smallint()); + } else if (0 == strncasecmp(stbInfo->tags[i].dataType, "tinyint", 7)) { + dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, "%d, ", rand_tinyint()); + } else if (0 == strncasecmp(stbInfo->tags[i].dataType, "bool", 4)) { + dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, "%d, ", rand_bool()); + } else if (0 == strncasecmp(stbInfo->tags[i].dataType, "timestamp", 4)) { + dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, "%"PRId64", ", rand_bigint()); + } else { + printf("No support data type: %s\n", stbInfo->tags[i].dataType); + tmfree(dataBuf); + return NULL; + } + } + dataLen -= 2; + dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, ")"); + return dataBuf; +} + +static int calcRowLen(SSuperTable* superTbls) { + int colIndex; + int lenOfOneRow = 0; + + for (colIndex = 0; colIndex < superTbls->columnCount; colIndex++) { + char* dataType = superTbls->columns[colIndex].dataType; + + if (strcasecmp(dataType, "BINARY") == 0) { + lenOfOneRow += superTbls->columns[colIndex].dataLen + 3; + } else if (strcasecmp(dataType, "NCHAR") == 0) { + lenOfOneRow += superTbls->columns[colIndex].dataLen + 3; + } else if (strcasecmp(dataType, "INT") == 0) { + lenOfOneRow += 11; + } else if (strcasecmp(dataType, "BIGINT") == 0) { + lenOfOneRow += 21; + } else if (strcasecmp(dataType, "SMALLINT") == 0) { + lenOfOneRow += 6; + } else if (strcasecmp(dataType, "TINYINT") == 0) { + lenOfOneRow += 4; + } else if (strcasecmp(dataType, "BOOL") == 0) { + lenOfOneRow += 6; + } else if (strcasecmp(dataType, "FLOAT") == 0) { + lenOfOneRow += 22; + } else if (strcasecmp(dataType, "DOUBLE") == 0) { + lenOfOneRow += 42; + } else if (strcasecmp(dataType, "TIMESTAMP") == 0) { + lenOfOneRow += 21; + } else { + printf("get error data type : %s\n", dataType); + exit(-1); + } + } + + superTbls->lenOfOneRow = lenOfOneRow + 20; // timestamp + + int tagIndex; + int lenOfTagOfOneRow = 0; + for (tagIndex = 0; tagIndex < superTbls->tagCount; tagIndex++) { + char* dataType = superTbls->tags[tagIndex].dataType; + + if (strcasecmp(dataType, "BINARY") == 0) { + lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 3; + } else if (strcasecmp(dataType, "NCHAR") == 0) { + lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 3; + } else if (strcasecmp(dataType, "INT") == 0) { + lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 11; + } else if (strcasecmp(dataType, "BIGINT") == 0) { + lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 21; + } else if (strcasecmp(dataType, "SMALLINT") == 0) { + lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 6; + } else if (strcasecmp(dataType, "TINYINT") == 0) { + lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 4; + } else if (strcasecmp(dataType, "BOOL") == 0) { + lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 6; + } else if (strcasecmp(dataType, "FLOAT") == 0) { + lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 22; + } else if (strcasecmp(dataType, "DOUBLE") == 0) { + lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 42; + } else { + printf("get error tag type : %s\n", dataType); + exit(-1); + } + } + + superTbls->lenOfTagOfOneRow = lenOfTagOfOneRow; + + return 0; +} + + +static int getAllChildNameOfSuperTable(TAOS * taos, char* dbName, char* sTblName, char** childTblNameOfSuperTbl, int* childTblCountOfSuperTbl) { + char command[BUFFER_SIZE] = "\0"; + TAOS_RES * res; + TAOS_ROW row = NULL; + + char* childTblName = *childTblNameOfSuperTbl; + + //get all child table name use cmd: select tbname from superTblName; + snprintf(command, BUFFER_SIZE, "select tbname from %s.%s", dbName, sTblName); + res = taos_query(taos, command); + int32_t code = taos_errno(res); + if (code != 0) { + printf("failed to run command %s\n", command); + taos_free_result(res); + taos_close(taos); + exit(-1); + } + + int childTblCount = 10000; + int count = 0; + childTblName = (char*)calloc(1, childTblCount * TSDB_TABLE_NAME_LEN); + char* pTblName = childTblName; + while ((row = taos_fetch_row(res)) != NULL) { + int32_t* len = taos_fetch_lengths(res); + strncpy(pTblName, (char *)row[0], len[0]); + //printf("==== sub table name: %s\n", pTblName); + count++; + if (count >= childTblCount - 1) { + char *tmp = realloc(childTblName, (size_t)childTblCount*1.5*TSDB_TABLE_NAME_LEN+1); + if (tmp != NULL) { + childTblName = tmp; + childTblCount = (int)(childTblCount*1.5); + memset(childTblName + count*TSDB_TABLE_NAME_LEN, 0, (size_t)((childTblCount-count)*TSDB_TABLE_NAME_LEN)); + } else { + // exit, if allocate more memory failed + printf("realloc fail for save child table name of %s.%s\n", dbName, sTblName); + tmfree(childTblName); + taos_free_result(res); + taos_close(taos); + exit(-1); + } + } + pTblName = childTblName + count * TSDB_TABLE_NAME_LEN; + } + + *childTblCountOfSuperTbl = count; + *childTblNameOfSuperTbl = childTblName; + + taos_free_result(res); + return 0; +} + +static int getSuperTableFromServer(TAOS * taos, char* dbName, SSuperTable* superTbls) { + char command[BUFFER_SIZE] = "\0"; + TAOS_RES * res; + TAOS_ROW row = NULL; + int count = 0; + + //get schema use cmd: describe superTblName; + snprintf(command, BUFFER_SIZE, "describe %s.%s", dbName, superTbls->sTblName); + res = taos_query(taos, command); + int32_t code = taos_errno(res); + if (code != 0) { + printf("failed to run command %s\n", command); + taos_free_result(res); + return -1; + } + + int tagIndex = 0; + int columnIndex = 0; + TAOS_FIELD *fields = taos_fetch_fields(res); + while ((row = taos_fetch_row(res)) != NULL) { + if (0 == count) { + count++; + continue; + } + + if (strcmp((char *)row[TSDB_DESCRIBE_METRIC_NOTE_INDEX], "TAG") == 0) { + strncpy(superTbls->tags[tagIndex].field, (char *)row[TSDB_DESCRIBE_METRIC_FIELD_INDEX], fields[TSDB_DESCRIBE_METRIC_FIELD_INDEX].bytes); + strncpy(superTbls->tags[tagIndex].dataType, (char *)row[TSDB_DESCRIBE_METRIC_TYPE_INDEX], fields[TSDB_DESCRIBE_METRIC_TYPE_INDEX].bytes); + superTbls->tags[tagIndex].dataLen = *((int *)row[TSDB_DESCRIBE_METRIC_LENGTH_INDEX]); + strncpy(superTbls->tags[tagIndex].note, (char *)row[TSDB_DESCRIBE_METRIC_NOTE_INDEX], fields[TSDB_DESCRIBE_METRIC_NOTE_INDEX].bytes); + tagIndex++; + } else { + strncpy(superTbls->columns[columnIndex].field, (char *)row[TSDB_DESCRIBE_METRIC_FIELD_INDEX], fields[TSDB_DESCRIBE_METRIC_FIELD_INDEX].bytes); + strncpy(superTbls->columns[columnIndex].dataType, (char *)row[TSDB_DESCRIBE_METRIC_TYPE_INDEX], fields[TSDB_DESCRIBE_METRIC_TYPE_INDEX].bytes); + superTbls->columns[columnIndex].dataLen = *((int *)row[TSDB_DESCRIBE_METRIC_LENGTH_INDEX]); + strncpy(superTbls->columns[columnIndex].note, (char *)row[TSDB_DESCRIBE_METRIC_NOTE_INDEX], fields[TSDB_DESCRIBE_METRIC_NOTE_INDEX].bytes); + columnIndex++; + } + count++; + } + + superTbls->columnCount = columnIndex; + superTbls->tagCount = tagIndex; + taos_free_result(res); + + calcRowLen(superTbls); + + if (TBL_ALREADY_EXISTS == superTbls->childTblExists) { + //get all child table name use cmd: select tbname from superTblName; + getAllChildNameOfSuperTable(taos, dbName, superTbls->sTblName, &superTbls->childTblName, &superTbls->childTblCount); + } + return 0; +} + +static int createSuperTable(TAOS * taos, char* dbName, SSuperTable* superTbls, bool use_metric) { + char command[BUFFER_SIZE] = "\0"; + + char cols[STRING_LEN] = "\0"; + int colIndex; + int len = 0; + + int lenOfOneRow = 0; + for (colIndex = 0; colIndex < superTbls->columnCount; colIndex++) { + char* dataType = superTbls->columns[colIndex].dataType; + + if (strcasecmp(dataType, "BINARY") == 0) { + len += snprintf(cols + len, STRING_LEN - len, ", col%d %s(%d)", colIndex, "BINARY", superTbls->columns[colIndex].dataLen); + lenOfOneRow += superTbls->columns[colIndex].dataLen + 3; + } else if (strcasecmp(dataType, "NCHAR") == 0) { + len += snprintf(cols + len, STRING_LEN - len, ", col%d %s(%d)", colIndex, "NCHAR", superTbls->columns[colIndex].dataLen); + lenOfOneRow += superTbls->columns[colIndex].dataLen + 3; + } else if (strcasecmp(dataType, "INT") == 0) { + len += snprintf(cols + len, STRING_LEN - len, ", col%d %s", colIndex, "INT"); + lenOfOneRow += 11; + } else if (strcasecmp(dataType, "BIGINT") == 0) { + len += snprintf(cols + len, STRING_LEN - len, ", col%d %s", colIndex, "BIGINT"); + lenOfOneRow += 21; + } else if (strcasecmp(dataType, "SMALLINT") == 0) { + len += snprintf(cols + len, STRING_LEN - len, ", col%d %s", colIndex, "SMALLINT"); + lenOfOneRow += 6; + } else if (strcasecmp(dataType, "TINYINT") == 0) { + len += snprintf(cols + len, STRING_LEN - len, ", col%d %s", colIndex, "TINYINT"); + lenOfOneRow += 4; + } else if (strcasecmp(dataType, "BOOL") == 0) { + len += snprintf(cols + len, STRING_LEN - len, ", col%d %s", colIndex, "BOOL"); + lenOfOneRow += 6; + } else if (strcasecmp(dataType, "FLOAT") == 0) { + len += snprintf(cols + len, STRING_LEN - len, ", col%d %s", colIndex, "FLOAT"); + lenOfOneRow += 22; + } else if (strcasecmp(dataType, "DOUBLE") == 0) { + len += snprintf(cols + len, STRING_LEN - len, ", col%d %s", colIndex, "DOUBLE"); + lenOfOneRow += 42; + } else if (strcasecmp(dataType, "TIMESTAMP") == 0) { + len += snprintf(cols + len, STRING_LEN - len, ", col%d %s", colIndex, "TIMESTAMP"); + lenOfOneRow += 21; + } else { + taos_close(taos); + printf("config error data type : %s\n", dataType); + exit(-1); + } + } + + superTbls->lenOfOneRow = lenOfOneRow + 20; // timestamp + //printf("%s.%s column count:%d, column length:%d\n\n", g_Dbs.db[i].dbName, g_Dbs.db[i].superTbls[j].sTblName, g_Dbs.db[i].superTbls[j].columnCount, lenOfOneRow); + + // save for creating child table + superTbls->colsOfCreatChildTable = (char*)calloc(len+20, 1); + if (NULL == superTbls->colsOfCreatChildTable) { + printf("Failed when calloc, size:%d", len+1); + taos_close(taos); + exit(-1); + } + snprintf(superTbls->colsOfCreatChildTable, len+20, "(ts timestamp%s)", cols); + + if (use_metric) { + char tags[STRING_LEN] = "\0"; + int tagIndex; + len = 0; + + int lenOfTagOfOneRow = 0; + len += snprintf(tags + len, STRING_LEN - len, "("); + for (tagIndex = 0; tagIndex < superTbls->tagCount; tagIndex++) { + char* dataType = superTbls->tags[tagIndex].dataType; + + if (strcasecmp(dataType, "BINARY") == 0) { + len += snprintf(tags + len, STRING_LEN - len, "t%d %s(%d), ", tagIndex, "BINARY", superTbls->tags[tagIndex].dataLen); + lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 3; + } else if (strcasecmp(dataType, "NCHAR") == 0) { + len += snprintf(tags + len, STRING_LEN - len, "t%d %s(%d), ", tagIndex, "NCHAR", superTbls->tags[tagIndex].dataLen); + lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 3; + } else if (strcasecmp(dataType, "INT") == 0) { + len += snprintf(tags + len, STRING_LEN - len, "t%d %s, ", tagIndex, "INT"); + lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 11; + } else if (strcasecmp(dataType, "BIGINT") == 0) { + len += snprintf(tags + len, STRING_LEN - len, "t%d %s, ", tagIndex, "BIGINT"); + lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 21; + } else if (strcasecmp(dataType, "SMALLINT") == 0) { + len += snprintf(tags + len, STRING_LEN - len, "t%d %s, ", tagIndex, "SMALLINT"); + lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 6; + } else if (strcasecmp(dataType, "TINYINT") == 0) { + len += snprintf(tags + len, STRING_LEN - len, "t%d %s, ", tagIndex, "TINYINT"); + lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 4; + } else if (strcasecmp(dataType, "BOOL") == 0) { + len += snprintf(tags + len, STRING_LEN - len, "t%d %s, ", tagIndex, "BOOL"); + lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 6; + } else if (strcasecmp(dataType, "FLOAT") == 0) { + len += snprintf(tags + len, STRING_LEN - len, "t%d %s, ", tagIndex, "FLOAT"); + lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 22; + } else if (strcasecmp(dataType, "DOUBLE") == 0) { + len += snprintf(tags + len, STRING_LEN - len, "t%d %s, ", tagIndex, "DOUBLE"); + lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 42; + } else { + taos_close(taos); + printf("config error tag type : %s\n", dataType); + exit(-1); + } + } + len -= 2; + len += snprintf(tags + len, STRING_LEN - len, ")"); + + superTbls->lenOfTagOfOneRow = lenOfTagOfOneRow; + + snprintf(command, BUFFER_SIZE, "create table if not exists %s.%s (ts timestamp%s) tags %s", dbName, superTbls->sTblName, cols, tags); + if (0 != queryDbExec(taos, command, NO_INSERT_TYPE)) { + return -1; + } + printf("\ncreate supertable %s success!\n\n", superTbls->sTblName); + } + return 0; +} + + +static int createDatabases() { + TAOS * taos = NULL; + int ret = 0; taos_init(); - TAOS *taos = taos_connect(ip_addr, user, pass, NULL, port); + taos = taos_connect(g_Dbs.host, g_Dbs.user, g_Dbs.password, NULL, g_Dbs.port); if (taos == NULL) { fprintf(stderr, "Failed to connect to TDengine, reason:%s\n", taos_errstr(NULL)); - return 1; + exit(-1); } char command[BUFFER_SIZE] = "\0"; - sprintf(command, "drop database %s;", db_name); - TAOS_RES* res = taos_query(taos, command); - taos_free_result(res); - sprintf(command, "create database %s replica %d;", db_name, replica); - res = taos_query(taos, command); - taos_free_result(res); + for (int i = 0; i < g_Dbs.dbCount; i++) { + if (g_Dbs.db[i].drop) { + sprintf(command, "drop database if exists %s;", g_Dbs.db[i].dbName); + if (0 != queryDbExec(taos, command, NO_INSERT_TYPE)) { + taos_close(taos); + return -1; + } + } + + int dataLen = 0; + dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "create database if not exists %s ", g_Dbs.db[i].dbName); - char cols[STRING_LEN] = "\0"; - int colIndex = 0; - len = 0; + if (g_Dbs.db[i].dbCfg.blocks > 0) { + dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "blocks %d ", g_Dbs.db[i].dbCfg.blocks); + } + if (g_Dbs.db[i].dbCfg.cache > 0) { + dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "cache %d ", g_Dbs.db[i].dbCfg.cache); + } + if (g_Dbs.db[i].dbCfg.days > 0) { + dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "days %d ", g_Dbs.db[i].dbCfg.days); + } + if (g_Dbs.db[i].dbCfg.keep > 0) { + dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "keep %d ", g_Dbs.db[i].dbCfg.keep); + } + if (g_Dbs.db[i].dbCfg.replica > 0) { + dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "replica %d ", g_Dbs.db[i].dbCfg.replica); + } + if (g_Dbs.db[i].dbCfg.update > 0) { + dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "update %d ", g_Dbs.db[i].dbCfg.update); + } + //if (g_Dbs.db[i].dbCfg.maxtablesPerVnode > 0) { + // dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "tables %d ", g_Dbs.db[i].dbCfg.maxtablesPerVnode); + //} + if (g_Dbs.db[i].dbCfg.minRows > 0) { + dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "minrows %d ", g_Dbs.db[i].dbCfg.minRows); + } + if (g_Dbs.db[i].dbCfg.maxRows > 0) { + dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "maxrows %d ", g_Dbs.db[i].dbCfg.maxRows); + } + if (g_Dbs.db[i].dbCfg.comp > 0) { + dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "comp %d ", g_Dbs.db[i].dbCfg.comp); + } + if (g_Dbs.db[i].dbCfg.walLevel > 0) { + dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "wal %d ", g_Dbs.db[i].dbCfg.walLevel); + } + if (g_Dbs.db[i].dbCfg.fsync > 0) { + dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "fsync %d ", g_Dbs.db[i].dbCfg.fsync); + } + if ((0 == strncasecmp(g_Dbs.db[i].dbCfg.precision, "ms", 2)) || (0 == strncasecmp(g_Dbs.db[i].dbCfg.precision, "us", 2))) { + dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "precision \'%s\';", g_Dbs.db[i].dbCfg.precision); + } + + if (0 != queryDbExec(taos, command, NO_INSERT_TYPE)) { + taos_close(taos); + return -1; + } + printf("\ncreate database %s success!\n\n", g_Dbs.db[i].dbName); - for (; colIndex < ncols_per_record - 1; colIndex++) { - if (strcasecmp(data_type[colIndex % count_data_type], "BINARY") != 0 && strcasecmp(data_type[colIndex % count_data_type], "NCHAR") != 0) { - len += snprintf(cols + len, STRING_LEN - len, ",f%d %s", colIndex + 1, data_type[colIndex % count_data_type]); + for (int j = 0; j < g_Dbs.db[i].superTblCount; j++) { + // describe super table, if exists + sprintf(command, "describe %s.%s;", g_Dbs.db[i].dbName, g_Dbs.db[i].superTbls[j].sTblName); + if (0 != queryDbExec(taos, command, NO_INSERT_TYPE)) { + g_Dbs.db[i].superTbls[j].superTblExists = TBL_NO_EXISTS; + ret = createSuperTable(taos, g_Dbs.db[i].dbName, &g_Dbs.db[i].superTbls[j], g_Dbs.use_metric); + } else { + g_Dbs.db[i].superTbls[j].superTblExists = TBL_ALREADY_EXISTS; + ret = getSuperTableFromServer(taos, g_Dbs.db[i].dbName, &g_Dbs.db[i].superTbls[j]); + } + + if (0 != ret) { + taos_close(taos); + return -1; + } + } + } + + taos_close(taos); + return 0; +} + + +void * createTable(void *sarg) +{ + threadInfo *winfo = (threadInfo *)sarg; + SSuperTable* superTblInfo = winfo->superTblInfo; + + int64_t lastPrintTime = taosGetTimestampMs(); + + char* buffer = calloc(superTblInfo->maxSqlLen, 1); + + int len = 0; + int batchNum = 0; + //printf("Creating table from %d to %d\n", winfo->start_table_id, winfo->end_table_id); + for (int i = winfo->start_table_id; i <= winfo->end_table_id; i++) { + if (0 == g_Dbs.use_metric) { + snprintf(buffer, BUFFER_SIZE, "create table if not exists %s.%s%d %s;", winfo->db_name, superTblInfo->childTblPrefix, i, superTblInfo->colsOfCreatChildTable); } else { - len += snprintf(cols + len, STRING_LEN - len, ",f%d %s(%d)", colIndex + 1, data_type[colIndex % count_data_type], len_of_binary); + if (0 == len) { + batchNum = 0; + memset(buffer, 0, superTblInfo->maxSqlLen); + len += snprintf(buffer + len, superTblInfo->maxSqlLen - len, "create table "); + } + + char* tagsValBuf = NULL; + if (0 == superTblInfo->tagSource) { + tagsValBuf = generateTagVaulesForStb(superTblInfo); + } else { + tagsValBuf = getTagValueFromTagSample(superTblInfo, i % superTblInfo->tagSampleCount); + } + if (NULL == tagsValBuf) { + free(buffer); + return NULL; + } + + len += snprintf(buffer + len, superTblInfo->maxSqlLen - len, "if not exists %s.%s%d using %s.%s tags %s ", winfo->db_name, superTblInfo->childTblPrefix, i, winfo->db_name, superTblInfo->sTblName, tagsValBuf); + free(tagsValBuf); + batchNum++; + + if ((batchNum < superTblInfo->batchCreateTableNum) && ((superTblInfo->maxSqlLen - len) >= (superTblInfo->lenOfTagOfOneRow + 256))) { + continue; + } + } + + len = 0; + if (0 != queryDbExec(winfo->taos, buffer, NO_INSERT_TYPE)){ + free(buffer); + return NULL; + } + + int64_t currentPrintTime = taosGetTimestampMs(); + if (currentPrintTime - lastPrintTime > 30*1000) { + printf("thread[%d] already create %d - %d tables\n", winfo->threadID, winfo->start_table_id, i); + lastPrintTime = currentPrintTime; } } - - if (strcasecmp(data_type[colIndex % count_data_type], "BINARY") != 0 && strcasecmp(data_type[colIndex % count_data_type], "NCHAR") != 0){ - len += snprintf(cols + len, STRING_LEN - len, ",f%d %s", colIndex + 1, data_type[colIndex % count_data_type]); - } else { - len += snprintf(cols + len, STRING_LEN - len, ",f%d %s(%d)", colIndex + 1, data_type[colIndex % count_data_type], len_of_binary); - } - - if (use_metric) { - /* Create metric table */ - printf("Creating meters super table...\n"); - snprintf(command, BUFFER_SIZE, "create table if not exists %s.meters (ts timestamp%s) tags (areaid int, loc binary(10))", db_name, cols); - queryDB(taos, command); - printf("meters created!\n"); - } - taos_close(taos); - /* Wait for table to create */ - multiThreadCreateTable(cols, use_metric, threads, ntables, db_name, tb_prefix, ip_addr, port, user, pass); + if (0 != len) { + (void)queryDbExec(winfo->taos, buffer, NO_INSERT_TYPE); + } - /* Insert data */ - double ts = getCurrentTime(); - printf("Inserting data......\n"); + free(buffer); + return NULL; +} + +void startMultiThreadCreateChildTable(char* cols, int threads, int ntables, char* db_name, SSuperTable* superTblInfo) { pthread_t *pids = malloc(threads * sizeof(pthread_t)); - info *infos = malloc(threads * sizeof(info)); - - memset(pids, 0, threads * sizeof(pthread_t)); - memset(infos, 0, threads * sizeof(info)); + threadInfo *infos = malloc(threads * sizeof(threadInfo)); + + if ((NULL == pids) || (NULL == infos)) { + printf("malloc failed\n"); + exit(-1); + } + + if (threads < 1) { + threads = 1; + } int a = ntables / threads; if (a < 1) { @@ -773,184 +2144,2842 @@ int main(int argc, char *argv[]) { } int b = 0; - if (threads != 0) - b = ntables % threads; + b = ntables % threads; + int last = 0; for (int i = 0; i < threads; i++) { - info *t_info = infos + i; + threadInfo *t_info = infos + i; t_info->threadID = i; tstrncpy(t_info->db_name, db_name, MAX_DB_NAME_SIZE); - tstrncpy(t_info->tb_prefix, tb_prefix, MAX_TB_NAME_SIZE); - t_info->datatype = data_type; - t_info->ncols_per_record = ncols_per_record; - t_info->nrecords_per_table = nrecords_per_table; - t_info->start_time = 1500000000000; - t_info->taos = taos_connect(ip_addr, user, pass, db_name, port); - t_info->len_of_binary = len_of_binary; - t_info->nrecords_per_request = nrecords_per_request; + t_info->superTblInfo = superTblInfo; + t_info->taos = taos_connect(g_Dbs.host, g_Dbs.user, g_Dbs.password, db_name, g_Dbs.port); t_info->start_table_id = last; - t_info->data_of_order = order; - t_info->data_of_rate = rate; t_info->end_table_id = i < b ? last + a : last + a - 1; last = t_info->end_table_id + 1; - t_info->counter = 0; - t_info->minDelay = INT16_MAX; - - tsem_init(&(t_info->mutex_sem), 0, 1); - t_info->notFinished = t_info->end_table_id - t_info->start_table_id + 1; - tsem_init(&(t_info->lock_sem), 0, 0); - - if (query_mode == SYNC) { - pthread_create(pids + i, NULL, syncWrite, t_info); - } else { - pthread_create(pids + i, NULL, asyncWrite, t_info); - } + t_info->use_metric = 1; + t_info->cols = cols; + pthread_create(pids + i, NULL, createTable, t_info); } + for (int i = 0; i < threads; i++) { pthread_join(pids[i], NULL); } - double t = getCurrentTime() - ts; - if (query_mode == SYNC) { - printf("SYNC Insert with %d connections:\n", threads); - } else { - printf("ASYNC Insert with %d connections:\n", threads); - } - - fprintf(fp, "|%"PRIu64" | %10.2f | %10.2f | %10.4f |\n\n", - (int64_t)ntables * nrecords_per_table, ntables * nrecords_per_table / t, - ((int64_t)ntables * nrecords_per_table) / (t * nrecords_per_request), - t * 1000); - - printf("Spent %.4f seconds to insert %"PRIu64" records with %d record(s) per request: %.2f records/second\n", - t, (int64_t)ntables * nrecords_per_table, nrecords_per_request, - (int64_t)ntables * nrecords_per_table / t); - - int64_t totalDelay = 0; - int64_t maxDelay = 0; - int64_t minDelay = INT16_MAX; - int64_t cntDelay = 0; - double avgDelay = 0; for (int i = 0; i < threads; i++) { - info *t_info = infos + i; + threadInfo *t_info = infos + i; taos_close(t_info->taos); - tsem_destroy(&(t_info->mutex_sem)); - tsem_destroy(&(t_info->lock_sem)); - - totalDelay += t_info->totalDelay; - cntDelay += t_info->cntDelay; - if (t_info->maxDelay > maxDelay) maxDelay = t_info->maxDelay; - if (t_info->minDelay < minDelay) minDelay = t_info->minDelay; } - avgDelay = (double)totalDelay / cntDelay; - - fprintf(fp, "insert delay, avg:%10.6fms, max: %10.6fms, min: %10.6fms\n\n", - avgDelay/1000.0, (double)maxDelay/1000.0, (double)minDelay/1000.0); - - printf("insert delay, avg: %10.6fms, max: %10.6fms, min: %10.6fms\n\n", - avgDelay/1000.0, (double)maxDelay/1000.0, (double)minDelay/1000.0); free(pids); - free(infos); - fclose(fp); + free(infos); +} - if (method_of_delete != 0) - { - TAOS *dtaos = taos_connect(ip_addr, user, pass, db_name, port); - double dts = getCurrentTime(); - printf("Deleteing %d table(s)......\n", ntables); - switch (method_of_delete) - { - case 1: - // delete by table - /* Create all the tables; */ - for (int i = 0; i < ntables; i++) { - sprintf(command, "drop table %s.%s%d;", db_name, tb_prefix, i); - queryDB(dtaos, command); +static void createChildTables() { + for (int i = 0; i < g_Dbs.dbCount; i++) { + for (int j = 0; j < g_Dbs.db[i].superTblCount; j++) { + if ((AUTO_CREATE_SUBTBL == g_Dbs.db[i].superTbls[j].autoCreateTable) || (TBL_ALREADY_EXISTS == g_Dbs.db[i].superTbls[j].childTblExists)) { + continue; } - break; - case 2: - // delete by stable - if (!use_metric) { - break; - } - else - { - sprintf(command, "drop table %s.meters;", db_name); - queryDB(dtaos, command); - } - break; - case 3: - // delete by database - sprintf(command, "drop database %s;", db_name); - queryDB(dtaos, command); - break; - default: - break; - } + startMultiThreadCreateChildTable(g_Dbs.db[i].superTbls[j].colsOfCreatChildTable, g_Dbs.threadCountByCreateTbl, g_Dbs.db[i].superTbls[j].childTblCount, g_Dbs.db[i].dbName, &(g_Dbs.db[i].superTbls[j])); + g_totalChildTables += g_Dbs.db[i].superTbls[j].childTblCount; + } + } +} - printf("Table(s) droped!\n"); - taos_close(dtaos); +/* +static int taosGetLineNum(const char *fileName) +{ + int lineNum = 0; + char cmd[1024] = { 0 }; + char buf[1024] = { 0 }; + sprintf(cmd, "wc -l %s", fileName); - double dt = getCurrentTime() - dts; - printf("Spent %.4f seconds to drop %d tables\n", dt, ntables); + FILE *fp = popen(cmd, "r"); + if (fp == NULL) { + fprintf(stderr, "ERROR: failed to execute:%s, error:%s\n", cmd, strerror(errno)); + return lineNum; + } - FILE *fp = fopen(arguments.output_file, "a"); - fprintf(fp, "Spent %.4f seconds to drop %d tables\n", dt, ntables); - fclose(fp); + if (fgets(buf, sizeof(buf), fp)) { + int index = strchr((const char*)buf, ' ') - buf; + buf[index] = '\0'; + lineNum = atoi(buf); + } + pclose(fp); + return lineNum; +} +*/ +/* + Read 10000 lines at most. If more than 10000 lines, continue to read after using +*/ +int readTagFromCsvFileToMem(SSuperTable * superTblInfo) { + size_t n = 0; + ssize_t readLen = 0; + char * line = NULL; + + FILE *fp = fopen(superTblInfo->tagsFile, "r"); + if (fp == NULL) { + printf("Failed to open tags file: %s, reason:%s\n", superTblInfo->tagsFile, strerror(errno)); + return -1; + } + + if (superTblInfo->tagDataBuf) { + free(superTblInfo->tagDataBuf); + superTblInfo->tagDataBuf = NULL; } + int tagCount = 10000; + int count = 0; + char* tagDataBuf = calloc(1, superTblInfo->lenOfTagOfOneRow * tagCount); + if (tagDataBuf == NULL) { + printf("Failed to calloc, reason:%s\n", strerror(errno)); + fclose(fp); + return -1; + } - if (false == insert_only) { + while ((readLen = getline(&line, &n, fp)) != -1) { + if (('\r' == line[readLen - 1]) || ('\n' == line[readLen - 1])) { + line[--readLen] = 0; + } + + if (readLen == 0) { + continue; + } + + memcpy(tagDataBuf + count * superTblInfo->lenOfTagOfOneRow, line, readLen); + count++; + + if (count >= tagCount - 1) { + char *tmp = realloc(tagDataBuf, (size_t)tagCount*1.5*superTblInfo->lenOfTagOfOneRow); + if (tmp != NULL) { + tagDataBuf = tmp; + tagCount = (int)(tagCount*1.5); + memset(tagDataBuf + count*superTblInfo->lenOfTagOfOneRow, 0, (size_t)((tagCount-count)*superTblInfo->lenOfTagOfOneRow)); + } else { + // exit, if allocate more memory failed + printf("realloc fail for save tag val from %s\n", superTblInfo->tagsFile); + tmfree(tagDataBuf); + free(line); + fclose(fp); + return -1; + } + } + } + + superTblInfo->tagDataBuf = tagDataBuf; + superTblInfo->tagSampleCount = count; + + free(line); + fclose(fp); + return 0; +} + +int readSampleFromJsonFileToMem(SSuperTable * superTblInfo) { + // TODO + return 0; +} + + +/* + Read 10000 lines at most. If more than 10000 lines, continue to read after using +*/ +int readSampleFromCsvFileToMem(FILE *fp, SSuperTable* superTblInfo, char* sampleBuf) { + size_t n = 0; + ssize_t readLen = 0; + char * line = NULL; + int getRows = 0; + + memset(sampleBuf, 0, MAX_SAMPLES_ONCE_FROM_FILE* superTblInfo->lenOfOneRow); + while (1) { + readLen = getline(&line, &n, fp); + if (-1 == readLen) { + if(0 != fseek(fp, 0, SEEK_SET)) { + printf("Failed to fseek file: %s, reason:%s\n", superTblInfo->sampleFile, strerror(errno)); + return -1; + } + continue; + } + + if (('\r' == line[readLen - 1]) || ('\n' == line[readLen - 1])) { + line[--readLen] = 0; + } + + if (readLen == 0) { + continue; + } + + if (readLen > superTblInfo->lenOfOneRow) { + printf("sample row len[%d] overflow define schema len[%d], so discard this row\n", (int32_t)readLen, superTblInfo->lenOfOneRow); + continue; + } + + memcpy(sampleBuf + getRows * superTblInfo->lenOfOneRow, line, readLen); + getRows++; + + if (getRows == MAX_SAMPLES_ONCE_FROM_FILE) { + break; + } + } + + tmfree(line); + return 0; +} + +/* +void readSampleFromFileToMem(SSuperTable * supterTblInfo) { + int ret; + if (0 == strncasecmp(supterTblInfo->sampleFormat, "csv", 3)) { + ret = readSampleFromCsvFileToMem(supterTblInfo); + } else if (0 == strncasecmp(supterTblInfo->sampleFormat, "json", 4)) { + ret = readSampleFromJsonFileToMem(supterTblInfo); + } + + if (0 != ret) { + exit(-1); + } +} +*/ +static bool getColumnAndTagTypeFromInsertJsonFile(cJSON* stbInfo, SSuperTable* superTbls) { + bool ret = false; + + // columns + cJSON *columns = cJSON_GetObjectItem(stbInfo, "columns"); + if (columns && columns->type != cJSON_Array) { + printf("failed to read json, columns not found\n"); + goto PARSE_OVER; + } else if (NULL == columns) { + superTbls->columnCount = 0; + superTbls->tagCount = 0; + return true; + } + + int columnSize = cJSON_GetArraySize(columns); + if (columnSize > MAX_COLUMN_COUNT) { + printf("failed to read json, column size overflow, max column size is %d\n", MAX_COLUMN_COUNT); + goto PARSE_OVER; + } + + int count = 1; + int index = 0; + StrColumn columnCase; + + //superTbls->columnCount = columnSize; + for (int k = 0; k < columnSize; ++k) { + cJSON* column = cJSON_GetArrayItem(columns, k); + if (column == NULL) continue; + + count = 1; + cJSON* countObj = cJSON_GetObjectItem(column, "count"); + if (countObj && countObj->type == cJSON_Number) { + count = countObj->valueint; + } else if (countObj && countObj->type != cJSON_Number) { + printf("failed to read json, column count not found"); + goto PARSE_OVER; + } else { + count = 1; + } + + // column info + memset(&columnCase, 0, sizeof(StrColumn)); + cJSON *dataType = cJSON_GetObjectItem(column, "type"); + if (!dataType || dataType->type != cJSON_String || dataType->valuestring == NULL) { + printf("failed to read json, column type not found"); + goto PARSE_OVER; + } + //strncpy(superTbls->columns[k].dataType, dataType->valuestring, MAX_TB_NAME_SIZE); + strncpy(columnCase.dataType, dataType->valuestring, MAX_TB_NAME_SIZE); + + cJSON* dataLen = cJSON_GetObjectItem(column, "len"); + if (dataLen && dataLen->type == cJSON_Number) { + columnCase.dataLen = dataLen->valueint; + } else if (dataLen && dataLen->type != cJSON_Number) { + printf("failed to read json, column len not found"); + goto PARSE_OVER; + } else { + columnCase.dataLen = 8; + } + + for (int n = 0; n < count; ++n) { + strncpy(superTbls->columns[index].dataType, columnCase.dataType, MAX_TB_NAME_SIZE); + superTbls->columns[index].dataLen = columnCase.dataLen; + index++; + } + } + superTbls->columnCount = index; + + count = 1; + index = 0; + // tags + cJSON *tags = cJSON_GetObjectItem(stbInfo, "tags"); + if (!tags || tags->type != cJSON_Array) { + printf("failed to read json, tags not found"); + goto PARSE_OVER; + } + + int tagSize = cJSON_GetArraySize(tags); + if (tagSize > MAX_TAG_COUNT) { + printf("failed to read json, tags size overflow, max tag size is %d\n", MAX_TAG_COUNT); + goto PARSE_OVER; + } + + //superTbls->tagCount = tagSize; + for (int k = 0; k < tagSize; ++k) { + cJSON* tag = cJSON_GetArrayItem(tags, k); + if (tag == NULL) continue; + + count = 1; + cJSON* countObj = cJSON_GetObjectItem(tag, "count"); + if (countObj && countObj->type == cJSON_Number) { + count = countObj->valueint; + } else if (countObj && countObj->type != cJSON_Number) { + printf("failed to read json, column count not found"); + goto PARSE_OVER; + } else { + count = 1; + } + + // column info + memset(&columnCase, 0, sizeof(StrColumn)); + cJSON *dataType = cJSON_GetObjectItem(tag, "type"); + if (!dataType || dataType->type != cJSON_String || dataType->valuestring == NULL) { + printf("failed to read json, tag type not found"); + goto PARSE_OVER; + } + strncpy(columnCase.dataType, dataType->valuestring, MAX_TB_NAME_SIZE); + + cJSON* dataLen = cJSON_GetObjectItem(tag, "len"); + if (dataLen && dataLen->type == cJSON_Number) { + columnCase.dataLen = dataLen->valueint; + } else if (dataLen && dataLen->type != cJSON_Number) { + printf("failed to read json, column len not found"); + goto PARSE_OVER; + } else { + columnCase.dataLen = 0; + } + + for (int n = 0; n < count; ++n) { + strncpy(superTbls->tags[index].dataType, columnCase.dataType, MAX_TB_NAME_SIZE); + superTbls->tags[index].dataLen = columnCase.dataLen; + index++; + } + } + superTbls->tagCount = index; + + ret = true; + +PARSE_OVER: + //free(content); + //cJSON_Delete(root); + //fclose(fp); + return ret; +} + +static bool getMetaFromInsertJsonFile(cJSON* root) { + bool ret = false; + + cJSON* cfgdir = cJSON_GetObjectItem(root, "cfgdir"); + if (cfgdir && cfgdir->type == cJSON_String && cfgdir->valuestring != NULL) { + strncpy(g_Dbs.cfgDir, cfgdir->valuestring, MAX_FILE_NAME_LEN); + } + + cJSON* host = cJSON_GetObjectItem(root, "host"); + if (host && host->type == cJSON_String && host->valuestring != NULL) { + strncpy(g_Dbs.host, host->valuestring, MAX_DB_NAME_SIZE); + } else if (!host) { + strncpy(g_Dbs.host, "127.0.0.1", MAX_DB_NAME_SIZE); + } else { + printf("failed to read json, host not found\n"); + goto PARSE_OVER; + } + + cJSON* port = cJSON_GetObjectItem(root, "port"); + if (port && port->type == cJSON_Number) { + g_Dbs.port = port->valueint; + } else if (!port) { + g_Dbs.port = 6030; + } + + cJSON* user = cJSON_GetObjectItem(root, "user"); + if (user && user->type == cJSON_String && user->valuestring != NULL) { + strncpy(g_Dbs.user, user->valuestring, MAX_DB_NAME_SIZE); + } else if (!user) { + strncpy(g_Dbs.user, "root", MAX_DB_NAME_SIZE); + } + + cJSON* password = cJSON_GetObjectItem(root, "password"); + if (password && password->type == cJSON_String && password->valuestring != NULL) { + strncpy(g_Dbs.password, password->valuestring, MAX_DB_NAME_SIZE); + } else if (!password) { + strncpy(g_Dbs.password, "taosdata", MAX_DB_NAME_SIZE); + } + + cJSON* resultfile = cJSON_GetObjectItem(root, "result_file"); + if (resultfile && resultfile->type == cJSON_String && resultfile->valuestring != NULL) { + strncpy(g_Dbs.resultFile, resultfile->valuestring, MAX_FILE_NAME_LEN); + } else if (!resultfile) { + strncpy(g_Dbs.resultFile, "./insert_res.txt", MAX_FILE_NAME_LEN); + } + + cJSON* threads = cJSON_GetObjectItem(root, "thread_count"); + if (threads && threads->type == cJSON_Number) { + g_Dbs.threadCount = threads->valueint; + } else if (!threads) { + g_Dbs.threadCount = 1; + } else { + printf("failed to read json, threads not found"); + goto PARSE_OVER; + } + + cJSON* threads2 = cJSON_GetObjectItem(root, "thread_count_create_tbl"); + if (threads2 && threads2->type == cJSON_Number) { + g_Dbs.threadCountByCreateTbl = threads2->valueint; + } else if (!threads2) { + g_Dbs.threadCountByCreateTbl = 1; + } else { + printf("failed to read json, threads2 not found"); + goto PARSE_OVER; + } + + cJSON *answerPrompt = cJSON_GetObjectItem(root, "confirm_parameter_prompt"); // yes, no, + if (answerPrompt && answerPrompt->type == cJSON_String && answerPrompt->valuestring != NULL) { + if (0 == strncasecmp(answerPrompt->valuestring, "yes", 3)) { + g_args.answer_yes = false; + } else if (0 == strncasecmp(answerPrompt->valuestring, "no", 2)) { + g_args.answer_yes = true; + } else { + g_args.answer_yes = false; + } + } else if (!answerPrompt) { + g_args.answer_yes = false; + } else { + printf("failed to read json, confirm_parameter_prompt not found"); + goto PARSE_OVER; + } + + cJSON* dbs = cJSON_GetObjectItem(root, "databases"); + if (!dbs || dbs->type != cJSON_Array) { + printf("failed to read json, databases not found\n"); + goto PARSE_OVER; + } + + int dbSize = cJSON_GetArraySize(dbs); + if (dbSize > MAX_DB_COUNT) { + printf("failed to read json, databases size overflow, max database is %d\n", MAX_DB_COUNT); + goto PARSE_OVER; + } + + g_Dbs.dbCount = dbSize; + for (int i = 0; i < dbSize; ++i) { + cJSON* dbinfos = cJSON_GetArrayItem(dbs, i); + if (dbinfos == NULL) continue; + + // dbinfo + cJSON *dbinfo = cJSON_GetObjectItem(dbinfos, "dbinfo"); + if (!dbinfo || dbinfo->type != cJSON_Object) { + printf("failed to read json, dbinfo not found"); + goto PARSE_OVER; + } + + cJSON *dbName = cJSON_GetObjectItem(dbinfo, "name"); + if (!dbName || dbName->type != cJSON_String || dbName->valuestring == NULL) { + printf("failed to read json, db name not found"); + goto PARSE_OVER; + } + strncpy(g_Dbs.db[i].dbName, dbName->valuestring, MAX_DB_NAME_SIZE); + + cJSON *drop = cJSON_GetObjectItem(dbinfo, "drop"); + if (drop && drop->type == cJSON_String && drop->valuestring != NULL) { + if (0 == strncasecmp(drop->valuestring, "yes", 3)) { + g_Dbs.db[i].drop = 1; + } else { + g_Dbs.db[i].drop = 0; + } + } else if (!drop) { + g_Dbs.db[i].drop = 0; + } else { + printf("failed to read json, drop not found"); + goto PARSE_OVER; + } + + cJSON *precision = cJSON_GetObjectItem(dbinfo, "precision"); + if (precision && precision->type == cJSON_String && precision->valuestring != NULL) { + strncpy(g_Dbs.db[i].dbCfg.precision, precision->valuestring, MAX_DB_NAME_SIZE); + } else if (!precision) { + //strncpy(g_Dbs.db[i].dbCfg.precision, "ms", MAX_DB_NAME_SIZE); + memset(g_Dbs.db[i].dbCfg.precision, 0, MAX_DB_NAME_SIZE); + } else { + printf("failed to read json, precision not found"); + goto PARSE_OVER; + } + + cJSON* update = cJSON_GetObjectItem(dbinfo, "update"); + if (update && update->type == cJSON_Number) { + g_Dbs.db[i].dbCfg.update = update->valueint; + } else if (!update) { + g_Dbs.db[i].dbCfg.update = -1; + } else { + printf("failed to read json, update not found"); + goto PARSE_OVER; + } + + cJSON* replica = cJSON_GetObjectItem(dbinfo, "replica"); + if (replica && replica->type == cJSON_Number) { + g_Dbs.db[i].dbCfg.replica = replica->valueint; + } else if (!replica) { + g_Dbs.db[i].dbCfg.replica = -1; + } else { + printf("failed to read json, replica not found"); + goto PARSE_OVER; + } + + cJSON* keep = cJSON_GetObjectItem(dbinfo, "keep"); + if (keep && keep->type == cJSON_Number) { + g_Dbs.db[i].dbCfg.keep = keep->valueint; + } else if (!keep) { + g_Dbs.db[i].dbCfg.keep = -1; + } else { + printf("failed to read json, keep not found"); + goto PARSE_OVER; + } + + cJSON* days = cJSON_GetObjectItem(dbinfo, "days"); + if (days && days->type == cJSON_Number) { + g_Dbs.db[i].dbCfg.days = days->valueint; + } else if (!days) { + g_Dbs.db[i].dbCfg.days = -1; + } else { + printf("failed to read json, days not found"); + goto PARSE_OVER; + } + + cJSON* cache = cJSON_GetObjectItem(dbinfo, "cache"); + if (cache && cache->type == cJSON_Number) { + g_Dbs.db[i].dbCfg.cache = cache->valueint; + } else if (!cache) { + g_Dbs.db[i].dbCfg.cache = -1; + } else { + printf("failed to read json, cache not found"); + goto PARSE_OVER; + } + + cJSON* blocks= cJSON_GetObjectItem(dbinfo, "blocks"); + if (blocks && blocks->type == cJSON_Number) { + g_Dbs.db[i].dbCfg.blocks = blocks->valueint; + } else if (!blocks) { + g_Dbs.db[i].dbCfg.blocks = -1; + } else { + printf("failed to read json, block not found"); + goto PARSE_OVER; + } + + //cJSON* maxtablesPerVnode= cJSON_GetObjectItem(dbinfo, "maxtablesPerVnode"); + //if (maxtablesPerVnode && maxtablesPerVnode->type == cJSON_Number) { + // g_Dbs.db[i].dbCfg.maxtablesPerVnode = maxtablesPerVnode->valueint; + //} else if (!maxtablesPerVnode) { + // g_Dbs.db[i].dbCfg.maxtablesPerVnode = TSDB_DEFAULT_TABLES; + //} else { + // printf("failed to read json, maxtablesPerVnode not found"); + // goto PARSE_OVER; + //} + + cJSON* minRows= cJSON_GetObjectItem(dbinfo, "minRows"); + if (minRows && minRows->type == cJSON_Number) { + g_Dbs.db[i].dbCfg.minRows = minRows->valueint; + } else if (!minRows) { + g_Dbs.db[i].dbCfg.minRows = -1; + } else { + printf("failed to read json, minRows not found"); + goto PARSE_OVER; + } + + cJSON* maxRows= cJSON_GetObjectItem(dbinfo, "maxRows"); + if (maxRows && maxRows->type == cJSON_Number) { + g_Dbs.db[i].dbCfg.maxRows = maxRows->valueint; + } else if (!maxRows) { + g_Dbs.db[i].dbCfg.maxRows = -1; + } else { + printf("failed to read json, maxRows not found"); + goto PARSE_OVER; + } + + cJSON* comp= cJSON_GetObjectItem(dbinfo, "comp"); + if (comp && comp->type == cJSON_Number) { + g_Dbs.db[i].dbCfg.comp = comp->valueint; + } else if (!comp) { + g_Dbs.db[i].dbCfg.comp = -1; + } else { + printf("failed to read json, comp not found"); + goto PARSE_OVER; + } + + cJSON* walLevel= cJSON_GetObjectItem(dbinfo, "walLevel"); + if (walLevel && walLevel->type == cJSON_Number) { + g_Dbs.db[i].dbCfg.walLevel = walLevel->valueint; + } else if (!walLevel) { + g_Dbs.db[i].dbCfg.walLevel = -1; + } else { + printf("failed to read json, walLevel not found"); + goto PARSE_OVER; + } + + cJSON* quorum= cJSON_GetObjectItem(dbinfo, "quorum"); + if (quorum && quorum->type == cJSON_Number) { + g_Dbs.db[i].dbCfg.quorum = quorum->valueint; + } else if (!quorum) { + g_Dbs.db[i].dbCfg.quorum = -1; + } else { + printf("failed to read json, walLevel not found"); + goto PARSE_OVER; + } + + cJSON* fsync= cJSON_GetObjectItem(dbinfo, "fsync"); + if (fsync && fsync->type == cJSON_Number) { + g_Dbs.db[i].dbCfg.fsync = fsync->valueint; + } else if (!fsync) { + g_Dbs.db[i].dbCfg.fsync = -1; + } else { + printf("failed to read json, fsync not found"); + goto PARSE_OVER; + } + + // super_talbes + cJSON *stables = cJSON_GetObjectItem(dbinfos, "super_tables"); + if (!stables || stables->type != cJSON_Array) { + printf("failed to read json, super_tables not found"); + goto PARSE_OVER; + } + + int stbSize = cJSON_GetArraySize(stables); + if (stbSize > MAX_SUPER_TABLE_COUNT) { + printf("failed to read json, databases size overflow, max database is %d\n", MAX_SUPER_TABLE_COUNT); + goto PARSE_OVER; + } + + g_Dbs.db[i].superTblCount = stbSize; + for (int j = 0; j < stbSize; ++j) { + cJSON* stbInfo = cJSON_GetArrayItem(stables, j); + if (stbInfo == NULL) continue; + + // dbinfo + cJSON *stbName = cJSON_GetObjectItem(stbInfo, "name"); + if (!stbName || stbName->type != cJSON_String || stbName->valuestring == NULL) { + printf("failed to read json, stb name not found"); + goto PARSE_OVER; + } + strncpy(g_Dbs.db[i].superTbls[j].sTblName, stbName->valuestring, MAX_TB_NAME_SIZE); + + cJSON *prefix = cJSON_GetObjectItem(stbInfo, "childtable_prefix"); + if (!prefix || prefix->type != cJSON_String || prefix->valuestring == NULL) { + printf("failed to read json, childtable_prefix not found"); + goto PARSE_OVER; + } + strncpy(g_Dbs.db[i].superTbls[j].childTblPrefix, prefix->valuestring, MAX_DB_NAME_SIZE); + + cJSON *autoCreateTbl = cJSON_GetObjectItem(stbInfo, "auto_create_table"); // yes, no, null + if (autoCreateTbl && autoCreateTbl->type == cJSON_String && autoCreateTbl->valuestring != NULL) { + if (0 == strncasecmp(autoCreateTbl->valuestring, "yes", 3)) { + g_Dbs.db[i].superTbls[j].autoCreateTable = AUTO_CREATE_SUBTBL; + } else if (0 == strncasecmp(autoCreateTbl->valuestring, "no", 2)) { + g_Dbs.db[i].superTbls[j].autoCreateTable = PRE_CREATE_SUBTBL; + } else { + g_Dbs.db[i].superTbls[j].autoCreateTable = PRE_CREATE_SUBTBL; + } + } else if (!autoCreateTbl) { + g_Dbs.db[i].superTbls[j].autoCreateTable = PRE_CREATE_SUBTBL; + } else { + printf("failed to read json, auto_create_table not found"); + goto PARSE_OVER; + } + + cJSON* batchCreateTbl = cJSON_GetObjectItem(stbInfo, "batch_create_tbl_num"); + if (batchCreateTbl && batchCreateTbl->type == cJSON_Number) { + g_Dbs.db[i].superTbls[j].batchCreateTableNum = batchCreateTbl->valueint; + } else if (!batchCreateTbl) { + g_Dbs.db[i].superTbls[j].batchCreateTableNum = 2000; + } else { + printf("failed to read json, batch_create_tbl_num not found"); + goto PARSE_OVER; + } + + cJSON *childTblExists = cJSON_GetObjectItem(stbInfo, "child_table_exists"); // yes, no + if (childTblExists && childTblExists->type == cJSON_String && childTblExists->valuestring != NULL) { + if (0 == strncasecmp(childTblExists->valuestring, "yes", 3)) { + g_Dbs.db[i].superTbls[j].childTblExists = TBL_ALREADY_EXISTS; + } else if (0 == strncasecmp(childTblExists->valuestring, "no", 2)) { + g_Dbs.db[i].superTbls[j].childTblExists = TBL_NO_EXISTS; + } else { + g_Dbs.db[i].superTbls[j].childTblExists = TBL_NO_EXISTS; + } + } else if (!childTblExists) { + g_Dbs.db[i].superTbls[j].childTblExists = TBL_NO_EXISTS; + } else { + printf("failed to read json, child_table_exists not found"); + goto PARSE_OVER; + } + + cJSON* count = cJSON_GetObjectItem(stbInfo, "childtable_count"); + if (!count || count->type != cJSON_Number || 0 >= count->valueint) { + printf("failed to read json, childtable_count not found"); + goto PARSE_OVER; + } + g_Dbs.db[i].superTbls[j].childTblCount = count->valueint; + + cJSON *dataSource = cJSON_GetObjectItem(stbInfo, "data_source"); + if (dataSource && dataSource->type == cJSON_String && dataSource->valuestring != NULL) { + strncpy(g_Dbs.db[i].superTbls[j].dataSource, dataSource->valuestring, MAX_DB_NAME_SIZE); + } else if (!dataSource) { + strncpy(g_Dbs.db[i].superTbls[j].dataSource, "rand", MAX_DB_NAME_SIZE); + } else { + printf("failed to read json, data_source not found"); + goto PARSE_OVER; + } + + cJSON *insertMode = cJSON_GetObjectItem(stbInfo, "insert_mode"); // taosc , restful + if (insertMode && insertMode->type == cJSON_String && insertMode->valuestring != NULL) { + strncpy(g_Dbs.db[i].superTbls[j].insertMode, insertMode->valuestring, MAX_DB_NAME_SIZE); + #ifndef TD_LOWA_CURL + if (0 == strncasecmp(g_Dbs.db[i].superTbls[j].insertMode, "restful", 7)) { + printf("There no libcurl, so no support resetful test! please use taosc mode.\n"); + goto PARSE_OVER; + } + #endif + } else if (!insertMode) { + strncpy(g_Dbs.db[i].superTbls[j].insertMode, "taosc", MAX_DB_NAME_SIZE); + } else { + printf("failed to read json, insert_mode not found"); + goto PARSE_OVER; + } + + cJSON *ts = cJSON_GetObjectItem(stbInfo, "start_timestamp"); + if (ts && ts->type == cJSON_String && ts->valuestring != NULL) { + strncpy(g_Dbs.db[i].superTbls[j].startTimestamp, ts->valuestring, MAX_DB_NAME_SIZE); + } else if (!ts) { + strncpy(g_Dbs.db[i].superTbls[j].startTimestamp, "now", MAX_DB_NAME_SIZE); + } else { + printf("failed to read json, start_timestamp not found"); + goto PARSE_OVER; + } + + cJSON* timestampStep = cJSON_GetObjectItem(stbInfo, "timestamp_step"); + if (timestampStep && timestampStep->type == cJSON_Number) { + g_Dbs.db[i].superTbls[j].timeStampStep = timestampStep->valueint; + } else if (!timestampStep) { + g_Dbs.db[i].superTbls[j].timeStampStep = 1000; + } else { + printf("failed to read json, timestamp_step not found"); + goto PARSE_OVER; + } + + cJSON* sampleDataBufSize = cJSON_GetObjectItem(stbInfo, "sample_buf_size"); + if (sampleDataBufSize && sampleDataBufSize->type == cJSON_Number) { + g_Dbs.db[i].superTbls[j].sampleDataBufSize = sampleDataBufSize->valueint; + if (g_Dbs.db[i].superTbls[j].sampleDataBufSize < 1024*1024) { + g_Dbs.db[i].superTbls[j].sampleDataBufSize = 1024*1024 + 1024; + } + } else if (!sampleDataBufSize) { + g_Dbs.db[i].superTbls[j].sampleDataBufSize = 1024*1024 + 1024; + } else { + printf("failed to read json, sample_buf_size not found"); + goto PARSE_OVER; + } + + cJSON *sampleFormat = cJSON_GetObjectItem(stbInfo, "sample_format"); + if (sampleFormat && sampleFormat->type == cJSON_String && sampleFormat->valuestring != NULL) { + strncpy(g_Dbs.db[i].superTbls[j].sampleFormat, sampleFormat->valuestring, MAX_DB_NAME_SIZE); + } else if (!sampleFormat) { + strncpy(g_Dbs.db[i].superTbls[j].sampleFormat, "csv", MAX_DB_NAME_SIZE); + } else { + printf("failed to read json, sample_format not found"); + goto PARSE_OVER; + } + + cJSON *sampleFile = cJSON_GetObjectItem(stbInfo, "sample_file"); + if (sampleFile && sampleFile->type == cJSON_String && sampleFile->valuestring != NULL) { + strncpy(g_Dbs.db[i].superTbls[j].sampleFile, sampleFile->valuestring, MAX_FILE_NAME_LEN); + } else if (!sampleFile) { + memset(g_Dbs.db[i].superTbls[j].sampleFile, 0, MAX_FILE_NAME_LEN); + } else { + printf("failed to read json, sample_file not found"); + goto PARSE_OVER; + } + + cJSON *tagsFile = cJSON_GetObjectItem(stbInfo, "tags_file"); + if (tagsFile && tagsFile->type == cJSON_String && tagsFile->valuestring != NULL) { + strncpy(g_Dbs.db[i].superTbls[j].tagsFile, tagsFile->valuestring, MAX_FILE_NAME_LEN); + if (0 == g_Dbs.db[i].superTbls[j].tagsFile[0]) { + g_Dbs.db[i].superTbls[j].tagSource = 0; + } else { + g_Dbs.db[i].superTbls[j].tagSource = 1; + } + } else if (!tagsFile) { + memset(g_Dbs.db[i].superTbls[j].tagsFile, 0, MAX_FILE_NAME_LEN); + g_Dbs.db[i].superTbls[j].tagSource = 0; + } else { + printf("failed to read json, tags_file not found"); + goto PARSE_OVER; + } + + cJSON* maxSqlLen = cJSON_GetObjectItem(stbInfo, "max_sql_len"); + if (maxSqlLen && maxSqlLen->type == cJSON_Number) { + int32_t len = maxSqlLen->valueint; + if (len > TSDB_MAX_ALLOWED_SQL_LEN) { + len = TSDB_MAX_ALLOWED_SQL_LEN; + } else if (len < TSDB_MAX_SQL_LEN) { + len = TSDB_MAX_SQL_LEN; + } + g_Dbs.db[i].superTbls[j].maxSqlLen = len; + } else if (!maxSqlLen) { + g_Dbs.db[i].superTbls[j].maxSqlLen = TSDB_MAX_SQL_LEN; + } else { + printf("failed to read json, maxSqlLen not found"); + goto PARSE_OVER; + } + + cJSON *multiThreadWriteOneTbl = cJSON_GetObjectItem(stbInfo, "multi_thread_write_one_tbl"); // no , yes + if (multiThreadWriteOneTbl && multiThreadWriteOneTbl->type == cJSON_String && multiThreadWriteOneTbl->valuestring != NULL) { + if (0 == strncasecmp(multiThreadWriteOneTbl->valuestring, "yes", 3)) { + g_Dbs.db[i].superTbls[j].multiThreadWriteOneTbl = 1; + } else { + g_Dbs.db[i].superTbls[j].multiThreadWriteOneTbl = 0; + } + } else if (!multiThreadWriteOneTbl) { + g_Dbs.db[i].superTbls[j].multiThreadWriteOneTbl = 0; + } else { + printf("failed to read json, multiThreadWriteOneTbl not found"); + goto PARSE_OVER; + } + + cJSON* numberOfTblInOneSql = cJSON_GetObjectItem(stbInfo, "number_of_tbl_in_one_sql"); + if (numberOfTblInOneSql && numberOfTblInOneSql->type == cJSON_Number) { + g_Dbs.db[i].superTbls[j].numberOfTblInOneSql = numberOfTblInOneSql->valueint; + } else if (!numberOfTblInOneSql) { + g_Dbs.db[i].superTbls[j].numberOfTblInOneSql = 0; + } else { + printf("failed to read json, numberOfTblInOneSql not found"); + goto PARSE_OVER; + } + + cJSON* rowsPerTbl = cJSON_GetObjectItem(stbInfo, "rows_per_tbl"); + if (rowsPerTbl && rowsPerTbl->type == cJSON_Number) { + g_Dbs.db[i].superTbls[j].rowsPerTbl = rowsPerTbl->valueint; + } else if (!rowsPerTbl) { + g_Dbs.db[i].superTbls[j].rowsPerTbl = 1; + } else { + printf("failed to read json, rowsPerTbl not found"); + goto PARSE_OVER; + } + + cJSON* disorderRatio = cJSON_GetObjectItem(stbInfo, "disorder_ratio"); + if (disorderRatio && disorderRatio->type == cJSON_Number) { + g_Dbs.db[i].superTbls[j].disorderRatio = disorderRatio->valueint; + } else if (!disorderRatio) { + g_Dbs.db[i].superTbls[j].disorderRatio = 0; + } else { + printf("failed to read json, disorderRatio not found"); + goto PARSE_OVER; + } + + cJSON* disorderRange = cJSON_GetObjectItem(stbInfo, "disorder_range"); + if (disorderRange && disorderRange->type == cJSON_Number) { + g_Dbs.db[i].superTbls[j].disorderRange = disorderRange->valueint; + } else if (!disorderRange) { + g_Dbs.db[i].superTbls[j].disorderRange = 1000; + } else { + printf("failed to read json, disorderRange not found"); + goto PARSE_OVER; + } + + cJSON* insertRate = cJSON_GetObjectItem(stbInfo, "insert_rate"); + if (insertRate && insertRate->type == cJSON_Number) { + g_Dbs.db[i].superTbls[j].insertRate = insertRate->valueint; + } else if (!insertRate) { + g_Dbs.db[i].superTbls[j].insertRate = 0; + } else { + printf("failed to read json, insert_rate not found"); + goto PARSE_OVER; + } + + cJSON* insertRows = cJSON_GetObjectItem(stbInfo, "insert_rows"); + if (insertRows && insertRows->type == cJSON_Number) { + g_Dbs.db[i].superTbls[j].insertRows = insertRows->valueint; + if (0 == g_Dbs.db[i].superTbls[j].insertRows) { + g_Dbs.db[i].superTbls[j].insertRows = 0x7FFFFFFFFFFFFFFF; + } + } else if (!insertRows) { + g_Dbs.db[i].superTbls[j].insertRows = 0x7FFFFFFFFFFFFFFF; + } else { + printf("failed to read json, insert_rows not found"); + goto PARSE_OVER; + } + + if (NO_CREATE_SUBTBL == g_Dbs.db[i].superTbls[j].autoCreateTable || (TBL_ALREADY_EXISTS == g_Dbs.db[i].superTbls[j].childTblExists)) { + continue; + } + + int retVal = getColumnAndTagTypeFromInsertJsonFile(stbInfo, &g_Dbs.db[i].superTbls[j]); + if (false == retVal) { + goto PARSE_OVER; + } + } + } + + ret = true; + +PARSE_OVER: + //free(content); + //cJSON_Delete(root); + //fclose(fp); + return ret; +} + +static bool getMetaFromQueryJsonFile(cJSON* root) { + bool ret = false; + + cJSON* cfgdir = cJSON_GetObjectItem(root, "cfgdir"); + if (cfgdir && cfgdir->type == cJSON_String && cfgdir->valuestring != NULL) { + strncpy(g_queryInfo.cfgDir, cfgdir->valuestring, MAX_FILE_NAME_LEN); + } + + cJSON* host = cJSON_GetObjectItem(root, "host"); + if (host && host->type == cJSON_String && host->valuestring != NULL) { + strncpy(g_queryInfo.host, host->valuestring, MAX_DB_NAME_SIZE); + } else if (!host) { + strncpy(g_queryInfo.host, "127.0.0.1", MAX_DB_NAME_SIZE); + } else { + printf("failed to read json, host not found\n"); + goto PARSE_OVER; + } + + cJSON* port = cJSON_GetObjectItem(root, "port"); + if (port && port->type == cJSON_Number) { + g_queryInfo.port = port->valueint; + } else if (!port) { + g_queryInfo.port = 6030; + } + + cJSON* user = cJSON_GetObjectItem(root, "user"); + if (user && user->type == cJSON_String && user->valuestring != NULL) { + strncpy(g_queryInfo.user, user->valuestring, MAX_DB_NAME_SIZE); + } else if (!user) { + strncpy(g_queryInfo.user, "root", MAX_DB_NAME_SIZE); ; + } + + cJSON* password = cJSON_GetObjectItem(root, "password"); + if (password && password->type == cJSON_String && password->valuestring != NULL) { + strncpy(g_queryInfo.password, password->valuestring, MAX_DB_NAME_SIZE); + } else if (!password) { + strncpy(g_queryInfo.password, "taosdata", MAX_DB_NAME_SIZE);; + } + + cJSON *answerPrompt = cJSON_GetObjectItem(root, "confirm_parameter_prompt"); // yes, no, + if (answerPrompt && answerPrompt->type == cJSON_String && answerPrompt->valuestring != NULL) { + if (0 == strncasecmp(answerPrompt->valuestring, "yes", 3)) { + g_args.answer_yes = false; + } else if (0 == strncasecmp(answerPrompt->valuestring, "no", 2)) { + g_args.answer_yes = true; + } else { + g_args.answer_yes = false; + } + } else if (!answerPrompt) { + g_args.answer_yes = false; + } else { + printf("failed to read json, confirm_parameter_prompt not found"); + goto PARSE_OVER; + } + + cJSON* dbs = cJSON_GetObjectItem(root, "databases"); + if (dbs && dbs->type == cJSON_String && dbs->valuestring != NULL) { + strncpy(g_queryInfo.dbName, dbs->valuestring, MAX_DB_NAME_SIZE); + } else if (!dbs) { + printf("failed to read json, databases not found\n"); + goto PARSE_OVER; + } + + cJSON* queryMode = cJSON_GetObjectItem(root, "query_mode"); + if (queryMode && queryMode->type == cJSON_String && queryMode->valuestring != NULL) { + strncpy(g_queryInfo.queryMode, queryMode->valuestring, MAX_TB_NAME_SIZE); + } else if (!queryMode) { + strncpy(g_queryInfo.queryMode, "taosc", MAX_TB_NAME_SIZE); + } else { + printf("failed to read json, query_mode not found\n"); + goto PARSE_OVER; + } + + // super_table_query + cJSON *superQuery = cJSON_GetObjectItem(root, "specified_table_query"); + if (!superQuery) { + g_queryInfo.superQueryInfo.concurrent = 0; + g_queryInfo.superQueryInfo.sqlCount = 0; + } else if (superQuery->type != cJSON_Object) { + printf("failed to read json, super_table_query not found"); + goto PARSE_OVER; + } else { + cJSON* rate = cJSON_GetObjectItem(superQuery, "query_interval"); + if (rate && rate->type == cJSON_Number) { + g_queryInfo.superQueryInfo.rate = rate->valueint; + } else if (!rate) { + g_queryInfo.superQueryInfo.rate = 0; + } + + cJSON* concurrent = cJSON_GetObjectItem(superQuery, "concurrent"); + if (concurrent && concurrent->type == cJSON_Number) { + g_queryInfo.superQueryInfo.concurrent = concurrent->valueint; + } else if (!concurrent) { + g_queryInfo.superQueryInfo.concurrent = 1; + } + + cJSON* mode = cJSON_GetObjectItem(superQuery, "mode"); + if (mode && mode->type == cJSON_String && mode->valuestring != NULL) { + if (0 == strcmp("sync", mode->valuestring)) { + g_queryInfo.superQueryInfo.subscribeMode = 0; + } else if (0 == strcmp("async", mode->valuestring)) { + g_queryInfo.superQueryInfo.subscribeMode = 1; + } else { + printf("failed to read json, subscribe mod error\n"); + goto PARSE_OVER; + } + } else { + g_queryInfo.superQueryInfo.subscribeMode = 0; + } + + cJSON* interval = cJSON_GetObjectItem(superQuery, "interval"); + if (interval && interval->type == cJSON_Number) { + g_queryInfo.superQueryInfo.subscribeInterval = interval->valueint; + } else if (!interval) { + //printf("failed to read json, subscribe interval no found\n"); + //goto PARSE_OVER; + g_queryInfo.superQueryInfo.subscribeInterval = 10000; + } + + cJSON* restart = cJSON_GetObjectItem(superQuery, "restart"); + if (restart && restart->type == cJSON_String && restart->valuestring != NULL) { + if (0 == strcmp("yes", restart->valuestring)) { + g_queryInfo.superQueryInfo.subscribeRestart = 1; + } else if (0 == strcmp("no", restart->valuestring)) { + g_queryInfo.superQueryInfo.subscribeRestart = 0; + } else { + printf("failed to read json, subscribe restart error\n"); + goto PARSE_OVER; + } + } else { + g_queryInfo.superQueryInfo.subscribeRestart = 1; + } + + cJSON* keepProgress = cJSON_GetObjectItem(superQuery, "keepProgress"); + if (keepProgress && keepProgress->type == cJSON_String && keepProgress->valuestring != NULL) { + if (0 == strcmp("yes", keepProgress->valuestring)) { + g_queryInfo.superQueryInfo.subscribeKeepProgress = 1; + } else if (0 == strcmp("no", keepProgress->valuestring)) { + g_queryInfo.superQueryInfo.subscribeKeepProgress = 0; + } else { + printf("failed to read json, subscribe keepProgress error\n"); + goto PARSE_OVER; + } + } else { + g_queryInfo.superQueryInfo.subscribeKeepProgress = 0; + } + + // sqls + cJSON* superSqls = cJSON_GetObjectItem(superQuery, "sqls"); + if (!superSqls) { + g_queryInfo.superQueryInfo.sqlCount = 0; + } else if (superSqls->type != cJSON_Array) { + printf("failed to read json, super sqls not found\n"); + goto PARSE_OVER; + } else { + int superSqlSize = cJSON_GetArraySize(superSqls); + if (superSqlSize > MAX_QUERY_SQL_COUNT) { + printf("failed to read json, query sql size overflow, max is %d\n", MAX_QUERY_SQL_COUNT); + goto PARSE_OVER; + } + + g_queryInfo.superQueryInfo.sqlCount = superSqlSize; + for (int j = 0; j < superSqlSize; ++j) { + cJSON* sql = cJSON_GetArrayItem(superSqls, j); + if (sql == NULL) continue; + + cJSON *sqlStr = cJSON_GetObjectItem(sql, "sql"); + if (!sqlStr || sqlStr->type != cJSON_String || sqlStr->valuestring == NULL) { + printf("failed to read json, sql not found\n"); + goto PARSE_OVER; + } + strncpy(g_queryInfo.superQueryInfo.sql[j], sqlStr->valuestring, MAX_QUERY_SQL_LENGTH); + + cJSON *result = cJSON_GetObjectItem(sql, "result"); + if (NULL != result && result->type == cJSON_String && result->valuestring != NULL) { + strncpy(g_queryInfo.superQueryInfo.result[j], result->valuestring, MAX_FILE_NAME_LEN); + } else if (NULL == result) { + memset(g_queryInfo.superQueryInfo.result[j], 0, MAX_FILE_NAME_LEN); + } else { + printf("failed to read json, super query result file not found\n"); + goto PARSE_OVER; + } + } + } + } + + // sub_table_query + cJSON *subQuery = cJSON_GetObjectItem(root, "super_table_query"); + if (!subQuery) { + g_queryInfo.subQueryInfo.threadCnt = 0; + g_queryInfo.subQueryInfo.sqlCount = 0; + } else if (subQuery->type != cJSON_Object) { + printf("failed to read json, sub_table_query not found"); + ret = true; + goto PARSE_OVER; + } else { + cJSON* subrate = cJSON_GetObjectItem(subQuery, "query_interval"); + if (subrate && subrate->type == cJSON_Number) { + g_queryInfo.subQueryInfo.rate = subrate->valueint; + } else if (!subrate) { + g_queryInfo.subQueryInfo.rate = 0; + } + + cJSON* threads = cJSON_GetObjectItem(subQuery, "threads"); + if (threads && threads->type == cJSON_Number) { + g_queryInfo.subQueryInfo.threadCnt = threads->valueint; + } else if (!threads) { + g_queryInfo.subQueryInfo.threadCnt = 1; + } + + //cJSON* subTblCnt = cJSON_GetObjectItem(subQuery, "childtable_count"); + //if (subTblCnt && subTblCnt->type == cJSON_Number) { + // g_queryInfo.subQueryInfo.childTblCount = subTblCnt->valueint; + //} else if (!subTblCnt) { + // g_queryInfo.subQueryInfo.childTblCount = 0; + //} + + cJSON* stblname = cJSON_GetObjectItem(subQuery, "stblname"); + if (stblname && stblname->type == cJSON_String && stblname->valuestring != NULL) { + strncpy(g_queryInfo.subQueryInfo.sTblName, stblname->valuestring, MAX_TB_NAME_SIZE); + } else { + printf("failed to read json, super table name not found\n"); + goto PARSE_OVER; + } + + cJSON* submode = cJSON_GetObjectItem(subQuery, "mode"); + if (submode && submode->type == cJSON_String && submode->valuestring != NULL) { + if (0 == strcmp("sync", submode->valuestring)) { + g_queryInfo.subQueryInfo.subscribeMode = 0; + } else if (0 == strcmp("async", submode->valuestring)) { + g_queryInfo.subQueryInfo.subscribeMode = 1; + } else { + printf("failed to read json, subscribe mod error\n"); + goto PARSE_OVER; + } + } else { + g_queryInfo.subQueryInfo.subscribeMode = 0; + } + + cJSON* subinterval = cJSON_GetObjectItem(subQuery, "interval"); + if (subinterval && subinterval->type == cJSON_Number) { + g_queryInfo.subQueryInfo.subscribeInterval = subinterval->valueint; + } else if (!subinterval) { + //printf("failed to read json, subscribe interval no found\n"); + //goto PARSE_OVER; + g_queryInfo.subQueryInfo.subscribeInterval = 10000; + } + + cJSON* subrestart = cJSON_GetObjectItem(subQuery, "restart"); + if (subrestart && subrestart->type == cJSON_String && subrestart->valuestring != NULL) { + if (0 == strcmp("yes", subrestart->valuestring)) { + g_queryInfo.subQueryInfo.subscribeRestart = 1; + } else if (0 == strcmp("no", subrestart->valuestring)) { + g_queryInfo.subQueryInfo.subscribeRestart = 0; + } else { + printf("failed to read json, subscribe restart error\n"); + goto PARSE_OVER; + } + } else { + g_queryInfo.subQueryInfo.subscribeRestart = 1; + } + + cJSON* subkeepProgress = cJSON_GetObjectItem(subQuery, "keepProgress"); + if (subkeepProgress && subkeepProgress->type == cJSON_String && subkeepProgress->valuestring != NULL) { + if (0 == strcmp("yes", subkeepProgress->valuestring)) { + g_queryInfo.subQueryInfo.subscribeKeepProgress = 1; + } else if (0 == strcmp("no", subkeepProgress->valuestring)) { + g_queryInfo.subQueryInfo.subscribeKeepProgress = 0; + } else { + printf("failed to read json, subscribe keepProgress error\n"); + goto PARSE_OVER; + } + } else { + g_queryInfo.subQueryInfo.subscribeKeepProgress = 0; + } + + // sqls + cJSON* subsqls = cJSON_GetObjectItem(subQuery, "sqls"); + if (!subsqls) { + g_queryInfo.subQueryInfo.sqlCount = 0; + } else if (subsqls->type != cJSON_Array) { + printf("failed to read json, super sqls not found\n"); + goto PARSE_OVER; + } else { + int superSqlSize = cJSON_GetArraySize(subsqls); + if (superSqlSize > MAX_QUERY_SQL_COUNT) { + printf("failed to read json, query sql size overflow, max is %d\n", MAX_QUERY_SQL_COUNT); + goto PARSE_OVER; + } + + g_queryInfo.subQueryInfo.sqlCount = superSqlSize; + for (int j = 0; j < superSqlSize; ++j) { + cJSON* sql = cJSON_GetArrayItem(subsqls, j); + if (sql == NULL) continue; + + cJSON *sqlStr = cJSON_GetObjectItem(sql, "sql"); + if (!sqlStr || sqlStr->type != cJSON_String || sqlStr->valuestring == NULL) { + printf("failed to read json, sql not found\n"); + goto PARSE_OVER; + } + strncpy(g_queryInfo.subQueryInfo.sql[j], sqlStr->valuestring, MAX_QUERY_SQL_LENGTH); + + cJSON *result = cJSON_GetObjectItem(sql, "result"); + if (result != NULL && result->type == cJSON_String && result->valuestring != NULL){ + strncpy(g_queryInfo.subQueryInfo.result[j], result->valuestring, MAX_FILE_NAME_LEN); + } else if (NULL == result) { + memset(g_queryInfo.subQueryInfo.result[j], 0, MAX_FILE_NAME_LEN); + } else { + printf("failed to read json, sub query result file not found\n"); + goto PARSE_OVER; + } + } + } + } + + ret = true; + +PARSE_OVER: + //free(content); + //cJSON_Delete(root); + //fclose(fp); + return ret; +} + +static bool getInfoFromJsonFile(char* file) { + FILE *fp = fopen(file, "r"); + if (!fp) { + printf("failed to read %s, reason:%s\n", file, strerror(errno)); + return false; + } + + bool ret = false; + int maxLen = 64000; + char *content = calloc(1, maxLen + 1); + int len = fread(content, 1, maxLen, fp); + if (len <= 0) { + free(content); + fclose(fp); + printf("failed to read %s, content is null", file); + return false; + } + + content[len] = 0; + cJSON* root = cJSON_Parse(content); + if (root == NULL) { + printf("failed to cjson parse %s, invalid json format", file); + goto PARSE_OVER; + } + + cJSON* filetype = cJSON_GetObjectItem(root, "filetype"); + if (filetype && filetype->type == cJSON_String && filetype->valuestring != NULL) { + if (0 == strcasecmp("insert", filetype->valuestring)) { + g_jsonType = INSERT_MODE; + } else if (0 == strcasecmp("query", filetype->valuestring)) { + g_jsonType = QUERY_MODE; + } else if (0 == strcasecmp("subscribe", filetype->valuestring)) { + g_jsonType = SUBSCRIBE_MODE; + } else { + printf("failed to read json, filetype not support\n"); + goto PARSE_OVER; + } + } else if (!filetype) { + g_jsonType = INSERT_MODE; + } else { + printf("failed to read json, filetype not found\n"); + goto PARSE_OVER; + } + + if (INSERT_MODE == g_jsonType) { + ret = getMetaFromInsertJsonFile(root); + } else if (QUERY_MODE == g_jsonType) { + ret = getMetaFromQueryJsonFile(root); + } else if (SUBSCRIBE_MODE == g_jsonType) { + ret = getMetaFromQueryJsonFile(root); + } else { + printf("input json file type error! please input correct file type: insert or query or subscribe\n"); + goto PARSE_OVER; + } + +PARSE_OVER: + free(content); + cJSON_Delete(root); + fclose(fp); + return ret; +} + + +void prePareSampleData() { + for (int i = 0; i < g_Dbs.dbCount; i++) { + for (int j = 0; j < g_Dbs.db[i].superTblCount; j++) { + //if (0 == strncasecmp(g_Dbs.db[i].superTbls[j].dataSource, "sample", 6)) { + // readSampleFromFileToMem(&g_Dbs.db[i].superTbls[j]); + //} + + if (g_Dbs.db[i].superTbls[j].tagsFile[0] != 0) { + (void)readTagFromCsvFileToMem(&g_Dbs.db[i].superTbls[j]); + } + + #ifdef TD_LOWA_CURL + if (0 == strncasecmp(g_Dbs.db[i].superTbls[j].insertMode, "restful", 8)) { + curl_global_init(CURL_GLOBAL_ALL); + } + #endif + } + } +} + +void postFreeResource() { + tmfclose(g_fpOfInsertResult); + for (int i = 0; i < g_Dbs.dbCount; i++) { + for (int j = 0; j < g_Dbs.db[i].superTblCount; j++) { + if (0 != g_Dbs.db[i].superTbls[j].colsOfCreatChildTable) { + free(g_Dbs.db[i].superTbls[j].colsOfCreatChildTable); + g_Dbs.db[i].superTbls[j].colsOfCreatChildTable = NULL; + } + if (0 != g_Dbs.db[i].superTbls[j].sampleDataBuf) { + free(g_Dbs.db[i].superTbls[j].sampleDataBuf); + g_Dbs.db[i].superTbls[j].sampleDataBuf = NULL; + } + if (0 != g_Dbs.db[i].superTbls[j].tagDataBuf) { + free(g_Dbs.db[i].superTbls[j].tagDataBuf); + g_Dbs.db[i].superTbls[j].tagDataBuf = NULL; + } + if (0 != g_Dbs.db[i].superTbls[j].childTblName) { + free(g_Dbs.db[i].superTbls[j].childTblName); + g_Dbs.db[i].superTbls[j].childTblName = NULL; + } + + #ifdef TD_LOWA_CURL + if (0 == strncasecmp(g_Dbs.db[i].superTbls[j].insertMode, "restful", 8)) { + curl_global_cleanup(); + } + #endif + } + } +} + +int getRowDataFromSample(char* dataBuf, int maxLen, int64_t timestamp, SSuperTable* superTblInfo, int* sampleUsePos, FILE *fp, char* sampleBuf) { + if ((*sampleUsePos) == MAX_SAMPLES_ONCE_FROM_FILE) { + int ret = readSampleFromCsvFileToMem(fp, superTblInfo, sampleBuf); + if (0 != ret) { + return -1; + } + *sampleUsePos = 0; + } + + int dataLen = 0; + dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "(%" PRId64 ", ", timestamp); + dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "%s", sampleBuf + superTblInfo->lenOfOneRow * (*sampleUsePos)); + dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, ")"); + + (*sampleUsePos)++; + + return dataLen; +} + +int generateRowData(char* dataBuf, int maxLen, int64_t timestamp, SSuperTable* stbInfo) { + int dataLen = 0; + dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "(%" PRId64 ", ", timestamp); + for (int i = 0; i < stbInfo->columnCount; i++) { + if ((0 == strncasecmp(stbInfo->columns[i].dataType, "binary", 6)) || (0 == strncasecmp(stbInfo->columns[i].dataType, "nchar", 5))) { + if (stbInfo->columns[i].dataLen > TSDB_MAX_BINARY_LEN) { + printf("binary or nchar length overflow, max size:%u\n", (uint32_t)TSDB_MAX_BINARY_LEN); + return (-1); + } + + char* buf = (char*)calloc(stbInfo->columns[i].dataLen+1, 1); + if (NULL == buf) { + printf("calloc failed! size:%d\n", stbInfo->columns[i].dataLen); + return (-1); + } + rand_string(buf, stbInfo->columns[i].dataLen); + dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "\'%s\', ", buf); + tmfree(buf); + } else if (0 == strncasecmp(stbInfo->columns[i].dataType, "int", 3)) { + dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "%d, ", rand_int()); + } else if (0 == strncasecmp(stbInfo->columns[i].dataType, "bigint", 6)) { + dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "%"PRId64", ", rand_bigint()); + } else if (0 == strncasecmp(stbInfo->columns[i].dataType, "float", 5)) { + dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "%f, ", rand_float()); + } else if (0 == strncasecmp(stbInfo->columns[i].dataType, "double", 6)) { + dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "%f, ", rand_double()); + } else if (0 == strncasecmp(stbInfo->columns[i].dataType, "smallint", 8)) { + dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "%d, ", rand_smallint()); + } else if (0 == strncasecmp(stbInfo->columns[i].dataType, "tinyint", 7)) { + dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "%d, ", rand_tinyint()); + } else if (0 == strncasecmp(stbInfo->columns[i].dataType, "bool", 4)) { + dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "%d, ", rand_bool()); + } else if (0 == strncasecmp(stbInfo->columns[i].dataType, "timestamp", 9)) { + dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "%"PRId64", ", rand_bigint()); + } else { + printf("No support data type: %s\n", stbInfo->columns[i].dataType); + return (-1); + } + } + dataLen -= 2; + dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, ")"); + + return dataLen; +} + +void syncWriteForNumberOfTblInOneSql(threadInfo *winfo, FILE *fp, char* sampleDataBuf) { + SSuperTable* superTblInfo = winfo->superTblInfo; + + int samplePos = 0; + + //printf("========threadID[%d], table rang: %d - %d \n", winfo->threadID, winfo->start_table_id, winfo->end_table_id); + int64_t totalRowsInserted = 0; + int64_t totalAffectedRows = 0; + int64_t lastPrintTime = taosGetTimestampMs(); + + char* buffer = calloc(superTblInfo->maxSqlLen+1, 1); + if (NULL == buffer) { + printf("========calloc size[ %d ] fail!\n", superTblInfo->maxSqlLen); + return; + } + + int32_t numberOfTblInOneSql = superTblInfo->numberOfTblInOneSql; + int32_t tbls = winfo->end_table_id - winfo->start_table_id + 1; + if (numberOfTblInOneSql > tbls) { + numberOfTblInOneSql = tbls; + } + + int64_t time_counter = winfo->start_time; + int64_t tmp_time; + int sampleUsePos; + + int64_t st = 0; + int64_t et = 0; + for (int i = 0; i < superTblInfo->insertRows;) { + if (superTblInfo->insertRate && (et - st) < 1000) { + taosMsleep(1000 - (et - st)); // ms + //printf("========sleep duration:%"PRId64 "========inserted rows:%d, table range:%d - %d\n", (1000 - (et - st)), i, winfo->start_table_id, winfo->end_table_id); + } + + if (superTblInfo->insertRate) { + st = taosGetTimestampMs(); + } + + int32_t tbl_id = 0; + for (int tID = winfo->start_table_id; tID <= winfo->end_table_id; ) { + int inserted = i; + + int k = 0; + int batchRowsSql = 0; + while (1) + { + int len = 0; + memset(buffer, 0, superTblInfo->maxSqlLen); + char *pstr = buffer; + + int32_t end_tbl_id = tID + numberOfTblInOneSql; + if (end_tbl_id > winfo->end_table_id) { + end_tbl_id = winfo->end_table_id+1; + } + for (tbl_id = tID; tbl_id < end_tbl_id; tbl_id++) { + sampleUsePos = samplePos; + if (AUTO_CREATE_SUBTBL == superTblInfo->autoCreateTable) { + char* tagsValBuf = NULL; + if (0 == superTblInfo->tagSource) { + tagsValBuf = generateTagVaulesForStb(superTblInfo); + } else { + tagsValBuf = getTagValueFromTagSample(superTblInfo, tbl_id % superTblInfo->tagSampleCount); + } + if (NULL == tagsValBuf) { + goto free_and_statistics; + } + + if (0 == len) { + len += snprintf(pstr + len, superTblInfo->maxSqlLen - len, "insert into %s.%s%d using %s.%s tags %s values ", winfo->db_name, superTblInfo->childTblPrefix, tbl_id, winfo->db_name, superTblInfo->sTblName, tagsValBuf); + } else { + len += snprintf(pstr + len, superTblInfo->maxSqlLen - len, " %s.%s%d using %s.%s tags %s values ", winfo->db_name, superTblInfo->childTblPrefix, tbl_id, winfo->db_name, superTblInfo->sTblName, tagsValBuf); + } + tmfree(tagsValBuf); + } else if (TBL_ALREADY_EXISTS == superTblInfo->childTblExists) { + if (0 == len) { + len += snprintf(pstr + len, superTblInfo->maxSqlLen - len, "insert into %s.%s values ", winfo->db_name, superTblInfo->childTblName + tbl_id * TSDB_TABLE_NAME_LEN); + } else { + len += snprintf(pstr + len, superTblInfo->maxSqlLen - len, " %s.%s values ", winfo->db_name, superTblInfo->childTblName + tbl_id * TSDB_TABLE_NAME_LEN); + } + } else { // pre-create child table + if (0 == len) { + len += snprintf(pstr + len, superTblInfo->maxSqlLen - len, "insert into %s.%s%d values ", winfo->db_name, superTblInfo->childTblPrefix, tbl_id); + } else { + len += snprintf(pstr + len, superTblInfo->maxSqlLen - len, " %s.%s%d values ", winfo->db_name, superTblInfo->childTblPrefix, tbl_id); + } + } + + tmp_time = time_counter; + for (k = 0; k < superTblInfo->rowsPerTbl;) { + int retLen = 0; + if (0 == strncasecmp(superTblInfo->dataSource, "sample", 6)) { + retLen = getRowDataFromSample(pstr + len, superTblInfo->maxSqlLen - len, tmp_time += superTblInfo->timeStampStep, superTblInfo, &sampleUsePos, fp, sampleDataBuf); + if (retLen < 0) { + goto free_and_statistics; + } + } else if (0 == strncasecmp(superTblInfo->dataSource, "rand", 8)) { + int rand_num = rand_tinyint() % 100; + if (0 != superTblInfo->disorderRatio && rand_num < superTblInfo->disorderRatio) { + int64_t d = tmp_time - rand() % superTblInfo->disorderRange; + retLen = generateRowData(pstr + len, superTblInfo->maxSqlLen - len, d, superTblInfo); + } else { + retLen = generateRowData(pstr + len, superTblInfo->maxSqlLen - len, tmp_time += superTblInfo->timeStampStep, superTblInfo); + } + if (retLen < 0) { + goto free_and_statistics; + } + } + len += retLen; + //inserted++; + k++; + totalRowsInserted++; + batchRowsSql++; + + if (inserted >= superTblInfo->insertRows || (superTblInfo->maxSqlLen - len) < (superTblInfo->lenOfOneRow + 128) || batchRowsSql >= INT16_MAX - 1) { + tID = tbl_id + 1; + printf("config rowsPerTbl and numberOfTblInOneSql not match with max_sql_lenth, please reconfig![lenOfOneRow:%d]\n", superTblInfo->lenOfOneRow); + goto send_to_server; + } + } + + } + + tID = tbl_id; + inserted += superTblInfo->rowsPerTbl; + + send_to_server: + batchRowsSql = 0; + if (0 == strncasecmp(superTblInfo->insertMode, "taosc", 5)) { + //printf("multi table===== sql: %s \n\n", buffer); + //int64_t t1 = taosGetTimestampMs(); + int affectedRows = queryDbExec(winfo->taos, buffer, INSERT_TYPE); + if (0 > affectedRows) { + goto free_and_statistics; + } + totalAffectedRows += affectedRows; + + int64_t currentPrintTime = taosGetTimestampMs(); + if (currentPrintTime - lastPrintTime > 30*1000) { + printf("thread[%d] has currently inserted rows: %"PRId64 ", affected rows: %"PRId64 "\n", winfo->threadID, totalRowsInserted, totalAffectedRows); + lastPrintTime = currentPrintTime; + } + //int64_t t2 = taosGetTimestampMs(); + //printf("taosc insert sql return, Spent %.4f seconds \n", (double)(t2 - t1)/1000.0); + } else { + #ifdef TD_LOWA_CURL + //int64_t t1 = taosGetTimestampMs(); + int retCode = curlProceSql(g_Dbs.host, g_Dbs.port, buffer, winfo->curl_handle); + //int64_t t2 = taosGetTimestampMs(); + //printf("http insert sql return, Spent %ld ms \n", t2 - t1); + + if (0 != retCode) { + printf("========curl return fail, threadID[%d]\n", winfo->threadID); + goto free_and_statistics; + } + #else + printf("========no use http mode for no curl lib!\n"); + goto free_and_statistics; + #endif + } + + //printf("========tID:%d, k:%d, loop_cnt:%d\n", tID, k, loop_cnt); + break; + } + + if (tID > winfo->end_table_id) { + if (0 == strncasecmp(superTblInfo->dataSource, "sample", 6)) { + samplePos = sampleUsePos; + } + i = inserted; + time_counter = tmp_time; + } + } + + if (superTblInfo->insertRate) { + et = taosGetTimestampMs(); + } + //printf("========loop %d childTables duration:%"PRId64 "========inserted rows:%d\n", winfo->end_table_id - winfo->start_table_id, et - st, i); + } + + free_and_statistics: + tmfree(buffer); + winfo->totalRowsInserted = totalRowsInserted; + winfo->totalAffectedRows = totalAffectedRows; + printf("====thread[%d] completed total inserted rows: %"PRId64 ", affected rows: %"PRId64 "====\n", winfo->threadID, totalRowsInserted, totalAffectedRows); + return; +} + +// sync insertion +/* + 1 thread: 100 tables * 2000 rows/s + 1 thread: 10 tables * 20000 rows/s + 6 thread: 300 tables * 2000 rows/s + + 2 taosinsertdata , 1 thread: 10 tables * 20000 rows/s +*/ +void *syncWrite(void *sarg) { + int64_t totalRowsInserted = 0; + int64_t totalAffectedRows = 0; + int64_t lastPrintTime = taosGetTimestampMs(); + + threadInfo *winfo = (threadInfo *)sarg; + SSuperTable* superTblInfo = winfo->superTblInfo; + + FILE *fp = NULL; + char* sampleDataBuf = NULL; + int samplePos = 0; + + // each thread read sample data from csv file + if (0 == strncasecmp(superTblInfo->dataSource, "sample", 6)) { + sampleDataBuf = calloc(superTblInfo->lenOfOneRow * MAX_SAMPLES_ONCE_FROM_FILE, 1); + if (sampleDataBuf == NULL) { + printf("Failed to calloc %d Bytes, reason:%s\n", superTblInfo->lenOfOneRow * MAX_SAMPLES_ONCE_FROM_FILE, strerror(errno)); + return NULL; + } + + fp = fopen(superTblInfo->sampleFile, "r"); + if (fp == NULL) { + printf("Failed to open sample file: %s, reason:%s\n", superTblInfo->sampleFile, strerror(errno)); + tmfree(sampleDataBuf); + return NULL; + } + int ret = readSampleFromCsvFileToMem(fp, superTblInfo, sampleDataBuf); + if (0 != ret) { + tmfree(sampleDataBuf); + tmfclose(fp); + return NULL; + } + } + + if (superTblInfo->numberOfTblInOneSql > 0) { + syncWriteForNumberOfTblInOneSql(winfo, fp, sampleDataBuf); + tmfree(sampleDataBuf); + tmfclose(fp); + return NULL; + } + + //printf("========threadID[%d], table rang: %d - %d \n", winfo->threadID, winfo->start_table_id, winfo->end_table_id); + + char* buffer = calloc(superTblInfo->maxSqlLen, 1); + + int nrecords_per_request = 0; + if (AUTO_CREATE_SUBTBL == superTblInfo->autoCreateTable) { + nrecords_per_request = (superTblInfo->maxSqlLen - 1280 - superTblInfo->lenOfTagOfOneRow) / superTblInfo->lenOfOneRow; + } else { + nrecords_per_request = (superTblInfo->maxSqlLen - 1280) / superTblInfo->lenOfOneRow; + } + + int nrecords_no_last_req = nrecords_per_request; + int nrecords_last_req = 0; + int loop_cnt = 0; + if (0 != superTblInfo->insertRate) { + if (nrecords_no_last_req >= superTblInfo->insertRate) { + nrecords_no_last_req = superTblInfo->insertRate; + } else { + nrecords_last_req = superTblInfo->insertRate % nrecords_per_request; + loop_cnt = (superTblInfo->insertRate / nrecords_per_request) + (superTblInfo->insertRate % nrecords_per_request ? 1 : 0) ; + } + } + + if (nrecords_no_last_req <= 0) { + nrecords_no_last_req = 1; + } + + if (nrecords_no_last_req >= INT16_MAX) { + nrecords_no_last_req = INT16_MAX - 1; + } + + if (nrecords_last_req >= INT16_MAX) { + nrecords_last_req = INT16_MAX - 1; + } + + int nrecords_cur_req = nrecords_no_last_req; + int loop_cnt_orig = loop_cnt; + + //printf("========nrecords_per_request:%d, nrecords_no_last_req:%d, nrecords_last_req:%d, loop_cnt:%d\n", nrecords_per_request, nrecords_no_last_req, nrecords_last_req, loop_cnt); + + int64_t time_counter = winfo->start_time; + + int64_t st = 0; + int64_t et = 0; + for (int i = 0; i < superTblInfo->insertRows;) { + if (superTblInfo->insertRate && (et - st) < 1000) { + taosMsleep(1000 - (et - st)); // ms + //printf("========sleep duration:%"PRId64 "========inserted rows:%d, table range:%d - %d\n", (1000 - (et - st)), i, winfo->start_table_id, winfo->end_table_id); + } + + if (superTblInfo->insertRate) { + st = taosGetTimestampMs(); + } + + for (int tID = winfo->start_table_id; tID <= winfo->end_table_id; tID++) { + int inserted = i; + int64_t tmp_time = time_counter; + + int sampleUsePos = samplePos; + int k = 0; + while (1) + { + int len = 0; + memset(buffer, 0, superTblInfo->maxSqlLen); + char *pstr = buffer; + + if (AUTO_CREATE_SUBTBL == superTblInfo->autoCreateTable) { + char* tagsValBuf = NULL; + if (0 == superTblInfo->tagSource) { + tagsValBuf = generateTagVaulesForStb(superTblInfo); + } else { + tagsValBuf = getTagValueFromTagSample(superTblInfo, tID % superTblInfo->tagSampleCount); + } + if (NULL == tagsValBuf) { + goto free_and_statistics_2; + } + + len += snprintf(pstr + len, superTblInfo->maxSqlLen - len, "insert into %s.%s%d using %s.%s tags %s values", winfo->db_name, superTblInfo->childTblPrefix, tID, winfo->db_name, superTblInfo->sTblName, tagsValBuf); + tmfree(tagsValBuf); + } else if (TBL_ALREADY_EXISTS == superTblInfo->childTblExists) { + len += snprintf(pstr + len, superTblInfo->maxSqlLen - len, "insert into %s.%s values", winfo->db_name, superTblInfo->childTblName + tID * TSDB_TABLE_NAME_LEN); + } else { + len += snprintf(pstr + len, superTblInfo->maxSqlLen - len, "insert into %s.%s%d values", winfo->db_name, superTblInfo->childTblPrefix, tID); + } + + for (k = 0; k < nrecords_cur_req;) { + int retLen = 0; + if (0 == strncasecmp(superTblInfo->dataSource, "sample", 6)) { + retLen = getRowDataFromSample(pstr + len, superTblInfo->maxSqlLen - len, tmp_time += superTblInfo->timeStampStep, superTblInfo, &sampleUsePos, fp, sampleDataBuf); + if (retLen < 0) { + goto free_and_statistics_2; + } + } else if (0 == strncasecmp(superTblInfo->dataSource, "rand", 8)) { + int rand_num = rand_tinyint() % 100; + if (0 != superTblInfo->disorderRatio && rand_num < superTblInfo->disorderRatio) { + int64_t d = tmp_time - rand() % superTblInfo->disorderRange; + retLen = generateRowData(pstr + len, superTblInfo->maxSqlLen - len, d, superTblInfo); + //printf("disorder rows, rand_num:%d, last ts:%"PRId64" current ts:%"PRId64"\n", rand_num, tmp_time, d); + } else { + retLen = generateRowData(pstr + len, superTblInfo->maxSqlLen - len, tmp_time += superTblInfo->timeStampStep, superTblInfo); + } + if (retLen < 0) { + goto free_and_statistics_2; + } + } + len += retLen; + inserted++; + k++; + totalRowsInserted++; + + if (inserted >= superTblInfo->insertRows || (superTblInfo->maxSqlLen - len) < (superTblInfo->lenOfOneRow + 128)) break; + } + + if (0 == strncasecmp(superTblInfo->insertMode, "taosc", 5)) { + //printf("===== sql: %s \n\n", buffer); + //int64_t t1 = taosGetTimestampMs(); + int affectedRows = queryDbExec(winfo->taos, buffer, INSERT_TYPE); + if (0 > affectedRows){ + goto free_and_statistics_2; + } + totalAffectedRows += affectedRows; + + int64_t currentPrintTime = taosGetTimestampMs(); + if (currentPrintTime - lastPrintTime > 30*1000) { + printf("thread[%d] has currently inserted rows: %"PRId64 ", affected rows: %"PRId64 "\n", winfo->threadID, totalRowsInserted, totalAffectedRows); + lastPrintTime = currentPrintTime; + } + //int64_t t2 = taosGetTimestampMs(); + //printf("taosc insert sql return, Spent %.4f seconds \n", (double)(t2 - t1)/1000.0); + } else { + #ifdef TD_LOWA_CURL + //int64_t t1 = taosGetTimestampMs(); + int retCode = curlProceSql(g_Dbs.host, g_Dbs.port, buffer, winfo->curl_handle); + //int64_t t2 = taosGetTimestampMs(); + //printf("http insert sql return, Spent %ld ms \n", t2 - t1); + + if (0 != retCode) { + printf("========curl return fail, threadID[%d]\n", winfo->threadID); + goto free_and_statistics_2; + } + #else + printf("========no use http mode for no curl lib!\n"); + goto free_and_statistics_2; + #endif + } + + //printf("========tID:%d, k:%d, loop_cnt:%d\n", tID, k, loop_cnt); + + if (loop_cnt) { + loop_cnt--; + if ((1 == loop_cnt) && (0 != nrecords_last_req)) { + nrecords_cur_req = nrecords_last_req; + } else if (0 == loop_cnt){ + nrecords_cur_req = nrecords_no_last_req; + loop_cnt = loop_cnt_orig; + break; + } + } else { + break; + } + } + + if (tID == winfo->end_table_id) { + if (0 == strncasecmp(superTblInfo->dataSource, "sample", 6)) { + samplePos = sampleUsePos; + } + i = inserted; + time_counter = tmp_time; + } + } + + if (superTblInfo->insertRate) { + et = taosGetTimestampMs(); + } + //printf("========loop %d childTables duration:%"PRId64 "========inserted rows:%d\n", winfo->end_table_id - winfo->start_table_id, et - st, i); + } + + free_and_statistics_2: + tmfree(buffer); + tmfree(sampleDataBuf); + tmfclose(fp); + + winfo->totalRowsInserted = totalRowsInserted; + winfo->totalAffectedRows = totalAffectedRows; + + printf("====thread[%d] completed total inserted rows: %"PRId64 ", total affected rows: %"PRId64 "====\n", winfo->threadID, totalRowsInserted, totalAffectedRows); + return NULL; +} + +void callBack(void *param, TAOS_RES *res, int code) { + threadInfo* winfo = (threadInfo*)param; + + if (winfo->superTblInfo->insertRate) { + winfo->et = taosGetTimestampMs(); + if (winfo->et - winfo->st < 1000) { + taosMsleep(1000 - (winfo->et - winfo->st)); // ms + } + } + + char *buffer = calloc(1, winfo->superTblInfo->maxSqlLen); + char *data = calloc(1, MAX_DATA_SIZE); + char *pstr = buffer; + pstr += sprintf(pstr, "insert into %s.%s%d values", winfo->db_name, winfo->tb_prefix, winfo->start_table_id); + if (winfo->counter >= winfo->superTblInfo->insertRows) { + winfo->start_table_id++; + winfo->counter = 0; + } + if (winfo->start_table_id > winfo->end_table_id) { + tsem_post(&winfo->lock_sem); + free(buffer); + free(data); + taos_free_result(res); + return; + } + + for (int i = 0; i < winfo->nrecords_per_request; i++) { + int rand_num = rand() % 100; + if (0 != winfo->superTblInfo->disorderRatio && rand_num < winfo->superTblInfo->disorderRatio) + { + int64_t d = winfo->lastTs - rand() % 1000000 + rand_num; + //generateData(data, datatype, ncols_per_record, d, len_of_binary); + (void)generateRowData(data, MAX_DATA_SIZE, d, winfo->superTblInfo); + } else { + //generateData(data, datatype, ncols_per_record, tmp_time += 1000, len_of_binary); + (void)generateRowData(data, MAX_DATA_SIZE, winfo->lastTs += 1000, winfo->superTblInfo); + } + pstr += sprintf(pstr, "%s", data); + winfo->counter++; + + if (winfo->counter >= winfo->superTblInfo->insertRows) { + break; + } + } + + if (winfo->superTblInfo->insertRate) { + winfo->st = taosGetTimestampMs(); + } + taos_query_a(winfo->taos, buffer, callBack, winfo); + free(buffer); + free(data); + + taos_free_result(res); +} + +void *asyncWrite(void *sarg) { + threadInfo *winfo = (threadInfo *)sarg; + + winfo->nrecords_per_request = 0; + //if (AUTO_CREATE_SUBTBL == winfo->superTblInfo->autoCreateTable) { + winfo->nrecords_per_request = (winfo->superTblInfo->maxSqlLen - 1280 - winfo->superTblInfo->lenOfTagOfOneRow) / winfo->superTblInfo->lenOfOneRow; + //} else { + // winfo->nrecords_per_request = (winfo->superTblInfo->maxSqlLen - 1280) / winfo->superTblInfo->lenOfOneRow; + //} + + if (0 != winfo->superTblInfo->insertRate) { + if (winfo->nrecords_per_request >= winfo->superTblInfo->insertRate) { + winfo->nrecords_per_request = winfo->superTblInfo->insertRate; + } + } + + if (winfo->nrecords_per_request <= 0) { + winfo->nrecords_per_request = 1; + } + + if (winfo->nrecords_per_request >= INT16_MAX) { + winfo->nrecords_per_request = INT16_MAX - 1; + } + + if (winfo->nrecords_per_request >= INT16_MAX) { + winfo->nrecords_per_request = INT16_MAX - 1; + } + + winfo->st = 0; + winfo->et = 0; + winfo->lastTs = winfo->start_time; + + if (winfo->superTblInfo->insertRate) { + winfo->st = taosGetTimestampMs(); + } + taos_query_a(winfo->taos, "show databases", callBack, winfo); + + tsem_wait(&(winfo->lock_sem)); + + return NULL; +} + +void startMultiThreadInsertData(int threads, char* db_name, char* precision, SSuperTable* superTblInfo) { + pthread_t *pids = malloc(threads * sizeof(pthread_t)); + threadInfo *infos = malloc(threads * sizeof(threadInfo)); + memset(pids, 0, threads * sizeof(pthread_t)); + memset(infos, 0, threads * sizeof(threadInfo)); + int ntables = superTblInfo->childTblCount; + + int a = ntables / threads; + if (a < 1) { + threads = ntables; + a = 1; + } + + int b = 0; + if (threads != 0) { + b = ntables % threads; + } + + //TAOS* taos; + //if (0 == strncasecmp(superTblInfo->insertMode, "taosc", 5)) { + // taos = taos_connect(g_Dbs.host, g_Dbs.user, g_Dbs.password, db_name, g_Dbs.port); + // if (NULL == taos) { + // printf("connect to server fail, reason: %s\n", taos_errstr(NULL)); + // exit(-1); + // } + //} + + int32_t timePrec = TSDB_TIME_PRECISION_MILLI; + if (0 != precision[0]) { + if (0 == strncasecmp(precision, "ms", 2)) { + timePrec = TSDB_TIME_PRECISION_MILLI; + } else if (0 == strncasecmp(precision, "us", 2)) { + timePrec = TSDB_TIME_PRECISION_MICRO; + } else { + printf("No support precision: %s\n", precision); + exit(-1); + } + } + + int64_t start_time; + if (0 == strncasecmp(superTblInfo->startTimestamp, "now", 3)) { + start_time = taosGetTimestamp(timePrec); + } else { + (void)taosParseTime(superTblInfo->startTimestamp, &start_time, strlen(superTblInfo->startTimestamp), timePrec, 0); + } + + double start = getCurrentTime(); + + int last = 0; + for (int i = 0; i < threads; i++) { + threadInfo *t_info = infos + i; + t_info->threadID = i; + tstrncpy(t_info->db_name, db_name, MAX_DB_NAME_SIZE); + t_info->superTblInfo = superTblInfo; + + t_info->start_time = start_time; + + if (0 == strncasecmp(superTblInfo->insertMode, "taosc", 5)) { + //t_info->taos = taos; + t_info->taos = taos_connect(g_Dbs.host, g_Dbs.user, g_Dbs.password, db_name, g_Dbs.port); + if (NULL == t_info->taos) { + printf("connect to server fail from insert sub thread, reason: %s\n", taos_errstr(NULL)); + exit(-1); + } + } else { + t_info->taos = NULL; + #ifdef TD_LOWA_CURL + t_info->curl_handle = curl_easy_init(); + #endif + } + + if (0 == superTblInfo->multiThreadWriteOneTbl) { + t_info->start_table_id = last; + t_info->end_table_id = i < b ? last + a : last + a - 1; + last = t_info->end_table_id + 1; + } else { + t_info->start_table_id = 0; + t_info->end_table_id = superTblInfo->childTblCount - 1; + t_info->start_time = t_info->start_time + rand_int() % 10000 - rand_tinyint(); + } + + tsem_init(&(t_info->lock_sem), 0, 0); + + if (SYNC == g_Dbs.queryMode) { + pthread_create(pids + i, NULL, syncWrite, t_info); + } else { + pthread_create(pids + i, NULL, asyncWrite, t_info); + } + } + + for (int i = 0; i < threads; i++) { + pthread_join(pids[i], NULL); + } + + for (int i = 0; i < threads; i++) { + threadInfo *t_info = infos + i; + + tsem_destroy(&(t_info->lock_sem)); + taos_close(t_info->taos); + + superTblInfo->totalAffectedRows += t_info->totalAffectedRows; + superTblInfo->totalRowsInserted += t_info->totalRowsInserted; + #ifdef TD_LOWA_CURL + if (t_info->curl_handle) { + curl_easy_cleanup(t_info->curl_handle); + } + #endif + } + + double end = getCurrentTime(); + + //taos_close(taos); + + free(pids); + free(infos); + + printf("Spent %.4f seconds to insert rows: %"PRId64", affected rows: %"PRId64" with %d thread(s) into %s.%s\n\n", + end - start, superTblInfo->totalRowsInserted, superTblInfo->totalAffectedRows, threads, db_name, superTblInfo->sTblName); + fprintf(g_fpOfInsertResult, "Spent %.4f seconds to insert rows: %"PRId64", affected rows: %"PRId64" with %d thread(s) into %s.%s\n\n", + end - start, superTblInfo->totalRowsInserted, superTblInfo->totalAffectedRows, threads, db_name, superTblInfo->sTblName); +} + + +void *readTable(void *sarg) { +#if 1 + threadInfo *rinfo = (threadInfo *)sarg; + TAOS *taos = rinfo->taos; + char command[BUFFER_SIZE] = "\0"; + int64_t sTime = rinfo->start_time; + char *tb_prefix = rinfo->tb_prefix; + FILE *fp = fopen(rinfo->fp, "a"); + if (NULL == fp) { + printf("fopen %s fail, reason:%s.\n", rinfo->fp, strerror(errno)); + return NULL; + } + + int num_of_DPT = rinfo->superTblInfo->insertRows; // nrecords_per_table; + int num_of_tables = rinfo->end_table_id - rinfo->start_table_id + 1; + int totalData = num_of_DPT * num_of_tables; + bool do_aggreFunc = g_Dbs.do_aggreFunc; + + int n = do_aggreFunc ? (sizeof(aggreFunc) / sizeof(aggreFunc[0])) : 2; + if (!do_aggreFunc) { + printf("\nThe first field is either Binary or Bool. Aggregation functions are not supported.\n"); + } + printf("%d records:\n", totalData); + fprintf(fp, "| QFunctions | QRecords | QSpeed(R/s) | QLatency(ms) |\n"); + + for (int j = 0; j < n; j++) { + double totalT = 0; + int count = 0; + for (int i = 0; i < num_of_tables; i++) { + sprintf(command, "select %s from %s%d where ts>= %" PRId64, aggreFunc[j], tb_prefix, i, sTime); + + double t = getCurrentTime(); + TAOS_RES *pSql = taos_query(taos, command); + int32_t code = taos_errno(pSql); + + if (code != 0) { + fprintf(stderr, "Failed to query:%s\n", taos_errstr(pSql)); + taos_free_result(pSql); + taos_close(taos); + return NULL; + } + + while (taos_fetch_row(pSql) != NULL) { + count++; + } + + t = getCurrentTime() - t; + totalT += t; + + taos_free_result(pSql); + } + + fprintf(fp, "|%10s | %10d | %12.2f | %10.2f |\n", + aggreFunc[j][0] == '*' ? " * " : aggreFunc[j], totalData, + (double)(num_of_tables * num_of_DPT) / totalT, totalT * 1000); + printf("select %10s took %.6f second(s)\n", aggreFunc[j], totalT); + } + fprintf(fp, "\n"); + fclose(fp); +#endif + return NULL; +} + +void *readMetric(void *sarg) { +#if 1 + threadInfo *rinfo = (threadInfo *)sarg; + TAOS *taos = rinfo->taos; + char command[BUFFER_SIZE] = "\0"; + FILE *fp = fopen(rinfo->fp, "a"); + if (NULL == fp) { + printf("fopen %s fail, reason:%s.\n", rinfo->fp, strerror(errno)); + return NULL; + } + + int num_of_DPT = rinfo->superTblInfo->insertRows; + int num_of_tables = rinfo->end_table_id - rinfo->start_table_id + 1; + int totalData = num_of_DPT * num_of_tables; + bool do_aggreFunc = g_Dbs.do_aggreFunc; + + int n = do_aggreFunc ? (sizeof(aggreFunc) / sizeof(aggreFunc[0])) : 2; + if (!do_aggreFunc) { + printf("\nThe first field is either Binary or Bool. Aggregation functions are not supported.\n"); + } + printf("%d records:\n", totalData); + fprintf(fp, "Querying On %d records:\n", totalData); + + for (int j = 0; j < n; j++) { + char condition[BUFFER_SIZE - 30] = "\0"; + char tempS[64] = "\0"; + + int m = 10 < num_of_tables ? 10 : num_of_tables; + + for (int i = 1; i <= m; i++) { + if (i == 1) { + sprintf(tempS, "t1 = %d", i); + } else { + sprintf(tempS, " or t1 = %d ", i); + } + strcat(condition, tempS); + + sprintf(command, "select %s from meters where %s", aggreFunc[j], condition); + + printf("Where condition: %s\n", condition); + fprintf(fp, "%s\n", command); + + double t = getCurrentTime(); + + TAOS_RES *pSql = taos_query(taos, command); + int32_t code = taos_errno(pSql); + + if (code != 0) { + fprintf(stderr, "Failed to query:%s\n", taos_errstr(pSql)); + taos_free_result(pSql); + taos_close(taos); + return NULL; + } + int count = 0; + while (taos_fetch_row(pSql) != NULL) { + count++; + } + t = getCurrentTime() - t; + + fprintf(fp, "| Speed: %12.2f(per s) | Latency: %.4f(ms) |\n", num_of_tables * num_of_DPT / t, t * 1000); + printf("select %10s took %.6f second(s)\n\n", aggreFunc[j], t); + + taos_free_result(pSql); + } + fprintf(fp, "\n"); + } + fclose(fp); +#endif + return NULL; +} + + +int insertTestProcess() { + + g_fpOfInsertResult = fopen(g_Dbs.resultFile, "a"); + if (NULL == g_fpOfInsertResult) { + fprintf(stderr, "Failed to open %s for save result\n", g_Dbs.resultFile); + return 1; + }; + + printfInsertMeta(); + printfInsertMetaToFile(g_fpOfInsertResult); + + if (!g_args.answer_yes) { + printf("Press enter key to continue\n\n"); + (void)getchar(); + } + + init_rand_data(); + + // create database and super tables + (void)createDatabases(); + + // pretreatement + prePareSampleData(); + + double start; + double end; + + // create child tables + start = getCurrentTime(); + createChildTables(); + end = getCurrentTime(); + if (g_totalChildTables > 0) { + printf("Spent %.4f seconds to create %d tables with %d thread(s)\n\n", end - start, g_totalChildTables, g_Dbs.threadCount); + fprintf(g_fpOfInsertResult, "Spent %.4f seconds to create %d tables with %d thread(s)\n\n", end - start, g_totalChildTables, g_Dbs.threadCount); + } + + usleep(1000*1000); + + // create sub threads for inserting data + //start = getCurrentTime(); + for (int i = 0; i < g_Dbs.dbCount; i++) { + for (int j = 0; j < g_Dbs.db[i].superTblCount; j++) { + SSuperTable* superTblInfo = &g_Dbs.db[i].superTbls[j]; + startMultiThreadInsertData(g_Dbs.threadCount, g_Dbs.db[i].dbName, g_Dbs.db[i].dbCfg.precision, superTblInfo); + } + } + //end = getCurrentTime(); + + //int64_t totalRowsInserted = 0; + //int64_t totalAffectedRows = 0; + //for (int i = 0; i < g_Dbs.dbCount; i++) { + // for (int j = 0; j < g_Dbs.db[i].superTblCount; j++) { + // totalRowsInserted += g_Dbs.db[i].superTbls[j].totalRowsInserted; + // totalAffectedRows += g_Dbs.db[i].superTbls[j].totalAffectedRows; + //} + //printf("Spent %.4f seconds to insert rows: %"PRId64", affected rows: %"PRId64" with %d thread(s)\n\n", end - start, totalRowsInserted, totalAffectedRows, g_Dbs.threadCount); + if (NULL == g_args.metaFile && false == g_Dbs.insert_only) { // query data pthread_t read_id; - info *rInfo = malloc(sizeof(info)); - rInfo->start_time = 1500000000000; + threadInfo *rInfo = malloc(sizeof(threadInfo)); + rInfo->start_time = 1500000000000; // 2017-07-14 10:40:00.000 rInfo->start_table_id = 0; - rInfo->end_table_id = ntables - 1; - rInfo->do_aggreFunc = do_aggreFunc; - rInfo->nrecords_per_table = nrecords_per_table; - rInfo->taos = taos_connect(ip_addr, user, pass, db_name, port); - strcpy(rInfo->tb_prefix, tb_prefix); - strcpy(rInfo->fp, arguments.output_file); + rInfo->end_table_id = g_Dbs.db[0].superTbls[0].childTblCount - 1; + //rInfo->do_aggreFunc = g_Dbs.do_aggreFunc; + //rInfo->nrecords_per_table = g_Dbs.db[0].superTbls[0].insertRows; + rInfo->superTblInfo = &g_Dbs.db[0].superTbls[0]; + rInfo->taos = taos_connect(g_Dbs.host, g_Dbs.user, g_Dbs.password, g_Dbs.db[0].dbName, g_Dbs.port); + strcpy(rInfo->tb_prefix, g_Dbs.db[0].superTbls[0].childTblPrefix); + strcpy(rInfo->fp, g_Dbs.resultFile); - if (!use_metric) { + if (!g_Dbs.use_metric) { pthread_create(&read_id, NULL, readTable, rInfo); } else { pthread_create(&read_id, NULL, readMetric, rInfo); } pthread_join(read_id, NULL); taos_close(rInfo->taos); - free(rInfo); } - taos_cleanup(); + postFreeResource(); + return 0; } -#define MAX_SQL_SIZE 65536 -void selectSql(TAOS* taos, char* sqlcmd) -{ - TAOS_RES *pSql = taos_query(taos, sqlcmd); - int32_t code = taos_errno(pSql); +void *superQueryProcess(void *sarg) { + threadInfo *winfo = (threadInfo *)sarg; + + //char sqlStr[MAX_TB_NAME_SIZE*2]; + //sprintf(sqlStr, "use %s", g_queryInfo.dbName); + //queryDB(winfo->taos, sqlStr); - if (code != 0) { - printf("Failed to sqlcmd:%s, reason:%s\n", sqlcmd, taos_errstr(pSql)); - taos_free_result(pSql); - exit(1); + int64_t st = 0; + int64_t et = 0; + while (1) { + if (g_queryInfo.superQueryInfo.rate && (et - st) < g_queryInfo.superQueryInfo.rate*1000) { + taosMsleep(g_queryInfo.superQueryInfo.rate*1000 - (et - st)); // ms + //printf("========sleep duration:%"PRId64 "========inserted rows:%d, table range:%d - %d\n", (1000 - (et - st)), i, winfo->start_table_id, winfo->end_table_id); + } + + st = taosGetTimestampMs(); + for (int i = 0; i < g_queryInfo.superQueryInfo.sqlCount; i++) { + if (0 == strncasecmp(g_queryInfo.queryMode, "taosc", 5)) { + int64_t t1 = taosGetTimestampUs(); + char tmpFile[MAX_FILE_NAME_LEN*2] = {0}; + if (g_queryInfo.superQueryInfo.result[i][0] != 0) { + sprintf(tmpFile, "%s-%d", g_queryInfo.superQueryInfo.result[i], winfo->threadID); + } + selectAndGetResult(winfo->taos, g_queryInfo.superQueryInfo.sql[i], tmpFile); + int64_t t2 = taosGetTimestampUs(); + printf("=[taosc] thread[%"PRIu64"] complete one sql, Spent %f s\n", (uint64_t)pthread_self(), (t2 - t1)/1000000.0); + } else { + #ifdef TD_LOWA_CURL + int64_t t1 = taosGetTimestampUs(); + int retCode = curlProceSql(g_queryInfo.host, g_queryInfo.port, g_queryInfo.superQueryInfo.sql[i], winfo->curl_handle); + int64_t t2 = taosGetTimestampUs(); + printf("=[restful] thread[%"PRIu64"] complete one sql, Spent %f s\n", (uint64_t)pthread_self(), (t2 - t1)/1000000.0); + + if (0 != retCode) { + printf("====curl return fail, threadID[%d]\n", winfo->threadID); + return NULL; + } + #endif + } + } + et = taosGetTimestampMs(); + printf("==thread[%"PRIu64"] complete all sqls to specify tables once queries duration:%.6fs\n\n", (uint64_t)pthread_self(), (double)(et - st)/1000.0); } - - int count = 0; - while (taos_fetch_row(pSql) != NULL) { - count++; - } - - taos_free_result(pSql); - return; + return NULL; } +void replaceSubTblName(char* inSql, char* outSql, int tblIndex) { + char sourceString[32] = "xxxx"; + char subTblName[MAX_TB_NAME_SIZE*3]; + sprintf(subTblName, "%s.%s", g_queryInfo.dbName, g_queryInfo.subQueryInfo.childTblName + tblIndex*TSDB_TABLE_NAME_LEN); + + //printf("inSql: %s\n", inSql); + + char* pos = strstr(inSql, sourceString); + if (0 == pos) { + return; + } + + strncpy(outSql, inSql, pos - inSql); + //printf("1: %s\n", outSql); + strcat(outSql, subTblName); + //printf("2: %s\n", outSql); + strcat(outSql, pos+strlen(sourceString)); + //printf("3: %s\n", outSql); +} + +void *subQueryProcess(void *sarg) { + char sqlstr[1024]; + threadInfo *winfo = (threadInfo *)sarg; + int64_t st = 0; + int64_t et = g_queryInfo.subQueryInfo.rate*1000; + while (1) { + if (g_queryInfo.subQueryInfo.rate && (et - st) < g_queryInfo.subQueryInfo.rate*1000) { + taosMsleep(g_queryInfo.subQueryInfo.rate*1000 - (et - st)); // ms + //printf("========sleep duration:%"PRId64 "========inserted rows:%d, table range:%d - %d\n", (1000 - (et - st)), i, winfo->start_table_id, winfo->end_table_id); + } + + st = taosGetTimestampMs(); + for (int i = winfo->start_table_id; i <= winfo->end_table_id; i++) { + for (int i = 0; i < g_queryInfo.subQueryInfo.sqlCount; i++) { + memset(sqlstr,0,sizeof(sqlstr)); + replaceSubTblName(g_queryInfo.subQueryInfo.sql[i], sqlstr, i); + char tmpFile[MAX_FILE_NAME_LEN*2] = {0}; + if (g_queryInfo.subQueryInfo.result[i][0] != 0) { + sprintf(tmpFile, "%s-%d", g_queryInfo.subQueryInfo.result[i], winfo->threadID); + } + selectAndGetResult(winfo->taos, sqlstr, tmpFile); + } + } + et = taosGetTimestampMs(); + printf("####thread[%"PRIu64"] complete all sqls to allocate all sub-tables[%d - %d] once queries duration:%.4fs\n\n", (uint64_t)pthread_self(), winfo->start_table_id, winfo->end_table_id, (double)(et - st)/1000.0); + } + return NULL; +} + +int queryTestProcess() { + TAOS * taos = NULL; + taos_init(); + taos = taos_connect(g_queryInfo.host, g_queryInfo.user, g_queryInfo.password, NULL, g_queryInfo.port); + if (taos == NULL) { + fprintf(stderr, "Failed to connect to TDengine, reason:%s\n", taos_errstr(NULL)); + exit(-1); + } + + if (0 != g_queryInfo.subQueryInfo.sqlCount) { + (void)getAllChildNameOfSuperTable(taos, g_queryInfo.dbName, g_queryInfo.subQueryInfo.sTblName, &g_queryInfo.subQueryInfo.childTblName, &g_queryInfo.subQueryInfo.childTblCount); + } + + printfQueryMeta(); + + if (!g_args.answer_yes) { + printf("Press enter key to continue\n\n"); + (void)getchar(); + } + + printfQuerySystemInfo(taos); + + pthread_t *pids = NULL; + threadInfo *infos = NULL; + //==== create sub threads for query from specify table + if (g_queryInfo.superQueryInfo.sqlCount > 0 && g_queryInfo.superQueryInfo.concurrent > 0) { + + pids = malloc(g_queryInfo.superQueryInfo.concurrent * sizeof(pthread_t)); + infos = malloc(g_queryInfo.superQueryInfo.concurrent * sizeof(threadInfo)); + if ((NULL == pids) || (NULL == infos)) { + printf("malloc failed for create threads\n"); + taos_close(taos); + exit(-1); + } + + for (int i = 0; i < g_queryInfo.superQueryInfo.concurrent; i++) { + threadInfo *t_info = infos + i; + t_info->threadID = i; + + if (0 == strncasecmp(g_queryInfo.queryMode, "taosc", 5)) { + t_info->taos = taos; + + char sqlStr[MAX_TB_NAME_SIZE*2]; + sprintf(sqlStr, "use %s", g_queryInfo.dbName); + (void)queryDbExec(t_info->taos, sqlStr, NO_INSERT_TYPE); + } else { + t_info->taos = NULL; + #ifdef TD_LOWA_CURL + t_info->curl_handle = curl_easy_init(); + #endif + } + + pthread_create(pids + i, NULL, superQueryProcess, t_info); + } + }else { + g_queryInfo.superQueryInfo.concurrent = 0; + } + + pthread_t *pidsOfSub = NULL; + threadInfo *infosOfSub = NULL; + //==== create sub threads for query from all sub table of the super table + if ((g_queryInfo.subQueryInfo.sqlCount > 0) && (g_queryInfo.subQueryInfo.threadCnt > 0)) { + pidsOfSub = malloc(g_queryInfo.subQueryInfo.threadCnt * sizeof(pthread_t)); + infosOfSub = malloc(g_queryInfo.subQueryInfo.threadCnt * sizeof(threadInfo)); + if ((NULL == pidsOfSub) || (NULL == infosOfSub)) { + printf("malloc failed for create threads\n"); + taos_close(taos); + exit(-1); + } + + int ntables = g_queryInfo.subQueryInfo.childTblCount; + int threads = g_queryInfo.subQueryInfo.threadCnt; + + int a = ntables / threads; + if (a < 1) { + threads = ntables; + a = 1; + } + + int b = 0; + if (threads != 0) { + b = ntables % threads; + } + + int last = 0; + for (int i = 0; i < threads; i++) { + threadInfo *t_info = infosOfSub + i; + t_info->threadID = i; + + t_info->start_table_id = last; + t_info->end_table_id = i < b ? last + a : last + a - 1; + last = t_info->end_table_id + 1; + t_info->taos = taos; + pthread_create(pidsOfSub + i, NULL, subQueryProcess, t_info); + } + + g_queryInfo.subQueryInfo.threadCnt = threads; + }else { + g_queryInfo.subQueryInfo.threadCnt = 0; + } + + for (int i = 0; i < g_queryInfo.superQueryInfo.concurrent; i++) { + pthread_join(pids[i], NULL); + } + + tmfree((char*)pids); + tmfree((char*)infos); + + for (int i = 0; i < g_queryInfo.subQueryInfo.threadCnt; i++) { + pthread_join(pidsOfSub[i], NULL); + } + + tmfree((char*)pidsOfSub); + tmfree((char*)infosOfSub); + + taos_close(taos); + return 0; +} + +static void subscribe_callback(TAOS_SUB* tsub, TAOS_RES *res, void* param, int code) { + if (res == NULL || taos_errno(res) != 0) { + printf("failed to subscribe result, code:%d, reason:%s\n", code, taos_errstr(res)); + return; + } + + getResult(res, (char*)param); + taos_free_result(res); +} + +static TAOS_SUB* subscribeImpl(TAOS *taos, char *sql, char* topic, char* resultFileName) { + TAOS_SUB* tsub = NULL; + + if (g_queryInfo.superQueryInfo.subscribeMode) { + tsub = taos_subscribe(taos, g_queryInfo.superQueryInfo.subscribeRestart, topic, sql, subscribe_callback, (void*)resultFileName, g_queryInfo.superQueryInfo.subscribeInterval); + } else { + tsub = taos_subscribe(taos, g_queryInfo.superQueryInfo.subscribeRestart, topic, sql, NULL, NULL, 0); + } + + if (tsub == NULL) { + printf("failed to create subscription. topic:%s, sql:%s\n", topic, sql); + return NULL; + } + + return tsub; +} + +void *subSubscribeProcess(void *sarg) { + threadInfo *winfo = (threadInfo *)sarg; + char subSqlstr[1024]; + + char sqlStr[MAX_TB_NAME_SIZE*2]; + sprintf(sqlStr, "use %s", g_queryInfo.dbName); + if (0 != queryDbExec(winfo->taos, sqlStr, NO_INSERT_TYPE)){ + return NULL; + } + + //int64_t st = 0; + //int64_t et = 0; + do { + //if (g_queryInfo.superQueryInfo.rate && (et - st) < g_queryInfo.superQueryInfo.rate*1000) { + // taosMsleep(g_queryInfo.superQueryInfo.rate*1000 - (et - st)); // ms + // //printf("========sleep duration:%"PRId64 "========inserted rows:%d, table range:%d - %d\n", (1000 - (et - st)), i, winfo->start_table_id, winfo->end_table_id); + //} + + //st = taosGetTimestampMs(); + char topic[32] = {0}; + for (int i = 0; i < g_queryInfo.subQueryInfo.sqlCount; i++) { + sprintf(topic, "taosdemo-subscribe-%d", i); + memset(subSqlstr,0,sizeof(subSqlstr)); + replaceSubTblName(g_queryInfo.subQueryInfo.sql[i], subSqlstr, i); + char tmpFile[MAX_FILE_NAME_LEN*2] = {0}; + if (g_queryInfo.subQueryInfo.result[i][0] != 0) { + sprintf(tmpFile, "%s-%d", g_queryInfo.subQueryInfo.result[i], winfo->threadID); + } + g_queryInfo.subQueryInfo.tsub[i] = subscribeImpl(winfo->taos, subSqlstr, topic, tmpFile); + if (NULL == g_queryInfo.subQueryInfo.tsub[i]) { + return NULL; + } + } + //et = taosGetTimestampMs(); + //printf("========thread[%"PRId64"] complete all sqls to super table once queries duration:%.4fs\n", pthread_self(), (double)(et - st)/1000.0); + } while (0); + + // start loop to consume result + TAOS_RES* res = NULL; + while (1) { + for (int i = 0; i < g_queryInfo.subQueryInfo.sqlCount; i++) { + if (1 == g_queryInfo.subQueryInfo.subscribeMode) { + continue; + } + + res = taos_consume(g_queryInfo.subQueryInfo.tsub[i]); + if (res) { + char tmpFile[MAX_FILE_NAME_LEN*2] = {0}; + if (g_queryInfo.subQueryInfo.result[i][0] != 0) { + sprintf(tmpFile, "%s-%d", g_queryInfo.subQueryInfo.result[i], winfo->threadID); + } + getResult(res, tmpFile); + } + } + } + taos_free_result(res); + + for (int i = 0; i < g_queryInfo.subQueryInfo.sqlCount; i++) { + taos_unsubscribe(g_queryInfo.subQueryInfo.tsub[i], g_queryInfo.subQueryInfo.subscribeKeepProgress); + } + return NULL; +} + +void *superSubscribeProcess(void *sarg) { + threadInfo *winfo = (threadInfo *)sarg; + + char sqlStr[MAX_TB_NAME_SIZE*2]; + sprintf(sqlStr, "use %s", g_queryInfo.dbName); + if (0 != queryDbExec(winfo->taos, sqlStr, NO_INSERT_TYPE)) { + return NULL; + } + + //int64_t st = 0; + //int64_t et = 0; + do { + //if (g_queryInfo.superQueryInfo.rate && (et - st) < g_queryInfo.superQueryInfo.rate*1000) { + // taosMsleep(g_queryInfo.superQueryInfo.rate*1000 - (et - st)); // ms + // //printf("========sleep duration:%"PRId64 "========inserted rows:%d, table range:%d - %d\n", (1000 - (et - st)), i, winfo->start_table_id, winfo->end_table_id); + //} + + //st = taosGetTimestampMs(); + char topic[32] = {0}; + for (int i = 0; i < g_queryInfo.superQueryInfo.sqlCount; i++) { + sprintf(topic, "taosdemo-subscribe-%d", i); + char tmpFile[MAX_FILE_NAME_LEN*2] = {0}; + if (g_queryInfo.subQueryInfo.result[i][0] != 0) { + sprintf(tmpFile, "%s-%d", g_queryInfo.superQueryInfo.result[i], winfo->threadID); + } + g_queryInfo.superQueryInfo.tsub[i] = subscribeImpl(winfo->taos, g_queryInfo.superQueryInfo.sql[i], topic, tmpFile); + if (NULL == g_queryInfo.superQueryInfo.tsub[i]) { + return NULL; + } + } + //et = taosGetTimestampMs(); + //printf("========thread[%"PRId64"] complete all sqls to super table once queries duration:%.4fs\n", pthread_self(), (double)(et - st)/1000.0); + } while (0); + + // start loop to consume result + TAOS_RES* res = NULL; + while (1) { + for (int i = 0; i < g_queryInfo.superQueryInfo.sqlCount; i++) { + if (1 == g_queryInfo.superQueryInfo.subscribeMode) { + continue; + } + + res = taos_consume(g_queryInfo.superQueryInfo.tsub[i]); + if (res) { + char tmpFile[MAX_FILE_NAME_LEN*2] = {0}; + if (g_queryInfo.superQueryInfo.result[i][0] != 0) { + sprintf(tmpFile, "%s-%d", g_queryInfo.superQueryInfo.result[i], winfo->threadID); + } + getResult(res, tmpFile); + } + } + } + taos_free_result(res); + + for (int i = 0; i < g_queryInfo.superQueryInfo.sqlCount; i++) { + taos_unsubscribe(g_queryInfo.superQueryInfo.tsub[i], g_queryInfo.superQueryInfo.subscribeKeepProgress); + } + return NULL; +} + +int subscribeTestProcess() { + printfQueryMeta(); + + if (!g_args.answer_yes) { + printf("Press enter key to continue\n\n"); + (void)getchar(); + } + + TAOS * taos = NULL; + taos_init(); + taos = taos_connect(g_queryInfo.host, g_queryInfo.user, g_queryInfo.password, g_queryInfo.dbName, g_queryInfo.port); + if (taos == NULL) { + fprintf(stderr, "Failed to connect to TDengine, reason:%s\n", taos_errstr(NULL)); + exit(-1); + } + + if (0 != g_queryInfo.subQueryInfo.sqlCount) { + (void)getAllChildNameOfSuperTable(taos, g_queryInfo.dbName, g_queryInfo.subQueryInfo.sTblName, &g_queryInfo.subQueryInfo.childTblName, &g_queryInfo.subQueryInfo.childTblCount); + } + + + pthread_t *pids = NULL; + threadInfo *infos = NULL; + //==== create sub threads for query from super table + if (g_queryInfo.superQueryInfo.sqlCount > 0 && g_queryInfo.superQueryInfo.concurrent > 0) { + pids = malloc(g_queryInfo.superQueryInfo.concurrent * sizeof(pthread_t)); + infos = malloc(g_queryInfo.superQueryInfo.concurrent * sizeof(threadInfo)); + if ((NULL == pids) || (NULL == infos)) { + printf("malloc failed for create threads\n"); + taos_close(taos); + exit(-1); + } + + for (int i = 0; i < g_queryInfo.superQueryInfo.concurrent; i++) { + threadInfo *t_info = infos + i; + t_info->threadID = i; + t_info->taos = taos; + pthread_create(pids + i, NULL, superSubscribeProcess, t_info); + } + } + + //==== create sub threads for query from sub table + pthread_t *pidsOfSub = NULL; + threadInfo *infosOfSub = NULL; + if ((g_queryInfo.subQueryInfo.sqlCount > 0) && (g_queryInfo.subQueryInfo.threadCnt > 0)) { + pidsOfSub = malloc(g_queryInfo.subQueryInfo.threadCnt * sizeof(pthread_t)); + infosOfSub = malloc(g_queryInfo.subQueryInfo.threadCnt * sizeof(threadInfo)); + if ((NULL == pidsOfSub) || (NULL == infosOfSub)) { + printf("malloc failed for create threads\n"); + taos_close(taos); + exit(-1); + } + + int ntables = g_queryInfo.subQueryInfo.childTblCount; + int threads = g_queryInfo.subQueryInfo.threadCnt; + + int a = ntables / threads; + if (a < 1) { + threads = ntables; + a = 1; + } + + int b = 0; + if (threads != 0) { + b = ntables % threads; + } + + int last = 0; + for (int i = 0; i < threads; i++) { + threadInfo *t_info = infosOfSub + i; + t_info->threadID = i; + + t_info->start_table_id = last; + t_info->end_table_id = i < b ? last + a : last + a - 1; + t_info->taos = taos; + pthread_create(pidsOfSub + i, NULL, subSubscribeProcess, t_info); + } + g_queryInfo.subQueryInfo.threadCnt = threads; + } + + for (int i = 0; i < g_queryInfo.superQueryInfo.concurrent; i++) { + pthread_join(pids[i], NULL); + } + + tmfree((char*)pids); + tmfree((char*)infos); + + for (int i = 0; i < g_queryInfo.subQueryInfo.threadCnt; i++) { + pthread_join(pidsOfSub[i], NULL); + } + + tmfree((char*)pidsOfSub); + tmfree((char*)infosOfSub); + taos_close(taos); + return 0; +} + +void initOfInsertMeta() { + memset(&g_Dbs, 0, sizeof(SDbs)); + + // set default values + strncpy(g_Dbs.host, "127.0.0.1", MAX_DB_NAME_SIZE); + g_Dbs.port = 6030; + strncpy(g_Dbs.user, TSDB_DEFAULT_USER, MAX_DB_NAME_SIZE); + strncpy(g_Dbs.password, TSDB_DEFAULT_PASS, MAX_DB_NAME_SIZE); + g_Dbs.threadCount = 2; + g_Dbs.use_metric = true; +} + +void initOfQueryMeta() { + memset(&g_queryInfo, 0, sizeof(SQueryMetaInfo)); + + // set default values + strncpy(g_queryInfo.host, "127.0.0.1", MAX_DB_NAME_SIZE); + g_queryInfo.port = 6030; + strncpy(g_queryInfo.user, TSDB_DEFAULT_USER, MAX_DB_NAME_SIZE); + strncpy(g_queryInfo.password, TSDB_DEFAULT_PASS, MAX_DB_NAME_SIZE); +} + +void setParaFromArg(){ + if (g_args.host) { + strcpy(g_Dbs.host, g_args.host); + } else { + strncpy(g_Dbs.host, "127.0.0.1", MAX_DB_NAME_SIZE); + } + + if (g_args.user) { + strcpy(g_Dbs.user, g_args.user); + } + + if (g_args.password) { + strcpy(g_Dbs.password, g_args.password); + } + + if (g_args.port) { + g_Dbs.port = g_args.port; + } + + g_Dbs.dbCount = 1; + g_Dbs.db[0].drop = 1; + + strncpy(g_Dbs.db[0].dbName, g_args.database, MAX_DB_NAME_SIZE); + g_Dbs.db[0].dbCfg.replica = g_args.replica; + strncpy(g_Dbs.db[0].dbCfg.precision, "ms", MAX_DB_NAME_SIZE); + + + strncpy(g_Dbs.resultFile, g_args.output_file, MAX_FILE_NAME_LEN); + + g_Dbs.use_metric = g_args.use_metric; + g_Dbs.insert_only = g_args.insert_only; + + g_Dbs.db[0].superTblCount = 1; + strncpy(g_Dbs.db[0].superTbls[0].sTblName, "meters", MAX_TB_NAME_SIZE); + g_Dbs.db[0].superTbls[0].childTblCount = g_args.num_of_tables; + g_Dbs.threadCount = g_args.num_of_threads; + g_Dbs.threadCountByCreateTbl = 1; + g_Dbs.queryMode = g_args.mode; + + g_Dbs.db[0].superTbls[0].autoCreateTable = PRE_CREATE_SUBTBL; + g_Dbs.db[0].superTbls[0].superTblExists = TBL_NO_EXISTS; + g_Dbs.db[0].superTbls[0].childTblExists = TBL_NO_EXISTS; + g_Dbs.db[0].superTbls[0].insertRate = 0; + g_Dbs.db[0].superTbls[0].disorderRange = g_args.disorderRange; + g_Dbs.db[0].superTbls[0].disorderRatio = g_args.disorderRatio; + strncpy(g_Dbs.db[0].superTbls[0].childTblPrefix, g_args.tb_prefix, MAX_TB_NAME_SIZE); + strncpy(g_Dbs.db[0].superTbls[0].dataSource, "rand", MAX_TB_NAME_SIZE); + strncpy(g_Dbs.db[0].superTbls[0].insertMode, "taosc", MAX_TB_NAME_SIZE); + strncpy(g_Dbs.db[0].superTbls[0].startTimestamp, "2017-07-14 10:40:00.000", MAX_TB_NAME_SIZE); + g_Dbs.db[0].superTbls[0].timeStampStep = 10; + + // g_args.num_of_RPR; + g_Dbs.db[0].superTbls[0].insertRows = g_args.num_of_DPT; + g_Dbs.db[0].superTbls[0].maxSqlLen = TSDB_PAYLOAD_SIZE; + + g_Dbs.do_aggreFunc = true; + + char dataString[STRING_LEN]; + char **data_type = g_args.datatype; + + memset(dataString, 0, STRING_LEN); + + if (strcasecmp(data_type[0], "BINARY") == 0 || strcasecmp(data_type[0], "BOOL") == 0 || strcasecmp(data_type[0], "NCHAR") == 0 ) { + g_Dbs.do_aggreFunc = false; + } + + g_Dbs.db[0].superTbls[0].columnCount = 0; + for (int i = 0; i < MAX_NUM_DATATYPE; i++) { + if (data_type[i] == NULL) { + break; + } + + strncpy(g_Dbs.db[0].superTbls[0].columns[i].dataType, data_type[i], MAX_TB_NAME_SIZE); + g_Dbs.db[0].superTbls[0].columns[i].dataLen = g_args.len_of_binary; + g_Dbs.db[0].superTbls[0].columnCount++; + } + + if (g_Dbs.db[0].superTbls[0].columnCount > g_args.num_of_CPR) { + g_Dbs.db[0].superTbls[0].columnCount = g_args.num_of_CPR; + } else { + for (int i = g_Dbs.db[0].superTbls[0].columnCount; i < g_args.num_of_CPR; i++) { + strncpy(g_Dbs.db[0].superTbls[0].columns[i].dataType, "INT", MAX_TB_NAME_SIZE); + g_Dbs.db[0].superTbls[0].columns[i].dataLen = 0; + g_Dbs.db[0].superTbls[0].columnCount++; + } + } + + if (g_Dbs.use_metric) { + strncpy(g_Dbs.db[0].superTbls[0].tags[0].dataType, "INT", MAX_TB_NAME_SIZE); + g_Dbs.db[0].superTbls[0].tags[0].dataLen = 0; + + strncpy(g_Dbs.db[0].superTbls[0].tags[1].dataType, "BINARY", MAX_TB_NAME_SIZE); + g_Dbs.db[0].superTbls[0].tags[1].dataLen = g_args.len_of_binary; + g_Dbs.db[0].superTbls[0].tagCount = 2; + } else { + g_Dbs.db[0].superTbls[0].tagCount = 0; + } +} /* Function to do regular expression check */ static int regexMatch(const char *s, const char *reg, int cflags) { @@ -992,7 +5021,7 @@ void querySqlFile(TAOS* taos, char* sqlFile) FILE *fp = fopen(sqlFile, "r"); if (fp == NULL) { printf("failed to open file %s, reason:%s\n", sqlFile, strerror(errno)); - exit(-1); + return; } int read_len = 0; @@ -1019,7 +5048,7 @@ void querySqlFile(TAOS* taos, char* sqlFile) } memcpy(cmd + cmd_len, line, read_len); - selectSql(taos, cmd); + queryDbExec(taos, cmd, NO_INSERT_TYPE); memset(cmd, 0, MAX_SQL_SIZE); cmd_len = 0; } @@ -1027,550 +5056,79 @@ void querySqlFile(TAOS* taos, char* sqlFile) t = getCurrentTime() - t; printf("run %s took %.6f second(s)\n\n", sqlFile, t); - free(cmd); - if (line) free(line); - fclose(fp); + tmfree(cmd); + tmfree(line); + tmfclose(fp); return; } -void * createTable(void *sarg) -{ - char command[BUFFER_SIZE] = "\0"; - - info *winfo = (info *)sarg; +int main(int argc, char *argv[]) { + parse_args(argc, argv, &g_args); - if (!winfo->use_metric) { - /* Create all the tables; */ - printf("Creating table from %d to %d\n", winfo->start_table_id, winfo->end_table_id); - for (int i = winfo->start_table_id; i <= winfo->end_table_id; i++) { - snprintf(command, BUFFER_SIZE, "create table if not exists %s.%s%d (ts timestamp%s);", winfo->db_name, winfo->tb_prefix, i, winfo->cols); - queryDB(winfo->taos, command); + if (g_args.metaFile) { + initOfInsertMeta(); + initOfQueryMeta(); + if (false == getInfoFromJsonFile(g_args.metaFile)) { + printf("Failed to read %s\n", g_args.metaFile); + return 1; } - } else { - /* Create all the tables; */ - printf("Creating table from %d to %d\n", winfo->start_table_id, winfo->end_table_id); - for (int i = winfo->start_table_id; i <= winfo->end_table_id; i++) { - int j; - if (i % 10 == 0) { - j = 10; - } else { - j = i % 10; - } - if (j % 2 == 0) { - snprintf(command, BUFFER_SIZE, "create table if not exists %s.%s%d using %s.meters tags (%d,\"%s\");", winfo->db_name, winfo->tb_prefix, i, winfo->db_name, j, "shanghai"); - } else { - snprintf(command, BUFFER_SIZE, "create table if not exists %s.%s%d using %s.meters tags (%d,\"%s\");", winfo->db_name, winfo->tb_prefix, i, winfo->db_name, j, "beijing"); + if (INSERT_MODE == g_jsonType) { + if (g_Dbs.cfgDir[0]) taos_options(TSDB_OPTION_CONFIGDIR, g_Dbs.cfgDir); + (void)insertTestProcess(); + } else if (QUERY_MODE == g_jsonType) { + if (g_queryInfo.cfgDir[0]) taos_options(TSDB_OPTION_CONFIGDIR, g_queryInfo.cfgDir); + (void)queryTestProcess(); + } else if (SUBSCRIBE_MODE == g_jsonType) { + if (g_queryInfo.cfgDir[0]) taos_options(TSDB_OPTION_CONFIGDIR, g_queryInfo.cfgDir); + (void)subscribeTestProcess(); + } else { + ; } - queryDB(winfo->taos, command); - } - } + } else { + + memset(&g_Dbs, 0, sizeof(SDbs)); + g_jsonType = INSERT_MODE; + setParaFromArg(); - return NULL; -} - -void multiThreadCreateTable(char* cols, bool use_metric, int threads, int ntables, char* db_name, char* tb_prefix, char *ip_addr, uint16_t port, char *user, char *pass) { - double ts = getCurrentTime(); - printf("create table......\n"); - pthread_t *pids = malloc(threads * sizeof(pthread_t)); - info *infos = malloc(threads * sizeof(info)); - - int a = ntables / threads; - if (a < 1) { - threads = ntables; - a = 1; - } - - int b = 0; - if (threads != 0) - b = ntables % threads; - int last = 0; - for (int i = 0; i < threads; i++) { - info *t_info = infos + i; - t_info->threadID = i; - tstrncpy(t_info->db_name, db_name, MAX_DB_NAME_SIZE); - tstrncpy(t_info->tb_prefix, tb_prefix, MAX_TB_NAME_SIZE); - t_info->taos = taos_connect(ip_addr, user, pass, db_name, port); - t_info->start_table_id = last; - t_info->end_table_id = i < b ? last + a : last + a - 1; - last = t_info->end_table_id + 1; - t_info->use_metric = use_metric; - t_info->cols = cols; - pthread_create(pids + i, NULL, createTable, t_info); - } - - for (int i = 0; i < threads; i++) { - pthread_join(pids[i], NULL); - } - - double t = getCurrentTime() - ts; - printf("Spent %.4f seconds to create %d tables with %d connections\n", t, ntables, threads); - - for (int i = 0; i < threads; i++) { - info *t_info = infos + i; - tsem_destroy(&(t_info->mutex_sem)); - tsem_destroy(&(t_info->lock_sem)); - } - - free(pids); - free(infos); - - return ; -} - -void *readTable(void *sarg) { - info *rinfo = (info *)sarg; - TAOS *taos = rinfo->taos; - char command[BUFFER_SIZE] = "\0"; - int64_t sTime = rinfo->start_time; - char *tb_prefix = rinfo->tb_prefix; - FILE *fp = fopen(rinfo->fp, "a"); - if (NULL == fp) { - printf("fopen %s fail, reason:%s.\n", rinfo->fp, strerror(errno)); - return NULL; - } - - int num_of_DPT = rinfo->nrecords_per_table; - int num_of_tables = rinfo->end_table_id - rinfo->start_table_id + 1; - int totalData = num_of_DPT * num_of_tables; - bool do_aggreFunc = rinfo->do_aggreFunc; - - int n = do_aggreFunc ? (sizeof(aggreFunc) / sizeof(aggreFunc[0])) : 2; - if (!do_aggreFunc) { - printf("\nThe first field is either Binary or Bool. Aggregation functions are not supported.\n"); - } - printf("%d records:\n", totalData); - fprintf(fp, "| QFunctions | QRecords | QSpeed(R/s) | QLatency(ms) |\n"); - - for (int j = 0; j < n; j++) { - double totalT = 0; - int count = 0; - for (int i = 0; i < num_of_tables; i++) { - sprintf(command, "select %s from %s%d where ts>= %" PRId64, aggreFunc[j], tb_prefix, i, sTime); - - double t = getCurrentTime(); - TAOS_RES *pSql = taos_query(taos, command); - int32_t code = taos_errno(pSql); - - if (code != 0) { - fprintf(stderr, "Failed to query:%s\n", taos_errstr(pSql)); - taos_free_result(pSql); - taos_close(taos); - exit(EXIT_FAILURE); - } - - while (taos_fetch_row(pSql) != NULL) { - count++; - } - - t = getCurrentTime() - t; - totalT += t; - - taos_free_result(pSql); - } - - fprintf(fp, "|%10s | %10d | %12.2f | %10.2f |\n", - aggreFunc[j][0] == '*' ? " * " : aggreFunc[j], totalData, - (double)(num_of_tables * num_of_DPT) / totalT, totalT * 1000); - printf("select %10s took %.6f second(s)\n", aggreFunc[j], totalT); - } - fprintf(fp, "\n"); - - fclose(fp); - return NULL; -} - -void *readMetric(void *sarg) { - info *rinfo = (info *)sarg; - TAOS *taos = rinfo->taos; - char command[BUFFER_SIZE] = "\0"; - FILE *fp = fopen(rinfo->fp, "a"); - if (NULL == fp) { - printf("fopen %s fail, reason:%s.\n", rinfo->fp, strerror(errno)); - return NULL; - } - - int num_of_DPT = rinfo->nrecords_per_table; - int num_of_tables = rinfo->end_table_id - rinfo->start_table_id + 1; - int totalData = num_of_DPT * num_of_tables; - bool do_aggreFunc = rinfo->do_aggreFunc; - - int n = do_aggreFunc ? (sizeof(aggreFunc) / sizeof(aggreFunc[0])) : 2; - if (!do_aggreFunc) { - printf("\nThe first field is either Binary or Bool. Aggregation functions are not supported.\n"); - } - printf("%d records:\n", totalData); - fprintf(fp, "Querying On %d records:\n", totalData); - - for (int j = 0; j < n; j++) { - char condition[BUFFER_SIZE - 30] = "\0"; - char tempS[64] = "\0"; - - int m = 10 < num_of_tables ? 10 : num_of_tables; - - for (int i = 1; i <= m; i++) { - if (i == 1) { - sprintf(tempS, "areaid = %d", i); - } else { - sprintf(tempS, " or areaid = %d ", i); - } - strcat(condition, tempS); - - sprintf(command, "select %s from meters where %s", aggreFunc[j], condition); - - printf("Where condition: %s\n", condition); - fprintf(fp, "%s\n", command); - - double t = getCurrentTime(); - - TAOS_RES *pSql = taos_query(taos, command); - int32_t code = taos_errno(pSql); - - if (code != 0) { - fprintf(stderr, "Failed to query:%s\n", taos_errstr(pSql)); - taos_free_result(pSql); - taos_close(taos); - exit(1); - } - int count = 0; - while (taos_fetch_row(pSql) != NULL) { - count++; - } - t = getCurrentTime() - t; - - fprintf(fp, "| Speed: %12.2f(per s) | Latency: %.4f(ms) |\n", num_of_tables * num_of_DPT / t, t * 1000); - printf("select %10s took %.6f second(s)\n\n", aggreFunc[j], t); - - taos_free_result(pSql); - } - fprintf(fp, "\n"); - } - - fclose(fp); - return NULL; -} - -static int queryDbExec(TAOS *taos, char *command, int type) { - int i; - TAOS_RES *res = NULL; - int32_t code = -1; - - for (i = 0; i < 5; i++) { - if (NULL != res) { - taos_free_result(res); - res = NULL; + if (NULL != g_args.sqlFile) { + TAOS* qtaos = taos_connect( + g_Dbs.host, g_Dbs.user, g_Dbs.password, g_Dbs.db[0].dbName, g_Dbs.port); + querySqlFile(qtaos, g_args.sqlFile); + taos_close(qtaos); + return 0; } - res = taos_query(taos, command); - code = taos_errno(res); - if (0 == code) { - break; - } - } + (void)insertTestProcess(); + if (g_Dbs.insert_only) return 0; - if (code != 0) { - fprintf(stderr, "Failed to run %s, reason: %s\n", command, taos_errstr(res)); - taos_free_result(res); - //taos_close(taos); - return -1; - } - - if (1 == type) { - int affectedRows = taos_affected_rows(res); - taos_free_result(res); - return affectedRows; - } + // select + if (false == g_Dbs.insert_only) { + // query data - taos_free_result(res); + pthread_t read_id; + threadInfo *rInfo = malloc(sizeof(threadInfo)); + rInfo->start_time = 1500000000000; // 2017-07-14 10:40:00.000 + rInfo->start_table_id = 0; + rInfo->end_table_id = g_Dbs.db[0].superTbls[0].childTblCount - 1; + //rInfo->do_aggreFunc = g_Dbs.do_aggreFunc; + //rInfo->nrecords_per_table = g_Dbs.db[0].superTbls[0].insertRows; + rInfo->superTblInfo = &g_Dbs.db[0].superTbls[0]; + rInfo->taos = taos_connect(g_Dbs.host, g_Dbs.user, g_Dbs.password, g_Dbs.db[0].dbName, g_Dbs.port); + strcpy(rInfo->tb_prefix, g_Dbs.db[0].superTbls[0].childTblPrefix); + strcpy(rInfo->fp, g_Dbs.resultFile); + + if (!g_Dbs.use_metric) { + pthread_create(&read_id, NULL, readTable, rInfo); + } else { + pthread_create(&read_id, NULL, readMetric, rInfo); + } + pthread_join(read_id, NULL); + taos_close(rInfo->taos); + free(rInfo); + } + } + + taos_cleanup(); return 0; } -void queryDB(TAOS *taos, char *command) { - int i; - TAOS_RES *pSql = NULL; - int32_t code = -1; - - for (i = 0; i < 5; i++) { - if (NULL != pSql) { - taos_free_result(pSql); - pSql = NULL; - } - - pSql = taos_query(taos, command); - code = taos_errno(pSql); - if (0 == code) { - break; - } - } - - if (code != 0) { - fprintf(stderr, "Failed to run %s, reason: %s\n", command, taos_errstr(pSql)); - taos_free_result(pSql); - taos_close(taos); - exit(EXIT_FAILURE); - } - - taos_free_result(pSql); -} - -// sync insertion -void *syncWrite(void *sarg) { - info *winfo = (info *)sarg; - char buffer[BUFFER_SIZE] = "\0"; - char data[MAX_DATA_SIZE]; - char **data_type = winfo->datatype; - int len_of_binary = winfo->len_of_binary; - int ncols_per_record = winfo->ncols_per_record; - srand((uint32_t)time(NULL)); - int64_t time_counter = winfo->start_time; - for (int i = 0; i < winfo->nrecords_per_table;) { - for (int tID = winfo->start_table_id; tID <= winfo->end_table_id; tID++) { - int inserted = i; - int64_t tmp_time = time_counter; - - char *pstr = buffer; - pstr += sprintf(pstr, "insert into %s.%s%d values", winfo->db_name, winfo->tb_prefix, tID); - int k; - for (k = 0; k < winfo->nrecords_per_request;) { - int rand_num = rand() % 100; - int len = -1; - if (winfo->data_of_order ==1 && rand_num < winfo->data_of_rate) { - int64_t d = tmp_time - rand() % 1000000 + rand_num; - len = generateData(data, data_type, ncols_per_record, d, len_of_binary); - } else { - len = generateData(data, data_type, ncols_per_record, tmp_time += 1000, len_of_binary); - } - - //assert(len + pstr - buffer < BUFFER_SIZE); - if (len + pstr - buffer >= BUFFER_SIZE) { // too long - break; - } - - pstr += sprintf(pstr, " %s", data); - inserted++; - k++; - - if (inserted >= winfo->nrecords_per_table) break; - } - - /* puts(buffer); */ - int64_t startTs; - int64_t endTs; - startTs = taosGetTimestampUs(); - //queryDB(winfo->taos, buffer); - int affectedRows = queryDbExec(winfo->taos, buffer, 1); - - if (0 <= affectedRows){ - endTs = taosGetTimestampUs(); - int64_t delay = endTs - startTs; - if (delay > winfo->maxDelay) winfo->maxDelay = delay; - if (delay < winfo->minDelay) winfo->minDelay = delay; - winfo->cntDelay++; - winfo->totalDelay += delay; - //winfo->avgDelay = (double)winfo->totalDelay / winfo->cntDelay; - } - - if (tID == winfo->end_table_id) { - i = inserted; - time_counter = tmp_time; - } - } - } - return NULL; -} - -void *asyncWrite(void *sarg) { - info *winfo = (info *)sarg; - taos_query_a(winfo->taos, "show databases", callBack, winfo); - - tsem_wait(&(winfo->lock_sem)); - - return NULL; -} - -void callBack(void *param, TAOS_RES *res, int code) { - info* winfo = (info*)param; - char **datatype = winfo->datatype; - int ncols_per_record = winfo->ncols_per_record; - int len_of_binary = winfo->len_of_binary; - - int64_t tmp_time = winfo->start_time; - char *buffer = calloc(1, BUFFER_SIZE); - char *data = calloc(1, MAX_DATA_SIZE); - char *pstr = buffer; - pstr += sprintf(pstr, "insert into %s.%s%d values", winfo->db_name, winfo->tb_prefix, winfo->start_table_id); - if (winfo->counter >= winfo->nrecords_per_table) { - winfo->start_table_id++; - winfo->counter = 0; - } - if (winfo->start_table_id > winfo->end_table_id) { - tsem_post(&winfo->lock_sem); - free(buffer); - free(data); - taos_free_result(res); - return; - } - - for (int i = 0; i < winfo->nrecords_per_request; i++) { - int rand_num = rand() % 100; - if (winfo->data_of_order ==1 && rand_num < winfo->data_of_rate) - { - int64_t d = tmp_time - rand() % 1000000 + rand_num; - generateData(data, datatype, ncols_per_record, d, len_of_binary); - } else - { - generateData(data, datatype, ncols_per_record, tmp_time += 1000, len_of_binary); - } - pstr += sprintf(pstr, "%s", data); - winfo->counter++; - - if (winfo->counter >= winfo->nrecords_per_table) { - break; - } - } - taos_query_a(winfo->taos, buffer, callBack, winfo); - free(buffer); - free(data); - - taos_free_result(res); -} - -double getCurrentTime() { - struct timeval tv; - if (gettimeofday(&tv, NULL) != 0) { - perror("Failed to get current time in ms"); - exit(EXIT_FAILURE); - } - - return tv.tv_sec + tv.tv_usec / 1E6; -} - -int32_t randint[MAX_PREPARED_RAND]; -int64_t randbigint[MAX_PREPARED_RAND]; -float randfloat[MAX_PREPARED_RAND]; -double randdouble[MAX_PREPARED_RAND]; - -int32_t rand_tinyint(){ - static int cursor; - cursor++; - cursor = cursor % MAX_PREPARED_RAND; - return randint[cursor] % 128; - -} - -int32_t rand_smallint(){ - static int cursor; - cursor++; - cursor = cursor % MAX_PREPARED_RAND; - return randint[cursor] % 32767; -} - -int32_t rand_int(){ - static int cursor; - cursor++; - cursor = cursor % MAX_PREPARED_RAND; - return randint[cursor]; -} - -int64_t rand_bigint(){ - static int cursor; - cursor++; - cursor = cursor % MAX_PREPARED_RAND; - return randbigint[cursor]; - -} - -float rand_float(){ - static int cursor; - cursor++; - cursor = cursor % MAX_PREPARED_RAND; - return randfloat[cursor]; - -} - -double rand_double() { - static int cursor; - cursor++; - cursor = cursor % MAX_PREPARED_RAND; - return randdouble[cursor]; - -} - -void init_rand_data(){ - for (int i = 0; i < MAX_PREPARED_RAND; i++){ - randint[i] = (int)(rand() % 10); - randbigint[i] = (int64_t)(rand() % 2147483648); - randfloat[i] = (float)(rand() / 1000.0); - randdouble[i] = (double)(rand() / 1000000.0); - } -} - -int32_t generateData(char *res, char **data_type, int num_of_cols, int64_t timestamp, int len_of_binary) { - memset(res, 0, MAX_DATA_SIZE); - char *pstr = res; - pstr += sprintf(pstr, "(%" PRId64, timestamp); - int c = 0; - - for (; c < MAX_NUM_DATATYPE; c++) { - if (data_type[c] == NULL) { - break; - } - } - - if (0 == c) { - perror("data type error!"); - exit(-1); - } - - for (int i = 0; i < num_of_cols; i++) { - if (strcasecmp(data_type[i % c], "tinyint") == 0) { - pstr += sprintf(pstr, ", %d", rand_tinyint() ); - } else if (strcasecmp(data_type[i % c], "smallint") == 0) { - pstr += sprintf(pstr, ", %d", rand_smallint()); - } else if (strcasecmp(data_type[i % c], "int") == 0) { - pstr += sprintf(pstr, ", %d", rand_int()); - } else if (strcasecmp(data_type[i % c], "bigint") == 0) { - pstr += sprintf(pstr, ", %" PRId64, rand_bigint()); - } else if (strcasecmp(data_type[i % c], "float") == 0) { - pstr += sprintf(pstr, ", %10.4f", rand_float()); - } else if (strcasecmp(data_type[i % c], "double") == 0) { - double t = rand_double(); - pstr += sprintf(pstr, ", %20.8f", t); - } else if (strcasecmp(data_type[i % c], "bool") == 0) { - bool b = rand() & 1; - pstr += sprintf(pstr, ", %s", b ? "true" : "false"); - } else if (strcasecmp(data_type[i % c], "binary") == 0) { - char *s = malloc(len_of_binary); - rand_string(s, len_of_binary); - pstr += sprintf(pstr, ", \"%s\"", s); - free(s); - }else if (strcasecmp(data_type[i % c], "nchar") == 0) { - char *s = malloc(len_of_binary); - rand_string(s, len_of_binary); - pstr += sprintf(pstr, ", \"%s\"", s); - free(s); - } - - if (pstr - res > MAX_DATA_SIZE) { - perror("column length too long, abort"); - exit(-1); - } - } - - pstr += sprintf(pstr, ")"); - - return (int32_t)(pstr - res); -} - -static const char charset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJK1234567890"; -void rand_string(char *str, int size) { - str[0] = 0; - if (size > 0) { - --size; - int n; - for (n = 0; n < size; n++) { - int key = rand() % (int)(sizeof charset - 1); - str[n] = charset[key]; - } - str[n] = 0; - } -} diff --git a/src/kit/taosdemox/CMakeLists.txt b/src/kit/taosdemox/CMakeLists.txt deleted file mode 100644 index abe4e74710..0000000000 --- a/src/kit/taosdemox/CMakeLists.txt +++ /dev/null @@ -1,47 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) -PROJECT(TDengine) - -INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/client/inc) -INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/libcurl/include) - -IF (TD_LINUX) - AUX_SOURCE_DIRECTORY(. SRC) - ADD_EXECUTABLE(taosdemox ${SRC}) - - #find_program(HAVE_CURL NAMES curl) - IF ((NOT TD_ARM_64) AND (NOT TD_ARM_32)) - ADD_DEFINITIONS(-DTD_LOWA_CURL) - LINK_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/libcurl/lib) - ADD_LIBRARY(curl STATIC IMPORTED) - SET_PROPERTY(TARGET curl PROPERTY IMPORTED_LOCATION ${TD_COMMUNITY_DIR}/deps/libcurl/lib/libcurl.a) - TARGET_LINK_LIBRARIES(taosdemox curl) - ENDIF () - - IF (TD_SOMODE_STATIC) - TARGET_LINK_LIBRARIES(taosdemox taos_static cJson) - ELSE () - TARGET_LINK_LIBRARIES(taosdemox taos cJson) - ENDIF () -ENDIF () - -IF (TD_DARWIN) - # missing a few dependencies, such as - # AUX_SOURCE_DIRECTORY(. SRC) - # ADD_EXECUTABLE(taosdemox ${SRC}) - # - # #find_program(HAVE_CURL NAMES curl) - # IF ((NOT TD_ARM_64) AND (NOT TD_ARM_32)) - # ADD_DEFINITIONS(-DTD_LOWA_CURL) - # LINK_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/libcurl/lib) - # ADD_LIBRARY(curl STATIC IMPORTED) - # SET_PROPERTY(TARGET curl PROPERTY IMPORTED_LOCATION ${TD_COMMUNITY_DIR}/deps/libcurl/lib/libcurl.a) - # TARGET_LINK_LIBRARIES(taosdemox curl) - # ENDIF () - # - # IF (TD_SOMODE_STATIC) - # TARGET_LINK_LIBRARIES(taosdemox taos_static cJson) - # ELSE () - # TARGET_LINK_LIBRARIES(taosdemox taos cJson) - # ENDIF () -ENDIF () - diff --git a/src/kit/taosdemox/taosdemox.c b/src/kit/taosdemox/taosdemox.c deleted file mode 100644 index a73fc726e1..0000000000 --- a/src/kit/taosdemox/taosdemox.c +++ /dev/null @@ -1,5132 +0,0 @@ -/* - * Copyright (c) 2019 TAOS Data, Inc. - * - * This program is free software: you can use, redistribute, and/or modify - * it under the terms of the GNU Affero General Public License, version 3 - * or later ("AGPL"), as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - - -/* - when in some thread query return error, thread don't exit, but return, otherwise coredump in other thread. -*/ - -#define _GNU_SOURCE -#define CURL_STATICLIB - -#ifdef TD_LOWA_CURL -#include "curl/curl.h" -#endif - -#ifdef LINUX - #include "os.h" - #include "cJSON.h" - #include - #include - #include - #ifndef _ALPINE - #include - #endif - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include -#else - #include - #include - #include - #include "os.h" - - #pragma comment ( lib, "libcurl.lib" ) - #pragma comment ( lib, "ws2_32.lib" ) - #pragma comment ( lib, "winmm.lib" ) - #pragma comment ( lib, "wldap32.lib" ) -#endif - -#include "taos.h" -#include "tutil.h" - -extern char configDir[]; - -#define INSERT_JSON_NAME "insert.json" -#define QUERY_JSON_NAME "query.json" -#define SUBSCRIBE_JSON_NAME "subscribe.json" - -#define INSERT_MODE 0 -#define QUERY_MODE 1 -#define SUBSCRIBE_MODE 2 - -#define MAX_SQL_SIZE 65536 -#define BUFFER_SIZE (65536*2) -#define MAX_DB_NAME_SIZE 64 -#define MAX_TB_NAME_SIZE 64 -#define MAX_DATA_SIZE 16000 -#define MAX_NUM_DATATYPE 10 -#define OPT_ABORT 1 /* –abort */ -#define STRING_LEN 60000 -#define MAX_PREPARED_RAND 1000000 -//#define MAX_SQL_SIZE 65536 -#define MAX_FILE_NAME_LEN 256 - -#define MAX_SAMPLES_ONCE_FROM_FILE 10000 -#define MAX_NUM_DATATYPE 10 - -#define MAX_DB_COUNT 8 -#define MAX_SUPER_TABLE_COUNT 8 -#define MAX_COLUMN_COUNT 1024 -#define MAX_TAG_COUNT 128 - -#define MAX_QUERY_SQL_COUNT 10 -#define MAX_QUERY_SQL_LENGTH 256 - -#define MAX_DATABASE_COUNT 256 - -typedef enum CREATE_SUB_TALBE_MOD_EN { - PRE_CREATE_SUBTBL, - AUTO_CREATE_SUBTBL, - NO_CREATE_SUBTBL -} CREATE_SUB_TALBE_MOD_EN; - -typedef enum TALBE_EXISTS_EN { - TBL_ALREADY_EXISTS, - TBL_NO_EXISTS, - TBL_EXISTS_BUTT -} TALBE_EXISTS_EN; - -enum MODE { - SYNC, - ASYNC, - MODE_BUT -}; - -enum QUERY_TYPE { - NO_INSERT_TYPE, - INSERT_TYPE, - QUERY_TYPE_BUT -} ; - -enum _show_db_index { - TSDB_SHOW_DB_NAME_INDEX, - TSDB_SHOW_DB_CREATED_TIME_INDEX, - TSDB_SHOW_DB_NTABLES_INDEX, - TSDB_SHOW_DB_VGROUPS_INDEX, - TSDB_SHOW_DB_REPLICA_INDEX, - TSDB_SHOW_DB_QUORUM_INDEX, - TSDB_SHOW_DB_DAYS_INDEX, - TSDB_SHOW_DB_KEEP_INDEX, - TSDB_SHOW_DB_CACHE_INDEX, - TSDB_SHOW_DB_BLOCKS_INDEX, - TSDB_SHOW_DB_MINROWS_INDEX, - TSDB_SHOW_DB_MAXROWS_INDEX, - TSDB_SHOW_DB_WALLEVEL_INDEX, - TSDB_SHOW_DB_FSYNC_INDEX, - TSDB_SHOW_DB_COMP_INDEX, - TSDB_SHOW_DB_CACHELAST_INDEX, - TSDB_SHOW_DB_PRECISION_INDEX, - TSDB_SHOW_DB_UPDATE_INDEX, - TSDB_SHOW_DB_STATUS_INDEX, - TSDB_MAX_SHOW_DB -}; - -// -----------------------------------------SHOW TABLES CONFIGURE ------------------------------------- -enum _show_stables_index { - TSDB_SHOW_STABLES_NAME_INDEX, - TSDB_SHOW_STABLES_CREATED_TIME_INDEX, - TSDB_SHOW_STABLES_COLUMNS_INDEX, - TSDB_SHOW_STABLES_METRIC_INDEX, - TSDB_SHOW_STABLES_UID_INDEX, - TSDB_SHOW_STABLES_TID_INDEX, - TSDB_SHOW_STABLES_VGID_INDEX, - TSDB_MAX_SHOW_STABLES -}; -enum _describe_table_index { - TSDB_DESCRIBE_METRIC_FIELD_INDEX, - TSDB_DESCRIBE_METRIC_TYPE_INDEX, - TSDB_DESCRIBE_METRIC_LENGTH_INDEX, - TSDB_DESCRIBE_METRIC_NOTE_INDEX, - TSDB_MAX_DESCRIBE_METRIC -}; - -typedef struct { - char field[TSDB_COL_NAME_LEN + 1]; - char type[16]; - int length; - char note[128]; -} SColDes; - -/* Used by main to communicate with parse_opt. */ -typedef struct SArguments_S { - char * metaFile; - char * host; - uint16_t port; - char * user; - char * password; - char * database; - int replica; - char * tb_prefix; - char * sqlFile; - bool use_metric; - bool insert_only; - bool answer_yes; - char * output_file; - int mode; - char * datatype[MAX_NUM_DATATYPE + 1]; - int len_of_binary; - int num_of_CPR; - int num_of_threads; - int num_of_RPR; - int num_of_tables; - int num_of_DPT; - int abort; - int disorderRatio; - int disorderRange; - int method_of_delete; - char ** arg_list; -} SArguments; - -typedef struct SColumn_S { - char field[TSDB_COL_NAME_LEN + 1]; - char dataType[MAX_TB_NAME_SIZE]; - int dataLen; - char note[128]; -} StrColumn; - -typedef struct SSuperTable_S { - char sTblName[MAX_TB_NAME_SIZE]; - int childTblCount; - bool superTblExists; // 0: no, 1: yes - bool childTblExists; // 0: no, 1: yes - int batchCreateTableNum; // 0: no batch, > 0: batch table number in one sql - int8_t autoCreateTable; // 0: create sub table, 1: auto create sub table - char childTblPrefix[MAX_TB_NAME_SIZE]; - char dataSource[MAX_TB_NAME_SIZE]; // rand_gen or sample - char insertMode[MAX_TB_NAME_SIZE]; // taosc, restful - int insertRate; // 0: unlimit > 0 rows/s - - int multiThreadWriteOneTbl; // 0: no, 1: yes - int numberOfTblInOneSql; // 0/1: one table, > 1: number of tbl - int rowsPerTbl; // - int disorderRatio; // 0: no disorder, >0: x% - int disorderRange; // ms or us by database precision - int maxSqlLen; // - - int64_t insertRows; // 0: no limit - int timeStampStep; - char startTimestamp[MAX_TB_NAME_SIZE]; // - char sampleFormat[MAX_TB_NAME_SIZE]; // csv, json - char sampleFile[MAX_FILE_NAME_LEN]; - char tagsFile[MAX_FILE_NAME_LEN]; - - int columnCount; - StrColumn columns[MAX_COLUMN_COUNT]; - int tagCount; - StrColumn tags[MAX_TAG_COUNT]; - - char* childTblName; - char* colsOfCreatChildTable; - int lenOfOneRow; - int lenOfTagOfOneRow; - - char* sampleDataBuf; - int sampleDataBufSize; - //int sampleRowCount; - //int sampleUsePos; - - int tagSource; // 0: rand, 1: tag sample - char* tagDataBuf; - int tagSampleCount; - int tagUsePos; - - // statistics - int64_t totalRowsInserted; - int64_t totalAffectedRows; -} SSuperTable; - -typedef struct { - char name[TSDB_DB_NAME_LEN + 1]; - char create_time[32]; - int32_t ntables; - int32_t vgroups; - int16_t replica; - int16_t quorum; - int16_t days; - char keeplist[32]; - int32_t cache; //MB - int32_t blocks; - int32_t minrows; - int32_t maxrows; - int8_t wallevel; - int32_t fsync; - int8_t comp; - int8_t cachelast; - char precision[8]; // time resolution - int8_t update; - char status[16]; -} SDbInfo; - -typedef struct SDbCfg_S { -// int maxtablesPerVnode; - int minRows; - int maxRows; - int comp; - int walLevel; - int fsync; - int replica; - int update; - int keep; - int days; - int cache; - int blocks; - int quorum; - char precision[MAX_TB_NAME_SIZE]; -} SDbCfg; - -typedef struct SDataBase_S { - char dbName[MAX_DB_NAME_SIZE]; - int drop; // 0: use exists, 1: if exists, drop then new create - SDbCfg dbCfg; - int superTblCount; - SSuperTable superTbls[MAX_SUPER_TABLE_COUNT]; -} SDataBase; - -typedef struct SDbs_S { - char cfgDir[MAX_FILE_NAME_LEN]; - char host[MAX_DB_NAME_SIZE]; - uint16_t port; - char user[MAX_DB_NAME_SIZE]; - char password[MAX_DB_NAME_SIZE]; - char resultFile[MAX_FILE_NAME_LEN]; - bool use_metric; - bool insert_only; - bool do_aggreFunc; - bool queryMode; - - int threadCount; - int threadCountByCreateTbl; - int dbCount; - SDataBase db[MAX_DB_COUNT]; - - // statistics - int64_t totalRowsInserted; - int64_t totalAffectedRows; -} SDbs; - -typedef struct SuperQueryInfo_S { - int rate; // 0: unlimit > 0 loop/s - int concurrent; - int sqlCount; - int subscribeMode; // 0: sync, 1: async - int subscribeInterval; // ms - int subscribeRestart; - int subscribeKeepProgress; - char sql[MAX_QUERY_SQL_COUNT][MAX_QUERY_SQL_LENGTH]; - char result[MAX_QUERY_SQL_COUNT][MAX_FILE_NAME_LEN]; - TAOS_SUB* tsub[MAX_QUERY_SQL_COUNT]; -} SuperQueryInfo; - -typedef struct SubQueryInfo_S { - char sTblName[MAX_TB_NAME_SIZE]; - int rate; // 0: unlimit > 0 loop/s - int threadCnt; - int subscribeMode; // 0: sync, 1: async - int subscribeInterval; // ms - int subscribeRestart; - int subscribeKeepProgress; - int childTblCount; - char childTblPrefix[MAX_TB_NAME_SIZE]; - int sqlCount; - char sql[MAX_QUERY_SQL_COUNT][MAX_QUERY_SQL_LENGTH]; - char result[MAX_QUERY_SQL_COUNT][MAX_FILE_NAME_LEN]; - TAOS_SUB* tsub[MAX_QUERY_SQL_COUNT]; - - char* childTblName; -} SubQueryInfo; - -typedef struct SQueryMetaInfo_S { - char cfgDir[MAX_FILE_NAME_LEN]; - char host[MAX_DB_NAME_SIZE]; - uint16_t port; - char user[MAX_DB_NAME_SIZE]; - char password[MAX_DB_NAME_SIZE]; - char dbName[MAX_DB_NAME_SIZE]; - char queryMode[MAX_TB_NAME_SIZE]; // taosc, restful - - SuperQueryInfo superQueryInfo; - SubQueryInfo subQueryInfo; -} SQueryMetaInfo; - -typedef struct SThreadInfo_S { - TAOS *taos; - #ifdef TD_LOWA_CURL - CURL *curl_handle; - #endif - int threadID; - char db_name[MAX_DB_NAME_SIZE]; - char fp[4096]; - char tb_prefix[MAX_TB_NAME_SIZE]; - int start_table_id; - int end_table_id; - int data_of_rate; - int64_t start_time; - char* cols; - bool use_metric; - SSuperTable* superTblInfo; - - // for async insert - tsem_t lock_sem; - int64_t counter; - int64_t st; - int64_t et; - int64_t lastTs; - int nrecords_per_request; - - // statistics - int64_t totalRowsInserted; - int64_t totalAffectedRows; -} threadInfo; - -typedef struct curlMemInfo_S { - char *buf; - size_t sizeleft; - } curlMemInfo; - - - -#ifdef LINUX - /* The options we understand. */ - static struct argp_option options[] = { - {0, 'f', "meta file", 0, "The meta data to the execution procedure, if use -f, all others options invalid. Default is NULL.", 0}, - #ifdef _TD_POWER_ - {0, 'c', "config_directory", 0, "Configuration directory. Default is '/etc/power/'.", 1}, - {0, 'P', "password", 0, "The password to use when connecting to the server. Default is 'powerdb'.", 2}, - #else - {0, 'c', "config_directory", 0, "Configuration directory. Default is '/etc/taos/'.", 1}, - {0, 'P', "password", 0, "The password to use when connecting to the server. Default is 'taosdata'.", 2}, - #endif - {0, 'h', "host", 0, "The host to connect to TDengine. Default is localhost.", 2}, - {0, 'p', "port", 0, "The TCP/IP port number to use for the connection. Default is 0.", 2}, - {0, 'u', "user", 0, "The TDengine user name to use when connecting to the server. Default is 'root'.", 2}, - {0, 'd', "database", 0, "Destination database. Default is 'test'.", 3}, - {0, 'a', "replica", 0, "Set the replica parameters of the database, Default 1, min: 1, max: 3.", 4}, - {0, 'm', "table_prefix", 0, "Table prefix name. Default is 't'.", 4}, - {0, 's', "sql file", 0, "The select sql file.", 6}, - {0, 'M', 0, 0, "Use metric flag.", 4}, - {0, 'o', "outputfile", 0, "Direct output to the named file. Default is './output.txt'.", 6}, - {0, 'q', "query_mode", 0, "Query mode--0: SYNC, 1: ASYNC. Default is SYNC.", 4}, - {0, 'b', "type_of_cols", 0, "The data_type of columns, default: TINYINT,SMALLINT,INT,BIGINT,FLOAT,DOUBLE,BINARY,NCHAR,BOOL,TIMESTAMP.", 4}, - {0, 'w', "length_of_chartype", 0, "The length of data_type 'BINARY' or 'NCHAR'. Default is 16", 4}, - {0, 'l', "num_of_cols_per_record", 0, "The number of columns per record. Default is 10.", 4}, - {0, 'T', "num_of_threads", 0, "The number of threads. Default is 10.", 4}, - // {0, 'r', "num_of_records_per_req", 0, "The number of records per request. Default is 100.", 4}, - {0, 't', "num_of_tables", 0, "The number of tables. Default is 10000.", 4}, - {0, 'n', "num_of_records_per_table", 0, "The number of records per table. Default is 10000.", 4}, - {0, 'x', 0, 0, "Not insert only flag.", 4}, - {0, 'y', 0, 0, "Default input yes for prompt.", 4}, - {0, 'O', "disorderRatio", 0, "Insert mode--0: In order, > 0: disorder ratio. Default is in order.", 4}, - {0, 'R', "disorderRang", 0, "Out of order data's range, ms, default is 1000.", 4}, - //{0, 'D', "delete database", 0, "if elete database if exists. 0: no, 1: yes, default is 1", 5}, - {0}}; - -/* Parse a single option. */ -static error_t parse_opt(int key, char *arg, struct argp_state *state) { - // Get the input argument from argp_parse, which we know is a pointer to our arguments structure. - SArguments *arguments = state->input; - wordexp_t full_path; - char **sptr; - switch (key) { - case 'f': - arguments->metaFile = arg; - break; - case 'h': - arguments->host = arg; - break; - case 'p': - arguments->port = atoi(arg); - break; - case 'u': - arguments->user = arg; - break; - case 'P': - arguments->password = arg; - break; - case 'o': - arguments->output_file = arg; - break; - case 's': - arguments->sqlFile = arg; - break; - case 'q': - arguments->mode = atoi(arg); - break; - case 'T': - arguments->num_of_threads = atoi(arg); - break; - //case 'r': - // arguments->num_of_RPR = atoi(arg); - // break; - case 't': - arguments->num_of_tables = atoi(arg); - break; - case 'n': - arguments->num_of_DPT = atoi(arg); - break; - case 'd': - arguments->database = arg; - break; - case 'l': - arguments->num_of_CPR = atoi(arg); - break; - case 'b': - sptr = arguments->datatype; - if (strstr(arg, ",") == NULL) { - if (strcasecmp(arg, "INT") != 0 && strcasecmp(arg, "FLOAT") != 0 && - strcasecmp(arg, "TINYINT") != 0 && strcasecmp(arg, "BOOL") != 0 && - strcasecmp(arg, "SMALLINT") != 0 && strcasecmp(arg, "TIMESTAMP") != 0 && - strcasecmp(arg, "BIGINT") != 0 && strcasecmp(arg, "DOUBLE") != 0 && - strcasecmp(arg, "BINARY") != 0 && strcasecmp(arg, "NCHAR") != 0) { - argp_error(state, "Invalid data_type!"); - } - sptr[0] = arg; - } else { - int index = 0; - char *dupstr = strdup(arg); - char *running = dupstr; - char *token = strsep(&running, ","); - while (token != NULL) { - if (strcasecmp(token, "INT") != 0 && strcasecmp(token, "FLOAT") != 0 && - strcasecmp(token, "TINYINT") != 0 && strcasecmp(token, "BOOL") != 0 && - strcasecmp(token, "SMALLINT") != 0 && strcasecmp(token, "TIMESTAMP") != 0 && - strcasecmp(token, "BIGINT") != 0 && strcasecmp(token, "DOUBLE") != 0 && - strcasecmp(token, "BINARY") != 0 && strcasecmp(token, "NCHAR") != 0) { - argp_error(state, "Invalid data_type!"); - } - sptr[index++] = token; - token = strsep(&running, ","); - if (index >= MAX_NUM_DATATYPE) break; - } - } - break; - case 'w': - arguments->len_of_binary = atoi(arg); - break; - case 'm': - arguments->tb_prefix = arg; - break; - case 'M': - arguments->use_metric = true; - break; - case 'x': - arguments->insert_only = false; - case 'y': - arguments->answer_yes = true; - break; - case 'c': - if (wordexp(arg, &full_path, 0) != 0) { - fprintf(stderr, "Invalid path %s\n", arg); - return -1; - } - taos_options(TSDB_OPTION_CONFIGDIR, full_path.we_wordv[0]); - wordfree(&full_path); - break; - case 'O': - arguments->disorderRatio = atoi(arg); - if (arguments->disorderRatio < 0 || arguments->disorderRatio > 100) - { - argp_error(state, "Invalid disorder ratio, should 1 ~ 100!"); - } - break; - case 'R': - arguments->disorderRange = atoi(arg); - break; - case 'a': - arguments->replica = atoi(arg); - if (arguments->replica > 3 || arguments->replica < 1) - { - arguments->replica = 1; - } - break; - //case 'D': - // arguments->method_of_delete = atoi(arg); - // break; - case OPT_ABORT: - arguments->abort = 1; - break; - case ARGP_KEY_ARG: - /*arguments->arg_list = &state->argv[state->next-1]; - state->next = state->argc;*/ - argp_usage(state); - break; - - default: - return ARGP_ERR_UNKNOWN; - } - return 0; -} - -static struct argp argp = {options, parse_opt, 0, 0}; - -void parse_args(int argc, char *argv[], SArguments *arguments) { - argp_parse(&argp, argc, argv, 0, 0, arguments); - if (arguments->abort) { - #ifndef _ALPINE - error(10, 0, "ABORTED"); - #else - abort(); - #endif - } -} - -#else - void printHelp() { - char indent[10] = " "; - printf("%s%s\n", indent, "-f"); - printf("%s%s%s\n", indent, indent, "The meta file to the execution procedure. Default is './meta.json'."); - printf("%s%s\n", indent, "-c"); - printf("%s%s%s\n", indent, indent, "config_directory, Configuration directory. Default is '/etc/taos/'."); - } - - void parse_args(int argc, char *argv[], SArguments *arguments) { - for (int i = 1; i < argc; i++) { - if (strcmp(argv[i], "-f") == 0) { - arguments->metaFile = argv[++i]; - } else if (strcmp(argv[i], "-c") == 0) { - strcpy(configDir, argv[++i]); - } else if (strcmp(argv[i], "--help") == 0) { - printHelp(); - exit(EXIT_FAILURE); - } else { - fprintf(stderr, "wrong options\n"); - printHelp(); - exit(EXIT_FAILURE); - } - } - } -#endif - -static bool getInfoFromJsonFile(char* file); -//static int generateOneRowDataForStb(SSuperTable* stbInfo); -//static int getDataIntoMemForStb(SSuperTable* stbInfo); -static void init_rand_data(); -static int createDatabases(); -static void createChildTables(); -static int queryDbExec(TAOS *taos, char *command, int type); - -/* ************ Global variables ************ */ - -int32_t randint[MAX_PREPARED_RAND]; -int64_t randbigint[MAX_PREPARED_RAND]; -float randfloat[MAX_PREPARED_RAND]; -double randdouble[MAX_PREPARED_RAND]; -char *aggreFunc[] = {"*", "count(*)", "avg(col0)", "sum(col0)", "max(col0)", "min(col0)", "first(col0)", "last(col0)"}; - -SArguments g_args = {NULL, - "127.0.0.1", // host - 6030, // port - "root", // user - #ifdef _TD_POWER_ - "powerdb", // password - #else - "taosdata", // password - #endif - "test", // database - 1, // replica - "t", // tb_prefix - NULL, // sqlFile - false, // use_metric - true, // insert_only - false, // answer_yes; - "./output.txt", // output_file - 0, // mode : sync or async - { - "TINYINT", // datatype - "SMALLINT", - "INT", - "BIGINT", - "FLOAT", - "DOUBLE", - "BINARY", - "NCHAR", - "BOOL", - "TIMESTAMP" - }, - 16, // len_of_binary - 10, // num_of_CPR - 10, // num_of_connections/thread - 100, // num_of_RPR - 10000, // num_of_tables - 10000, // num_of_DPT - 0, // abort - 0, // disorderRatio - 1000, // disorderRange - 1, // method_of_delete - NULL // arg_list -}; - - -static int g_jsonType = 0; -static SDbs g_Dbs; -static int g_totalChildTables = 0; -static SQueryMetaInfo g_queryInfo; -static FILE * g_fpOfInsertResult = NULL; - - -void tmfclose(FILE *fp) { - if (NULL != fp) { - fclose(fp); - } -} - -void tmfree(char *buf) { - if (NULL != buf) { - free(buf); - } -} - -static int queryDbExec(TAOS *taos, char *command, int type) { - int i; - TAOS_RES *res = NULL; - int32_t code = -1; - - for (i = 0; i < 5; i++) { - if (NULL != res) { - taos_free_result(res); - res = NULL; - } - - res = taos_query(taos, command); - code = taos_errno(res); - if (0 == code) { - break; - } - } - - if (code != 0) { - fprintf(stderr, "Failed to run %s, reason: %s\n", command, taos_errstr(res)); - taos_free_result(res); - //taos_close(taos); - return -1; - } - - if (INSERT_TYPE == type) { - int affectedRows = taos_affected_rows(res); - taos_free_result(res); - return affectedRows; - } - - taos_free_result(res); - return 0; -} - -static void getResult(TAOS_RES *res, char* resultFileName) { - TAOS_ROW row = NULL; - int num_rows = 0; - int num_fields = taos_field_count(res); - TAOS_FIELD *fields = taos_fetch_fields(res); - - FILE *fp = NULL; - if (resultFileName[0] != 0) { - fp = fopen(resultFileName, "at"); - if (fp == NULL) { - fprintf(stderr, "failed to open result file: %s, result will not save to file\n", resultFileName); - } - } - - char* databuf = (char*) calloc(1, 100*1024*1024); - if (databuf == NULL) { - fprintf(stderr, "failed to malloc, warning: save result to file slowly!\n"); - return ; - } - - int totalLen = 0; - char temp[16000]; - - // fetch the records row by row - while ((row = taos_fetch_row(res))) { - if (totalLen >= 100*1024*1024 - 32000) { - if (fp) fprintf(fp, "%s", databuf); - totalLen = 0; - memset(databuf, 0, 100*1024*1024); - } - num_rows++; - int len = taos_print_row(temp, row, fields, num_fields); - len += sprintf(temp + len, "\n"); - //printf("query result:%s\n", temp); - memcpy(databuf + totalLen, temp, len); - totalLen += len; - } - - if (fp) fprintf(fp, "%s", databuf); - tmfclose(fp); - free(databuf); -} - -static void selectAndGetResult(TAOS *taos, char *command, char* resultFileName) { - TAOS_RES *res = taos_query(taos, command); - if (res == NULL || taos_errno(res) != 0) { - printf("failed to sql:%s, reason:%s\n", command, taos_errstr(res)); - taos_free_result(res); - return; - } - - getResult(res, resultFileName); - taos_free_result(res); -} - -double getCurrentTime() { - struct timeval tv; - if (gettimeofday(&tv, NULL) != 0) { - perror("Failed to get current time in ms"); - return 0.0; - } - - return tv.tv_sec + tv.tv_usec / 1E6; -} - -static int32_t rand_bool(){ - static int cursor; - cursor++; - cursor = cursor % MAX_PREPARED_RAND; - return randint[cursor] % 2; -} - -static int32_t rand_tinyint(){ - static int cursor; - cursor++; - cursor = cursor % MAX_PREPARED_RAND; - return randint[cursor] % 128; -} - -static int32_t rand_smallint(){ - static int cursor; - cursor++; - cursor = cursor % MAX_PREPARED_RAND; - return randint[cursor] % 32767; -} - -static int32_t rand_int(){ - static int cursor; - cursor++; - cursor = cursor % MAX_PREPARED_RAND; - return randint[cursor]; -} - -static int64_t rand_bigint(){ - static int cursor; - cursor++; - cursor = cursor % MAX_PREPARED_RAND; - return randbigint[cursor]; - -} - -static float rand_float(){ - static int cursor; - cursor++; - cursor = cursor % MAX_PREPARED_RAND; - return randfloat[cursor]; -} - -static const char charset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; -void rand_string(char *str, int size) { - str[0] = 0; - if (size > 0) { - //--size; - int n; - for (n = 0; n < size; n++) { - int key = rand_tinyint() % (int)(sizeof(charset) - 1); - str[n] = charset[key]; - } - str[n] = 0; - } -} - -static double rand_double() { - static int cursor; - cursor++; - cursor = cursor % MAX_PREPARED_RAND; - return randdouble[cursor]; - -} - -static void init_rand_data() { - for (int i = 0; i < MAX_PREPARED_RAND; i++){ - randint[i] = (int)(rand() % 65535); - randbigint[i] = (int64_t)(rand() % 2147483648); - randfloat[i] = (float)(rand() / 1000.0); - randdouble[i] = (double)(rand() / 1000000.0); - } -} - -static void printfInsertMeta() { - printf("\033[1m\033[40;32m================ insert.json parse result START ================\033[0m\n"); - printf("host: \033[33m%s:%u\033[0m\n", g_Dbs.host, g_Dbs.port); - printf("user: \033[33m%s\033[0m\n", g_Dbs.user); - printf("password: \033[33m%s\033[0m\n", g_Dbs.password); - printf("resultFile: \033[33m%s\033[0m\n", g_Dbs.resultFile); - printf("thread num of insert data: \033[33m%d\033[0m\n", g_Dbs.threadCount); - printf("thread num of create table: \033[33m%d\033[0m\n", g_Dbs.threadCountByCreateTbl); - - printf("database count: \033[33m%d\033[0m\n", g_Dbs.dbCount); - for (int i = 0; i < g_Dbs.dbCount; i++) { - printf("database[\033[33m%d\033[0m]:\n", i); - printf(" database name: \033[33m%s\033[0m\n", g_Dbs.db[i].dbName); - if (0 == g_Dbs.db[i].drop) { - printf(" drop: \033[33mno\033[0m\n"); - }else { - printf(" drop: \033[33myes\033[0m\n"); - } - - if (g_Dbs.db[i].dbCfg.blocks > 0) { - printf(" blocks: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.blocks); - } - if (g_Dbs.db[i].dbCfg.cache > 0) { - printf(" cache: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.cache); - } - if (g_Dbs.db[i].dbCfg.days > 0) { - printf(" days: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.days); - } - if (g_Dbs.db[i].dbCfg.keep > 0) { - printf(" keep: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.keep); - } - if (g_Dbs.db[i].dbCfg.replica > 0) { - printf(" replica: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.replica); - } - if (g_Dbs.db[i].dbCfg.update > 0) { - printf(" update: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.update); - } - if (g_Dbs.db[i].dbCfg.minRows > 0) { - printf(" minRows: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.minRows); - } - if (g_Dbs.db[i].dbCfg.maxRows > 0) { - printf(" maxRows: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.maxRows); - } - if (g_Dbs.db[i].dbCfg.comp > 0) { - printf(" comp: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.comp); - } - if (g_Dbs.db[i].dbCfg.walLevel > 0) { - printf(" walLevel: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.walLevel); - } - if (g_Dbs.db[i].dbCfg.fsync > 0) { - printf(" fsync: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.fsync); - } - if (g_Dbs.db[i].dbCfg.quorum > 0) { - printf(" quorum: \033[33m%d\033[0m\n", g_Dbs.db[i].dbCfg.quorum); - } - if (g_Dbs.db[i].dbCfg.precision[0] != 0) { - if ((0 == strncasecmp(g_Dbs.db[i].dbCfg.precision, "ms", 2)) || (0 == strncasecmp(g_Dbs.db[i].dbCfg.precision, "us", 2))) { - printf(" precision: \033[33m%s\033[0m\n", g_Dbs.db[i].dbCfg.precision); - } else { - printf(" precision error: \033[33m%s\033[0m\n", g_Dbs.db[i].dbCfg.precision); - exit(EXIT_FAILURE); - } - } - - printf(" super table count: \033[33m%d\033[0m\n", g_Dbs.db[i].superTblCount); - for (int j = 0; j < g_Dbs.db[i].superTblCount; j++) { - printf(" super table[\033[33m%d\033[0m]:\n", j); - - printf(" stbName: \033[33m%s\033[0m\n", g_Dbs.db[i].superTbls[j].sTblName); - - if (PRE_CREATE_SUBTBL == g_Dbs.db[i].superTbls[j].autoCreateTable) { - printf(" autoCreateTable: \033[33m%s\033[0m\n", "no"); - } else if (AUTO_CREATE_SUBTBL == g_Dbs.db[i].superTbls[j].autoCreateTable) { - printf(" autoCreateTable: \033[33m%s\033[0m\n", "yes"); - } else { - printf(" autoCreateTable: \033[33m%s\033[0m\n", "error"); - } - - if (TBL_NO_EXISTS == g_Dbs.db[i].superTbls[j].childTblExists) { - printf(" childTblExists: \033[33m%s\033[0m\n", "no"); - } else if (TBL_ALREADY_EXISTS == g_Dbs.db[i].superTbls[j].childTblExists) { - printf(" childTblExists: \033[33m%s\033[0m\n", "yes"); - } else { - printf(" childTblExists: \033[33m%s\033[0m\n", "error"); - } - - printf(" childTblCount: \033[33m%d\033[0m\n", g_Dbs.db[i].superTbls[j].childTblCount); - printf(" childTblPrefix: \033[33m%s\033[0m\n", g_Dbs.db[i].superTbls[j].childTblPrefix); - printf(" dataSource: \033[33m%s\033[0m\n", g_Dbs.db[i].superTbls[j].dataSource); - printf(" insertMode: \033[33m%s\033[0m\n", g_Dbs.db[i].superTbls[j].insertMode); - printf(" insertRate: \033[33m%d\033[0m\n", g_Dbs.db[i].superTbls[j].insertRate); - printf(" insertRows: \033[33m%"PRId64"\033[0m\n", g_Dbs.db[i].superTbls[j].insertRows); - - if (0 == g_Dbs.db[i].superTbls[j].multiThreadWriteOneTbl) { - printf(" multiThreadWriteOneTbl: \033[33mno\033[0m\n"); - }else { - printf(" multiThreadWriteOneTbl: \033[33myes\033[0m\n"); - } - printf(" numberOfTblInOneSql: \033[33m%d\033[0m\n", g_Dbs.db[i].superTbls[j].numberOfTblInOneSql); - printf(" rowsPerTbl: \033[33m%d\033[0m\n", g_Dbs.db[i].superTbls[j].rowsPerTbl); - printf(" disorderRange: \033[33m%d\033[0m\n", g_Dbs.db[i].superTbls[j].disorderRange); - printf(" disorderRatio: \033[33m%d\033[0m\n", g_Dbs.db[i].superTbls[j].disorderRatio); - printf(" maxSqlLen: \033[33m%d\033[0m\n", g_Dbs.db[i].superTbls[j].maxSqlLen); - - printf(" timeStampStep: \033[33m%d\033[0m\n", g_Dbs.db[i].superTbls[j].timeStampStep); - printf(" startTimestamp: \033[33m%s\033[0m\n", g_Dbs.db[i].superTbls[j].startTimestamp); - printf(" sampleFormat: \033[33m%s\033[0m\n", g_Dbs.db[i].superTbls[j].sampleFormat); - printf(" sampleFile: \033[33m%s\033[0m\n", g_Dbs.db[i].superTbls[j].sampleFile); - printf(" tagsFile: \033[33m%s\033[0m\n", g_Dbs.db[i].superTbls[j].tagsFile); - - printf(" columnCount: \033[33m%d\033[0m\n ", g_Dbs.db[i].superTbls[j].columnCount); - for (int k = 0; k < g_Dbs.db[i].superTbls[j].columnCount; k++) { - //printf("dataType:%s, dataLen:%d\t", g_Dbs.db[i].superTbls[j].columns[k].dataType, g_Dbs.db[i].superTbls[j].columns[k].dataLen); - if ((0 == strncasecmp(g_Dbs.db[i].superTbls[j].columns[k].dataType, "binary", 6)) || (0 == strncasecmp(g_Dbs.db[i].superTbls[j].columns[k].dataType, "nchar", 5))) { - printf("column[\033[33m%d\033[0m]:\033[33m%s(%d)\033[0m ", k, g_Dbs.db[i].superTbls[j].columns[k].dataType, g_Dbs.db[i].superTbls[j].columns[k].dataLen); - } else { - printf("column[%d]:\033[33m%s\033[0m ", k, g_Dbs.db[i].superTbls[j].columns[k].dataType); - } - } - printf("\n"); - - printf(" tagCount: \033[33m%d\033[0m\n ", g_Dbs.db[i].superTbls[j].tagCount); - for (int k = 0; k < g_Dbs.db[i].superTbls[j].tagCount; k++) { - //printf("dataType:%s, dataLen:%d\t", g_Dbs.db[i].superTbls[j].tags[k].dataType, g_Dbs.db[i].superTbls[j].tags[k].dataLen); - if ((0 == strncasecmp(g_Dbs.db[i].superTbls[j].tags[k].dataType, "binary", 6)) || (0 == strncasecmp(g_Dbs.db[i].superTbls[j].tags[k].dataType, "nchar", 5))) { - printf("tag[%d]:\033[33m%s(%d)\033[0m ", k, g_Dbs.db[i].superTbls[j].tags[k].dataType, g_Dbs.db[i].superTbls[j].tags[k].dataLen); - } else { - printf("tag[%d]:\033[33m%s\033[0m ", k, g_Dbs.db[i].superTbls[j].tags[k].dataType); - } - } - printf("\n"); - } - printf("\n"); - } - printf("\033[1m\033[40;32m================ insert.json parse result END================\033[0m\n"); -} - -static void printfInsertMetaToFile(FILE* fp) { - fprintf(fp, "================ insert.json parse result START================\n"); - fprintf(fp, "host: %s:%u\n", g_Dbs.host, g_Dbs.port); - fprintf(fp, "user: %s\n", g_Dbs.user); - fprintf(fp, "password: %s\n", g_Dbs.password); - fprintf(fp, "resultFile: %s\n", g_Dbs.resultFile); - fprintf(fp, "thread num of insert data: %d\n", g_Dbs.threadCount); - fprintf(fp, "thread num of create table: %d\n", g_Dbs.threadCountByCreateTbl); - - fprintf(fp, "database count: %d\n", g_Dbs.dbCount); - for (int i = 0; i < g_Dbs.dbCount; i++) { - fprintf(fp, "database[%d]:\n", i); - fprintf(fp, " database name: %s\n", g_Dbs.db[i].dbName); - if (0 == g_Dbs.db[i].drop) { - fprintf(fp, " drop: no\n"); - }else { - fprintf(fp, " drop: yes\n"); - } - - if (g_Dbs.db[i].dbCfg.blocks > 0) { - fprintf(fp, " blocks: %d\n", g_Dbs.db[i].dbCfg.blocks); - } - if (g_Dbs.db[i].dbCfg.cache > 0) { - fprintf(fp, " cache: %d\n", g_Dbs.db[i].dbCfg.cache); - } - if (g_Dbs.db[i].dbCfg.days > 0) { - fprintf(fp, " days: %d\n", g_Dbs.db[i].dbCfg.days); - } - if (g_Dbs.db[i].dbCfg.keep > 0) { - fprintf(fp, " keep: %d\n", g_Dbs.db[i].dbCfg.keep); - } - if (g_Dbs.db[i].dbCfg.replica > 0) { - fprintf(fp, " replica: %d\n", g_Dbs.db[i].dbCfg.replica); - } - if (g_Dbs.db[i].dbCfg.update > 0) { - fprintf(fp, " update: %d\n", g_Dbs.db[i].dbCfg.update); - } - if (g_Dbs.db[i].dbCfg.minRows > 0) { - fprintf(fp, " minRows: %d\n", g_Dbs.db[i].dbCfg.minRows); - } - if (g_Dbs.db[i].dbCfg.maxRows > 0) { - fprintf(fp, " maxRows: %d\n", g_Dbs.db[i].dbCfg.maxRows); - } - if (g_Dbs.db[i].dbCfg.comp > 0) { - fprintf(fp, " comp: %d\n", g_Dbs.db[i].dbCfg.comp); - } - if (g_Dbs.db[i].dbCfg.walLevel > 0) { - fprintf(fp, " walLevel: %d\n", g_Dbs.db[i].dbCfg.walLevel); - } - if (g_Dbs.db[i].dbCfg.fsync > 0) { - fprintf(fp, " fsync: %d\n", g_Dbs.db[i].dbCfg.fsync); - } - if (g_Dbs.db[i].dbCfg.quorum > 0) { - fprintf(fp, " quorum: %d\n", g_Dbs.db[i].dbCfg.quorum); - } - if (g_Dbs.db[i].dbCfg.precision[0] != 0) { - if ((0 == strncasecmp(g_Dbs.db[i].dbCfg.precision, "ms", 2)) || (0 == strncasecmp(g_Dbs.db[i].dbCfg.precision, "us", 2))) { - fprintf(fp, " precision: %s\n", g_Dbs.db[i].dbCfg.precision); - } else { - fprintf(fp, " precision error: %s\n", g_Dbs.db[i].dbCfg.precision); - } - } - - fprintf(fp, " super table count: %d\n", g_Dbs.db[i].superTblCount); - for (int j = 0; j < g_Dbs.db[i].superTblCount; j++) { - fprintf(fp, " super table[%d]:\n", j); - - fprintf(fp, " stbName: %s\n", g_Dbs.db[i].superTbls[j].sTblName); - - if (PRE_CREATE_SUBTBL == g_Dbs.db[i].superTbls[j].autoCreateTable) { - fprintf(fp, " autoCreateTable: %s\n", "no"); - } else if (AUTO_CREATE_SUBTBL == g_Dbs.db[i].superTbls[j].autoCreateTable) { - fprintf(fp, " autoCreateTable: %s\n", "yes"); - } else { - fprintf(fp, " autoCreateTable: %s\n", "error"); - } - - if (TBL_NO_EXISTS == g_Dbs.db[i].superTbls[j].childTblExists) { - fprintf(fp, " childTblExists: %s\n", "no"); - } else if (TBL_ALREADY_EXISTS == g_Dbs.db[i].superTbls[j].childTblExists) { - fprintf(fp, " childTblExists: %s\n", "yes"); - } else { - fprintf(fp, " childTblExists: %s\n", "error"); - } - - fprintf(fp, " childTblCount: %d\n", g_Dbs.db[i].superTbls[j].childTblCount); - fprintf(fp, " childTblPrefix: %s\n", g_Dbs.db[i].superTbls[j].childTblPrefix); - fprintf(fp, " dataSource: %s\n", g_Dbs.db[i].superTbls[j].dataSource); - fprintf(fp, " insertMode: %s\n", g_Dbs.db[i].superTbls[j].insertMode); - fprintf(fp, " insertRate: %d\n", g_Dbs.db[i].superTbls[j].insertRate); - fprintf(fp, " insertRows: %"PRId64"\n", g_Dbs.db[i].superTbls[j].insertRows); - - if (0 == g_Dbs.db[i].superTbls[j].multiThreadWriteOneTbl) { - fprintf(fp, " multiThreadWriteOneTbl: no\n"); - }else { - fprintf(fp, " multiThreadWriteOneTbl: yes\n"); - } - fprintf(fp, " numberOfTblInOneSql: %d\n", g_Dbs.db[i].superTbls[j].numberOfTblInOneSql); - fprintf(fp, " rowsPerTbl: %d\n", g_Dbs.db[i].superTbls[j].rowsPerTbl); - fprintf(fp, " disorderRange: %d\n", g_Dbs.db[i].superTbls[j].disorderRange); - fprintf(fp, " disorderRatio: %d\n", g_Dbs.db[i].superTbls[j].disorderRatio); - fprintf(fp, " maxSqlLen: %d\n", g_Dbs.db[i].superTbls[j].maxSqlLen); - - fprintf(fp, " timeStampStep: %d\n", g_Dbs.db[i].superTbls[j].timeStampStep); - fprintf(fp, " startTimestamp: %s\n", g_Dbs.db[i].superTbls[j].startTimestamp); - fprintf(fp, " sampleFormat: %s\n", g_Dbs.db[i].superTbls[j].sampleFormat); - fprintf(fp, " sampleFile: %s\n", g_Dbs.db[i].superTbls[j].sampleFile); - fprintf(fp, " tagsFile: %s\n", g_Dbs.db[i].superTbls[j].tagsFile); - - fprintf(fp, " columnCount: %d\n ", g_Dbs.db[i].superTbls[j].columnCount); - for (int k = 0; k < g_Dbs.db[i].superTbls[j].columnCount; k++) { - //printf("dataType:%s, dataLen:%d\t", g_Dbs.db[i].superTbls[j].columns[k].dataType, g_Dbs.db[i].superTbls[j].columns[k].dataLen); - if ((0 == strncasecmp(g_Dbs.db[i].superTbls[j].columns[k].dataType, "binary", 6)) || (0 == strncasecmp(g_Dbs.db[i].superTbls[j].columns[k].dataType, "nchar", 5))) { - fprintf(fp, "column[%d]:%s(%d) ", k, g_Dbs.db[i].superTbls[j].columns[k].dataType, g_Dbs.db[i].superTbls[j].columns[k].dataLen); - } else { - fprintf(fp, "column[%d]:%s ", k, g_Dbs.db[i].superTbls[j].columns[k].dataType); - } - } - fprintf(fp, "\n"); - - fprintf(fp, " tagCount: %d\n ", g_Dbs.db[i].superTbls[j].tagCount); - for (int k = 0; k < g_Dbs.db[i].superTbls[j].tagCount; k++) { - //printf("dataType:%s, dataLen:%d\t", g_Dbs.db[i].superTbls[j].tags[k].dataType, g_Dbs.db[i].superTbls[j].tags[k].dataLen); - if ((0 == strncasecmp(g_Dbs.db[i].superTbls[j].tags[k].dataType, "binary", 6)) || (0 == strncasecmp(g_Dbs.db[i].superTbls[j].tags[k].dataType, "nchar", 5))) { - fprintf(fp, "tag[%d]:%s(%d) ", k, g_Dbs.db[i].superTbls[j].tags[k].dataType, g_Dbs.db[i].superTbls[j].tags[k].dataLen); - } else { - fprintf(fp, "tag[%d]:%s ", k, g_Dbs.db[i].superTbls[j].tags[k].dataType); - } - } - fprintf(fp, "\n"); - } - fprintf(fp, "\n"); - } - fprintf(fp, "================ insert.json parse result END ================\n\n"); -} - -static void printfQueryMeta() { - printf("\033[1m\033[40;32m================ query.json parse result ================\033[0m\n"); - printf("host: \033[33m%s:%u\033[0m\n", g_queryInfo.host, g_queryInfo.port); - printf("user: \033[33m%s\033[0m\n", g_queryInfo.user); - printf("password: \033[33m%s\033[0m\n", g_queryInfo.password); - printf("database name: \033[33m%s\033[0m\n", g_queryInfo.dbName); - - printf("\n"); - printf("specified table query info: \n"); - printf("query interval: \033[33m%d\033[0m\n", g_queryInfo.superQueryInfo.rate); - printf("concurrent: \033[33m%d\033[0m\n", g_queryInfo.superQueryInfo.concurrent); - printf("sqlCount: \033[33m%d\033[0m\n", g_queryInfo.superQueryInfo.sqlCount); - - if (SUBSCRIBE_MODE == g_jsonType) { - printf("mod: \033[33m%d\033[0m\n", g_queryInfo.superQueryInfo.subscribeMode); - printf("interval: \033[33m%d\033[0m\n", g_queryInfo.superQueryInfo.subscribeInterval); - printf("restart: \033[33m%d\033[0m\n", g_queryInfo.superQueryInfo.subscribeRestart); - printf("keepProgress: \033[33m%d\033[0m\n", g_queryInfo.superQueryInfo.subscribeKeepProgress); - } - - - for (int i = 0; i < g_queryInfo.superQueryInfo.sqlCount; i++) { - printf(" sql[%d]: \033[33m%s\033[0m\n", i, g_queryInfo.superQueryInfo.sql[i]); - } - printf("\n"); - printf("super table query info: \n"); - printf("query interval: \033[33m%d\033[0m\n", g_queryInfo.subQueryInfo.rate); - printf("threadCnt: \033[33m%d\033[0m\n", g_queryInfo.subQueryInfo.threadCnt); - printf("childTblCount: \033[33m%d\033[0m\n", g_queryInfo.subQueryInfo.childTblCount); - printf("stable name: \033[33m%s\033[0m\n", g_queryInfo.subQueryInfo.sTblName); - - if (SUBSCRIBE_MODE == g_jsonType) { - printf("mod: \033[33m%d\033[0m\n", g_queryInfo.subQueryInfo.subscribeMode); - printf("interval: \033[33m%d\033[0m\n", g_queryInfo.subQueryInfo.subscribeInterval); - printf("restart: \033[33m%d\033[0m\n", g_queryInfo.subQueryInfo.subscribeRestart); - printf("keepProgress: \033[33m%d\033[0m\n", g_queryInfo.subQueryInfo.subscribeKeepProgress); - } - - printf("sqlCount: \033[33m%d\033[0m\n", g_queryInfo.subQueryInfo.sqlCount); - for (int i = 0; i < g_queryInfo.subQueryInfo.sqlCount; i++) { - printf(" sql[%d]: \033[33m%s\033[0m\n", i, g_queryInfo.subQueryInfo.sql[i]); - } - printf("\n"); - printf("\033[1m\033[40;32m================ query.json parse result ================\033[0m\n"); -} - - -static char* xFormatTimestamp(char* buf, int64_t val, int precision) { - time_t tt; - if (precision == TSDB_TIME_PRECISION_MICRO) { - tt = (time_t)(val / 1000000); - } else { - tt = (time_t)(val / 1000); - } - -/* comment out as it make testcases like select_with_tags.sim fail. - but in windows, this may cause the call to localtime crash if tt < 0, - need to find a better solution. - if (tt < 0) { - tt = 0; - } - */ - -#ifdef WINDOWS - if (tt < 0) tt = 0; -#endif - - struct tm* ptm = localtime(&tt); - size_t pos = strftime(buf, 32, "%Y-%m-%d %H:%M:%S", ptm); - - if (precision == TSDB_TIME_PRECISION_MICRO) { - sprintf(buf + pos, ".%06d", (int)(val % 1000000)); - } else { - sprintf(buf + pos, ".%03d", (int)(val % 1000)); - } - - return buf; -} - -static void xDumpFieldToFile(FILE* fp, const char* val, TAOS_FIELD* field, int32_t length, int precision) { - if (val == NULL) { - fprintf(fp, "%s", TSDB_DATA_NULL_STR); - return; - } - - char buf[TSDB_MAX_BYTES_PER_ROW]; - switch (field->type) { - case TSDB_DATA_TYPE_BOOL: - fprintf(fp, "%d", ((((int32_t)(*((char *)val))) == 1) ? 1 : 0)); - break; - case TSDB_DATA_TYPE_TINYINT: - fprintf(fp, "%d", *((int8_t *)val)); - break; - case TSDB_DATA_TYPE_SMALLINT: - fprintf(fp, "%d", *((int16_t *)val)); - break; - case TSDB_DATA_TYPE_INT: - fprintf(fp, "%d", *((int32_t *)val)); - break; - case TSDB_DATA_TYPE_BIGINT: - fprintf(fp, "%" PRId64, *((int64_t *)val)); - break; - case TSDB_DATA_TYPE_FLOAT: - fprintf(fp, "%.5f", GET_FLOAT_VAL(val)); - break; - case TSDB_DATA_TYPE_DOUBLE: - fprintf(fp, "%.9f", GET_DOUBLE_VAL(val)); - break; - case TSDB_DATA_TYPE_BINARY: - case TSDB_DATA_TYPE_NCHAR: - memcpy(buf, val, length); - buf[length] = 0; - fprintf(fp, "\'%s\'", buf); - break; - case TSDB_DATA_TYPE_TIMESTAMP: - xFormatTimestamp(buf, *(int64_t*)val, precision); - fprintf(fp, "'%s'", buf); - break; - default: - break; - } -} - -static int xDumpResultToFile(const char* fname, TAOS_RES* tres) { - TAOS_ROW row = taos_fetch_row(tres); - if (row == NULL) { - return 0; - } - - FILE* fp = fopen(fname, "at"); - if (fp == NULL) { - fprintf(stderr, "ERROR: failed to open file: %s\n", fname); - return -1; - } - - int num_fields = taos_num_fields(tres); - TAOS_FIELD *fields = taos_fetch_fields(tres); - int precision = taos_result_precision(tres); - - for (int col = 0; col < num_fields; col++) { - if (col > 0) { - fprintf(fp, ","); - } - fprintf(fp, "%s", fields[col].name); - } - fputc('\n', fp); - - int numOfRows = 0; - do { - int32_t* length = taos_fetch_lengths(tres); - for (int i = 0; i < num_fields; i++) { - if (i > 0) { - fputc(',', fp); - } - xDumpFieldToFile(fp, (const char*)row[i], fields +i, length[i], precision); - } - fputc('\n', fp); - - numOfRows++; - row = taos_fetch_row(tres); - } while( row != NULL); - - fclose(fp); - - return numOfRows; -} - -static int getDbFromServer(TAOS * taos, SDbInfo** dbInfos) { - TAOS_RES * res; - TAOS_ROW row = NULL; - int count = 0; - - res = taos_query(taos, "show databases;"); - int32_t code = taos_errno(res); - - if (code != 0) { - fprintf(stderr, "failed to run , reason: %s\n", taos_errstr(res)); - return -1; - } - - TAOS_FIELD *fields = taos_fetch_fields(res); - - while ((row = taos_fetch_row(res)) != NULL) { - // sys database name : 'log' - if (strncasecmp(row[TSDB_SHOW_DB_NAME_INDEX], "log", fields[TSDB_SHOW_DB_NAME_INDEX].bytes) == 0) continue; - - dbInfos[count] = (SDbInfo *)calloc(1, sizeof(SDbInfo)); - if (dbInfos[count] == NULL) { - fprintf(stderr, "failed to allocate memory for some dbInfo[%d]\n", count); - return -1; - } - - strncpy(dbInfos[count]->name, (char *)row[TSDB_SHOW_DB_NAME_INDEX], fields[TSDB_SHOW_DB_NAME_INDEX].bytes); - xFormatTimestamp(dbInfos[count]->create_time, *(int64_t*)row[TSDB_SHOW_DB_CREATED_TIME_INDEX], TSDB_TIME_PRECISION_MILLI); - dbInfos[count]->ntables = *((int32_t *)row[TSDB_SHOW_DB_NTABLES_INDEX]); - dbInfos[count]->vgroups = *((int32_t *)row[TSDB_SHOW_DB_VGROUPS_INDEX]); - dbInfos[count]->replica = *((int16_t *)row[TSDB_SHOW_DB_REPLICA_INDEX]); - dbInfos[count]->quorum = *((int16_t *)row[TSDB_SHOW_DB_QUORUM_INDEX]); - dbInfos[count]->days = *((int16_t *)row[TSDB_SHOW_DB_DAYS_INDEX]); - - strncpy(dbInfos[count]->keeplist, (char *)row[TSDB_SHOW_DB_KEEP_INDEX], fields[TSDB_SHOW_DB_KEEP_INDEX].bytes); - dbInfos[count]->cache = *((int32_t *)row[TSDB_SHOW_DB_CACHE_INDEX]); - dbInfos[count]->blocks = *((int32_t *)row[TSDB_SHOW_DB_BLOCKS_INDEX]); - dbInfos[count]->minrows = *((int32_t *)row[TSDB_SHOW_DB_MINROWS_INDEX]); - dbInfos[count]->maxrows = *((int32_t *)row[TSDB_SHOW_DB_MAXROWS_INDEX]); - dbInfos[count]->wallevel = *((int8_t *)row[TSDB_SHOW_DB_WALLEVEL_INDEX]); - dbInfos[count]->fsync = *((int32_t *)row[TSDB_SHOW_DB_FSYNC_INDEX]); - dbInfos[count]->comp = (int8_t)(*((int8_t *)row[TSDB_SHOW_DB_COMP_INDEX])); - dbInfos[count]->cachelast = (int8_t)(*((int8_t *)row[TSDB_SHOW_DB_CACHELAST_INDEX])); - - strncpy(dbInfos[count]->precision, (char *)row[TSDB_SHOW_DB_PRECISION_INDEX], fields[TSDB_SHOW_DB_PRECISION_INDEX].bytes); - dbInfos[count]->update = *((int8_t *)row[TSDB_SHOW_DB_UPDATE_INDEX]); - strncpy(dbInfos[count]->status, (char *)row[TSDB_SHOW_DB_STATUS_INDEX], fields[TSDB_SHOW_DB_STATUS_INDEX].bytes); - - count++; - if (count > MAX_DATABASE_COUNT) { - fprintf(stderr, "The database count overflow than %d\n", MAX_DATABASE_COUNT); - break; - } - } - - return count; -} - -static void printfDbInfoForQueryToFile(char* filename, SDbInfo* dbInfos, int index) { - FILE *fp = NULL; - if (filename[0] != 0) { - fp = fopen(filename, "at"); - if (fp == NULL) { - fprintf(stderr, "failed to open file: %s\n", filename); - return; - } - } - - fprintf(fp, "================ database[%d] ================\n", index); - fprintf(fp, "name: %s\n", dbInfos->name); - fprintf(fp, "created_time: %s\n", dbInfos->create_time); - fprintf(fp, "ntables: %d\n", dbInfos->ntables); - fprintf(fp, "vgroups: %d\n", dbInfos->vgroups); - fprintf(fp, "replica: %d\n", dbInfos->replica); - fprintf(fp, "quorum: %d\n", dbInfos->quorum); - fprintf(fp, "days: %d\n", dbInfos->days); - fprintf(fp, "keep0,keep1,keep(D): %s\n", dbInfos->keeplist); - fprintf(fp, "cache(MB): %d\n", dbInfos->cache); - fprintf(fp, "blocks: %d\n", dbInfos->blocks); - fprintf(fp, "minrows: %d\n", dbInfos->minrows); - fprintf(fp, "maxrows: %d\n", dbInfos->maxrows); - fprintf(fp, "wallevel: %d\n", dbInfos->wallevel); - fprintf(fp, "fsync: %d\n", dbInfos->fsync); - fprintf(fp, "comp: %d\n", dbInfos->comp); - fprintf(fp, "cachelast: %d\n", dbInfos->cachelast); - fprintf(fp, "precision: %s\n", dbInfos->precision); - fprintf(fp, "update: %d\n", dbInfos->update); - fprintf(fp, "status: %s\n", dbInfos->status); - fprintf(fp, "\n"); - - fclose(fp); -} - -static void printfQuerySystemInfo(TAOS * taos) { - char filename[MAX_QUERY_SQL_LENGTH+1] = {0}; - char buffer[MAX_QUERY_SQL_LENGTH+1] = {0}; - TAOS_RES* res; - - time_t t; - struct tm* lt; - time(&t); - lt = localtime(&t); - snprintf(filename, MAX_QUERY_SQL_LENGTH, "querySystemInfo-%d-%d-%d %d:%d:%d", lt->tm_year+1900, lt->tm_mon, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec); - - // show variables - res = taos_query(taos, "show variables;"); - //getResult(res, filename); - xDumpResultToFile(filename, res); - - // show dnodes - res = taos_query(taos, "show dnodes;"); - xDumpResultToFile(filename, res); - //getResult(res, filename); - - // show databases - res = taos_query(taos, "show databases;"); - SDbInfo** dbInfos = (SDbInfo **)calloc(MAX_DATABASE_COUNT, sizeof(SDbInfo *)); - if (dbInfos == NULL) { - fprintf(stderr, "failed to allocate memory\n"); - return; - } - int dbCount = getDbFromServer(taos, dbInfos); - if (dbCount <= 0) return; - - for (int i = 0; i < dbCount; i++) { - // printf database info - printfDbInfoForQueryToFile(filename, dbInfos[i], i); - - // show db.vgroups - snprintf(buffer, MAX_QUERY_SQL_LENGTH, "show %s.vgroups;", dbInfos[i]->name); - res = taos_query(taos, buffer); - xDumpResultToFile(filename, res); - - // show db.stables - snprintf(buffer, MAX_QUERY_SQL_LENGTH, "show %s.stables;", dbInfos[i]->name); - res = taos_query(taos, buffer); - xDumpResultToFile(filename, res); - - free(dbInfos[i]); - } - - free(dbInfos); - -} - - -#ifdef TD_LOWA_CURL -static size_t responseCallback(void *contents, size_t size, size_t nmemb, void *userp) -{ - size_t realsize = size * nmemb; - curlMemInfo* mem = (curlMemInfo*)userp; - - char *ptr = realloc(mem->buf, mem->sizeleft + realsize + 1); - if(ptr == NULL) { - /* out of memory! */ - printf("not enough memory (realloc returned NULL)\n"); - return 0; - } - - mem->buf = ptr; - memcpy(&(mem->buf[mem->sizeleft]), contents, realsize); - mem->sizeleft += realsize; - mem->buf[mem->sizeleft] = 0; - - //printf("result:%s\n\n", mem->buf); - - return realsize; -} - -void curlProceLogin(void) -{ - CURL *curl_handle; - CURLcode res; - - curlMemInfo chunk; - - chunk.buf = malloc(1); /* will be grown as needed by the realloc above */ - chunk.sizeleft = 0; /* no data at this point */ - - //curl_global_init(CURL_GLOBAL_ALL); - - /* init the curl session */ - curl_handle = curl_easy_init(); - - curl_easy_setopt(curl_handle,CURLOPT_POSTFIELDS,""); - curl_easy_setopt(curl_handle, CURLOPT_POST, 1); - - char dstUrl[128] = {0}; - snprintf(dstUrl, 128, "http://%s:6041/rest/login/root/taosdata", g_Dbs.host); - - /* specify URL to get */ - curl_easy_setopt(curl_handle, CURLOPT_URL, dstUrl); - - /* send all data to this function */ - curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, responseCallback); - - /* we pass our 'chunk' struct to the callback function */ - curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk); - - /* do it! */ - res = curl_easy_perform(curl_handle); - - /* check for errors */ - if(res != CURLE_OK) { - fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); - } - else { - //printf("response len:%lu, content: %s \n", (unsigned long)chunk.sizeleft, chunk.buf); - ; - } - - /* cleanup curl stuff */ - curl_easy_cleanup(curl_handle); - - free(chunk.buf); - - /* we're done with libcurl, so clean it up */ - //curl_global_cleanup(); - - return; -} - -int curlProceSql(char* host, uint16_t port, char* sqlstr, CURL *curl_handle) -{ - //curlProceLogin(); - - //CURL *curl_handle; - CURLcode res; - - curlMemInfo chunk; - - chunk.buf = malloc(1); /* will be grown as needed by the realloc above */ - chunk.sizeleft = 0; /* no data at this point */ - - - char dstUrl[128] = {0}; - snprintf(dstUrl, 128, "http://%s:%u/rest/sql", host, port+TSDB_PORT_HTTP); - - //curl_global_init(CURL_GLOBAL_ALL); - - /* init the curl session */ - //curl_handle = curl_easy_init(); - - //curl_easy_setopt(curl_handle,CURLOPT_POSTFIELDS,""); - curl_easy_setopt(curl_handle, CURLOPT_POST, 1L); - - /* specify URL to get */ - curl_easy_setopt(curl_handle, CURLOPT_URL, dstUrl); - - /* enable TCP keep-alive for this transfer */ - curl_easy_setopt(curl_handle, CURLOPT_TCP_KEEPALIVE, 1L); - /* keep-alive idle time to 120 seconds */ - curl_easy_setopt(curl_handle, CURLOPT_TCP_KEEPIDLE, 120L); - /* interval time between keep-alive probes: 60 seconds */ - curl_easy_setopt(curl_handle, CURLOPT_TCP_KEEPINTVL, 60L); - - /* send all data to this function */ - curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, responseCallback); - - /* we pass our 'chunk' struct to the callback function */ - curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk); - - struct curl_slist *list = NULL; - list = curl_slist_append(list, "Authorization: Basic cm9vdDp0YW9zZGF0YQ=="); - curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, list); - curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, list); - - /* Set the expected upload size. */ - curl_easy_setopt(curl_handle, CURLOPT_POSTFIELDSIZE_LARGE, (curl_off_t)strlen(sqlstr)); - curl_easy_setopt(curl_handle, CURLOPT_POSTFIELDS, sqlstr); - - /* get it! */ - res = curl_easy_perform(curl_handle); - - /* check for errors */ - if(res != CURLE_OK) { - fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); - return -1; - } - else { - /* curl_easy_perform() block end and return result */ - //printf("[%32.32s] sql response len:%lu, content: %s \n\n", sqlstr, (unsigned long)chunk.sizeleft, chunk.buf); - ; - } - - curl_slist_free_all(list); /* free the list again */ - - /* cleanup curl stuff */ - //curl_easy_cleanup(curl_handle); - - free(chunk.buf); - - /* we're done with libcurl, so clean it up */ - //curl_global_cleanup(); - - return 0; -} -#endif - -char* getTagValueFromTagSample( SSuperTable* stbInfo, int tagUsePos) { - char* dataBuf = (char*)calloc(TSDB_MAX_SQL_LEN+1, 1); - if (NULL == dataBuf) { - printf("calloc failed! size:%d\n", TSDB_MAX_SQL_LEN+1); - return NULL; - } - - int dataLen = 0; - dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, "(%s)", stbInfo->tagDataBuf + stbInfo->lenOfTagOfOneRow * tagUsePos); - - return dataBuf; -} - -char* generateTagVaulesForStb(SSuperTable* stbInfo) { - char* dataBuf = (char*)calloc(TSDB_MAX_SQL_LEN+1, 1); - if (NULL == dataBuf) { - printf("calloc failed! size:%d\n", TSDB_MAX_SQL_LEN+1); - return NULL; - } - - int dataLen = 0; - dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, "("); - for (int i = 0; i < stbInfo->tagCount; i++) { - if ((0 == strncasecmp(stbInfo->tags[i].dataType, "binary", 6)) || (0 == strncasecmp(stbInfo->tags[i].dataType, "nchar", 5))) { - if (stbInfo->tags[i].dataLen > TSDB_MAX_BINARY_LEN) { - printf("binary or nchar length overflow, max size:%u\n", (uint32_t)TSDB_MAX_BINARY_LEN); - tmfree(dataBuf); - return NULL; - } - - char* buf = (char*)calloc(stbInfo->tags[i].dataLen+1, 1); - if (NULL == buf) { - printf("calloc failed! size:%d\n", stbInfo->tags[i].dataLen); - tmfree(dataBuf); - return NULL; - } - rand_string(buf, stbInfo->tags[i].dataLen); - dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, "\'%s\', ", buf); - tmfree(buf); - } else if (0 == strncasecmp(stbInfo->tags[i].dataType, "int", 3)) { - dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, "%d, ", rand_int()); - } else if (0 == strncasecmp(stbInfo->tags[i].dataType, "bigint", 6)) { - dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, "%"PRId64", ", rand_bigint()); - } else if (0 == strncasecmp(stbInfo->tags[i].dataType, "float", 5)) { - dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, "%f, ", rand_float()); - } else if (0 == strncasecmp(stbInfo->tags[i].dataType, "double", 6)) { - dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, "%f, ", rand_double()); - } else if (0 == strncasecmp(stbInfo->tags[i].dataType, "smallint", 8)) { - dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, "%d, ", rand_smallint()); - } else if (0 == strncasecmp(stbInfo->tags[i].dataType, "tinyint", 7)) { - dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, "%d, ", rand_tinyint()); - } else if (0 == strncasecmp(stbInfo->tags[i].dataType, "bool", 4)) { - dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, "%d, ", rand_bool()); - } else if (0 == strncasecmp(stbInfo->tags[i].dataType, "timestamp", 4)) { - dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, "%"PRId64", ", rand_bigint()); - } else { - printf("No support data type: %s\n", stbInfo->tags[i].dataType); - tmfree(dataBuf); - return NULL; - } - } - dataLen -= 2; - dataLen += snprintf(dataBuf + dataLen, TSDB_MAX_SQL_LEN - dataLen, ")"); - return dataBuf; -} - -static int calcRowLen(SSuperTable* superTbls) { - int colIndex; - int lenOfOneRow = 0; - - for (colIndex = 0; colIndex < superTbls->columnCount; colIndex++) { - char* dataType = superTbls->columns[colIndex].dataType; - - if (strcasecmp(dataType, "BINARY") == 0) { - lenOfOneRow += superTbls->columns[colIndex].dataLen + 3; - } else if (strcasecmp(dataType, "NCHAR") == 0) { - lenOfOneRow += superTbls->columns[colIndex].dataLen + 3; - } else if (strcasecmp(dataType, "INT") == 0) { - lenOfOneRow += 11; - } else if (strcasecmp(dataType, "BIGINT") == 0) { - lenOfOneRow += 21; - } else if (strcasecmp(dataType, "SMALLINT") == 0) { - lenOfOneRow += 6; - } else if (strcasecmp(dataType, "TINYINT") == 0) { - lenOfOneRow += 4; - } else if (strcasecmp(dataType, "BOOL") == 0) { - lenOfOneRow += 6; - } else if (strcasecmp(dataType, "FLOAT") == 0) { - lenOfOneRow += 22; - } else if (strcasecmp(dataType, "DOUBLE") == 0) { - lenOfOneRow += 42; - } else if (strcasecmp(dataType, "TIMESTAMP") == 0) { - lenOfOneRow += 21; - } else { - printf("get error data type : %s\n", dataType); - exit(-1); - } - } - - superTbls->lenOfOneRow = lenOfOneRow + 20; // timestamp - - int tagIndex; - int lenOfTagOfOneRow = 0; - for (tagIndex = 0; tagIndex < superTbls->tagCount; tagIndex++) { - char* dataType = superTbls->tags[tagIndex].dataType; - - if (strcasecmp(dataType, "BINARY") == 0) { - lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 3; - } else if (strcasecmp(dataType, "NCHAR") == 0) { - lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 3; - } else if (strcasecmp(dataType, "INT") == 0) { - lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 11; - } else if (strcasecmp(dataType, "BIGINT") == 0) { - lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 21; - } else if (strcasecmp(dataType, "SMALLINT") == 0) { - lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 6; - } else if (strcasecmp(dataType, "TINYINT") == 0) { - lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 4; - } else if (strcasecmp(dataType, "BOOL") == 0) { - lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 6; - } else if (strcasecmp(dataType, "FLOAT") == 0) { - lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 22; - } else if (strcasecmp(dataType, "DOUBLE") == 0) { - lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 42; - } else { - printf("get error tag type : %s\n", dataType); - exit(-1); - } - } - - superTbls->lenOfTagOfOneRow = lenOfTagOfOneRow; - - return 0; -} - - -static int getAllChildNameOfSuperTable(TAOS * taos, char* dbName, char* sTblName, char** childTblNameOfSuperTbl, int* childTblCountOfSuperTbl) { - char command[BUFFER_SIZE] = "\0"; - TAOS_RES * res; - TAOS_ROW row = NULL; - - char* childTblName = *childTblNameOfSuperTbl; - - //get all child table name use cmd: select tbname from superTblName; - snprintf(command, BUFFER_SIZE, "select tbname from %s.%s", dbName, sTblName); - res = taos_query(taos, command); - int32_t code = taos_errno(res); - if (code != 0) { - printf("failed to run command %s\n", command); - taos_free_result(res); - taos_close(taos); - exit(-1); - } - - int childTblCount = 10000; - int count = 0; - childTblName = (char*)calloc(1, childTblCount * TSDB_TABLE_NAME_LEN); - char* pTblName = childTblName; - while ((row = taos_fetch_row(res)) != NULL) { - int32_t* len = taos_fetch_lengths(res); - strncpy(pTblName, (char *)row[0], len[0]); - //printf("==== sub table name: %s\n", pTblName); - count++; - if (count >= childTblCount - 1) { - char *tmp = realloc(childTblName, (size_t)childTblCount*1.5*TSDB_TABLE_NAME_LEN+1); - if (tmp != NULL) { - childTblName = tmp; - childTblCount = (int)(childTblCount*1.5); - memset(childTblName + count*TSDB_TABLE_NAME_LEN, 0, (size_t)((childTblCount-count)*TSDB_TABLE_NAME_LEN)); - } else { - // exit, if allocate more memory failed - printf("realloc fail for save child table name of %s.%s\n", dbName, sTblName); - tmfree(childTblName); - taos_free_result(res); - taos_close(taos); - exit(-1); - } - } - pTblName = childTblName + count * TSDB_TABLE_NAME_LEN; - } - - *childTblCountOfSuperTbl = count; - *childTblNameOfSuperTbl = childTblName; - - taos_free_result(res); - return 0; -} - -static int getSuperTableFromServer(TAOS * taos, char* dbName, SSuperTable* superTbls) { - char command[BUFFER_SIZE] = "\0"; - TAOS_RES * res; - TAOS_ROW row = NULL; - int count = 0; - - //get schema use cmd: describe superTblName; - snprintf(command, BUFFER_SIZE, "describe %s.%s", dbName, superTbls->sTblName); - res = taos_query(taos, command); - int32_t code = taos_errno(res); - if (code != 0) { - printf("failed to run command %s\n", command); - taos_free_result(res); - return -1; - } - - int tagIndex = 0; - int columnIndex = 0; - TAOS_FIELD *fields = taos_fetch_fields(res); - while ((row = taos_fetch_row(res)) != NULL) { - if (0 == count) { - count++; - continue; - } - - if (strcmp((char *)row[TSDB_DESCRIBE_METRIC_NOTE_INDEX], "TAG") == 0) { - strncpy(superTbls->tags[tagIndex].field, (char *)row[TSDB_DESCRIBE_METRIC_FIELD_INDEX], fields[TSDB_DESCRIBE_METRIC_FIELD_INDEX].bytes); - strncpy(superTbls->tags[tagIndex].dataType, (char *)row[TSDB_DESCRIBE_METRIC_TYPE_INDEX], fields[TSDB_DESCRIBE_METRIC_TYPE_INDEX].bytes); - superTbls->tags[tagIndex].dataLen = *((int *)row[TSDB_DESCRIBE_METRIC_LENGTH_INDEX]); - strncpy(superTbls->tags[tagIndex].note, (char *)row[TSDB_DESCRIBE_METRIC_NOTE_INDEX], fields[TSDB_DESCRIBE_METRIC_NOTE_INDEX].bytes); - tagIndex++; - } else { - strncpy(superTbls->columns[columnIndex].field, (char *)row[TSDB_DESCRIBE_METRIC_FIELD_INDEX], fields[TSDB_DESCRIBE_METRIC_FIELD_INDEX].bytes); - strncpy(superTbls->columns[columnIndex].dataType, (char *)row[TSDB_DESCRIBE_METRIC_TYPE_INDEX], fields[TSDB_DESCRIBE_METRIC_TYPE_INDEX].bytes); - superTbls->columns[columnIndex].dataLen = *((int *)row[TSDB_DESCRIBE_METRIC_LENGTH_INDEX]); - strncpy(superTbls->columns[columnIndex].note, (char *)row[TSDB_DESCRIBE_METRIC_NOTE_INDEX], fields[TSDB_DESCRIBE_METRIC_NOTE_INDEX].bytes); - columnIndex++; - } - count++; - } - - superTbls->columnCount = columnIndex; - superTbls->tagCount = tagIndex; - taos_free_result(res); - - calcRowLen(superTbls); - - if (TBL_ALREADY_EXISTS == superTbls->childTblExists) { - //get all child table name use cmd: select tbname from superTblName; - getAllChildNameOfSuperTable(taos, dbName, superTbls->sTblName, &superTbls->childTblName, &superTbls->childTblCount); - } - return 0; -} - -static int createSuperTable(TAOS * taos, char* dbName, SSuperTable* superTbls, bool use_metric) { - char command[BUFFER_SIZE] = "\0"; - - char cols[STRING_LEN] = "\0"; - int colIndex; - int len = 0; - - int lenOfOneRow = 0; - for (colIndex = 0; colIndex < superTbls->columnCount; colIndex++) { - char* dataType = superTbls->columns[colIndex].dataType; - - if (strcasecmp(dataType, "BINARY") == 0) { - len += snprintf(cols + len, STRING_LEN - len, ", col%d %s(%d)", colIndex, "BINARY", superTbls->columns[colIndex].dataLen); - lenOfOneRow += superTbls->columns[colIndex].dataLen + 3; - } else if (strcasecmp(dataType, "NCHAR") == 0) { - len += snprintf(cols + len, STRING_LEN - len, ", col%d %s(%d)", colIndex, "NCHAR", superTbls->columns[colIndex].dataLen); - lenOfOneRow += superTbls->columns[colIndex].dataLen + 3; - } else if (strcasecmp(dataType, "INT") == 0) { - len += snprintf(cols + len, STRING_LEN - len, ", col%d %s", colIndex, "INT"); - lenOfOneRow += 11; - } else if (strcasecmp(dataType, "BIGINT") == 0) { - len += snprintf(cols + len, STRING_LEN - len, ", col%d %s", colIndex, "BIGINT"); - lenOfOneRow += 21; - } else if (strcasecmp(dataType, "SMALLINT") == 0) { - len += snprintf(cols + len, STRING_LEN - len, ", col%d %s", colIndex, "SMALLINT"); - lenOfOneRow += 6; - } else if (strcasecmp(dataType, "TINYINT") == 0) { - len += snprintf(cols + len, STRING_LEN - len, ", col%d %s", colIndex, "TINYINT"); - lenOfOneRow += 4; - } else if (strcasecmp(dataType, "BOOL") == 0) { - len += snprintf(cols + len, STRING_LEN - len, ", col%d %s", colIndex, "BOOL"); - lenOfOneRow += 6; - } else if (strcasecmp(dataType, "FLOAT") == 0) { - len += snprintf(cols + len, STRING_LEN - len, ", col%d %s", colIndex, "FLOAT"); - lenOfOneRow += 22; - } else if (strcasecmp(dataType, "DOUBLE") == 0) { - len += snprintf(cols + len, STRING_LEN - len, ", col%d %s", colIndex, "DOUBLE"); - lenOfOneRow += 42; - } else if (strcasecmp(dataType, "TIMESTAMP") == 0) { - len += snprintf(cols + len, STRING_LEN - len, ", col%d %s", colIndex, "TIMESTAMP"); - lenOfOneRow += 21; - } else { - taos_close(taos); - printf("config error data type : %s\n", dataType); - exit(-1); - } - } - - superTbls->lenOfOneRow = lenOfOneRow + 20; // timestamp - //printf("%s.%s column count:%d, column length:%d\n\n", g_Dbs.db[i].dbName, g_Dbs.db[i].superTbls[j].sTblName, g_Dbs.db[i].superTbls[j].columnCount, lenOfOneRow); - - // save for creating child table - superTbls->colsOfCreatChildTable = (char*)calloc(len+20, 1); - if (NULL == superTbls->colsOfCreatChildTable) { - printf("Failed when calloc, size:%d", len+1); - taos_close(taos); - exit(-1); - } - snprintf(superTbls->colsOfCreatChildTable, len+20, "(ts timestamp%s)", cols); - - if (use_metric) { - char tags[STRING_LEN] = "\0"; - int tagIndex; - len = 0; - - int lenOfTagOfOneRow = 0; - len += snprintf(tags + len, STRING_LEN - len, "("); - for (tagIndex = 0; tagIndex < superTbls->tagCount; tagIndex++) { - char* dataType = superTbls->tags[tagIndex].dataType; - - if (strcasecmp(dataType, "BINARY") == 0) { - len += snprintf(tags + len, STRING_LEN - len, "t%d %s(%d), ", tagIndex, "BINARY", superTbls->tags[tagIndex].dataLen); - lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 3; - } else if (strcasecmp(dataType, "NCHAR") == 0) { - len += snprintf(tags + len, STRING_LEN - len, "t%d %s(%d), ", tagIndex, "NCHAR", superTbls->tags[tagIndex].dataLen); - lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 3; - } else if (strcasecmp(dataType, "INT") == 0) { - len += snprintf(tags + len, STRING_LEN - len, "t%d %s, ", tagIndex, "INT"); - lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 11; - } else if (strcasecmp(dataType, "BIGINT") == 0) { - len += snprintf(tags + len, STRING_LEN - len, "t%d %s, ", tagIndex, "BIGINT"); - lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 21; - } else if (strcasecmp(dataType, "SMALLINT") == 0) { - len += snprintf(tags + len, STRING_LEN - len, "t%d %s, ", tagIndex, "SMALLINT"); - lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 6; - } else if (strcasecmp(dataType, "TINYINT") == 0) { - len += snprintf(tags + len, STRING_LEN - len, "t%d %s, ", tagIndex, "TINYINT"); - lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 4; - } else if (strcasecmp(dataType, "BOOL") == 0) { - len += snprintf(tags + len, STRING_LEN - len, "t%d %s, ", tagIndex, "BOOL"); - lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 6; - } else if (strcasecmp(dataType, "FLOAT") == 0) { - len += snprintf(tags + len, STRING_LEN - len, "t%d %s, ", tagIndex, "FLOAT"); - lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 22; - } else if (strcasecmp(dataType, "DOUBLE") == 0) { - len += snprintf(tags + len, STRING_LEN - len, "t%d %s, ", tagIndex, "DOUBLE"); - lenOfTagOfOneRow += superTbls->tags[tagIndex].dataLen + 42; - } else { - taos_close(taos); - printf("config error tag type : %s\n", dataType); - exit(-1); - } - } - len -= 2; - len += snprintf(tags + len, STRING_LEN - len, ")"); - - superTbls->lenOfTagOfOneRow = lenOfTagOfOneRow; - - snprintf(command, BUFFER_SIZE, "create table if not exists %s.%s (ts timestamp%s) tags %s", dbName, superTbls->sTblName, cols, tags); - if (0 != queryDbExec(taos, command, NO_INSERT_TYPE)) { - return -1; - } - printf("\ncreate supertable %s success!\n\n", superTbls->sTblName); - } - return 0; -} - - -static int createDatabases() { - TAOS * taos = NULL; - int ret = 0; - taos_init(); - taos = taos_connect(g_Dbs.host, g_Dbs.user, g_Dbs.password, NULL, g_Dbs.port); - if (taos == NULL) { - fprintf(stderr, "Failed to connect to TDengine, reason:%s\n", taos_errstr(NULL)); - exit(-1); - } - char command[BUFFER_SIZE] = "\0"; - - - for (int i = 0; i < g_Dbs.dbCount; i++) { - if (g_Dbs.db[i].drop) { - sprintf(command, "drop database if exists %s;", g_Dbs.db[i].dbName); - if (0 != queryDbExec(taos, command, NO_INSERT_TYPE)) { - taos_close(taos); - return -1; - } - } - - int dataLen = 0; - dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "create database if not exists %s ", g_Dbs.db[i].dbName); - - if (g_Dbs.db[i].dbCfg.blocks > 0) { - dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "blocks %d ", g_Dbs.db[i].dbCfg.blocks); - } - if (g_Dbs.db[i].dbCfg.cache > 0) { - dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "cache %d ", g_Dbs.db[i].dbCfg.cache); - } - if (g_Dbs.db[i].dbCfg.days > 0) { - dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "days %d ", g_Dbs.db[i].dbCfg.days); - } - if (g_Dbs.db[i].dbCfg.keep > 0) { - dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "keep %d ", g_Dbs.db[i].dbCfg.keep); - } - if (g_Dbs.db[i].dbCfg.replica > 0) { - dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "replica %d ", g_Dbs.db[i].dbCfg.replica); - } - if (g_Dbs.db[i].dbCfg.update > 0) { - dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "update %d ", g_Dbs.db[i].dbCfg.update); - } - //if (g_Dbs.db[i].dbCfg.maxtablesPerVnode > 0) { - // dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "tables %d ", g_Dbs.db[i].dbCfg.maxtablesPerVnode); - //} - if (g_Dbs.db[i].dbCfg.minRows > 0) { - dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "minrows %d ", g_Dbs.db[i].dbCfg.minRows); - } - if (g_Dbs.db[i].dbCfg.maxRows > 0) { - dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "maxrows %d ", g_Dbs.db[i].dbCfg.maxRows); - } - if (g_Dbs.db[i].dbCfg.comp > 0) { - dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "comp %d ", g_Dbs.db[i].dbCfg.comp); - } - if (g_Dbs.db[i].dbCfg.walLevel > 0) { - dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "wal %d ", g_Dbs.db[i].dbCfg.walLevel); - } - if (g_Dbs.db[i].dbCfg.fsync > 0) { - dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "fsync %d ", g_Dbs.db[i].dbCfg.fsync); - } - if ((0 == strncasecmp(g_Dbs.db[i].dbCfg.precision, "ms", 2)) || (0 == strncasecmp(g_Dbs.db[i].dbCfg.precision, "us", 2))) { - dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "precision \'%s\';", g_Dbs.db[i].dbCfg.precision); - } - - if (0 != queryDbExec(taos, command, NO_INSERT_TYPE)) { - taos_close(taos); - return -1; - } - printf("\ncreate database %s success!\n\n", g_Dbs.db[i].dbName); - - for (int j = 0; j < g_Dbs.db[i].superTblCount; j++) { - // describe super table, if exists - sprintf(command, "describe %s.%s;", g_Dbs.db[i].dbName, g_Dbs.db[i].superTbls[j].sTblName); - if (0 != queryDbExec(taos, command, NO_INSERT_TYPE)) { - g_Dbs.db[i].superTbls[j].superTblExists = TBL_NO_EXISTS; - ret = createSuperTable(taos, g_Dbs.db[i].dbName, &g_Dbs.db[i].superTbls[j], g_Dbs.use_metric); - } else { - g_Dbs.db[i].superTbls[j].superTblExists = TBL_ALREADY_EXISTS; - ret = getSuperTableFromServer(taos, g_Dbs.db[i].dbName, &g_Dbs.db[i].superTbls[j]); - } - - if (0 != ret) { - taos_close(taos); - return -1; - } - } - } - - taos_close(taos); - return 0; -} - - -void * createTable(void *sarg) -{ - threadInfo *winfo = (threadInfo *)sarg; - SSuperTable* superTblInfo = winfo->superTblInfo; - - int64_t lastPrintTime = taosGetTimestampMs(); - - char* buffer = calloc(superTblInfo->maxSqlLen, 1); - - int len = 0; - int batchNum = 0; - //printf("Creating table from %d to %d\n", winfo->start_table_id, winfo->end_table_id); - for (int i = winfo->start_table_id; i <= winfo->end_table_id; i++) { - if (0 == g_Dbs.use_metric) { - snprintf(buffer, BUFFER_SIZE, "create table if not exists %s.%s%d %s;", winfo->db_name, superTblInfo->childTblPrefix, i, superTblInfo->colsOfCreatChildTable); - } else { - if (0 == len) { - batchNum = 0; - memset(buffer, 0, superTblInfo->maxSqlLen); - len += snprintf(buffer + len, superTblInfo->maxSqlLen - len, "create table "); - } - - char* tagsValBuf = NULL; - if (0 == superTblInfo->tagSource) { - tagsValBuf = generateTagVaulesForStb(superTblInfo); - } else { - tagsValBuf = getTagValueFromTagSample(superTblInfo, i % superTblInfo->tagSampleCount); - } - if (NULL == tagsValBuf) { - free(buffer); - return NULL; - } - - len += snprintf(buffer + len, superTblInfo->maxSqlLen - len, "if not exists %s.%s%d using %s.%s tags %s ", winfo->db_name, superTblInfo->childTblPrefix, i, winfo->db_name, superTblInfo->sTblName, tagsValBuf); - free(tagsValBuf); - batchNum++; - - if ((batchNum < superTblInfo->batchCreateTableNum) && ((superTblInfo->maxSqlLen - len) >= (superTblInfo->lenOfTagOfOneRow + 256))) { - continue; - } - } - - len = 0; - if (0 != queryDbExec(winfo->taos, buffer, NO_INSERT_TYPE)){ - free(buffer); - return NULL; - } - - int64_t currentPrintTime = taosGetTimestampMs(); - if (currentPrintTime - lastPrintTime > 30*1000) { - printf("thread[%d] already create %d - %d tables\n", winfo->threadID, winfo->start_table_id, i); - lastPrintTime = currentPrintTime; - } - } - - if (0 != len) { - (void)queryDbExec(winfo->taos, buffer, NO_INSERT_TYPE); - } - - free(buffer); - return NULL; -} - -void startMultiThreadCreateChildTable(char* cols, int threads, int ntables, char* db_name, SSuperTable* superTblInfo) { - pthread_t *pids = malloc(threads * sizeof(pthread_t)); - threadInfo *infos = malloc(threads * sizeof(threadInfo)); - - if ((NULL == pids) || (NULL == infos)) { - printf("malloc failed\n"); - exit(-1); - } - - if (threads < 1) { - threads = 1; - } - - int a = ntables / threads; - if (a < 1) { - threads = ntables; - a = 1; - } - - int b = 0; - b = ntables % threads; - - int last = 0; - for (int i = 0; i < threads; i++) { - threadInfo *t_info = infos + i; - t_info->threadID = i; - tstrncpy(t_info->db_name, db_name, MAX_DB_NAME_SIZE); - t_info->superTblInfo = superTblInfo; - t_info->taos = taos_connect(g_Dbs.host, g_Dbs.user, g_Dbs.password, db_name, g_Dbs.port); - t_info->start_table_id = last; - t_info->end_table_id = i < b ? last + a : last + a - 1; - last = t_info->end_table_id + 1; - t_info->use_metric = 1; - t_info->cols = cols; - pthread_create(pids + i, NULL, createTable, t_info); - } - - for (int i = 0; i < threads; i++) { - pthread_join(pids[i], NULL); - } - - for (int i = 0; i < threads; i++) { - threadInfo *t_info = infos + i; - taos_close(t_info->taos); - } - - free(pids); - free(infos); -} - - -static void createChildTables() { - for (int i = 0; i < g_Dbs.dbCount; i++) { - for (int j = 0; j < g_Dbs.db[i].superTblCount; j++) { - if ((AUTO_CREATE_SUBTBL == g_Dbs.db[i].superTbls[j].autoCreateTable) || (TBL_ALREADY_EXISTS == g_Dbs.db[i].superTbls[j].childTblExists)) { - continue; - } - startMultiThreadCreateChildTable(g_Dbs.db[i].superTbls[j].colsOfCreatChildTable, g_Dbs.threadCountByCreateTbl, g_Dbs.db[i].superTbls[j].childTblCount, g_Dbs.db[i].dbName, &(g_Dbs.db[i].superTbls[j])); - g_totalChildTables += g_Dbs.db[i].superTbls[j].childTblCount; - } - } -} - -/* -static int taosGetLineNum(const char *fileName) -{ - int lineNum = 0; - char cmd[1024] = { 0 }; - char buf[1024] = { 0 }; - sprintf(cmd, "wc -l %s", fileName); - - FILE *fp = popen(cmd, "r"); - if (fp == NULL) { - fprintf(stderr, "ERROR: failed to execute:%s, error:%s\n", cmd, strerror(errno)); - return lineNum; - } - - if (fgets(buf, sizeof(buf), fp)) { - int index = strchr((const char*)buf, ' ') - buf; - buf[index] = '\0'; - lineNum = atoi(buf); - } - pclose(fp); - return lineNum; -} -*/ - -/* - Read 10000 lines at most. If more than 10000 lines, continue to read after using -*/ -int readTagFromCsvFileToMem(SSuperTable * superTblInfo) { - size_t n = 0; - ssize_t readLen = 0; - char * line = NULL; - - FILE *fp = fopen(superTblInfo->tagsFile, "r"); - if (fp == NULL) { - printf("Failed to open tags file: %s, reason:%s\n", superTblInfo->tagsFile, strerror(errno)); - return -1; - } - - if (superTblInfo->tagDataBuf) { - free(superTblInfo->tagDataBuf); - superTblInfo->tagDataBuf = NULL; - } - - int tagCount = 10000; - int count = 0; - char* tagDataBuf = calloc(1, superTblInfo->lenOfTagOfOneRow * tagCount); - if (tagDataBuf == NULL) { - printf("Failed to calloc, reason:%s\n", strerror(errno)); - fclose(fp); - return -1; - } - - while ((readLen = getline(&line, &n, fp)) != -1) { - if (('\r' == line[readLen - 1]) || ('\n' == line[readLen - 1])) { - line[--readLen] = 0; - } - - if (readLen == 0) { - continue; - } - - memcpy(tagDataBuf + count * superTblInfo->lenOfTagOfOneRow, line, readLen); - count++; - - if (count >= tagCount - 1) { - char *tmp = realloc(tagDataBuf, (size_t)tagCount*1.5*superTblInfo->lenOfTagOfOneRow); - if (tmp != NULL) { - tagDataBuf = tmp; - tagCount = (int)(tagCount*1.5); - memset(tagDataBuf + count*superTblInfo->lenOfTagOfOneRow, 0, (size_t)((tagCount-count)*superTblInfo->lenOfTagOfOneRow)); - } else { - // exit, if allocate more memory failed - printf("realloc fail for save tag val from %s\n", superTblInfo->tagsFile); - tmfree(tagDataBuf); - free(line); - fclose(fp); - return -1; - } - } - } - - superTblInfo->tagDataBuf = tagDataBuf; - superTblInfo->tagSampleCount = count; - - free(line); - fclose(fp); - return 0; -} - -int readSampleFromJsonFileToMem(SSuperTable * superTblInfo) { - // TODO - return 0; -} - - -/* - Read 10000 lines at most. If more than 10000 lines, continue to read after using -*/ -int readSampleFromCsvFileToMem(FILE *fp, SSuperTable* superTblInfo, char* sampleBuf) { - size_t n = 0; - ssize_t readLen = 0; - char * line = NULL; - int getRows = 0; - - memset(sampleBuf, 0, MAX_SAMPLES_ONCE_FROM_FILE* superTblInfo->lenOfOneRow); - while (1) { - readLen = getline(&line, &n, fp); - if (-1 == readLen) { - if(0 != fseek(fp, 0, SEEK_SET)) { - printf("Failed to fseek file: %s, reason:%s\n", superTblInfo->sampleFile, strerror(errno)); - return -1; - } - continue; - } - - if (('\r' == line[readLen - 1]) || ('\n' == line[readLen - 1])) { - line[--readLen] = 0; - } - - if (readLen == 0) { - continue; - } - - if (readLen > superTblInfo->lenOfOneRow) { - printf("sample row len[%d] overflow define schema len[%d], so discard this row\n", (int32_t)readLen, superTblInfo->lenOfOneRow); - continue; - } - - memcpy(sampleBuf + getRows * superTblInfo->lenOfOneRow, line, readLen); - getRows++; - - if (getRows == MAX_SAMPLES_ONCE_FROM_FILE) { - break; - } - } - - tmfree(line); - return 0; -} - -/* -void readSampleFromFileToMem(SSuperTable * supterTblInfo) { - int ret; - if (0 == strncasecmp(supterTblInfo->sampleFormat, "csv", 3)) { - ret = readSampleFromCsvFileToMem(supterTblInfo); - } else if (0 == strncasecmp(supterTblInfo->sampleFormat, "json", 4)) { - ret = readSampleFromJsonFileToMem(supterTblInfo); - } - - if (0 != ret) { - exit(-1); - } -} -*/ -static bool getColumnAndTagTypeFromInsertJsonFile(cJSON* stbInfo, SSuperTable* superTbls) { - bool ret = false; - - // columns - cJSON *columns = cJSON_GetObjectItem(stbInfo, "columns"); - if (columns && columns->type != cJSON_Array) { - printf("failed to read json, columns not found\n"); - goto PARSE_OVER; - } else if (NULL == columns) { - superTbls->columnCount = 0; - superTbls->tagCount = 0; - return true; - } - - int columnSize = cJSON_GetArraySize(columns); - if (columnSize > MAX_COLUMN_COUNT) { - printf("failed to read json, column size overflow, max column size is %d\n", MAX_COLUMN_COUNT); - goto PARSE_OVER; - } - - int count = 1; - int index = 0; - StrColumn columnCase; - - //superTbls->columnCount = columnSize; - for (int k = 0; k < columnSize; ++k) { - cJSON* column = cJSON_GetArrayItem(columns, k); - if (column == NULL) continue; - - count = 1; - cJSON* countObj = cJSON_GetObjectItem(column, "count"); - if (countObj && countObj->type == cJSON_Number) { - count = countObj->valueint; - } else if (countObj && countObj->type != cJSON_Number) { - printf("failed to read json, column count not found"); - goto PARSE_OVER; - } else { - count = 1; - } - - // column info - memset(&columnCase, 0, sizeof(StrColumn)); - cJSON *dataType = cJSON_GetObjectItem(column, "type"); - if (!dataType || dataType->type != cJSON_String || dataType->valuestring == NULL) { - printf("failed to read json, column type not found"); - goto PARSE_OVER; - } - //strncpy(superTbls->columns[k].dataType, dataType->valuestring, MAX_TB_NAME_SIZE); - strncpy(columnCase.dataType, dataType->valuestring, MAX_TB_NAME_SIZE); - - cJSON* dataLen = cJSON_GetObjectItem(column, "len"); - if (dataLen && dataLen->type == cJSON_Number) { - columnCase.dataLen = dataLen->valueint; - } else if (dataLen && dataLen->type != cJSON_Number) { - printf("failed to read json, column len not found"); - goto PARSE_OVER; - } else { - columnCase.dataLen = 8; - } - - for (int n = 0; n < count; ++n) { - strncpy(superTbls->columns[index].dataType, columnCase.dataType, MAX_TB_NAME_SIZE); - superTbls->columns[index].dataLen = columnCase.dataLen; - index++; - } - } - superTbls->columnCount = index; - - count = 1; - index = 0; - // tags - cJSON *tags = cJSON_GetObjectItem(stbInfo, "tags"); - if (!tags || tags->type != cJSON_Array) { - printf("failed to read json, tags not found"); - goto PARSE_OVER; - } - - int tagSize = cJSON_GetArraySize(tags); - if (tagSize > MAX_TAG_COUNT) { - printf("failed to read json, tags size overflow, max tag size is %d\n", MAX_TAG_COUNT); - goto PARSE_OVER; - } - - //superTbls->tagCount = tagSize; - for (int k = 0; k < tagSize; ++k) { - cJSON* tag = cJSON_GetArrayItem(tags, k); - if (tag == NULL) continue; - - count = 1; - cJSON* countObj = cJSON_GetObjectItem(tag, "count"); - if (countObj && countObj->type == cJSON_Number) { - count = countObj->valueint; - } else if (countObj && countObj->type != cJSON_Number) { - printf("failed to read json, column count not found"); - goto PARSE_OVER; - } else { - count = 1; - } - - // column info - memset(&columnCase, 0, sizeof(StrColumn)); - cJSON *dataType = cJSON_GetObjectItem(tag, "type"); - if (!dataType || dataType->type != cJSON_String || dataType->valuestring == NULL) { - printf("failed to read json, tag type not found"); - goto PARSE_OVER; - } - strncpy(columnCase.dataType, dataType->valuestring, MAX_TB_NAME_SIZE); - - cJSON* dataLen = cJSON_GetObjectItem(tag, "len"); - if (dataLen && dataLen->type == cJSON_Number) { - columnCase.dataLen = dataLen->valueint; - } else if (dataLen && dataLen->type != cJSON_Number) { - printf("failed to read json, column len not found"); - goto PARSE_OVER; - } else { - columnCase.dataLen = 0; - } - - for (int n = 0; n < count; ++n) { - strncpy(superTbls->tags[index].dataType, columnCase.dataType, MAX_TB_NAME_SIZE); - superTbls->tags[index].dataLen = columnCase.dataLen; - index++; - } - } - superTbls->tagCount = index; - - ret = true; - -PARSE_OVER: - //free(content); - //cJSON_Delete(root); - //fclose(fp); - return ret; -} - -static bool getMetaFromInsertJsonFile(cJSON* root) { - bool ret = false; - - cJSON* cfgdir = cJSON_GetObjectItem(root, "cfgdir"); - if (cfgdir && cfgdir->type == cJSON_String && cfgdir->valuestring != NULL) { - strncpy(g_Dbs.cfgDir, cfgdir->valuestring, MAX_FILE_NAME_LEN); - } - - cJSON* host = cJSON_GetObjectItem(root, "host"); - if (host && host->type == cJSON_String && host->valuestring != NULL) { - strncpy(g_Dbs.host, host->valuestring, MAX_DB_NAME_SIZE); - } else if (!host) { - strncpy(g_Dbs.host, "127.0.0.1", MAX_DB_NAME_SIZE); - } else { - printf("failed to read json, host not found\n"); - goto PARSE_OVER; - } - - cJSON* port = cJSON_GetObjectItem(root, "port"); - if (port && port->type == cJSON_Number) { - g_Dbs.port = port->valueint; - } else if (!port) { - g_Dbs.port = 6030; - } - - cJSON* user = cJSON_GetObjectItem(root, "user"); - if (user && user->type == cJSON_String && user->valuestring != NULL) { - strncpy(g_Dbs.user, user->valuestring, MAX_DB_NAME_SIZE); - } else if (!user) { - strncpy(g_Dbs.user, "root", MAX_DB_NAME_SIZE); - } - - cJSON* password = cJSON_GetObjectItem(root, "password"); - if (password && password->type == cJSON_String && password->valuestring != NULL) { - strncpy(g_Dbs.password, password->valuestring, MAX_DB_NAME_SIZE); - } else if (!password) { - strncpy(g_Dbs.password, "taosdata", MAX_DB_NAME_SIZE); - } - - cJSON* resultfile = cJSON_GetObjectItem(root, "result_file"); - if (resultfile && resultfile->type == cJSON_String && resultfile->valuestring != NULL) { - strncpy(g_Dbs.resultFile, resultfile->valuestring, MAX_FILE_NAME_LEN); - } else if (!resultfile) { - strncpy(g_Dbs.resultFile, "./insert_res.txt", MAX_FILE_NAME_LEN); - } - - cJSON* threads = cJSON_GetObjectItem(root, "thread_count"); - if (threads && threads->type == cJSON_Number) { - g_Dbs.threadCount = threads->valueint; - } else if (!threads) { - g_Dbs.threadCount = 1; - } else { - printf("failed to read json, threads not found"); - goto PARSE_OVER; - } - - cJSON* threads2 = cJSON_GetObjectItem(root, "thread_count_create_tbl"); - if (threads2 && threads2->type == cJSON_Number) { - g_Dbs.threadCountByCreateTbl = threads2->valueint; - } else if (!threads2) { - g_Dbs.threadCountByCreateTbl = 1; - } else { - printf("failed to read json, threads2 not found"); - goto PARSE_OVER; - } - - cJSON *answerPrompt = cJSON_GetObjectItem(root, "confirm_parameter_prompt"); // yes, no, - if (answerPrompt && answerPrompt->type == cJSON_String && answerPrompt->valuestring != NULL) { - if (0 == strncasecmp(answerPrompt->valuestring, "yes", 3)) { - g_args.answer_yes = false; - } else if (0 == strncasecmp(answerPrompt->valuestring, "no", 2)) { - g_args.answer_yes = true; - } else { - g_args.answer_yes = false; - } - } else if (!answerPrompt) { - g_args.answer_yes = false; - } else { - printf("failed to read json, confirm_parameter_prompt not found"); - goto PARSE_OVER; - } - - cJSON* dbs = cJSON_GetObjectItem(root, "databases"); - if (!dbs || dbs->type != cJSON_Array) { - printf("failed to read json, databases not found\n"); - goto PARSE_OVER; - } - - int dbSize = cJSON_GetArraySize(dbs); - if (dbSize > MAX_DB_COUNT) { - printf("failed to read json, databases size overflow, max database is %d\n", MAX_DB_COUNT); - goto PARSE_OVER; - } - - g_Dbs.dbCount = dbSize; - for (int i = 0; i < dbSize; ++i) { - cJSON* dbinfos = cJSON_GetArrayItem(dbs, i); - if (dbinfos == NULL) continue; - - // dbinfo - cJSON *dbinfo = cJSON_GetObjectItem(dbinfos, "dbinfo"); - if (!dbinfo || dbinfo->type != cJSON_Object) { - printf("failed to read json, dbinfo not found"); - goto PARSE_OVER; - } - - cJSON *dbName = cJSON_GetObjectItem(dbinfo, "name"); - if (!dbName || dbName->type != cJSON_String || dbName->valuestring == NULL) { - printf("failed to read json, db name not found"); - goto PARSE_OVER; - } - strncpy(g_Dbs.db[i].dbName, dbName->valuestring, MAX_DB_NAME_SIZE); - - cJSON *drop = cJSON_GetObjectItem(dbinfo, "drop"); - if (drop && drop->type == cJSON_String && drop->valuestring != NULL) { - if (0 == strncasecmp(drop->valuestring, "yes", 3)) { - g_Dbs.db[i].drop = 1; - } else { - g_Dbs.db[i].drop = 0; - } - } else if (!drop) { - g_Dbs.db[i].drop = 0; - } else { - printf("failed to read json, drop not found"); - goto PARSE_OVER; - } - - cJSON *precision = cJSON_GetObjectItem(dbinfo, "precision"); - if (precision && precision->type == cJSON_String && precision->valuestring != NULL) { - strncpy(g_Dbs.db[i].dbCfg.precision, precision->valuestring, MAX_DB_NAME_SIZE); - } else if (!precision) { - //strncpy(g_Dbs.db[i].dbCfg.precision, "ms", MAX_DB_NAME_SIZE); - memset(g_Dbs.db[i].dbCfg.precision, 0, MAX_DB_NAME_SIZE); - } else { - printf("failed to read json, precision not found"); - goto PARSE_OVER; - } - - cJSON* update = cJSON_GetObjectItem(dbinfo, "update"); - if (update && update->type == cJSON_Number) { - g_Dbs.db[i].dbCfg.update = update->valueint; - } else if (!update) { - g_Dbs.db[i].dbCfg.update = -1; - } else { - printf("failed to read json, update not found"); - goto PARSE_OVER; - } - - cJSON* replica = cJSON_GetObjectItem(dbinfo, "replica"); - if (replica && replica->type == cJSON_Number) { - g_Dbs.db[i].dbCfg.replica = replica->valueint; - } else if (!replica) { - g_Dbs.db[i].dbCfg.replica = -1; - } else { - printf("failed to read json, replica not found"); - goto PARSE_OVER; - } - - cJSON* keep = cJSON_GetObjectItem(dbinfo, "keep"); - if (keep && keep->type == cJSON_Number) { - g_Dbs.db[i].dbCfg.keep = keep->valueint; - } else if (!keep) { - g_Dbs.db[i].dbCfg.keep = -1; - } else { - printf("failed to read json, keep not found"); - goto PARSE_OVER; - } - - cJSON* days = cJSON_GetObjectItem(dbinfo, "days"); - if (days && days->type == cJSON_Number) { - g_Dbs.db[i].dbCfg.days = days->valueint; - } else if (!days) { - g_Dbs.db[i].dbCfg.days = -1; - } else { - printf("failed to read json, days not found"); - goto PARSE_OVER; - } - - cJSON* cache = cJSON_GetObjectItem(dbinfo, "cache"); - if (cache && cache->type == cJSON_Number) { - g_Dbs.db[i].dbCfg.cache = cache->valueint; - } else if (!cache) { - g_Dbs.db[i].dbCfg.cache = -1; - } else { - printf("failed to read json, cache not found"); - goto PARSE_OVER; - } - - cJSON* blocks= cJSON_GetObjectItem(dbinfo, "blocks"); - if (blocks && blocks->type == cJSON_Number) { - g_Dbs.db[i].dbCfg.blocks = blocks->valueint; - } else if (!blocks) { - g_Dbs.db[i].dbCfg.blocks = -1; - } else { - printf("failed to read json, block not found"); - goto PARSE_OVER; - } - - //cJSON* maxtablesPerVnode= cJSON_GetObjectItem(dbinfo, "maxtablesPerVnode"); - //if (maxtablesPerVnode && maxtablesPerVnode->type == cJSON_Number) { - // g_Dbs.db[i].dbCfg.maxtablesPerVnode = maxtablesPerVnode->valueint; - //} else if (!maxtablesPerVnode) { - // g_Dbs.db[i].dbCfg.maxtablesPerVnode = TSDB_DEFAULT_TABLES; - //} else { - // printf("failed to read json, maxtablesPerVnode not found"); - // goto PARSE_OVER; - //} - - cJSON* minRows= cJSON_GetObjectItem(dbinfo, "minRows"); - if (minRows && minRows->type == cJSON_Number) { - g_Dbs.db[i].dbCfg.minRows = minRows->valueint; - } else if (!minRows) { - g_Dbs.db[i].dbCfg.minRows = -1; - } else { - printf("failed to read json, minRows not found"); - goto PARSE_OVER; - } - - cJSON* maxRows= cJSON_GetObjectItem(dbinfo, "maxRows"); - if (maxRows && maxRows->type == cJSON_Number) { - g_Dbs.db[i].dbCfg.maxRows = maxRows->valueint; - } else if (!maxRows) { - g_Dbs.db[i].dbCfg.maxRows = -1; - } else { - printf("failed to read json, maxRows not found"); - goto PARSE_OVER; - } - - cJSON* comp= cJSON_GetObjectItem(dbinfo, "comp"); - if (comp && comp->type == cJSON_Number) { - g_Dbs.db[i].dbCfg.comp = comp->valueint; - } else if (!comp) { - g_Dbs.db[i].dbCfg.comp = -1; - } else { - printf("failed to read json, comp not found"); - goto PARSE_OVER; - } - - cJSON* walLevel= cJSON_GetObjectItem(dbinfo, "walLevel"); - if (walLevel && walLevel->type == cJSON_Number) { - g_Dbs.db[i].dbCfg.walLevel = walLevel->valueint; - } else if (!walLevel) { - g_Dbs.db[i].dbCfg.walLevel = -1; - } else { - printf("failed to read json, walLevel not found"); - goto PARSE_OVER; - } - - cJSON* quorum= cJSON_GetObjectItem(dbinfo, "quorum"); - if (quorum && quorum->type == cJSON_Number) { - g_Dbs.db[i].dbCfg.quorum = quorum->valueint; - } else if (!quorum) { - g_Dbs.db[i].dbCfg.quorum = -1; - } else { - printf("failed to read json, walLevel not found"); - goto PARSE_OVER; - } - - cJSON* fsync= cJSON_GetObjectItem(dbinfo, "fsync"); - if (fsync && fsync->type == cJSON_Number) { - g_Dbs.db[i].dbCfg.fsync = fsync->valueint; - } else if (!fsync) { - g_Dbs.db[i].dbCfg.fsync = -1; - } else { - printf("failed to read json, fsync not found"); - goto PARSE_OVER; - } - - // super_talbes - cJSON *stables = cJSON_GetObjectItem(dbinfos, "super_tables"); - if (!stables || stables->type != cJSON_Array) { - printf("failed to read json, super_tables not found"); - goto PARSE_OVER; - } - - int stbSize = cJSON_GetArraySize(stables); - if (stbSize > MAX_SUPER_TABLE_COUNT) { - printf("failed to read json, databases size overflow, max database is %d\n", MAX_SUPER_TABLE_COUNT); - goto PARSE_OVER; - } - - g_Dbs.db[i].superTblCount = stbSize; - for (int j = 0; j < stbSize; ++j) { - cJSON* stbInfo = cJSON_GetArrayItem(stables, j); - if (stbInfo == NULL) continue; - - // dbinfo - cJSON *stbName = cJSON_GetObjectItem(stbInfo, "name"); - if (!stbName || stbName->type != cJSON_String || stbName->valuestring == NULL) { - printf("failed to read json, stb name not found"); - goto PARSE_OVER; - } - strncpy(g_Dbs.db[i].superTbls[j].sTblName, stbName->valuestring, MAX_TB_NAME_SIZE); - - cJSON *prefix = cJSON_GetObjectItem(stbInfo, "childtable_prefix"); - if (!prefix || prefix->type != cJSON_String || prefix->valuestring == NULL) { - printf("failed to read json, childtable_prefix not found"); - goto PARSE_OVER; - } - strncpy(g_Dbs.db[i].superTbls[j].childTblPrefix, prefix->valuestring, MAX_DB_NAME_SIZE); - - cJSON *autoCreateTbl = cJSON_GetObjectItem(stbInfo, "auto_create_table"); // yes, no, null - if (autoCreateTbl && autoCreateTbl->type == cJSON_String && autoCreateTbl->valuestring != NULL) { - if (0 == strncasecmp(autoCreateTbl->valuestring, "yes", 3)) { - g_Dbs.db[i].superTbls[j].autoCreateTable = AUTO_CREATE_SUBTBL; - } else if (0 == strncasecmp(autoCreateTbl->valuestring, "no", 2)) { - g_Dbs.db[i].superTbls[j].autoCreateTable = PRE_CREATE_SUBTBL; - } else { - g_Dbs.db[i].superTbls[j].autoCreateTable = PRE_CREATE_SUBTBL; - } - } else if (!autoCreateTbl) { - g_Dbs.db[i].superTbls[j].autoCreateTable = PRE_CREATE_SUBTBL; - } else { - printf("failed to read json, auto_create_table not found"); - goto PARSE_OVER; - } - - cJSON* batchCreateTbl = cJSON_GetObjectItem(stbInfo, "batch_create_tbl_num"); - if (batchCreateTbl && batchCreateTbl->type == cJSON_Number) { - g_Dbs.db[i].superTbls[j].batchCreateTableNum = batchCreateTbl->valueint; - } else if (!batchCreateTbl) { - g_Dbs.db[i].superTbls[j].batchCreateTableNum = 2000; - } else { - printf("failed to read json, batch_create_tbl_num not found"); - goto PARSE_OVER; - } - - cJSON *childTblExists = cJSON_GetObjectItem(stbInfo, "child_table_exists"); // yes, no - if (childTblExists && childTblExists->type == cJSON_String && childTblExists->valuestring != NULL) { - if (0 == strncasecmp(childTblExists->valuestring, "yes", 3)) { - g_Dbs.db[i].superTbls[j].childTblExists = TBL_ALREADY_EXISTS; - } else if (0 == strncasecmp(childTblExists->valuestring, "no", 2)) { - g_Dbs.db[i].superTbls[j].childTblExists = TBL_NO_EXISTS; - } else { - g_Dbs.db[i].superTbls[j].childTblExists = TBL_NO_EXISTS; - } - } else if (!childTblExists) { - g_Dbs.db[i].superTbls[j].childTblExists = TBL_NO_EXISTS; - } else { - printf("failed to read json, child_table_exists not found"); - goto PARSE_OVER; - } - - cJSON* count = cJSON_GetObjectItem(stbInfo, "childtable_count"); - if (!count || count->type != cJSON_Number || 0 >= count->valueint) { - printf("failed to read json, childtable_count not found"); - goto PARSE_OVER; - } - g_Dbs.db[i].superTbls[j].childTblCount = count->valueint; - - cJSON *dataSource = cJSON_GetObjectItem(stbInfo, "data_source"); - if (dataSource && dataSource->type == cJSON_String && dataSource->valuestring != NULL) { - strncpy(g_Dbs.db[i].superTbls[j].dataSource, dataSource->valuestring, MAX_DB_NAME_SIZE); - } else if (!dataSource) { - strncpy(g_Dbs.db[i].superTbls[j].dataSource, "rand", MAX_DB_NAME_SIZE); - } else { - printf("failed to read json, data_source not found"); - goto PARSE_OVER; - } - - cJSON *insertMode = cJSON_GetObjectItem(stbInfo, "insert_mode"); // taosc , restful - if (insertMode && insertMode->type == cJSON_String && insertMode->valuestring != NULL) { - strncpy(g_Dbs.db[i].superTbls[j].insertMode, insertMode->valuestring, MAX_DB_NAME_SIZE); - #ifndef TD_LOWA_CURL - if (0 == strncasecmp(g_Dbs.db[i].superTbls[j].insertMode, "restful", 7)) { - printf("There no libcurl, so no support resetful test! please use taosc mode.\n"); - goto PARSE_OVER; - } - #endif - } else if (!insertMode) { - strncpy(g_Dbs.db[i].superTbls[j].insertMode, "taosc", MAX_DB_NAME_SIZE); - } else { - printf("failed to read json, insert_mode not found"); - goto PARSE_OVER; - } - - cJSON *ts = cJSON_GetObjectItem(stbInfo, "start_timestamp"); - if (ts && ts->type == cJSON_String && ts->valuestring != NULL) { - strncpy(g_Dbs.db[i].superTbls[j].startTimestamp, ts->valuestring, MAX_DB_NAME_SIZE); - } else if (!ts) { - strncpy(g_Dbs.db[i].superTbls[j].startTimestamp, "now", MAX_DB_NAME_SIZE); - } else { - printf("failed to read json, start_timestamp not found"); - goto PARSE_OVER; - } - - cJSON* timestampStep = cJSON_GetObjectItem(stbInfo, "timestamp_step"); - if (timestampStep && timestampStep->type == cJSON_Number) { - g_Dbs.db[i].superTbls[j].timeStampStep = timestampStep->valueint; - } else if (!timestampStep) { - g_Dbs.db[i].superTbls[j].timeStampStep = 1000; - } else { - printf("failed to read json, timestamp_step not found"); - goto PARSE_OVER; - } - - cJSON* sampleDataBufSize = cJSON_GetObjectItem(stbInfo, "sample_buf_size"); - if (sampleDataBufSize && sampleDataBufSize->type == cJSON_Number) { - g_Dbs.db[i].superTbls[j].sampleDataBufSize = sampleDataBufSize->valueint; - if (g_Dbs.db[i].superTbls[j].sampleDataBufSize < 1024*1024) { - g_Dbs.db[i].superTbls[j].sampleDataBufSize = 1024*1024 + 1024; - } - } else if (!sampleDataBufSize) { - g_Dbs.db[i].superTbls[j].sampleDataBufSize = 1024*1024 + 1024; - } else { - printf("failed to read json, sample_buf_size not found"); - goto PARSE_OVER; - } - - cJSON *sampleFormat = cJSON_GetObjectItem(stbInfo, "sample_format"); - if (sampleFormat && sampleFormat->type == cJSON_String && sampleFormat->valuestring != NULL) { - strncpy(g_Dbs.db[i].superTbls[j].sampleFormat, sampleFormat->valuestring, MAX_DB_NAME_SIZE); - } else if (!sampleFormat) { - strncpy(g_Dbs.db[i].superTbls[j].sampleFormat, "csv", MAX_DB_NAME_SIZE); - } else { - printf("failed to read json, sample_format not found"); - goto PARSE_OVER; - } - - cJSON *sampleFile = cJSON_GetObjectItem(stbInfo, "sample_file"); - if (sampleFile && sampleFile->type == cJSON_String && sampleFile->valuestring != NULL) { - strncpy(g_Dbs.db[i].superTbls[j].sampleFile, sampleFile->valuestring, MAX_FILE_NAME_LEN); - } else if (!sampleFile) { - memset(g_Dbs.db[i].superTbls[j].sampleFile, 0, MAX_FILE_NAME_LEN); - } else { - printf("failed to read json, sample_file not found"); - goto PARSE_OVER; - } - - cJSON *tagsFile = cJSON_GetObjectItem(stbInfo, "tags_file"); - if (tagsFile && tagsFile->type == cJSON_String && tagsFile->valuestring != NULL) { - strncpy(g_Dbs.db[i].superTbls[j].tagsFile, tagsFile->valuestring, MAX_FILE_NAME_LEN); - if (0 == g_Dbs.db[i].superTbls[j].tagsFile[0]) { - g_Dbs.db[i].superTbls[j].tagSource = 0; - } else { - g_Dbs.db[i].superTbls[j].tagSource = 1; - } - } else if (!tagsFile) { - memset(g_Dbs.db[i].superTbls[j].tagsFile, 0, MAX_FILE_NAME_LEN); - g_Dbs.db[i].superTbls[j].tagSource = 0; - } else { - printf("failed to read json, tags_file not found"); - goto PARSE_OVER; - } - - cJSON* maxSqlLen = cJSON_GetObjectItem(stbInfo, "max_sql_len"); - if (maxSqlLen && maxSqlLen->type == cJSON_Number) { - int32_t len = maxSqlLen->valueint; - if (len > TSDB_MAX_ALLOWED_SQL_LEN) { - len = TSDB_MAX_ALLOWED_SQL_LEN; - } else if (len < TSDB_MAX_SQL_LEN) { - len = TSDB_MAX_SQL_LEN; - } - g_Dbs.db[i].superTbls[j].maxSqlLen = len; - } else if (!maxSqlLen) { - g_Dbs.db[i].superTbls[j].maxSqlLen = TSDB_MAX_SQL_LEN; - } else { - printf("failed to read json, maxSqlLen not found"); - goto PARSE_OVER; - } - - cJSON *multiThreadWriteOneTbl = cJSON_GetObjectItem(stbInfo, "multi_thread_write_one_tbl"); // no , yes - if (multiThreadWriteOneTbl && multiThreadWriteOneTbl->type == cJSON_String && multiThreadWriteOneTbl->valuestring != NULL) { - if (0 == strncasecmp(multiThreadWriteOneTbl->valuestring, "yes", 3)) { - g_Dbs.db[i].superTbls[j].multiThreadWriteOneTbl = 1; - } else { - g_Dbs.db[i].superTbls[j].multiThreadWriteOneTbl = 0; - } - } else if (!multiThreadWriteOneTbl) { - g_Dbs.db[i].superTbls[j].multiThreadWriteOneTbl = 0; - } else { - printf("failed to read json, multiThreadWriteOneTbl not found"); - goto PARSE_OVER; - } - - cJSON* numberOfTblInOneSql = cJSON_GetObjectItem(stbInfo, "number_of_tbl_in_one_sql"); - if (numberOfTblInOneSql && numberOfTblInOneSql->type == cJSON_Number) { - g_Dbs.db[i].superTbls[j].numberOfTblInOneSql = numberOfTblInOneSql->valueint; - } else if (!numberOfTblInOneSql) { - g_Dbs.db[i].superTbls[j].numberOfTblInOneSql = 0; - } else { - printf("failed to read json, numberOfTblInOneSql not found"); - goto PARSE_OVER; - } - - cJSON* rowsPerTbl = cJSON_GetObjectItem(stbInfo, "rows_per_tbl"); - if (rowsPerTbl && rowsPerTbl->type == cJSON_Number) { - g_Dbs.db[i].superTbls[j].rowsPerTbl = rowsPerTbl->valueint; - } else if (!rowsPerTbl) { - g_Dbs.db[i].superTbls[j].rowsPerTbl = 1; - } else { - printf("failed to read json, rowsPerTbl not found"); - goto PARSE_OVER; - } - - cJSON* disorderRatio = cJSON_GetObjectItem(stbInfo, "disorder_ratio"); - if (disorderRatio && disorderRatio->type == cJSON_Number) { - g_Dbs.db[i].superTbls[j].disorderRatio = disorderRatio->valueint; - } else if (!disorderRatio) { - g_Dbs.db[i].superTbls[j].disorderRatio = 0; - } else { - printf("failed to read json, disorderRatio not found"); - goto PARSE_OVER; - } - - cJSON* disorderRange = cJSON_GetObjectItem(stbInfo, "disorder_range"); - if (disorderRange && disorderRange->type == cJSON_Number) { - g_Dbs.db[i].superTbls[j].disorderRange = disorderRange->valueint; - } else if (!disorderRange) { - g_Dbs.db[i].superTbls[j].disorderRange = 1000; - } else { - printf("failed to read json, disorderRange not found"); - goto PARSE_OVER; - } - - cJSON* insertRate = cJSON_GetObjectItem(stbInfo, "insert_rate"); - if (insertRate && insertRate->type == cJSON_Number) { - g_Dbs.db[i].superTbls[j].insertRate = insertRate->valueint; - } else if (!insertRate) { - g_Dbs.db[i].superTbls[j].insertRate = 0; - } else { - printf("failed to read json, insert_rate not found"); - goto PARSE_OVER; - } - - cJSON* insertRows = cJSON_GetObjectItem(stbInfo, "insert_rows"); - if (insertRows && insertRows->type == cJSON_Number) { - g_Dbs.db[i].superTbls[j].insertRows = insertRows->valueint; - if (0 == g_Dbs.db[i].superTbls[j].insertRows) { - g_Dbs.db[i].superTbls[j].insertRows = 0x7FFFFFFFFFFFFFFF; - } - } else if (!insertRows) { - g_Dbs.db[i].superTbls[j].insertRows = 0x7FFFFFFFFFFFFFFF; - } else { - printf("failed to read json, insert_rows not found"); - goto PARSE_OVER; - } - - if (NO_CREATE_SUBTBL == g_Dbs.db[i].superTbls[j].autoCreateTable || (TBL_ALREADY_EXISTS == g_Dbs.db[i].superTbls[j].childTblExists)) { - continue; - } - - int retVal = getColumnAndTagTypeFromInsertJsonFile(stbInfo, &g_Dbs.db[i].superTbls[j]); - if (false == retVal) { - goto PARSE_OVER; - } - } - } - - ret = true; - -PARSE_OVER: - //free(content); - //cJSON_Delete(root); - //fclose(fp); - return ret; -} - -static bool getMetaFromQueryJsonFile(cJSON* root) { - bool ret = false; - - cJSON* cfgdir = cJSON_GetObjectItem(root, "cfgdir"); - if (cfgdir && cfgdir->type == cJSON_String && cfgdir->valuestring != NULL) { - strncpy(g_queryInfo.cfgDir, cfgdir->valuestring, MAX_FILE_NAME_LEN); - } - - cJSON* host = cJSON_GetObjectItem(root, "host"); - if (host && host->type == cJSON_String && host->valuestring != NULL) { - strncpy(g_queryInfo.host, host->valuestring, MAX_DB_NAME_SIZE); - } else if (!host) { - strncpy(g_queryInfo.host, "127.0.0.1", MAX_DB_NAME_SIZE); - } else { - printf("failed to read json, host not found\n"); - goto PARSE_OVER; - } - - cJSON* port = cJSON_GetObjectItem(root, "port"); - if (port && port->type == cJSON_Number) { - g_queryInfo.port = port->valueint; - } else if (!port) { - g_queryInfo.port = 6030; - } - - cJSON* user = cJSON_GetObjectItem(root, "user"); - if (user && user->type == cJSON_String && user->valuestring != NULL) { - strncpy(g_queryInfo.user, user->valuestring, MAX_DB_NAME_SIZE); - } else if (!user) { - strncpy(g_queryInfo.user, "root", MAX_DB_NAME_SIZE); ; - } - - cJSON* password = cJSON_GetObjectItem(root, "password"); - if (password && password->type == cJSON_String && password->valuestring != NULL) { - strncpy(g_queryInfo.password, password->valuestring, MAX_DB_NAME_SIZE); - } else if (!password) { - strncpy(g_queryInfo.password, "taosdata", MAX_DB_NAME_SIZE);; - } - - cJSON *answerPrompt = cJSON_GetObjectItem(root, "confirm_parameter_prompt"); // yes, no, - if (answerPrompt && answerPrompt->type == cJSON_String && answerPrompt->valuestring != NULL) { - if (0 == strncasecmp(answerPrompt->valuestring, "yes", 3)) { - g_args.answer_yes = false; - } else if (0 == strncasecmp(answerPrompt->valuestring, "no", 2)) { - g_args.answer_yes = true; - } else { - g_args.answer_yes = false; - } - } else if (!answerPrompt) { - g_args.answer_yes = false; - } else { - printf("failed to read json, confirm_parameter_prompt not found"); - goto PARSE_OVER; - } - - cJSON* dbs = cJSON_GetObjectItem(root, "databases"); - if (dbs && dbs->type == cJSON_String && dbs->valuestring != NULL) { - strncpy(g_queryInfo.dbName, dbs->valuestring, MAX_DB_NAME_SIZE); - } else if (!dbs) { - printf("failed to read json, databases not found\n"); - goto PARSE_OVER; - } - - cJSON* queryMode = cJSON_GetObjectItem(root, "query_mode"); - if (queryMode && queryMode->type == cJSON_String && queryMode->valuestring != NULL) { - strncpy(g_queryInfo.queryMode, queryMode->valuestring, MAX_TB_NAME_SIZE); - } else if (!queryMode) { - strncpy(g_queryInfo.queryMode, "taosc", MAX_TB_NAME_SIZE); - } else { - printf("failed to read json, query_mode not found\n"); - goto PARSE_OVER; - } - - // super_table_query - cJSON *superQuery = cJSON_GetObjectItem(root, "specified_table_query"); - if (!superQuery) { - g_queryInfo.superQueryInfo.concurrent = 0; - g_queryInfo.superQueryInfo.sqlCount = 0; - } else if (superQuery->type != cJSON_Object) { - printf("failed to read json, super_table_query not found"); - goto PARSE_OVER; - } else { - cJSON* rate = cJSON_GetObjectItem(superQuery, "query_interval"); - if (rate && rate->type == cJSON_Number) { - g_queryInfo.superQueryInfo.rate = rate->valueint; - } else if (!rate) { - g_queryInfo.superQueryInfo.rate = 0; - } - - cJSON* concurrent = cJSON_GetObjectItem(superQuery, "concurrent"); - if (concurrent && concurrent->type == cJSON_Number) { - g_queryInfo.superQueryInfo.concurrent = concurrent->valueint; - } else if (!concurrent) { - g_queryInfo.superQueryInfo.concurrent = 1; - } - - cJSON* mode = cJSON_GetObjectItem(superQuery, "mode"); - if (mode && mode->type == cJSON_String && mode->valuestring != NULL) { - if (0 == strcmp("sync", mode->valuestring)) { - g_queryInfo.superQueryInfo.subscribeMode = 0; - } else if (0 == strcmp("async", mode->valuestring)) { - g_queryInfo.superQueryInfo.subscribeMode = 1; - } else { - printf("failed to read json, subscribe mod error\n"); - goto PARSE_OVER; - } - } else { - g_queryInfo.superQueryInfo.subscribeMode = 0; - } - - cJSON* interval = cJSON_GetObjectItem(superQuery, "interval"); - if (interval && interval->type == cJSON_Number) { - g_queryInfo.superQueryInfo.subscribeInterval = interval->valueint; - } else if (!interval) { - //printf("failed to read json, subscribe interval no found\n"); - //goto PARSE_OVER; - g_queryInfo.superQueryInfo.subscribeInterval = 10000; - } - - cJSON* restart = cJSON_GetObjectItem(superQuery, "restart"); - if (restart && restart->type == cJSON_String && restart->valuestring != NULL) { - if (0 == strcmp("yes", restart->valuestring)) { - g_queryInfo.superQueryInfo.subscribeRestart = 1; - } else if (0 == strcmp("no", restart->valuestring)) { - g_queryInfo.superQueryInfo.subscribeRestart = 0; - } else { - printf("failed to read json, subscribe restart error\n"); - goto PARSE_OVER; - } - } else { - g_queryInfo.superQueryInfo.subscribeRestart = 1; - } - - cJSON* keepProgress = cJSON_GetObjectItem(superQuery, "keepProgress"); - if (keepProgress && keepProgress->type == cJSON_String && keepProgress->valuestring != NULL) { - if (0 == strcmp("yes", keepProgress->valuestring)) { - g_queryInfo.superQueryInfo.subscribeKeepProgress = 1; - } else if (0 == strcmp("no", keepProgress->valuestring)) { - g_queryInfo.superQueryInfo.subscribeKeepProgress = 0; - } else { - printf("failed to read json, subscribe keepProgress error\n"); - goto PARSE_OVER; - } - } else { - g_queryInfo.superQueryInfo.subscribeKeepProgress = 0; - } - - // sqls - cJSON* superSqls = cJSON_GetObjectItem(superQuery, "sqls"); - if (!superSqls) { - g_queryInfo.superQueryInfo.sqlCount = 0; - } else if (superSqls->type != cJSON_Array) { - printf("failed to read json, super sqls not found\n"); - goto PARSE_OVER; - } else { - int superSqlSize = cJSON_GetArraySize(superSqls); - if (superSqlSize > MAX_QUERY_SQL_COUNT) { - printf("failed to read json, query sql size overflow, max is %d\n", MAX_QUERY_SQL_COUNT); - goto PARSE_OVER; - } - - g_queryInfo.superQueryInfo.sqlCount = superSqlSize; - for (int j = 0; j < superSqlSize; ++j) { - cJSON* sql = cJSON_GetArrayItem(superSqls, j); - if (sql == NULL) continue; - - cJSON *sqlStr = cJSON_GetObjectItem(sql, "sql"); - if (!sqlStr || sqlStr->type != cJSON_String || sqlStr->valuestring == NULL) { - printf("failed to read json, sql not found\n"); - goto PARSE_OVER; - } - strncpy(g_queryInfo.superQueryInfo.sql[j], sqlStr->valuestring, MAX_QUERY_SQL_LENGTH); - - cJSON *result = cJSON_GetObjectItem(sql, "result"); - if (NULL != result && result->type == cJSON_String && result->valuestring != NULL) { - strncpy(g_queryInfo.superQueryInfo.result[j], result->valuestring, MAX_FILE_NAME_LEN); - } else if (NULL == result) { - memset(g_queryInfo.superQueryInfo.result[j], 0, MAX_FILE_NAME_LEN); - } else { - printf("failed to read json, super query result file not found\n"); - goto PARSE_OVER; - } - } - } - } - - // sub_table_query - cJSON *subQuery = cJSON_GetObjectItem(root, "super_table_query"); - if (!subQuery) { - g_queryInfo.subQueryInfo.threadCnt = 0; - g_queryInfo.subQueryInfo.sqlCount = 0; - } else if (subQuery->type != cJSON_Object) { - printf("failed to read json, sub_table_query not found"); - ret = true; - goto PARSE_OVER; - } else { - cJSON* subrate = cJSON_GetObjectItem(subQuery, "query_interval"); - if (subrate && subrate->type == cJSON_Number) { - g_queryInfo.subQueryInfo.rate = subrate->valueint; - } else if (!subrate) { - g_queryInfo.subQueryInfo.rate = 0; - } - - cJSON* threads = cJSON_GetObjectItem(subQuery, "threads"); - if (threads && threads->type == cJSON_Number) { - g_queryInfo.subQueryInfo.threadCnt = threads->valueint; - } else if (!threads) { - g_queryInfo.subQueryInfo.threadCnt = 1; - } - - //cJSON* subTblCnt = cJSON_GetObjectItem(subQuery, "childtable_count"); - //if (subTblCnt && subTblCnt->type == cJSON_Number) { - // g_queryInfo.subQueryInfo.childTblCount = subTblCnt->valueint; - //} else if (!subTblCnt) { - // g_queryInfo.subQueryInfo.childTblCount = 0; - //} - - cJSON* stblname = cJSON_GetObjectItem(subQuery, "stblname"); - if (stblname && stblname->type == cJSON_String && stblname->valuestring != NULL) { - strncpy(g_queryInfo.subQueryInfo.sTblName, stblname->valuestring, MAX_TB_NAME_SIZE); - } else { - printf("failed to read json, super table name not found\n"); - goto PARSE_OVER; - } - - cJSON* submode = cJSON_GetObjectItem(subQuery, "mode"); - if (submode && submode->type == cJSON_String && submode->valuestring != NULL) { - if (0 == strcmp("sync", submode->valuestring)) { - g_queryInfo.subQueryInfo.subscribeMode = 0; - } else if (0 == strcmp("async", submode->valuestring)) { - g_queryInfo.subQueryInfo.subscribeMode = 1; - } else { - printf("failed to read json, subscribe mod error\n"); - goto PARSE_OVER; - } - } else { - g_queryInfo.subQueryInfo.subscribeMode = 0; - } - - cJSON* subinterval = cJSON_GetObjectItem(subQuery, "interval"); - if (subinterval && subinterval->type == cJSON_Number) { - g_queryInfo.subQueryInfo.subscribeInterval = subinterval->valueint; - } else if (!subinterval) { - //printf("failed to read json, subscribe interval no found\n"); - //goto PARSE_OVER; - g_queryInfo.subQueryInfo.subscribeInterval = 10000; - } - - cJSON* subrestart = cJSON_GetObjectItem(subQuery, "restart"); - if (subrestart && subrestart->type == cJSON_String && subrestart->valuestring != NULL) { - if (0 == strcmp("yes", subrestart->valuestring)) { - g_queryInfo.subQueryInfo.subscribeRestart = 1; - } else if (0 == strcmp("no", subrestart->valuestring)) { - g_queryInfo.subQueryInfo.subscribeRestart = 0; - } else { - printf("failed to read json, subscribe restart error\n"); - goto PARSE_OVER; - } - } else { - g_queryInfo.subQueryInfo.subscribeRestart = 1; - } - - cJSON* subkeepProgress = cJSON_GetObjectItem(subQuery, "keepProgress"); - if (subkeepProgress && subkeepProgress->type == cJSON_String && subkeepProgress->valuestring != NULL) { - if (0 == strcmp("yes", subkeepProgress->valuestring)) { - g_queryInfo.subQueryInfo.subscribeKeepProgress = 1; - } else if (0 == strcmp("no", subkeepProgress->valuestring)) { - g_queryInfo.subQueryInfo.subscribeKeepProgress = 0; - } else { - printf("failed to read json, subscribe keepProgress error\n"); - goto PARSE_OVER; - } - } else { - g_queryInfo.subQueryInfo.subscribeKeepProgress = 0; - } - - // sqls - cJSON* subsqls = cJSON_GetObjectItem(subQuery, "sqls"); - if (!subsqls) { - g_queryInfo.subQueryInfo.sqlCount = 0; - } else if (subsqls->type != cJSON_Array) { - printf("failed to read json, super sqls not found\n"); - goto PARSE_OVER; - } else { - int superSqlSize = cJSON_GetArraySize(subsqls); - if (superSqlSize > MAX_QUERY_SQL_COUNT) { - printf("failed to read json, query sql size overflow, max is %d\n", MAX_QUERY_SQL_COUNT); - goto PARSE_OVER; - } - - g_queryInfo.subQueryInfo.sqlCount = superSqlSize; - for (int j = 0; j < superSqlSize; ++j) { - cJSON* sql = cJSON_GetArrayItem(subsqls, j); - if (sql == NULL) continue; - - cJSON *sqlStr = cJSON_GetObjectItem(sql, "sql"); - if (!sqlStr || sqlStr->type != cJSON_String || sqlStr->valuestring == NULL) { - printf("failed to read json, sql not found\n"); - goto PARSE_OVER; - } - strncpy(g_queryInfo.subQueryInfo.sql[j], sqlStr->valuestring, MAX_QUERY_SQL_LENGTH); - - cJSON *result = cJSON_GetObjectItem(sql, "result"); - if (result != NULL && result->type == cJSON_String && result->valuestring != NULL){ - strncpy(g_queryInfo.subQueryInfo.result[j], result->valuestring, MAX_FILE_NAME_LEN); - } else if (NULL == result) { - memset(g_queryInfo.subQueryInfo.result[j], 0, MAX_FILE_NAME_LEN); - } else { - printf("failed to read json, sub query result file not found\n"); - goto PARSE_OVER; - } - } - } - } - - ret = true; - -PARSE_OVER: - //free(content); - //cJSON_Delete(root); - //fclose(fp); - return ret; -} - -static bool getInfoFromJsonFile(char* file) { - FILE *fp = fopen(file, "r"); - if (!fp) { - printf("failed to read %s, reason:%s\n", file, strerror(errno)); - return false; - } - - bool ret = false; - int maxLen = 64000; - char *content = calloc(1, maxLen + 1); - int len = fread(content, 1, maxLen, fp); - if (len <= 0) { - free(content); - fclose(fp); - printf("failed to read %s, content is null", file); - return false; - } - - content[len] = 0; - cJSON* root = cJSON_Parse(content); - if (root == NULL) { - printf("failed to cjson parse %s, invalid json format", file); - goto PARSE_OVER; - } - - cJSON* filetype = cJSON_GetObjectItem(root, "filetype"); - if (filetype && filetype->type == cJSON_String && filetype->valuestring != NULL) { - if (0 == strcasecmp("insert", filetype->valuestring)) { - g_jsonType = INSERT_MODE; - } else if (0 == strcasecmp("query", filetype->valuestring)) { - g_jsonType = QUERY_MODE; - } else if (0 == strcasecmp("subscribe", filetype->valuestring)) { - g_jsonType = SUBSCRIBE_MODE; - } else { - printf("failed to read json, filetype not support\n"); - goto PARSE_OVER; - } - } else if (!filetype) { - g_jsonType = INSERT_MODE; - } else { - printf("failed to read json, filetype not found\n"); - goto PARSE_OVER; - } - - if (INSERT_MODE == g_jsonType) { - ret = getMetaFromInsertJsonFile(root); - } else if (QUERY_MODE == g_jsonType) { - ret = getMetaFromQueryJsonFile(root); - } else if (SUBSCRIBE_MODE == g_jsonType) { - ret = getMetaFromQueryJsonFile(root); - } else { - printf("input json file type error! please input correct file type: insert or query or subscribe\n"); - goto PARSE_OVER; - } - -PARSE_OVER: - free(content); - cJSON_Delete(root); - fclose(fp); - return ret; -} - - -void prePareSampleData() { - for (int i = 0; i < g_Dbs.dbCount; i++) { - for (int j = 0; j < g_Dbs.db[i].superTblCount; j++) { - //if (0 == strncasecmp(g_Dbs.db[i].superTbls[j].dataSource, "sample", 6)) { - // readSampleFromFileToMem(&g_Dbs.db[i].superTbls[j]); - //} - - if (g_Dbs.db[i].superTbls[j].tagsFile[0] != 0) { - (void)readTagFromCsvFileToMem(&g_Dbs.db[i].superTbls[j]); - } - - #ifdef TD_LOWA_CURL - if (0 == strncasecmp(g_Dbs.db[i].superTbls[j].insertMode, "restful", 8)) { - curl_global_init(CURL_GLOBAL_ALL); - } - #endif - } - } -} - -void postFreeResource() { - tmfclose(g_fpOfInsertResult); - for (int i = 0; i < g_Dbs.dbCount; i++) { - for (int j = 0; j < g_Dbs.db[i].superTblCount; j++) { - if (0 != g_Dbs.db[i].superTbls[j].colsOfCreatChildTable) { - free(g_Dbs.db[i].superTbls[j].colsOfCreatChildTable); - g_Dbs.db[i].superTbls[j].colsOfCreatChildTable = NULL; - } - if (0 != g_Dbs.db[i].superTbls[j].sampleDataBuf) { - free(g_Dbs.db[i].superTbls[j].sampleDataBuf); - g_Dbs.db[i].superTbls[j].sampleDataBuf = NULL; - } - if (0 != g_Dbs.db[i].superTbls[j].tagDataBuf) { - free(g_Dbs.db[i].superTbls[j].tagDataBuf); - g_Dbs.db[i].superTbls[j].tagDataBuf = NULL; - } - if (0 != g_Dbs.db[i].superTbls[j].childTblName) { - free(g_Dbs.db[i].superTbls[j].childTblName); - g_Dbs.db[i].superTbls[j].childTblName = NULL; - } - - #ifdef TD_LOWA_CURL - if (0 == strncasecmp(g_Dbs.db[i].superTbls[j].insertMode, "restful", 8)) { - curl_global_cleanup(); - } - #endif - } - } -} - -int getRowDataFromSample(char* dataBuf, int maxLen, int64_t timestamp, SSuperTable* superTblInfo, int* sampleUsePos, FILE *fp, char* sampleBuf) { - if ((*sampleUsePos) == MAX_SAMPLES_ONCE_FROM_FILE) { - int ret = readSampleFromCsvFileToMem(fp, superTblInfo, sampleBuf); - if (0 != ret) { - return -1; - } - *sampleUsePos = 0; - } - - int dataLen = 0; - dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "(%" PRId64 ", ", timestamp); - dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "%s", sampleBuf + superTblInfo->lenOfOneRow * (*sampleUsePos)); - dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, ")"); - - (*sampleUsePos)++; - - return dataLen; -} - -int generateRowData(char* dataBuf, int maxLen, int64_t timestamp, SSuperTable* stbInfo) { - int dataLen = 0; - dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "(%" PRId64 ", ", timestamp); - for (int i = 0; i < stbInfo->columnCount; i++) { - if ((0 == strncasecmp(stbInfo->columns[i].dataType, "binary", 6)) || (0 == strncasecmp(stbInfo->columns[i].dataType, "nchar", 5))) { - if (stbInfo->columns[i].dataLen > TSDB_MAX_BINARY_LEN) { - printf("binary or nchar length overflow, max size:%u\n", (uint32_t)TSDB_MAX_BINARY_LEN); - return (-1); - } - - char* buf = (char*)calloc(stbInfo->columns[i].dataLen+1, 1); - if (NULL == buf) { - printf("calloc failed! size:%d\n", stbInfo->columns[i].dataLen); - return (-1); - } - rand_string(buf, stbInfo->columns[i].dataLen); - dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "\'%s\', ", buf); - tmfree(buf); - } else if (0 == strncasecmp(stbInfo->columns[i].dataType, "int", 3)) { - dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "%d, ", rand_int()); - } else if (0 == strncasecmp(stbInfo->columns[i].dataType, "bigint", 6)) { - dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "%"PRId64", ", rand_bigint()); - } else if (0 == strncasecmp(stbInfo->columns[i].dataType, "float", 5)) { - dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "%f, ", rand_float()); - } else if (0 == strncasecmp(stbInfo->columns[i].dataType, "double", 6)) { - dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "%f, ", rand_double()); - } else if (0 == strncasecmp(stbInfo->columns[i].dataType, "smallint", 8)) { - dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "%d, ", rand_smallint()); - } else if (0 == strncasecmp(stbInfo->columns[i].dataType, "tinyint", 7)) { - dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "%d, ", rand_tinyint()); - } else if (0 == strncasecmp(stbInfo->columns[i].dataType, "bool", 4)) { - dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "%d, ", rand_bool()); - } else if (0 == strncasecmp(stbInfo->columns[i].dataType, "timestamp", 9)) { - dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, "%"PRId64", ", rand_bigint()); - } else { - printf("No support data type: %s\n", stbInfo->columns[i].dataType); - return (-1); - } - } - dataLen -= 2; - dataLen += snprintf(dataBuf + dataLen, maxLen - dataLen, ")"); - - return dataLen; -} - -void syncWriteForNumberOfTblInOneSql(threadInfo *winfo, FILE *fp, char* sampleDataBuf) { - SSuperTable* superTblInfo = winfo->superTblInfo; - - int samplePos = 0; - - //printf("========threadID[%d], table rang: %d - %d \n", winfo->threadID, winfo->start_table_id, winfo->end_table_id); - int64_t totalRowsInserted = 0; - int64_t totalAffectedRows = 0; - int64_t lastPrintTime = taosGetTimestampMs(); - - char* buffer = calloc(superTblInfo->maxSqlLen+1, 1); - if (NULL == buffer) { - printf("========calloc size[ %d ] fail!\n", superTblInfo->maxSqlLen); - return; - } - - int32_t numberOfTblInOneSql = superTblInfo->numberOfTblInOneSql; - int32_t tbls = winfo->end_table_id - winfo->start_table_id + 1; - if (numberOfTblInOneSql > tbls) { - numberOfTblInOneSql = tbls; - } - - int64_t time_counter = winfo->start_time; - int64_t tmp_time; - int sampleUsePos; - - int64_t st = 0; - int64_t et = 0; - for (int i = 0; i < superTblInfo->insertRows;) { - if (superTblInfo->insertRate && (et - st) < 1000) { - taosMsleep(1000 - (et - st)); // ms - //printf("========sleep duration:%"PRId64 "========inserted rows:%d, table range:%d - %d\n", (1000 - (et - st)), i, winfo->start_table_id, winfo->end_table_id); - } - - if (superTblInfo->insertRate) { - st = taosGetTimestampMs(); - } - - int32_t tbl_id = 0; - for (int tID = winfo->start_table_id; tID <= winfo->end_table_id; ) { - int inserted = i; - - int k = 0; - int batchRowsSql = 0; - while (1) - { - int len = 0; - memset(buffer, 0, superTblInfo->maxSqlLen); - char *pstr = buffer; - - int32_t end_tbl_id = tID + numberOfTblInOneSql; - if (end_tbl_id > winfo->end_table_id) { - end_tbl_id = winfo->end_table_id+1; - } - for (tbl_id = tID; tbl_id < end_tbl_id; tbl_id++) { - sampleUsePos = samplePos; - if (AUTO_CREATE_SUBTBL == superTblInfo->autoCreateTable) { - char* tagsValBuf = NULL; - if (0 == superTblInfo->tagSource) { - tagsValBuf = generateTagVaulesForStb(superTblInfo); - } else { - tagsValBuf = getTagValueFromTagSample(superTblInfo, tbl_id % superTblInfo->tagSampleCount); - } - if (NULL == tagsValBuf) { - goto free_and_statistics; - } - - if (0 == len) { - len += snprintf(pstr + len, superTblInfo->maxSqlLen - len, "insert into %s.%s%d using %s.%s tags %s values ", winfo->db_name, superTblInfo->childTblPrefix, tbl_id, winfo->db_name, superTblInfo->sTblName, tagsValBuf); - } else { - len += snprintf(pstr + len, superTblInfo->maxSqlLen - len, " %s.%s%d using %s.%s tags %s values ", winfo->db_name, superTblInfo->childTblPrefix, tbl_id, winfo->db_name, superTblInfo->sTblName, tagsValBuf); - } - tmfree(tagsValBuf); - } else if (TBL_ALREADY_EXISTS == superTblInfo->childTblExists) { - if (0 == len) { - len += snprintf(pstr + len, superTblInfo->maxSqlLen - len, "insert into %s.%s values ", winfo->db_name, superTblInfo->childTblName + tbl_id * TSDB_TABLE_NAME_LEN); - } else { - len += snprintf(pstr + len, superTblInfo->maxSqlLen - len, " %s.%s values ", winfo->db_name, superTblInfo->childTblName + tbl_id * TSDB_TABLE_NAME_LEN); - } - } else { // pre-create child table - if (0 == len) { - len += snprintf(pstr + len, superTblInfo->maxSqlLen - len, "insert into %s.%s%d values ", winfo->db_name, superTblInfo->childTblPrefix, tbl_id); - } else { - len += snprintf(pstr + len, superTblInfo->maxSqlLen - len, " %s.%s%d values ", winfo->db_name, superTblInfo->childTblPrefix, tbl_id); - } - } - - tmp_time = time_counter; - for (k = 0; k < superTblInfo->rowsPerTbl;) { - int retLen = 0; - if (0 == strncasecmp(superTblInfo->dataSource, "sample", 6)) { - retLen = getRowDataFromSample(pstr + len, superTblInfo->maxSqlLen - len, tmp_time += superTblInfo->timeStampStep, superTblInfo, &sampleUsePos, fp, sampleDataBuf); - if (retLen < 0) { - goto free_and_statistics; - } - } else if (0 == strncasecmp(superTblInfo->dataSource, "rand", 8)) { - int rand_num = rand_tinyint() % 100; - if (0 != superTblInfo->disorderRatio && rand_num < superTblInfo->disorderRatio) { - int64_t d = tmp_time - rand() % superTblInfo->disorderRange; - retLen = generateRowData(pstr + len, superTblInfo->maxSqlLen - len, d, superTblInfo); - } else { - retLen = generateRowData(pstr + len, superTblInfo->maxSqlLen - len, tmp_time += superTblInfo->timeStampStep, superTblInfo); - } - if (retLen < 0) { - goto free_and_statistics; - } - } - len += retLen; - //inserted++; - k++; - totalRowsInserted++; - batchRowsSql++; - - if (inserted >= superTblInfo->insertRows || (superTblInfo->maxSqlLen - len) < (superTblInfo->lenOfOneRow + 128) || batchRowsSql >= INT16_MAX - 1) { - tID = tbl_id + 1; - printf("config rowsPerTbl and numberOfTblInOneSql not match with max_sql_lenth, please reconfig![lenOfOneRow:%d]\n", superTblInfo->lenOfOneRow); - goto send_to_server; - } - } - - } - - tID = tbl_id; - inserted += superTblInfo->rowsPerTbl; - - send_to_server: - batchRowsSql = 0; - if (0 == strncasecmp(superTblInfo->insertMode, "taosc", 5)) { - //printf("multi table===== sql: %s \n\n", buffer); - //int64_t t1 = taosGetTimestampMs(); - int affectedRows = queryDbExec(winfo->taos, buffer, INSERT_TYPE); - if (0 > affectedRows) { - goto free_and_statistics; - } - totalAffectedRows += affectedRows; - - int64_t currentPrintTime = taosGetTimestampMs(); - if (currentPrintTime - lastPrintTime > 30*1000) { - printf("thread[%d] has currently inserted rows: %"PRId64 ", affected rows: %"PRId64 "\n", winfo->threadID, totalRowsInserted, totalAffectedRows); - lastPrintTime = currentPrintTime; - } - //int64_t t2 = taosGetTimestampMs(); - //printf("taosc insert sql return, Spent %.4f seconds \n", (double)(t2 - t1)/1000.0); - } else { - #ifdef TD_LOWA_CURL - //int64_t t1 = taosGetTimestampMs(); - int retCode = curlProceSql(g_Dbs.host, g_Dbs.port, buffer, winfo->curl_handle); - //int64_t t2 = taosGetTimestampMs(); - //printf("http insert sql return, Spent %ld ms \n", t2 - t1); - - if (0 != retCode) { - printf("========curl return fail, threadID[%d]\n", winfo->threadID); - goto free_and_statistics; - } - #else - printf("========no use http mode for no curl lib!\n"); - goto free_and_statistics; - #endif - } - - //printf("========tID:%d, k:%d, loop_cnt:%d\n", tID, k, loop_cnt); - break; - } - - if (tID > winfo->end_table_id) { - if (0 == strncasecmp(superTblInfo->dataSource, "sample", 6)) { - samplePos = sampleUsePos; - } - i = inserted; - time_counter = tmp_time; - } - } - - if (superTblInfo->insertRate) { - et = taosGetTimestampMs(); - } - //printf("========loop %d childTables duration:%"PRId64 "========inserted rows:%d\n", winfo->end_table_id - winfo->start_table_id, et - st, i); - } - - free_and_statistics: - tmfree(buffer); - winfo->totalRowsInserted = totalRowsInserted; - winfo->totalAffectedRows = totalAffectedRows; - printf("====thread[%d] completed total inserted rows: %"PRId64 ", affected rows: %"PRId64 "====\n", winfo->threadID, totalRowsInserted, totalAffectedRows); - return; -} - -// sync insertion -/* - 1 thread: 100 tables * 2000 rows/s - 1 thread: 10 tables * 20000 rows/s - 6 thread: 300 tables * 2000 rows/s - - 2 taosinsertdata , 1 thread: 10 tables * 20000 rows/s -*/ -void *syncWrite(void *sarg) { - int64_t totalRowsInserted = 0; - int64_t totalAffectedRows = 0; - int64_t lastPrintTime = taosGetTimestampMs(); - - threadInfo *winfo = (threadInfo *)sarg; - SSuperTable* superTblInfo = winfo->superTblInfo; - - FILE *fp = NULL; - char* sampleDataBuf = NULL; - int samplePos = 0; - - // each thread read sample data from csv file - if (0 == strncasecmp(superTblInfo->dataSource, "sample", 6)) { - sampleDataBuf = calloc(superTblInfo->lenOfOneRow * MAX_SAMPLES_ONCE_FROM_FILE, 1); - if (sampleDataBuf == NULL) { - printf("Failed to calloc %d Bytes, reason:%s\n", superTblInfo->lenOfOneRow * MAX_SAMPLES_ONCE_FROM_FILE, strerror(errno)); - return NULL; - } - - fp = fopen(superTblInfo->sampleFile, "r"); - if (fp == NULL) { - printf("Failed to open sample file: %s, reason:%s\n", superTblInfo->sampleFile, strerror(errno)); - tmfree(sampleDataBuf); - return NULL; - } - int ret = readSampleFromCsvFileToMem(fp, superTblInfo, sampleDataBuf); - if (0 != ret) { - tmfree(sampleDataBuf); - tmfclose(fp); - return NULL; - } - } - - if (superTblInfo->numberOfTblInOneSql > 0) { - syncWriteForNumberOfTblInOneSql(winfo, fp, sampleDataBuf); - tmfree(sampleDataBuf); - tmfclose(fp); - return NULL; - } - - //printf("========threadID[%d], table rang: %d - %d \n", winfo->threadID, winfo->start_table_id, winfo->end_table_id); - - char* buffer = calloc(superTblInfo->maxSqlLen, 1); - - int nrecords_per_request = 0; - if (AUTO_CREATE_SUBTBL == superTblInfo->autoCreateTable) { - nrecords_per_request = (superTblInfo->maxSqlLen - 1280 - superTblInfo->lenOfTagOfOneRow) / superTblInfo->lenOfOneRow; - } else { - nrecords_per_request = (superTblInfo->maxSqlLen - 1280) / superTblInfo->lenOfOneRow; - } - - int nrecords_no_last_req = nrecords_per_request; - int nrecords_last_req = 0; - int loop_cnt = 0; - if (0 != superTblInfo->insertRate) { - if (nrecords_no_last_req >= superTblInfo->insertRate) { - nrecords_no_last_req = superTblInfo->insertRate; - } else { - nrecords_last_req = superTblInfo->insertRate % nrecords_per_request; - loop_cnt = (superTblInfo->insertRate / nrecords_per_request) + (superTblInfo->insertRate % nrecords_per_request ? 1 : 0) ; - } - } - - if (nrecords_no_last_req <= 0) { - nrecords_no_last_req = 1; - } - - if (nrecords_no_last_req >= INT16_MAX) { - nrecords_no_last_req = INT16_MAX - 1; - } - - if (nrecords_last_req >= INT16_MAX) { - nrecords_last_req = INT16_MAX - 1; - } - - int nrecords_cur_req = nrecords_no_last_req; - int loop_cnt_orig = loop_cnt; - - //printf("========nrecords_per_request:%d, nrecords_no_last_req:%d, nrecords_last_req:%d, loop_cnt:%d\n", nrecords_per_request, nrecords_no_last_req, nrecords_last_req, loop_cnt); - - int64_t time_counter = winfo->start_time; - - int64_t st = 0; - int64_t et = 0; - for (int i = 0; i < superTblInfo->insertRows;) { - if (superTblInfo->insertRate && (et - st) < 1000) { - taosMsleep(1000 - (et - st)); // ms - //printf("========sleep duration:%"PRId64 "========inserted rows:%d, table range:%d - %d\n", (1000 - (et - st)), i, winfo->start_table_id, winfo->end_table_id); - } - - if (superTblInfo->insertRate) { - st = taosGetTimestampMs(); - } - - for (int tID = winfo->start_table_id; tID <= winfo->end_table_id; tID++) { - int inserted = i; - int64_t tmp_time = time_counter; - - int sampleUsePos = samplePos; - int k = 0; - while (1) - { - int len = 0; - memset(buffer, 0, superTblInfo->maxSqlLen); - char *pstr = buffer; - - if (AUTO_CREATE_SUBTBL == superTblInfo->autoCreateTable) { - char* tagsValBuf = NULL; - if (0 == superTblInfo->tagSource) { - tagsValBuf = generateTagVaulesForStb(superTblInfo); - } else { - tagsValBuf = getTagValueFromTagSample(superTblInfo, tID % superTblInfo->tagSampleCount); - } - if (NULL == tagsValBuf) { - goto free_and_statistics_2; - } - - len += snprintf(pstr + len, superTblInfo->maxSqlLen - len, "insert into %s.%s%d using %s.%s tags %s values", winfo->db_name, superTblInfo->childTblPrefix, tID, winfo->db_name, superTblInfo->sTblName, tagsValBuf); - tmfree(tagsValBuf); - } else if (TBL_ALREADY_EXISTS == superTblInfo->childTblExists) { - len += snprintf(pstr + len, superTblInfo->maxSqlLen - len, "insert into %s.%s values", winfo->db_name, superTblInfo->childTblName + tID * TSDB_TABLE_NAME_LEN); - } else { - len += snprintf(pstr + len, superTblInfo->maxSqlLen - len, "insert into %s.%s%d values", winfo->db_name, superTblInfo->childTblPrefix, tID); - } - - for (k = 0; k < nrecords_cur_req;) { - int retLen = 0; - if (0 == strncasecmp(superTblInfo->dataSource, "sample", 6)) { - retLen = getRowDataFromSample(pstr + len, superTblInfo->maxSqlLen - len, tmp_time += superTblInfo->timeStampStep, superTblInfo, &sampleUsePos, fp, sampleDataBuf); - if (retLen < 0) { - goto free_and_statistics_2; - } - } else if (0 == strncasecmp(superTblInfo->dataSource, "rand", 8)) { - int rand_num = rand_tinyint() % 100; - if (0 != superTblInfo->disorderRatio && rand_num < superTblInfo->disorderRatio) { - int64_t d = tmp_time - rand() % superTblInfo->disorderRange; - retLen = generateRowData(pstr + len, superTblInfo->maxSqlLen - len, d, superTblInfo); - //printf("disorder rows, rand_num:%d, last ts:%"PRId64" current ts:%"PRId64"\n", rand_num, tmp_time, d); - } else { - retLen = generateRowData(pstr + len, superTblInfo->maxSqlLen - len, tmp_time += superTblInfo->timeStampStep, superTblInfo); - } - if (retLen < 0) { - goto free_and_statistics_2; - } - } - len += retLen; - inserted++; - k++; - totalRowsInserted++; - - if (inserted >= superTblInfo->insertRows || (superTblInfo->maxSqlLen - len) < (superTblInfo->lenOfOneRow + 128)) break; - } - - if (0 == strncasecmp(superTblInfo->insertMode, "taosc", 5)) { - //printf("===== sql: %s \n\n", buffer); - //int64_t t1 = taosGetTimestampMs(); - int affectedRows = queryDbExec(winfo->taos, buffer, INSERT_TYPE); - if (0 > affectedRows){ - goto free_and_statistics_2; - } - totalAffectedRows += affectedRows; - - int64_t currentPrintTime = taosGetTimestampMs(); - if (currentPrintTime - lastPrintTime > 30*1000) { - printf("thread[%d] has currently inserted rows: %"PRId64 ", affected rows: %"PRId64 "\n", winfo->threadID, totalRowsInserted, totalAffectedRows); - lastPrintTime = currentPrintTime; - } - //int64_t t2 = taosGetTimestampMs(); - //printf("taosc insert sql return, Spent %.4f seconds \n", (double)(t2 - t1)/1000.0); - } else { - #ifdef TD_LOWA_CURL - //int64_t t1 = taosGetTimestampMs(); - int retCode = curlProceSql(g_Dbs.host, g_Dbs.port, buffer, winfo->curl_handle); - //int64_t t2 = taosGetTimestampMs(); - //printf("http insert sql return, Spent %ld ms \n", t2 - t1); - - if (0 != retCode) { - printf("========curl return fail, threadID[%d]\n", winfo->threadID); - goto free_and_statistics_2; - } - #else - printf("========no use http mode for no curl lib!\n"); - goto free_and_statistics_2; - #endif - } - - //printf("========tID:%d, k:%d, loop_cnt:%d\n", tID, k, loop_cnt); - - if (loop_cnt) { - loop_cnt--; - if ((1 == loop_cnt) && (0 != nrecords_last_req)) { - nrecords_cur_req = nrecords_last_req; - } else if (0 == loop_cnt){ - nrecords_cur_req = nrecords_no_last_req; - loop_cnt = loop_cnt_orig; - break; - } - } else { - break; - } - } - - if (tID == winfo->end_table_id) { - if (0 == strncasecmp(superTblInfo->dataSource, "sample", 6)) { - samplePos = sampleUsePos; - } - i = inserted; - time_counter = tmp_time; - } - } - - if (superTblInfo->insertRate) { - et = taosGetTimestampMs(); - } - //printf("========loop %d childTables duration:%"PRId64 "========inserted rows:%d\n", winfo->end_table_id - winfo->start_table_id, et - st, i); - } - - free_and_statistics_2: - tmfree(buffer); - tmfree(sampleDataBuf); - tmfclose(fp); - - winfo->totalRowsInserted = totalRowsInserted; - winfo->totalAffectedRows = totalAffectedRows; - - printf("====thread[%d] completed total inserted rows: %"PRId64 ", total affected rows: %"PRId64 "====\n", winfo->threadID, totalRowsInserted, totalAffectedRows); - return NULL; -} - -void callBack(void *param, TAOS_RES *res, int code) { - threadInfo* winfo = (threadInfo*)param; - - if (winfo->superTblInfo->insertRate) { - winfo->et = taosGetTimestampMs(); - if (winfo->et - winfo->st < 1000) { - taosMsleep(1000 - (winfo->et - winfo->st)); // ms - } - } - - char *buffer = calloc(1, winfo->superTblInfo->maxSqlLen); - char *data = calloc(1, MAX_DATA_SIZE); - char *pstr = buffer; - pstr += sprintf(pstr, "insert into %s.%s%d values", winfo->db_name, winfo->tb_prefix, winfo->start_table_id); - if (winfo->counter >= winfo->superTblInfo->insertRows) { - winfo->start_table_id++; - winfo->counter = 0; - } - if (winfo->start_table_id > winfo->end_table_id) { - tsem_post(&winfo->lock_sem); - free(buffer); - free(data); - taos_free_result(res); - return; - } - - for (int i = 0; i < winfo->nrecords_per_request; i++) { - int rand_num = rand() % 100; - if (0 != winfo->superTblInfo->disorderRatio && rand_num < winfo->superTblInfo->disorderRatio) - { - int64_t d = winfo->lastTs - rand() % 1000000 + rand_num; - //generateData(data, datatype, ncols_per_record, d, len_of_binary); - (void)generateRowData(data, MAX_DATA_SIZE, d, winfo->superTblInfo); - } else { - //generateData(data, datatype, ncols_per_record, tmp_time += 1000, len_of_binary); - (void)generateRowData(data, MAX_DATA_SIZE, winfo->lastTs += 1000, winfo->superTblInfo); - } - pstr += sprintf(pstr, "%s", data); - winfo->counter++; - - if (winfo->counter >= winfo->superTblInfo->insertRows) { - break; - } - } - - if (winfo->superTblInfo->insertRate) { - winfo->st = taosGetTimestampMs(); - } - taos_query_a(winfo->taos, buffer, callBack, winfo); - free(buffer); - free(data); - - taos_free_result(res); -} - -void *asyncWrite(void *sarg) { - threadInfo *winfo = (threadInfo *)sarg; - - winfo->nrecords_per_request = 0; - //if (AUTO_CREATE_SUBTBL == winfo->superTblInfo->autoCreateTable) { - winfo->nrecords_per_request = (winfo->superTblInfo->maxSqlLen - 1280 - winfo->superTblInfo->lenOfTagOfOneRow) / winfo->superTblInfo->lenOfOneRow; - //} else { - // winfo->nrecords_per_request = (winfo->superTblInfo->maxSqlLen - 1280) / winfo->superTblInfo->lenOfOneRow; - //} - - if (0 != winfo->superTblInfo->insertRate) { - if (winfo->nrecords_per_request >= winfo->superTblInfo->insertRate) { - winfo->nrecords_per_request = winfo->superTblInfo->insertRate; - } - } - - if (winfo->nrecords_per_request <= 0) { - winfo->nrecords_per_request = 1; - } - - if (winfo->nrecords_per_request >= INT16_MAX) { - winfo->nrecords_per_request = INT16_MAX - 1; - } - - if (winfo->nrecords_per_request >= INT16_MAX) { - winfo->nrecords_per_request = INT16_MAX - 1; - } - - winfo->st = 0; - winfo->et = 0; - winfo->lastTs = winfo->start_time; - - if (winfo->superTblInfo->insertRate) { - winfo->st = taosGetTimestampMs(); - } - taos_query_a(winfo->taos, "show databases", callBack, winfo); - - tsem_wait(&(winfo->lock_sem)); - - return NULL; -} - -void startMultiThreadInsertData(int threads, char* db_name, char* precision, SSuperTable* superTblInfo) { - pthread_t *pids = malloc(threads * sizeof(pthread_t)); - threadInfo *infos = malloc(threads * sizeof(threadInfo)); - memset(pids, 0, threads * sizeof(pthread_t)); - memset(infos, 0, threads * sizeof(threadInfo)); - int ntables = superTblInfo->childTblCount; - - int a = ntables / threads; - if (a < 1) { - threads = ntables; - a = 1; - } - - int b = 0; - if (threads != 0) { - b = ntables % threads; - } - - //TAOS* taos; - //if (0 == strncasecmp(superTblInfo->insertMode, "taosc", 5)) { - // taos = taos_connect(g_Dbs.host, g_Dbs.user, g_Dbs.password, db_name, g_Dbs.port); - // if (NULL == taos) { - // printf("connect to server fail, reason: %s\n", taos_errstr(NULL)); - // exit(-1); - // } - //} - - int32_t timePrec = TSDB_TIME_PRECISION_MILLI; - if (0 != precision[0]) { - if (0 == strncasecmp(precision, "ms", 2)) { - timePrec = TSDB_TIME_PRECISION_MILLI; - } else if (0 == strncasecmp(precision, "us", 2)) { - timePrec = TSDB_TIME_PRECISION_MICRO; - } else { - printf("No support precision: %s\n", precision); - exit(-1); - } - } - - int64_t start_time; - if (0 == strncasecmp(superTblInfo->startTimestamp, "now", 3)) { - start_time = taosGetTimestamp(timePrec); - } else { - (void)taosParseTime(superTblInfo->startTimestamp, &start_time, strlen(superTblInfo->startTimestamp), timePrec, 0); - } - - double start = getCurrentTime(); - - int last = 0; - for (int i = 0; i < threads; i++) { - threadInfo *t_info = infos + i; - t_info->threadID = i; - tstrncpy(t_info->db_name, db_name, MAX_DB_NAME_SIZE); - t_info->superTblInfo = superTblInfo; - - t_info->start_time = start_time; - - if (0 == strncasecmp(superTblInfo->insertMode, "taosc", 5)) { - //t_info->taos = taos; - t_info->taos = taos_connect(g_Dbs.host, g_Dbs.user, g_Dbs.password, db_name, g_Dbs.port); - if (NULL == t_info->taos) { - printf("connect to server fail from insert sub thread, reason: %s\n", taos_errstr(NULL)); - exit(-1); - } - } else { - t_info->taos = NULL; - #ifdef TD_LOWA_CURL - t_info->curl_handle = curl_easy_init(); - #endif - } - - if (0 == superTblInfo->multiThreadWriteOneTbl) { - t_info->start_table_id = last; - t_info->end_table_id = i < b ? last + a : last + a - 1; - last = t_info->end_table_id + 1; - } else { - t_info->start_table_id = 0; - t_info->end_table_id = superTblInfo->childTblCount - 1; - t_info->start_time = t_info->start_time + rand_int() % 10000 - rand_tinyint(); - } - - tsem_init(&(t_info->lock_sem), 0, 0); - - if (SYNC == g_Dbs.queryMode) { - pthread_create(pids + i, NULL, syncWrite, t_info); - } else { - pthread_create(pids + i, NULL, asyncWrite, t_info); - } - } - - for (int i = 0; i < threads; i++) { - pthread_join(pids[i], NULL); - } - - for (int i = 0; i < threads; i++) { - threadInfo *t_info = infos + i; - - tsem_destroy(&(t_info->lock_sem)); - taos_close(t_info->taos); - - superTblInfo->totalAffectedRows += t_info->totalAffectedRows; - superTblInfo->totalRowsInserted += t_info->totalRowsInserted; - #ifdef TD_LOWA_CURL - if (t_info->curl_handle) { - curl_easy_cleanup(t_info->curl_handle); - } - #endif - } - - double end = getCurrentTime(); - - //taos_close(taos); - - free(pids); - free(infos); - - printf("Spent %.4f seconds to insert rows: %"PRId64", affected rows: %"PRId64" with %d thread(s) into %s.%s\n\n", - end - start, superTblInfo->totalRowsInserted, superTblInfo->totalAffectedRows, threads, db_name, superTblInfo->sTblName); - fprintf(g_fpOfInsertResult, "Spent %.4f seconds to insert rows: %"PRId64", affected rows: %"PRId64" with %d thread(s) into %s.%s\n\n", - end - start, superTblInfo->totalRowsInserted, superTblInfo->totalAffectedRows, threads, db_name, superTblInfo->sTblName); -} - - -void *readTable(void *sarg) { -#if 1 - threadInfo *rinfo = (threadInfo *)sarg; - TAOS *taos = rinfo->taos; - char command[BUFFER_SIZE] = "\0"; - int64_t sTime = rinfo->start_time; - char *tb_prefix = rinfo->tb_prefix; - FILE *fp = fopen(rinfo->fp, "a"); - if (NULL == fp) { - printf("fopen %s fail, reason:%s.\n", rinfo->fp, strerror(errno)); - return NULL; - } - - int num_of_DPT = rinfo->superTblInfo->insertRows; // nrecords_per_table; - int num_of_tables = rinfo->end_table_id - rinfo->start_table_id + 1; - int totalData = num_of_DPT * num_of_tables; - bool do_aggreFunc = g_Dbs.do_aggreFunc; - - int n = do_aggreFunc ? (sizeof(aggreFunc) / sizeof(aggreFunc[0])) : 2; - if (!do_aggreFunc) { - printf("\nThe first field is either Binary or Bool. Aggregation functions are not supported.\n"); - } - printf("%d records:\n", totalData); - fprintf(fp, "| QFunctions | QRecords | QSpeed(R/s) | QLatency(ms) |\n"); - - for (int j = 0; j < n; j++) { - double totalT = 0; - int count = 0; - for (int i = 0; i < num_of_tables; i++) { - sprintf(command, "select %s from %s%d where ts>= %" PRId64, aggreFunc[j], tb_prefix, i, sTime); - - double t = getCurrentTime(); - TAOS_RES *pSql = taos_query(taos, command); - int32_t code = taos_errno(pSql); - - if (code != 0) { - fprintf(stderr, "Failed to query:%s\n", taos_errstr(pSql)); - taos_free_result(pSql); - taos_close(taos); - return NULL; - } - - while (taos_fetch_row(pSql) != NULL) { - count++; - } - - t = getCurrentTime() - t; - totalT += t; - - taos_free_result(pSql); - } - - fprintf(fp, "|%10s | %10d | %12.2f | %10.2f |\n", - aggreFunc[j][0] == '*' ? " * " : aggreFunc[j], totalData, - (double)(num_of_tables * num_of_DPT) / totalT, totalT * 1000); - printf("select %10s took %.6f second(s)\n", aggreFunc[j], totalT); - } - fprintf(fp, "\n"); - fclose(fp); -#endif - return NULL; -} - -void *readMetric(void *sarg) { -#if 1 - threadInfo *rinfo = (threadInfo *)sarg; - TAOS *taos = rinfo->taos; - char command[BUFFER_SIZE] = "\0"; - FILE *fp = fopen(rinfo->fp, "a"); - if (NULL == fp) { - printf("fopen %s fail, reason:%s.\n", rinfo->fp, strerror(errno)); - return NULL; - } - - int num_of_DPT = rinfo->superTblInfo->insertRows; - int num_of_tables = rinfo->end_table_id - rinfo->start_table_id + 1; - int totalData = num_of_DPT * num_of_tables; - bool do_aggreFunc = g_Dbs.do_aggreFunc; - - int n = do_aggreFunc ? (sizeof(aggreFunc) / sizeof(aggreFunc[0])) : 2; - if (!do_aggreFunc) { - printf("\nThe first field is either Binary or Bool. Aggregation functions are not supported.\n"); - } - printf("%d records:\n", totalData); - fprintf(fp, "Querying On %d records:\n", totalData); - - for (int j = 0; j < n; j++) { - char condition[BUFFER_SIZE - 30] = "\0"; - char tempS[64] = "\0"; - - int m = 10 < num_of_tables ? 10 : num_of_tables; - - for (int i = 1; i <= m; i++) { - if (i == 1) { - sprintf(tempS, "t1 = %d", i); - } else { - sprintf(tempS, " or t1 = %d ", i); - } - strcat(condition, tempS); - - sprintf(command, "select %s from meters where %s", aggreFunc[j], condition); - - printf("Where condition: %s\n", condition); - fprintf(fp, "%s\n", command); - - double t = getCurrentTime(); - - TAOS_RES *pSql = taos_query(taos, command); - int32_t code = taos_errno(pSql); - - if (code != 0) { - fprintf(stderr, "Failed to query:%s\n", taos_errstr(pSql)); - taos_free_result(pSql); - taos_close(taos); - return NULL; - } - int count = 0; - while (taos_fetch_row(pSql) != NULL) { - count++; - } - t = getCurrentTime() - t; - - fprintf(fp, "| Speed: %12.2f(per s) | Latency: %.4f(ms) |\n", num_of_tables * num_of_DPT / t, t * 1000); - printf("select %10s took %.6f second(s)\n\n", aggreFunc[j], t); - - taos_free_result(pSql); - } - fprintf(fp, "\n"); - } - fclose(fp); -#endif - return NULL; -} - - -int insertTestProcess() { - - g_fpOfInsertResult = fopen(g_Dbs.resultFile, "a"); - if (NULL == g_fpOfInsertResult) { - fprintf(stderr, "Failed to open %s for save result\n", g_Dbs.resultFile); - return 1; - }; - - printfInsertMeta(); - printfInsertMetaToFile(g_fpOfInsertResult); - - if (!g_args.answer_yes) { - printf("Press enter key to continue\n\n"); - (void)getchar(); - } - - init_rand_data(); - - // create database and super tables - (void)createDatabases(); - - // pretreatement - prePareSampleData(); - - double start; - double end; - - // create child tables - start = getCurrentTime(); - createChildTables(); - end = getCurrentTime(); - if (g_totalChildTables > 0) { - printf("Spent %.4f seconds to create %d tables with %d thread(s)\n\n", end - start, g_totalChildTables, g_Dbs.threadCount); - fprintf(g_fpOfInsertResult, "Spent %.4f seconds to create %d tables with %d thread(s)\n\n", end - start, g_totalChildTables, g_Dbs.threadCount); - } - - usleep(1000*1000); - - // create sub threads for inserting data - //start = getCurrentTime(); - for (int i = 0; i < g_Dbs.dbCount; i++) { - for (int j = 0; j < g_Dbs.db[i].superTblCount; j++) { - SSuperTable* superTblInfo = &g_Dbs.db[i].superTbls[j]; - startMultiThreadInsertData(g_Dbs.threadCount, g_Dbs.db[i].dbName, g_Dbs.db[i].dbCfg.precision, superTblInfo); - } - } - //end = getCurrentTime(); - - //int64_t totalRowsInserted = 0; - //int64_t totalAffectedRows = 0; - //for (int i = 0; i < g_Dbs.dbCount; i++) { - // for (int j = 0; j < g_Dbs.db[i].superTblCount; j++) { - // totalRowsInserted += g_Dbs.db[i].superTbls[j].totalRowsInserted; - // totalAffectedRows += g_Dbs.db[i].superTbls[j].totalAffectedRows; - //} - //printf("Spent %.4f seconds to insert rows: %"PRId64", affected rows: %"PRId64" with %d thread(s)\n\n", end - start, totalRowsInserted, totalAffectedRows, g_Dbs.threadCount); - if (NULL == g_args.metaFile && false == g_Dbs.insert_only) { - // query data - pthread_t read_id; - threadInfo *rInfo = malloc(sizeof(threadInfo)); - rInfo->start_time = 1500000000000; // 2017-07-14 10:40:00.000 - rInfo->start_table_id = 0; - rInfo->end_table_id = g_Dbs.db[0].superTbls[0].childTblCount - 1; - //rInfo->do_aggreFunc = g_Dbs.do_aggreFunc; - //rInfo->nrecords_per_table = g_Dbs.db[0].superTbls[0].insertRows; - rInfo->superTblInfo = &g_Dbs.db[0].superTbls[0]; - rInfo->taos = taos_connect(g_Dbs.host, g_Dbs.user, g_Dbs.password, g_Dbs.db[0].dbName, g_Dbs.port); - strcpy(rInfo->tb_prefix, g_Dbs.db[0].superTbls[0].childTblPrefix); - strcpy(rInfo->fp, g_Dbs.resultFile); - - if (!g_Dbs.use_metric) { - pthread_create(&read_id, NULL, readTable, rInfo); - } else { - pthread_create(&read_id, NULL, readMetric, rInfo); - } - pthread_join(read_id, NULL); - taos_close(rInfo->taos); - } - - postFreeResource(); - - return 0; -} - -void *superQueryProcess(void *sarg) { - threadInfo *winfo = (threadInfo *)sarg; - - //char sqlStr[MAX_TB_NAME_SIZE*2]; - //sprintf(sqlStr, "use %s", g_queryInfo.dbName); - //queryDB(winfo->taos, sqlStr); - - int64_t st = 0; - int64_t et = 0; - while (1) { - if (g_queryInfo.superQueryInfo.rate && (et - st) < g_queryInfo.superQueryInfo.rate*1000) { - taosMsleep(g_queryInfo.superQueryInfo.rate*1000 - (et - st)); // ms - //printf("========sleep duration:%"PRId64 "========inserted rows:%d, table range:%d - %d\n", (1000 - (et - st)), i, winfo->start_table_id, winfo->end_table_id); - } - - st = taosGetTimestampMs(); - for (int i = 0; i < g_queryInfo.superQueryInfo.sqlCount; i++) { - if (0 == strncasecmp(g_queryInfo.queryMode, "taosc", 5)) { - int64_t t1 = taosGetTimestampUs(); - char tmpFile[MAX_FILE_NAME_LEN*2] = {0}; - if (g_queryInfo.superQueryInfo.result[i][0] != 0) { - sprintf(tmpFile, "%s-%d", g_queryInfo.superQueryInfo.result[i], winfo->threadID); - } - selectAndGetResult(winfo->taos, g_queryInfo.superQueryInfo.sql[i], tmpFile); - int64_t t2 = taosGetTimestampUs(); - printf("=[taosc] thread[%"PRIu64"] complete one sql, Spent %f s\n", (uint64_t)pthread_self(), (t2 - t1)/1000000.0); - } else { - #ifdef TD_LOWA_CURL - int64_t t1 = taosGetTimestampUs(); - int retCode = curlProceSql(g_queryInfo.host, g_queryInfo.port, g_queryInfo.superQueryInfo.sql[i], winfo->curl_handle); - int64_t t2 = taosGetTimestampUs(); - printf("=[restful] thread[%"PRIu64"] complete one sql, Spent %f s\n", (uint64_t)pthread_self(), (t2 - t1)/1000000.0); - - if (0 != retCode) { - printf("====curl return fail, threadID[%d]\n", winfo->threadID); - return NULL; - } - #endif - } - } - et = taosGetTimestampMs(); - printf("==thread[%"PRIu64"] complete all sqls to specify tables once queries duration:%.6fs\n\n", (uint64_t)pthread_self(), (double)(et - st)/1000.0); - } - return NULL; -} - -void replaceSubTblName(char* inSql, char* outSql, int tblIndex) { - char sourceString[32] = "xxxx"; - char subTblName[MAX_TB_NAME_SIZE*3]; - sprintf(subTblName, "%s.%s", g_queryInfo.dbName, g_queryInfo.subQueryInfo.childTblName + tblIndex*TSDB_TABLE_NAME_LEN); - - //printf("inSql: %s\n", inSql); - - char* pos = strstr(inSql, sourceString); - if (0 == pos) { - return; - } - - strncpy(outSql, inSql, pos - inSql); - //printf("1: %s\n", outSql); - strcat(outSql, subTblName); - //printf("2: %s\n", outSql); - strcat(outSql, pos+strlen(sourceString)); - //printf("3: %s\n", outSql); -} - -void *subQueryProcess(void *sarg) { - char sqlstr[1024]; - threadInfo *winfo = (threadInfo *)sarg; - int64_t st = 0; - int64_t et = g_queryInfo.subQueryInfo.rate*1000; - while (1) { - if (g_queryInfo.subQueryInfo.rate && (et - st) < g_queryInfo.subQueryInfo.rate*1000) { - taosMsleep(g_queryInfo.subQueryInfo.rate*1000 - (et - st)); // ms - //printf("========sleep duration:%"PRId64 "========inserted rows:%d, table range:%d - %d\n", (1000 - (et - st)), i, winfo->start_table_id, winfo->end_table_id); - } - - st = taosGetTimestampMs(); - for (int i = winfo->start_table_id; i <= winfo->end_table_id; i++) { - for (int i = 0; i < g_queryInfo.subQueryInfo.sqlCount; i++) { - memset(sqlstr,0,sizeof(sqlstr)); - replaceSubTblName(g_queryInfo.subQueryInfo.sql[i], sqlstr, i); - char tmpFile[MAX_FILE_NAME_LEN*2] = {0}; - if (g_queryInfo.subQueryInfo.result[i][0] != 0) { - sprintf(tmpFile, "%s-%d", g_queryInfo.subQueryInfo.result[i], winfo->threadID); - } - selectAndGetResult(winfo->taos, sqlstr, tmpFile); - } - } - et = taosGetTimestampMs(); - printf("####thread[%"PRIu64"] complete all sqls to allocate all sub-tables[%d - %d] once queries duration:%.4fs\n\n", (uint64_t)pthread_self(), winfo->start_table_id, winfo->end_table_id, (double)(et - st)/1000.0); - } - return NULL; -} - -int queryTestProcess() { - TAOS * taos = NULL; - taos_init(); - taos = taos_connect(g_queryInfo.host, g_queryInfo.user, g_queryInfo.password, NULL, g_queryInfo.port); - if (taos == NULL) { - fprintf(stderr, "Failed to connect to TDengine, reason:%s\n", taos_errstr(NULL)); - exit(-1); - } - - if (0 != g_queryInfo.subQueryInfo.sqlCount) { - (void)getAllChildNameOfSuperTable(taos, g_queryInfo.dbName, g_queryInfo.subQueryInfo.sTblName, &g_queryInfo.subQueryInfo.childTblName, &g_queryInfo.subQueryInfo.childTblCount); - } - - printfQueryMeta(); - - if (!g_args.answer_yes) { - printf("Press enter key to continue\n\n"); - (void)getchar(); - } - - printfQuerySystemInfo(taos); - - pthread_t *pids = NULL; - threadInfo *infos = NULL; - //==== create sub threads for query from specify table - if (g_queryInfo.superQueryInfo.sqlCount > 0 && g_queryInfo.superQueryInfo.concurrent > 0) { - - pids = malloc(g_queryInfo.superQueryInfo.concurrent * sizeof(pthread_t)); - infos = malloc(g_queryInfo.superQueryInfo.concurrent * sizeof(threadInfo)); - if ((NULL == pids) || (NULL == infos)) { - printf("malloc failed for create threads\n"); - taos_close(taos); - exit(-1); - } - - for (int i = 0; i < g_queryInfo.superQueryInfo.concurrent; i++) { - threadInfo *t_info = infos + i; - t_info->threadID = i; - - if (0 == strncasecmp(g_queryInfo.queryMode, "taosc", 5)) { - t_info->taos = taos; - - char sqlStr[MAX_TB_NAME_SIZE*2]; - sprintf(sqlStr, "use %s", g_queryInfo.dbName); - (void)queryDbExec(t_info->taos, sqlStr, NO_INSERT_TYPE); - } else { - t_info->taos = NULL; - #ifdef TD_LOWA_CURL - t_info->curl_handle = curl_easy_init(); - #endif - } - - pthread_create(pids + i, NULL, superQueryProcess, t_info); - } - }else { - g_queryInfo.superQueryInfo.concurrent = 0; - } - - pthread_t *pidsOfSub = NULL; - threadInfo *infosOfSub = NULL; - //==== create sub threads for query from all sub table of the super table - if ((g_queryInfo.subQueryInfo.sqlCount > 0) && (g_queryInfo.subQueryInfo.threadCnt > 0)) { - pidsOfSub = malloc(g_queryInfo.subQueryInfo.threadCnt * sizeof(pthread_t)); - infosOfSub = malloc(g_queryInfo.subQueryInfo.threadCnt * sizeof(threadInfo)); - if ((NULL == pidsOfSub) || (NULL == infosOfSub)) { - printf("malloc failed for create threads\n"); - taos_close(taos); - exit(-1); - } - - int ntables = g_queryInfo.subQueryInfo.childTblCount; - int threads = g_queryInfo.subQueryInfo.threadCnt; - - int a = ntables / threads; - if (a < 1) { - threads = ntables; - a = 1; - } - - int b = 0; - if (threads != 0) { - b = ntables % threads; - } - - int last = 0; - for (int i = 0; i < threads; i++) { - threadInfo *t_info = infosOfSub + i; - t_info->threadID = i; - - t_info->start_table_id = last; - t_info->end_table_id = i < b ? last + a : last + a - 1; - last = t_info->end_table_id + 1; - t_info->taos = taos; - pthread_create(pidsOfSub + i, NULL, subQueryProcess, t_info); - } - - g_queryInfo.subQueryInfo.threadCnt = threads; - }else { - g_queryInfo.subQueryInfo.threadCnt = 0; - } - - for (int i = 0; i < g_queryInfo.superQueryInfo.concurrent; i++) { - pthread_join(pids[i], NULL); - } - - tmfree((char*)pids); - tmfree((char*)infos); - - for (int i = 0; i < g_queryInfo.subQueryInfo.threadCnt; i++) { - pthread_join(pidsOfSub[i], NULL); - } - - tmfree((char*)pidsOfSub); - tmfree((char*)infosOfSub); - - taos_close(taos); - return 0; -} - -static void subscribe_callback(TAOS_SUB* tsub, TAOS_RES *res, void* param, int code) { - if (res == NULL || taos_errno(res) != 0) { - printf("failed to subscribe result, code:%d, reason:%s\n", code, taos_errstr(res)); - return; - } - - getResult(res, (char*)param); - taos_free_result(res); -} - -static TAOS_SUB* subscribeImpl(TAOS *taos, char *sql, char* topic, char* resultFileName) { - TAOS_SUB* tsub = NULL; - - if (g_queryInfo.superQueryInfo.subscribeMode) { - tsub = taos_subscribe(taos, g_queryInfo.superQueryInfo.subscribeRestart, topic, sql, subscribe_callback, (void*)resultFileName, g_queryInfo.superQueryInfo.subscribeInterval); - } else { - tsub = taos_subscribe(taos, g_queryInfo.superQueryInfo.subscribeRestart, topic, sql, NULL, NULL, 0); - } - - if (tsub == NULL) { - printf("failed to create subscription. topic:%s, sql:%s\n", topic, sql); - return NULL; - } - - return tsub; -} - -void *subSubscribeProcess(void *sarg) { - threadInfo *winfo = (threadInfo *)sarg; - char subSqlstr[1024]; - - char sqlStr[MAX_TB_NAME_SIZE*2]; - sprintf(sqlStr, "use %s", g_queryInfo.dbName); - if (0 != queryDbExec(winfo->taos, sqlStr, NO_INSERT_TYPE)){ - return NULL; - } - - //int64_t st = 0; - //int64_t et = 0; - do { - //if (g_queryInfo.superQueryInfo.rate && (et - st) < g_queryInfo.superQueryInfo.rate*1000) { - // taosMsleep(g_queryInfo.superQueryInfo.rate*1000 - (et - st)); // ms - // //printf("========sleep duration:%"PRId64 "========inserted rows:%d, table range:%d - %d\n", (1000 - (et - st)), i, winfo->start_table_id, winfo->end_table_id); - //} - - //st = taosGetTimestampMs(); - char topic[32] = {0}; - for (int i = 0; i < g_queryInfo.subQueryInfo.sqlCount; i++) { - sprintf(topic, "taosdemo-subscribe-%d", i); - memset(subSqlstr,0,sizeof(subSqlstr)); - replaceSubTblName(g_queryInfo.subQueryInfo.sql[i], subSqlstr, i); - char tmpFile[MAX_FILE_NAME_LEN*2] = {0}; - if (g_queryInfo.subQueryInfo.result[i][0] != 0) { - sprintf(tmpFile, "%s-%d", g_queryInfo.subQueryInfo.result[i], winfo->threadID); - } - g_queryInfo.subQueryInfo.tsub[i] = subscribeImpl(winfo->taos, subSqlstr, topic, tmpFile); - if (NULL == g_queryInfo.subQueryInfo.tsub[i]) { - return NULL; - } - } - //et = taosGetTimestampMs(); - //printf("========thread[%"PRId64"] complete all sqls to super table once queries duration:%.4fs\n", pthread_self(), (double)(et - st)/1000.0); - } while (0); - - // start loop to consume result - TAOS_RES* res = NULL; - while (1) { - for (int i = 0; i < g_queryInfo.subQueryInfo.sqlCount; i++) { - if (1 == g_queryInfo.subQueryInfo.subscribeMode) { - continue; - } - - res = taos_consume(g_queryInfo.subQueryInfo.tsub[i]); - if (res) { - char tmpFile[MAX_FILE_NAME_LEN*2] = {0}; - if (g_queryInfo.subQueryInfo.result[i][0] != 0) { - sprintf(tmpFile, "%s-%d", g_queryInfo.subQueryInfo.result[i], winfo->threadID); - } - getResult(res, tmpFile); - } - } - } - taos_free_result(res); - - for (int i = 0; i < g_queryInfo.subQueryInfo.sqlCount; i++) { - taos_unsubscribe(g_queryInfo.subQueryInfo.tsub[i], g_queryInfo.subQueryInfo.subscribeKeepProgress); - } - return NULL; -} - -void *superSubscribeProcess(void *sarg) { - threadInfo *winfo = (threadInfo *)sarg; - - char sqlStr[MAX_TB_NAME_SIZE*2]; - sprintf(sqlStr, "use %s", g_queryInfo.dbName); - if (0 != queryDbExec(winfo->taos, sqlStr, NO_INSERT_TYPE)) { - return NULL; - } - - //int64_t st = 0; - //int64_t et = 0; - do { - //if (g_queryInfo.superQueryInfo.rate && (et - st) < g_queryInfo.superQueryInfo.rate*1000) { - // taosMsleep(g_queryInfo.superQueryInfo.rate*1000 - (et - st)); // ms - // //printf("========sleep duration:%"PRId64 "========inserted rows:%d, table range:%d - %d\n", (1000 - (et - st)), i, winfo->start_table_id, winfo->end_table_id); - //} - - //st = taosGetTimestampMs(); - char topic[32] = {0}; - for (int i = 0; i < g_queryInfo.superQueryInfo.sqlCount; i++) { - sprintf(topic, "taosdemo-subscribe-%d", i); - char tmpFile[MAX_FILE_NAME_LEN*2] = {0}; - if (g_queryInfo.subQueryInfo.result[i][0] != 0) { - sprintf(tmpFile, "%s-%d", g_queryInfo.superQueryInfo.result[i], winfo->threadID); - } - g_queryInfo.superQueryInfo.tsub[i] = subscribeImpl(winfo->taos, g_queryInfo.superQueryInfo.sql[i], topic, tmpFile); - if (NULL == g_queryInfo.superQueryInfo.tsub[i]) { - return NULL; - } - } - //et = taosGetTimestampMs(); - //printf("========thread[%"PRId64"] complete all sqls to super table once queries duration:%.4fs\n", pthread_self(), (double)(et - st)/1000.0); - } while (0); - - // start loop to consume result - TAOS_RES* res = NULL; - while (1) { - for (int i = 0; i < g_queryInfo.superQueryInfo.sqlCount; i++) { - if (1 == g_queryInfo.superQueryInfo.subscribeMode) { - continue; - } - - res = taos_consume(g_queryInfo.superQueryInfo.tsub[i]); - if (res) { - char tmpFile[MAX_FILE_NAME_LEN*2] = {0}; - if (g_queryInfo.superQueryInfo.result[i][0] != 0) { - sprintf(tmpFile, "%s-%d", g_queryInfo.superQueryInfo.result[i], winfo->threadID); - } - getResult(res, tmpFile); - } - } - } - taos_free_result(res); - - for (int i = 0; i < g_queryInfo.superQueryInfo.sqlCount; i++) { - taos_unsubscribe(g_queryInfo.superQueryInfo.tsub[i], g_queryInfo.superQueryInfo.subscribeKeepProgress); - } - return NULL; -} - -int subscribeTestProcess() { - printfQueryMeta(); - - if (!g_args.answer_yes) { - printf("Press enter key to continue\n\n"); - (void)getchar(); - } - - TAOS * taos = NULL; - taos_init(); - taos = taos_connect(g_queryInfo.host, g_queryInfo.user, g_queryInfo.password, g_queryInfo.dbName, g_queryInfo.port); - if (taos == NULL) { - fprintf(stderr, "Failed to connect to TDengine, reason:%s\n", taos_errstr(NULL)); - exit(-1); - } - - if (0 != g_queryInfo.subQueryInfo.sqlCount) { - (void)getAllChildNameOfSuperTable(taos, g_queryInfo.dbName, g_queryInfo.subQueryInfo.sTblName, &g_queryInfo.subQueryInfo.childTblName, &g_queryInfo.subQueryInfo.childTblCount); - } - - - pthread_t *pids = NULL; - threadInfo *infos = NULL; - //==== create sub threads for query from super table - if (g_queryInfo.superQueryInfo.sqlCount > 0 && g_queryInfo.superQueryInfo.concurrent > 0) { - pids = malloc(g_queryInfo.superQueryInfo.concurrent * sizeof(pthread_t)); - infos = malloc(g_queryInfo.superQueryInfo.concurrent * sizeof(threadInfo)); - if ((NULL == pids) || (NULL == infos)) { - printf("malloc failed for create threads\n"); - taos_close(taos); - exit(-1); - } - - for (int i = 0; i < g_queryInfo.superQueryInfo.concurrent; i++) { - threadInfo *t_info = infos + i; - t_info->threadID = i; - t_info->taos = taos; - pthread_create(pids + i, NULL, superSubscribeProcess, t_info); - } - } - - //==== create sub threads for query from sub table - pthread_t *pidsOfSub = NULL; - threadInfo *infosOfSub = NULL; - if ((g_queryInfo.subQueryInfo.sqlCount > 0) && (g_queryInfo.subQueryInfo.threadCnt > 0)) { - pidsOfSub = malloc(g_queryInfo.subQueryInfo.threadCnt * sizeof(pthread_t)); - infosOfSub = malloc(g_queryInfo.subQueryInfo.threadCnt * sizeof(threadInfo)); - if ((NULL == pidsOfSub) || (NULL == infosOfSub)) { - printf("malloc failed for create threads\n"); - taos_close(taos); - exit(-1); - } - - int ntables = g_queryInfo.subQueryInfo.childTblCount; - int threads = g_queryInfo.subQueryInfo.threadCnt; - - int a = ntables / threads; - if (a < 1) { - threads = ntables; - a = 1; - } - - int b = 0; - if (threads != 0) { - b = ntables % threads; - } - - int last = 0; - for (int i = 0; i < threads; i++) { - threadInfo *t_info = infosOfSub + i; - t_info->threadID = i; - - t_info->start_table_id = last; - t_info->end_table_id = i < b ? last + a : last + a - 1; - t_info->taos = taos; - pthread_create(pidsOfSub + i, NULL, subSubscribeProcess, t_info); - } - g_queryInfo.subQueryInfo.threadCnt = threads; - } - - for (int i = 0; i < g_queryInfo.superQueryInfo.concurrent; i++) { - pthread_join(pids[i], NULL); - } - - tmfree((char*)pids); - tmfree((char*)infos); - - for (int i = 0; i < g_queryInfo.subQueryInfo.threadCnt; i++) { - pthread_join(pidsOfSub[i], NULL); - } - - tmfree((char*)pidsOfSub); - tmfree((char*)infosOfSub); - taos_close(taos); - return 0; -} - -void initOfInsertMeta() { - memset(&g_Dbs, 0, sizeof(SDbs)); - - // set default values - strncpy(g_Dbs.host, "127.0.0.1", MAX_DB_NAME_SIZE); - g_Dbs.port = 6030; - strncpy(g_Dbs.user, TSDB_DEFAULT_USER, MAX_DB_NAME_SIZE); - strncpy(g_Dbs.password, TSDB_DEFAULT_PASS, MAX_DB_NAME_SIZE); - g_Dbs.threadCount = 2; - g_Dbs.use_metric = true; -} - -void initOfQueryMeta() { - memset(&g_queryInfo, 0, sizeof(SQueryMetaInfo)); - - // set default values - strncpy(g_queryInfo.host, "127.0.0.1", MAX_DB_NAME_SIZE); - g_queryInfo.port = 6030; - strncpy(g_queryInfo.user, TSDB_DEFAULT_USER, MAX_DB_NAME_SIZE); - strncpy(g_queryInfo.password, TSDB_DEFAULT_PASS, MAX_DB_NAME_SIZE); -} - -void setParaFromArg(){ - if (g_args.host) { - strcpy(g_Dbs.host, g_args.host); - } else { - strncpy(g_Dbs.host, "127.0.0.1", MAX_DB_NAME_SIZE); - } - - if (g_args.user) { - strcpy(g_Dbs.user, g_args.user); - } - - if (g_args.password) { - strcpy(g_Dbs.password, g_args.password); - } - - if (g_args.port) { - g_Dbs.port = g_args.port; - } - - g_Dbs.dbCount = 1; - g_Dbs.db[0].drop = 1; - - strncpy(g_Dbs.db[0].dbName, g_args.database, MAX_DB_NAME_SIZE); - g_Dbs.db[0].dbCfg.replica = g_args.replica; - strncpy(g_Dbs.db[0].dbCfg.precision, "ms", MAX_DB_NAME_SIZE); - - - strncpy(g_Dbs.resultFile, g_args.output_file, MAX_FILE_NAME_LEN); - - g_Dbs.use_metric = g_args.use_metric; - g_Dbs.insert_only = g_args.insert_only; - - g_Dbs.db[0].superTblCount = 1; - strncpy(g_Dbs.db[0].superTbls[0].sTblName, "meters", MAX_TB_NAME_SIZE); - g_Dbs.db[0].superTbls[0].childTblCount = g_args.num_of_tables; - g_Dbs.threadCount = g_args.num_of_threads; - g_Dbs.threadCountByCreateTbl = 1; - g_Dbs.queryMode = g_args.mode; - - g_Dbs.db[0].superTbls[0].autoCreateTable = PRE_CREATE_SUBTBL; - g_Dbs.db[0].superTbls[0].superTblExists = TBL_NO_EXISTS; - g_Dbs.db[0].superTbls[0].childTblExists = TBL_NO_EXISTS; - g_Dbs.db[0].superTbls[0].insertRate = 0; - g_Dbs.db[0].superTbls[0].disorderRange = g_args.disorderRange; - g_Dbs.db[0].superTbls[0].disorderRatio = g_args.disorderRatio; - strncpy(g_Dbs.db[0].superTbls[0].childTblPrefix, g_args.tb_prefix, MAX_TB_NAME_SIZE); - strncpy(g_Dbs.db[0].superTbls[0].dataSource, "rand", MAX_TB_NAME_SIZE); - strncpy(g_Dbs.db[0].superTbls[0].insertMode, "taosc", MAX_TB_NAME_SIZE); - strncpy(g_Dbs.db[0].superTbls[0].startTimestamp, "2017-07-14 10:40:00.000", MAX_TB_NAME_SIZE); - g_Dbs.db[0].superTbls[0].timeStampStep = 10; - - // g_args.num_of_RPR; - g_Dbs.db[0].superTbls[0].insertRows = g_args.num_of_DPT; - g_Dbs.db[0].superTbls[0].maxSqlLen = TSDB_PAYLOAD_SIZE; - - g_Dbs.do_aggreFunc = true; - - char dataString[STRING_LEN]; - char **data_type = g_args.datatype; - - memset(dataString, 0, STRING_LEN); - - if (strcasecmp(data_type[0], "BINARY") == 0 || strcasecmp(data_type[0], "BOOL") == 0 || strcasecmp(data_type[0], "NCHAR") == 0 ) { - g_Dbs.do_aggreFunc = false; - } - - g_Dbs.db[0].superTbls[0].columnCount = 0; - for (int i = 0; i < MAX_NUM_DATATYPE; i++) { - if (data_type[i] == NULL) { - break; - } - - strncpy(g_Dbs.db[0].superTbls[0].columns[i].dataType, data_type[i], MAX_TB_NAME_SIZE); - g_Dbs.db[0].superTbls[0].columns[i].dataLen = g_args.len_of_binary; - g_Dbs.db[0].superTbls[0].columnCount++; - } - - if (g_Dbs.db[0].superTbls[0].columnCount > g_args.num_of_CPR) { - g_Dbs.db[0].superTbls[0].columnCount = g_args.num_of_CPR; - } else { - for (int i = g_Dbs.db[0].superTbls[0].columnCount; i < g_args.num_of_CPR; i++) { - strncpy(g_Dbs.db[0].superTbls[0].columns[i].dataType, "INT", MAX_TB_NAME_SIZE); - g_Dbs.db[0].superTbls[0].columns[i].dataLen = 0; - g_Dbs.db[0].superTbls[0].columnCount++; - } - } - - if (g_Dbs.use_metric) { - strncpy(g_Dbs.db[0].superTbls[0].tags[0].dataType, "INT", MAX_TB_NAME_SIZE); - g_Dbs.db[0].superTbls[0].tags[0].dataLen = 0; - - strncpy(g_Dbs.db[0].superTbls[0].tags[1].dataType, "BINARY", MAX_TB_NAME_SIZE); - g_Dbs.db[0].superTbls[0].tags[1].dataLen = g_args.len_of_binary; - g_Dbs.db[0].superTbls[0].tagCount = 2; - } else { - g_Dbs.db[0].superTbls[0].tagCount = 0; - } -} - -/* Function to do regular expression check */ -static int regexMatch(const char *s, const char *reg, int cflags) { - regex_t regex; - char msgbuf[100] = {0}; - - /* Compile regular expression */ - if (regcomp(®ex, reg, cflags) != 0) { - printf("Fail to compile regex\n"); - exit(-1); - } - - /* Execute regular expression */ - int reti = regexec(®ex, s, 0, NULL, 0); - if (!reti) { - regfree(®ex); - return 1; - } else if (reti == REG_NOMATCH) { - regfree(®ex); - return 0; - } else { - regerror(reti, ®ex, msgbuf, sizeof(msgbuf)); - printf("Regex match failed: %s\n", msgbuf); - regfree(®ex); - exit(-1); - } - - return 0; -} - -static int isCommentLine(char *line) { - if (line == NULL) return 1; - - return regexMatch(line, "^\\s*#.*", REG_EXTENDED); -} - -void querySqlFile(TAOS* taos, char* sqlFile) -{ - FILE *fp = fopen(sqlFile, "r"); - if (fp == NULL) { - printf("failed to open file %s, reason:%s\n", sqlFile, strerror(errno)); - return; - } - - int read_len = 0; - char * cmd = calloc(1, MAX_SQL_SIZE); - size_t cmd_len = 0; - char * line = NULL; - size_t line_len = 0; - - double t = getCurrentTime(); - - while ((read_len = tgetline(&line, &line_len, fp)) != -1) { - if (read_len >= MAX_SQL_SIZE) continue; - line[--read_len] = '\0'; - - if (read_len == 0 || isCommentLine(line)) { // line starts with # - continue; - } - - if (line[read_len - 1] == '\\') { - line[read_len - 1] = ' '; - memcpy(cmd + cmd_len, line, read_len); - cmd_len += read_len; - continue; - } - - memcpy(cmd + cmd_len, line, read_len); - queryDbExec(taos, cmd, NO_INSERT_TYPE); - memset(cmd, 0, MAX_SQL_SIZE); - cmd_len = 0; - } - - t = getCurrentTime() - t; - printf("run %s took %.6f second(s)\n\n", sqlFile, t); - - tmfree(cmd); - tmfree(line); - tmfclose(fp); - return; -} - -int main(int argc, char *argv[]) { - parse_args(argc, argv, &g_args); - - if (g_args.metaFile) { - initOfInsertMeta(); - initOfQueryMeta(); - if (false == getInfoFromJsonFile(g_args.metaFile)) { - printf("Failed to read %s\n", g_args.metaFile); - return 1; - } - if (INSERT_MODE == g_jsonType) { - if (g_Dbs.cfgDir[0]) taos_options(TSDB_OPTION_CONFIGDIR, g_Dbs.cfgDir); - (void)insertTestProcess(); - } else if (QUERY_MODE == g_jsonType) { - if (g_queryInfo.cfgDir[0]) taos_options(TSDB_OPTION_CONFIGDIR, g_queryInfo.cfgDir); - (void)queryTestProcess(); - } else if (SUBSCRIBE_MODE == g_jsonType) { - if (g_queryInfo.cfgDir[0]) taos_options(TSDB_OPTION_CONFIGDIR, g_queryInfo.cfgDir); - (void)subscribeTestProcess(); - } else { - ; - } - } else { - - memset(&g_Dbs, 0, sizeof(SDbs)); - g_jsonType = INSERT_MODE; - setParaFromArg(); - - if (NULL != g_args.sqlFile) { - TAOS* qtaos = taos_connect( - g_Dbs.host, g_Dbs.user, g_Dbs.password, g_Dbs.db[0].dbName, g_Dbs.port); - querySqlFile(qtaos, g_args.sqlFile); - taos_close(qtaos); - return 0; - } - - (void)insertTestProcess(); - if (g_Dbs.insert_only) return 0; - - // select - if (false == insert_only) { - // query data - pthread_t read_id; - info *rInfo = malloc(sizeof(info)); - rInfo->start_time = 1500000000000; - rInfo->start_table_id = 0; - rInfo->end_table_id = ntables - 1; - rInfo->do_aggreFunc = do_aggreFunc; - rInfo->nrecords_per_table = nrecords_per_table; - rInfo->taos = taos_connect(ip_addr, user, pass, db_name, port); - strcpy(rInfo->tb_prefix, tb_prefix); - strcpy(rInfo->fp, arguments.output_file); - - if (!use_metric) { - pthread_create(&read_id, NULL, readTable, rInfo); - } else { - pthread_create(&read_id, NULL, readMetric, rInfo); - } - pthread_join(read_id, NULL); - taos_close(rInfo->taos); - free(rInfo); - } - } - - taos_cleanup(); - return 0; -} - diff --git a/tests/pytest/cluster/clusterEnvSetup/taosdemoxWrapper.py b/tests/pytest/cluster/clusterEnvSetup/taosdemoWrapper.py similarity index 92% rename from tests/pytest/cluster/clusterEnvSetup/taosdemoxWrapper.py rename to tests/pytest/cluster/clusterEnvSetup/taosdemoWrapper.py index ad0696669a..457dd4ee5a 100644 --- a/tests/pytest/cluster/clusterEnvSetup/taosdemoxWrapper.py +++ b/tests/pytest/cluster/clusterEnvSetup/taosdemoWrapper.py @@ -15,7 +15,7 @@ import os import random import argparse -class taosdemoxWrapper: +class taosdemoWrapper: def __init__(self, host, metadata, database, tables, threads, configDir, replica, columnType, columnsPerTable, rowsPerTable, disorderRatio, disorderRange, charTypeLen): @@ -35,11 +35,11 @@ class taosdemoxWrapper: def run(self): if self.metadata is None: - os.system("taosdemox -h %s -d %s -t %d -T %d -c %s -a %d -b %s -n %d -t %d -O %d -R %d -w %d -x -y" + os.system("taosdemo -h %s -d %s -t %d -T %d -c %s -a %d -b %s -n %d -t %d -O %d -R %d -w %d -x -y" % (self.host, self.database, self.tables, self.threads, self.configDir, self.replica, self.columnType, self.rowsPerTable, self.disorderRatio, self.disorderRange, self.charTypeLen)) else: - os.system("taosdemox -f %s" % self.metadata) + os.system("taosdemo -f %s" % self.metadata) parser = argparse.ArgumentParser() @@ -136,7 +136,7 @@ parser.add_argument( help='Out of order datas range, ms (default: 16)') args = parser.parse_args() -taosdemox = taosdemoxWrapper(args.host_name, args.metadata, args.db_name, args.num_of_tables, +taosdemo = taosdemoWrapper(args.host_name, args.metadata, args.db_name, args.num_of_tables, args.num_of_threads, args.config_dir, args.replica, args.column_type, args.num_of_cols, args.num_of_rows, args.disorder_ratio, args.disorder_range, args.char_type_length) -taosdemox.run() \ No newline at end of file +taosdemo.run() diff --git a/tests/pytest/tools/lowaTest.py b/tests/pytest/tools/lowaTest.py index 2b65dcf3ef..ad8b5925bd 100644 --- a/tests/pytest/tools/lowaTest.py +++ b/tests/pytest/tools/lowaTest.py @@ -51,7 +51,7 @@ class TDTestCase: else: tdLog.info("taosd found in %s" % buildPath) binPath = buildPath+ "/build/bin/" - os.system("yes | %staosdemox -f tools/insert.json" % binPath) + os.system("yes | %staosdemo -f tools/insert.json" % binPath) tdSql.execute("use db01") tdSql.query("select count(*) from stb01") From 0b718f8854047c573503b57481a1f9897b83e1ed Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Sat, 20 Feb 2021 03:12:17 +0000 Subject: [PATCH 3/8] [TD-2984] : combine taosdemo and taosdemox. fix taosdemoTest.py. --- tests/pytest/tools/taosdemoTest.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/pytest/tools/taosdemoTest.py b/tests/pytest/tools/taosdemoTest.py index 2a4a552c8f..090d2075cf 100644 --- a/tests/pytest/tools/taosdemoTest.py +++ b/tests/pytest/tools/taosdemoTest.py @@ -49,17 +49,17 @@ class TDTestCase: else: tdLog.info("taosd found in %s" % buildPath) binPath = buildPath+ "/build/bin/" - os.system("yes | %staosdemo -t %d -n %d -x" % (binPath,self.numberOfTables, self.numberOfRecords)) + os.system("%staosdemo -y -M -t %d -n %d -x" % (binPath,self.numberOfTables, self.numberOfRecords)) tdSql.execute("use test") tdSql.query("select count(*) from meters") tdSql.checkData(0, 0, self.numberOfTables * self.numberOfRecords) - tdSql.query("select sum(f1) from test.meters interval(1h) sliding(30m)") + tdSql.query("select sum(col1) from test.meters interval(1h) sliding(30m)") tdSql.checkRows(2) - tdSql.query("select apercentile(f1, 1) from test.meters interval(10s)") - tdSql.checkRows(11) + tdSql.query("select apercentile(col1, 1) from test.meters interval(10s)") + tdSql.checkRows(1) tdSql.error("select loc, count(loc) from test.meters") From e0711cbef70508cd31a78fe017a699830eb8282a Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Sat, 20 Feb 2021 15:08:28 +0800 Subject: [PATCH 4/8] [TD-2984] : combine taosdemo and taosdemox. windows build issue. --- src/kit/taosdemo/CMakeLists.txt | 8 +++++--- src/kit/taosdemo/taosdemo.c | 6 +++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/kit/taosdemo/CMakeLists.txt b/src/kit/taosdemo/CMakeLists.txt index 921d621140..1f755d6c24 100644 --- a/src/kit/taosdemo/CMakeLists.txt +++ b/src/kit/taosdemo/CMakeLists.txt @@ -22,9 +22,11 @@ IF (TD_LINUX) ELSE () TARGET_LINK_LIBRARIES(taosdemo taos cJson) ENDIF () -ENDIF () - -IF (TD_DARWIN) +ELSEIF (TD_WINDOWS) + AUX_SOURCE_DIRECTORY(. SRC) + ADD_EXECUTABLE(taosdemo ${SRC}) + TARGET_LINK_LIBRARIES(taosdemo taos_static cJson) +ELSEIF (TD_DARWIN) # missing a few dependencies, such as # AUX_SOURCE_DIRECTORY(. SRC) # ADD_EXECUTABLE(taosdemo ${SRC}) diff --git a/src/kit/taosdemo/taosdemo.c b/src/kit/taosdemo/taosdemo.c index aed1520805..74c6b9ad01 100644 --- a/src/kit/taosdemo/taosdemo.c +++ b/src/kit/taosdemo/taosdemo.c @@ -4423,7 +4423,7 @@ void *superQueryProcess(void *sarg) { } selectAndGetResult(winfo->taos, g_queryInfo.superQueryInfo.sql[i], tmpFile); int64_t t2 = taosGetTimestampUs(); - printf("=[taosc] thread[%"PRIu64"] complete one sql, Spent %f s\n", (uint64_t)pthread_self(), (t2 - t1)/1000000.0); + printf("=[taosc] thread[%"PRIu64"] complete one sql, Spent %f s\n", pthread_self(), (t2 - t1)/1000000.0); } else { #ifdef TD_LOWA_CURL int64_t t1 = taosGetTimestampUs(); @@ -4439,7 +4439,7 @@ void *superQueryProcess(void *sarg) { } } et = taosGetTimestampMs(); - printf("==thread[%"PRIu64"] complete all sqls to specify tables once queries duration:%.6fs\n\n", (uint64_t)pthread_self(), (double)(et - st)/1000.0); + printf("==thread[%"PRIu64"] complete all sqls to specify tables once queries duration:%.6fs\n\n", pthread_self(), (double)(et - st)/1000.0); } return NULL; } @@ -4488,7 +4488,7 @@ void *subQueryProcess(void *sarg) { } } et = taosGetTimestampMs(); - printf("####thread[%"PRIu64"] complete all sqls to allocate all sub-tables[%d - %d] once queries duration:%.4fs\n\n", (uint64_t)pthread_self(), winfo->start_table_id, winfo->end_table_id, (double)(et - st)/1000.0); + printf("####thread[%"PRIu64"] complete all sqls to allocate all sub-tables[%d - %d] once queries duration:%.4fs\n\n", pthread_self(), winfo->start_table_id, winfo->end_table_id, (double)(et - st)/1000.0); } return NULL; } From d9b8504278301c6458849beaca8068ee7f4d5968 Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Sat, 20 Feb 2021 19:58:33 +0800 Subject: [PATCH 5/8] [TD-2984] : combine taosdemo and taosdemox. solve windows build issue. --- deps/libcurl/lib/win64/libcurl_a.lib | Bin 0 -> 2043322 bytes src/kit/taosdemo/CMakeLists.txt | 8 +++++++- src/kit/taosdemo/taosdemo.c | 11 ++++++----- 3 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 deps/libcurl/lib/win64/libcurl_a.lib diff --git a/deps/libcurl/lib/win64/libcurl_a.lib b/deps/libcurl/lib/win64/libcurl_a.lib new file mode 100644 index 0000000000000000000000000000000000000000..69e9fe0a57ef49b3b95cbd369fed95ef885efb95 GIT binary patch literal 2043322 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�+yo$&o^nRb2Ip^dgDdxTR{_&en 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

D3XSZ`(#$usIGM|Zs0`taUElW$gHu>$O1llFk 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 literal 0 HcmV?d00001 diff --git a/src/kit/taosdemo/CMakeLists.txt b/src/kit/taosdemo/CMakeLists.txt index 1f755d6c24..7e85ec6dac 100644 --- a/src/kit/taosdemo/CMakeLists.txt +++ b/src/kit/taosdemo/CMakeLists.txt @@ -25,7 +25,13 @@ IF (TD_LINUX) ELSEIF (TD_WINDOWS) AUX_SOURCE_DIRECTORY(. SRC) ADD_EXECUTABLE(taosdemo ${SRC}) - TARGET_LINK_LIBRARIES(taosdemo taos_static cJson) + SET_SOURCE_FILES_PROPERTIES(./taosdemo.c PROPERTIES COMPILE_FLAGS -w) + find_library(LIBCURL_A libcurl_a HINTS ${TD_COMMUNITY_DIR}/deps/libcurl/lib/win64) + IF (TD_SOMODE_STATIC) + TARGET_LINK_LIBRARIES(taosdemo taos_static cJson ${LIBCURL_A}) + ELSE () + TARGET_LINK_LIBRARIES(taosdemo taos cJson ${LIBCURL_A}) + ENDIF () ELSEIF (TD_DARWIN) # missing a few dependencies, such as # AUX_SOURCE_DIRECTORY(. SRC) diff --git a/src/kit/taosdemo/taosdemo.c b/src/kit/taosdemo/taosdemo.c index 74c6b9ad01..8c97233772 100644 --- a/src/kit/taosdemo/taosdemo.c +++ b/src/kit/taosdemo/taosdemo.c @@ -27,7 +27,6 @@ #ifdef LINUX #include "os.h" - #include "cJSON.h" #include #include #include @@ -51,12 +50,14 @@ #include #include "os.h" - #pragma comment ( lib, "libcurl.lib" ) + #pragma comment ( lib, "libcurl_a.lib" ) #pragma comment ( lib, "ws2_32.lib" ) #pragma comment ( lib, "winmm.lib" ) #pragma comment ( lib, "wldap32.lib" ) #endif +#include "cJSON.h" + #include "taos.h" #include "tutil.h" @@ -2238,7 +2239,7 @@ int readTagFromCsvFileToMem(SSuperTable * superTblInfo) { return -1; } - while ((readLen = getline(&line, &n, fp)) != -1) { + while ((readLen = tgetline(&line, &n, fp)) != -1) { if (('\r' == line[readLen - 1]) || ('\n' == line[readLen - 1])) { line[--readLen] = 0; } @@ -2292,7 +2293,7 @@ int readSampleFromCsvFileToMem(FILE *fp, SSuperTable* superTblInfo, char* sample memset(sampleBuf, 0, MAX_SAMPLES_ONCE_FROM_FILE* superTblInfo->lenOfOneRow); while (1) { - readLen = getline(&line, &n, fp); + readLen = tgetline(&line, &n, fp); if (-1 == readLen) { if(0 != fseek(fp, 0, SEEK_SET)) { printf("Failed to fseek file: %s, reason:%s\n", superTblInfo->sampleFile, strerror(errno)); @@ -4350,7 +4351,7 @@ int insertTestProcess() { fprintf(g_fpOfInsertResult, "Spent %.4f seconds to create %d tables with %d thread(s)\n\n", end - start, g_totalChildTables, g_Dbs.threadCount); } - usleep(1000*1000); + taosMsleep(1000); // create sub threads for inserting data //start = getCurrentTime(); From eb8ca83bdaeb1cef421f81bc0ea1d52311fbf287 Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Mon, 22 Feb 2021 01:58:52 +0000 Subject: [PATCH 6/8] [TD-2984] : combine taosdemo and taosdemox. --- tests/pytest/tools/taosdemoTest.py | 17 +++++++++++------ tests/pytest/tools/taosdemoTest2.py | 13 +++++++------ 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/tests/pytest/tools/taosdemoTest.py b/tests/pytest/tools/taosdemoTest.py index 090d2075cf..1cb2f71d8f 100644 --- a/tests/pytest/tools/taosdemoTest.py +++ b/tests/pytest/tools/taosdemoTest.py @@ -23,9 +23,10 @@ class TDTestCase: def init(self, conn, logSql): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) - + self.numberOfTables = 10000 self.numberOfRecords = 100 + def getBuildPath(self): selfPath = os.path.dirname(os.path.realpath(__file__)) @@ -38,9 +39,10 @@ class TDTestCase: if ("taosd" in files): rootRealPath = os.path.dirname(os.path.realpath(root)) if ("packaging" not in rootRealPath): - buildPath = root[:len(root)-len("/build/bin")] + buildPath = root[:len(root) - len("/build/bin")] break return buildPath + def run(self): tdSql.prepare() buildPath = self.getBuildPath() @@ -48,17 +50,20 @@ class TDTestCase: tdLog.exit("taosd not found!") else: tdLog.info("taosd found in %s" % buildPath) - binPath = buildPath+ "/build/bin/" - os.system("%staosdemo -y -M -t %d -n %d -x" % (binPath,self.numberOfTables, self.numberOfRecords)) + binPath = buildPath + "/build/bin/" + os.system("%staosdemo -y -M -t %d -n %d -x" % + (binPath, self.numberOfTables, self.numberOfRecords)) tdSql.execute("use test") tdSql.query("select count(*) from meters") tdSql.checkData(0, 0, self.numberOfTables * self.numberOfRecords) - tdSql.query("select sum(col1) from test.meters interval(1h) sliding(30m)") + tdSql.query( + "select sum(col1) from test.meters interval(1h) sliding(30m)") tdSql.checkRows(2) - tdSql.query("select apercentile(col1, 1) from test.meters interval(10s)") + tdSql.query( + "select apercentile(col1, 1) from test.meters interval(10s)") tdSql.checkRows(1) tdSql.error("select loc, count(loc) from test.meters") diff --git a/tests/pytest/tools/taosdemoTest2.py b/tests/pytest/tools/taosdemoTest2.py index 1e492aa8fc..cf2ac9b806 100644 --- a/tests/pytest/tools/taosdemoTest2.py +++ b/tests/pytest/tools/taosdemoTest2.py @@ -31,11 +31,12 @@ class TDTestCase: def insertDataAndAlterTable(self, threadID): if(threadID == 0): - os.system("yes | taosdemo -t %d -n %d -x" % (self.numberOfTables, self.numberOfRecords)) + os.system("taosdemo -y -t %d -n %d -x" % + (self.numberOfTables, self.numberOfRecords)) if(threadID == 1): time.sleep(2) print("use test") - tdSql.execute("use test") + tdSql.execute("use test") # check if all the tables have heen created while True: tdSql.query("show tables") @@ -52,19 +53,19 @@ class TDTestCase: print("number of records: %d" % rows) if(rows > 0): break - time.sleep(1) + time.sleep(1) print("alter table test.meters add column f4 int") tdSql.execute("alter table test.meters add column f4 int") print("insert into test.t0 values (now, 1, 2, 3, 4)") tdSql.execute("insert into test.t0 values (now, 1, 2, 3, 4)") - def run(self): + def run(self): tdSql.prepare() t1 = threading.Thread(target=self.insertDataAndAlterTable, args=(0, )) t2 = threading.Thread(target=self.insertDataAndAlterTable, args=(1, )) - t1.start() + t1.start() t2.start() t1.join() t2.join() @@ -78,4 +79,4 @@ class TDTestCase: tdCases.addWindows(__file__, TDTestCase()) -tdCases.addLinux(__file__, TDTestCase()) \ No newline at end of file +tdCases.addLinux(__file__, TDTestCase()) From 12d89a75476f115ec7021943a223dee920a32028 Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Mon, 22 Feb 2021 03:00:14 +0000 Subject: [PATCH 7/8] [TD-2984] : combine taosdemo and taosdemox. modify test case for new schema. --- tests/pytest/tools/taosdemoTest2.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/pytest/tools/taosdemoTest2.py b/tests/pytest/tools/taosdemoTest2.py index cf2ac9b806..75a79d0585 100644 --- a/tests/pytest/tools/taosdemoTest2.py +++ b/tests/pytest/tools/taosdemoTest2.py @@ -31,7 +31,7 @@ class TDTestCase: def insertDataAndAlterTable(self, threadID): if(threadID == 0): - os.system("taosdemo -y -t %d -n %d -x" % + os.system("taosdemo -M -y -t %d -n %d -x" % (self.numberOfTables, self.numberOfRecords)) if(threadID == 1): time.sleep(2) @@ -54,10 +54,10 @@ class TDTestCase: if(rows > 0): break time.sleep(1) - print("alter table test.meters add column f4 int") - tdSql.execute("alter table test.meters add column f4 int") - print("insert into test.t0 values (now, 1, 2, 3, 4)") - tdSql.execute("insert into test.t0 values (now, 1, 2, 3, 4)") + print("alter table test.meters add column col10 int") + tdSql.execute("alter table test.meters add column col10 int") + print("insert into test.t0 values (now, 1, 2, 3, 4, 0.1, 0.01,'test', '测试', TRUE, 1610000000000, 0)") + tdSql.execute("insert into test.t0 values (now, 1, 2, 3, 4, 0.1, 0.01,'test', '测试', TRUE, 1610000000000, 0)") def run(self): tdSql.prepare() From e75bd5d94dbd9479d7f661ae2d86f25f8efe97bc Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Tue, 23 Feb 2021 11:20:03 +0800 Subject: [PATCH 8/8] [TD-2984] : combine taosdemo and taosdemox. fix ansi escape for windows. --- src/kit/taosdemo/taosdemo.c | 62 +++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 3 deletions(-) diff --git a/src/kit/taosdemo/taosdemo.c b/src/kit/taosdemo/taosdemo.c index 8c97233772..2233d99515 100644 --- a/src/kit/taosdemo/taosdemo.c +++ b/src/kit/taosdemo/taosdemo.c @@ -61,6 +61,55 @@ #include "taos.h" #include "tutil.h" +#ifdef WINDOWS +#include +// Some old MinGW/CYGWIN distributions don't define this: +#ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING +#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004 +#endif +static HANDLE g_stdoutHandle; +static DWORD g_consoleMode; + +void setupForAnsiEscape(void) { + DWORD mode = 0; + g_stdoutHandle = GetStdHandle(STD_OUTPUT_HANDLE); + + if(g_stdoutHandle == INVALID_HANDLE_VALUE) { + exit(GetLastError()); + } + + if(!GetConsoleMode(g_stdoutHandle, &mode)) { + exit(GetLastError()); + } + + g_consoleMode = mode; + + // Enable ANSI escape codes + mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; + + if(!SetConsoleMode(g_stdoutHandle, mode)) { + exit(GetLastError()); + } +} + +void resetAfterAnsiEscape(void) { + // Reset colors + printf("\x1b[0m"); + + // Reset console mode + if(!SetConsoleMode(g_stdoutHandle, g_consoleMode)) { + exit(GetLastError()); + } +} +#else +void setupForAnsiEscape(void) {} + +void resetAfterAnsiEscape(void) { + // Reset colors + printf("\x1b[0m"); +} +#endif + extern char configDir[]; #define INSERT_JSON_NAME "insert.json" @@ -871,7 +920,7 @@ static void init_rand_data() { } } -static void printfInsertMeta() { +static int printfInsertMeta() { printf("\033[1m\033[40;32m================ insert.json parse result START ================\033[0m\n"); printf("host: \033[33m%s:%u\033[0m\n", g_Dbs.host, g_Dbs.port); printf("user: \033[33m%s\033[0m\n", g_Dbs.user); @@ -931,7 +980,7 @@ static void printfInsertMeta() { printf(" precision: \033[33m%s\033[0m\n", g_Dbs.db[i].dbCfg.precision); } else { printf(" precision error: \033[33m%s\033[0m\n", g_Dbs.db[i].dbCfg.precision); - exit(EXIT_FAILURE); + return -1; } } @@ -1006,6 +1055,8 @@ static void printfInsertMeta() { printf("\n"); } printf("\033[1m\033[40;32m================ insert.json parse result END================\033[0m\n"); + + return 0; } static void printfInsertMetaToFile(FILE* fp) { @@ -4323,7 +4374,12 @@ int insertTestProcess() { return 1; }; - printfInsertMeta(); + setupForAnsiEscape(); + int ret = printfInsertMeta(); + resetAfterAnsiEscape(); + if (ret == -1) + exit(EXIT_FAILURE); + printfInsertMetaToFile(g_fpOfInsertResult); if (!g_args.answer_yes) {

UZA+y+%R=tQl<(=%~Yeo%z^z>E|8PPsZ=Y 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%0D@@~i8{Ga#&%u`nXu{5 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 amkhYY-l$`QV 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%0A!$23UIB0K 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 eff2i?L8n?fQsO+JHdiQixyj^D}# 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

RS3UAm!;mtR5!~d)>TI6+zQ>2k8(yObb6ZTW$ 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