diff --git a/tests/test/c/cacheTest.c b/tests/test/c/cacheTest.c deleted file mode 100644 index ce5d7d1421..0000000000 --- a/tests/test/c/cacheTest.c +++ /dev/null @@ -1,146 +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 . - */ - -#define _DEFAULT_SOURCE -#include -#include "../../../include/client/taos.h" -#include "os.h" -#include "tcache.h" -#include "tulog.h" -#include "tutil.h" - -#define MAX_REFRESH_TIME_SEC 2 -#define MAX_RANDOM_POINTS 20000 -#define GREEN "\033[1;32m" -#define NC "\033[0m" - -int32_t tsKeepTimeInSec = 3; -int32_t tsNumOfRows = 1000000; -int32_t tsSizeOfRow = 64 * 1024; -void * tsCacheObj = NULL; -int32_t destroyTimes = 0; - -typedef int64_t CacheTestKey; -typedef struct CacheTestRow { - int32_t index; - void ** ppRow; - void * data; -} CacheTestRow; - -CacheTestRow *initRow(int32_t index) { - CacheTestRow *row = calloc(sizeof(CacheTestRow), 1); - row->index = index; - row->data = malloc(tsSizeOfRow * sizeof(int8_t)); - return row; -} - -void detroyRow(void *data) { - CacheTestRow *row = *(CacheTestRow **)data; - free(row->data); - free(row); - destroyTimes++; - if (destroyTimes % 50000 == 0) { - pPrint("%s ===> destroyTimes:%d %s", GREEN, destroyTimes, NC); - } -} - -void initCache() { - tsCacheObj = taosCacheInit(TSDB_DATA_TYPE_BIGINT, MAX_REFRESH_TIME_SEC, true, detroyRow, "cachetest"); -} - -void putRowInCache() { - for (int index = 0; index < tsNumOfRows; ++index) { - CacheTestRow *row = initRow(index); - uint64_t key = (uint64_t)row; - void **ppRow = taosCachePut(tsCacheObj, &key, sizeof(int64_t), &row, sizeof(int64_t), tsKeepTimeInSec * 1000); - row->ppRow = ppRow; - taosCacheRelease(tsCacheObj, (void **)&ppRow, false); - } -} - -void cleanupCache() { - taosCacheCleanup(tsCacheObj); -} - -void initGetMemory() { - osInit(); - taos_init(); -} - -float getProcMemory() { - float procMemoryUsedMB = 0; - taosGetProcMemory(&procMemoryUsedMB); - return procMemoryUsedMB; -} - -void doTest() { - initCache(); - pPrint("%s initialize procMemory %f MB %s", GREEN, getProcMemory(), NC); - - putRowInCache(); - pPrint("%s insert %d rows, procMemory %f MB %s", GREEN, tsNumOfRows, getProcMemory(), NC); - - int32_t sleepMs = (MAX_REFRESH_TIME_SEC * 3) * 1000 + tsKeepTimeInSec * 1000; - taosMsleep(sleepMs); - pPrint("%s after sleep %d ms, procMemory %f MB %s", GREEN, sleepMs, getProcMemory(), NC); - - cleanupCache(); - taosMsleep(sleepMs); - pPrint("%s after cleanup cache, procMemory %f MB %s", GREEN, getProcMemory(), NC); - - malloc_trim(0); - taosMsleep(sleepMs); - pPrint("%s after malloc_trim, procMemory %f MB %s", GREEN, getProcMemory(), NC); -} - -void printHelp() { - char indent[10] = " "; - printf("Used to test the performance of cache\n"); - - printf("%s%s\n", indent, "-k"); - printf("%s%s%s%d\n", indent, indent, "KeepTimeInSec, default is ", tsKeepTimeInSec); - printf("%s%s\n", indent, "-n"); - printf("%s%s%s%d\n", indent, indent, "NumOfRows, default is ", tsNumOfRows); - printf("%s%s\n", indent, "-s"); - printf("%s%s%s%d\n", indent, indent, "SizeOfData, default is ", tsSizeOfRow); - - exit(EXIT_SUCCESS); -} - -void parseArgument(int argc, char *argv[]) { - for (int i = 1; i < argc; i++) { - if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) { - printHelp(); - exit(0); - } else if (strcmp(argv[i], "-k") == 0) { - tsKeepTimeInSec = atoi(argv[++i]); - } else if (strcmp(argv[i], "-n") == 0) { - tsNumOfRows = atoi(argv[++i]); - } else if (strcmp(argv[i], "-s") == 0) { - tsSizeOfRow = atoi(argv[++i]); - } else { - } - } - - pPrint("%s KeepTimeInSec:%d %s", GREEN, tsKeepTimeInSec, NC); - pPrint("%s NumOfRows:%d %s", GREEN, tsNumOfRows, NC); - pPrint("%s SizeOfData:%d %s", GREEN, tsSizeOfRow, NC); -} - -int main(int argc, char *argv[]) { - initGetMemory(); - parseArgument(argc, argv); - doTest(); -} diff --git a/tests/test/c/createTablePerformance.c b/tests/test/c/createTablePerformance.c deleted file mode 100644 index 1a59657f1a..0000000000 --- a/tests/test/c/createTablePerformance.c +++ /dev/null @@ -1,225 +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 . - */ - -#define _DEFAULT_SOURCE -#include "../../../include/client/taos.h" -#include "hash.h" -#include "os.h" -#include "taoserror.h" -#include "tglobal.h" -#include "tulog.h" -#include "tutil.h" - -#define MAX_RANDOM_POINTS 20000 -#define GREEN "\033[1;32m" -#define NC "\033[0m" - -char dbName[32] = "db"; -char stableName[64] = "st"; -int32_t numOfThreads = 30; -int32_t numOfTables = 100000; -int32_t replica = 1; -int32_t numOfColumns = 2; -TAOS * con = NULL; - -typedef struct { - int32_t tableBeginIndex; - int32_t tableEndIndex; - int32_t threadIndex; - char dbName[32]; - char stableName[64]; - float createTableSpeed; - pthread_t thread; -} SThreadInfo; - -void shellParseArgument(int argc, char *argv[]); -void *threadFunc(void *param); -void createDbAndSTable(); - -int main(int argc, char *argv[]) { - shellParseArgument(argc, argv); - taos_init(); - createDbAndSTable(); - - pPrint("%d threads are spawned to create table", numOfThreads); - - pthread_attr_t thattr; - pthread_attr_init(&thattr); - pthread_attr_setdetachstate(&thattr, PTHREAD_CREATE_JOINABLE); - SThreadInfo *pInfo = (SThreadInfo *)calloc(numOfThreads, sizeof(SThreadInfo)); - - int32_t numOfTablesPerThread = numOfTables / numOfThreads; - numOfTables = numOfTablesPerThread * numOfThreads; - for (int i = 0; i < numOfThreads; ++i) { - pInfo[i].tableBeginIndex = i * numOfTablesPerThread; - pInfo[i].tableEndIndex = (i + 1) * numOfTablesPerThread; - pInfo[i].threadIndex = i; - strcpy(pInfo[i].dbName, dbName); - strcpy(pInfo[i].stableName, stableName); - pthread_create(&(pInfo[i].thread), &thattr, threadFunc, (void *)(pInfo + i)); - } - - taosMsleep(300); - for (int i = 0; i < numOfThreads; i++) { - pthread_join(pInfo[i].thread, NULL); - } - - float createTableSpeed = 0; - for (int i = 0; i < numOfThreads; ++i) { - createTableSpeed += pInfo[i].createTableSpeed; - } - - pPrint("%s total speed:%.1f tables/second, threads:%d %s", GREEN, createTableSpeed, numOfThreads, NC); - - pthread_attr_destroy(&thattr); - free(pInfo); - taos_close(con); -} - -void createDbAndSTable() { - pPrint("start to create db and stable"); - char qstr[64000]; - - con = taos_connect(NULL, "root", "taosdata", NULL, 0); - if (con == NULL) { - pError("failed to connect to DB, reason:%s", taos_errstr(con)); - exit(1); - } - - sprintf(qstr, "create database if not exists %s replica %d", dbName, replica); - TAOS_RES *pSql = taos_query(con, qstr); - int32_t code = taos_errno(pSql); - if (code != 0) { - pError("failed to create database:%s, sql:%s, code:%d reason:%s", dbName, qstr, taos_errno(con), taos_errstr(con)); - exit(0); - } - taos_free_result(pSql); - - sprintf(qstr, "use %s", dbName); - pSql = taos_query(con, qstr); - code = taos_errno(pSql); - if (code != 0) { - pError("failed to use db, code:%d reason:%s", taos_errno(con), taos_errstr(con)); - exit(0); - } - taos_free_result(pSql); - - int len = sprintf(qstr, "create table if not exists %s(ts timestamp", stableName); - for (int32_t f = 0; f < numOfColumns - 1; ++f) { - len += sprintf(qstr + len, ", f%d double", f); - } - sprintf(qstr + len, ") tags(t int)"); - - pSql = taos_query(con, qstr); - code = taos_errno(pSql); - if (code != 0) { - pError("failed to create stable, code:%d reason:%s", taos_errno(con), taos_errstr(con)); - exit(0); - } - taos_free_result(pSql); -} - -void *threadFunc(void *param) { - SThreadInfo *pInfo = (SThreadInfo *)param; - char qstr[65000]; - int code; - - sprintf(qstr, "use %s", pInfo->dbName); - TAOS_RES *pSql = taos_query(con, qstr); - taos_free_result(pSql); - - int64_t startMs = taosGetTimestampMs(); - - for (int32_t t = pInfo->tableBeginIndex; t < pInfo->tableEndIndex; ++t) { - sprintf(qstr, "create table if not exists %s%d using %s tags(%d)", stableName, t, stableName, t); - TAOS_RES *pSql = taos_query(con, qstr); - code = taos_errno(pSql); - if (code != 0) { - pError("failed to create table %s%d, reason:%s", stableName, t, tstrerror(code)); - } - taos_free_result(pSql); - } - - float createTableSpeed = 0; - for (int i = 0; i < numOfThreads; ++i) { - createTableSpeed += pInfo[i].createTableSpeed; - } - - int64_t endMs = taosGetTimestampMs(); - int32_t totalTables = pInfo->tableEndIndex - pInfo->tableBeginIndex; - float seconds = (endMs - startMs) / 1000.0; - float speed = totalTables / seconds; - pInfo->createTableSpeed = speed; - - pPrint("thread:%d, time:%.2f sec, speed:%.1f tables/second, ", pInfo->threadIndex, seconds, speed); - - return 0; -} - -void printHelp() { - char indent[10] = " "; - printf("Used to test the performance while create table\n"); - - printf("%s%s\n", indent, "-c"); - printf("%s%s%s%s\n", indent, indent, "Configuration directory, default is ", configDir); - printf("%s%s\n", indent, "-d"); - printf("%s%s%s%s\n", indent, indent, "The name of the database to be created, default is ", dbName); - printf("%s%s\n", indent, "-s"); - printf("%s%s%s%s\n", indent, indent, "The name of the super table to be created, default is ", stableName); - printf("%s%s\n", indent, "-t"); - printf("%s%s%s%d\n", indent, indent, "numOfThreads, default is ", numOfThreads); - printf("%s%s\n", indent, "-n"); - printf("%s%s%s%d\n", indent, indent, "numOfTables, default is ", numOfTables); - printf("%s%s\n", indent, "-r"); - printf("%s%s%s%d\n", indent, indent, "replica, default is ", replica); - printf("%s%s\n", indent, "-columns"); - printf("%s%s%s%d\n", indent, indent, "numOfColumns, default is ", numOfColumns); - - exit(EXIT_SUCCESS); -} - -void shellParseArgument(int argc, char *argv[]) { - for (int i = 1; i < argc; i++) { - if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) { - printHelp(); - exit(0); - } else if (strcmp(argv[i], "-d") == 0) { - strcpy(dbName, argv[++i]); - } else if (strcmp(argv[i], "-c") == 0) { - strcpy(configDir, argv[++i]); - } else if (strcmp(argv[i], "-s") == 0) { - strcpy(stableName, argv[++i]); - } else if (strcmp(argv[i], "-t") == 0) { - numOfThreads = atoi(argv[++i]); - } else if (strcmp(argv[i], "-n") == 0) { - numOfTables = atoi(argv[++i]); - } else if (strcmp(argv[i], "-r") == 0) { - replica = atoi(argv[++i]); - } else if (strcmp(argv[i], "-columns") == 0) { - numOfColumns = atoi(argv[++i]); - } else { - } - } - - pPrint("%s dbName:%s %s", GREEN, dbName, NC); - pPrint("%s stableName:%s %s", GREEN, stableName, NC); - pPrint("%s configDir:%s %s", GREEN, configDir, NC); - pPrint("%s numOfTables:%d %s", GREEN, numOfTables, NC); - pPrint("%s numOfThreads:%d %s", GREEN, numOfThreads, NC); - pPrint("%s numOfColumns:%d %s", GREEN, numOfColumns, NC); - pPrint("%s replica:%d %s", GREEN, replica, NC); - - pPrint("%s start create table performace test %s", GREEN, NC); -} diff --git a/tests/test/c/hashIterator.c b/tests/test/c/hashIterator.c deleted file mode 100644 index 0d3dbb64d7..0000000000 --- a/tests/test/c/hashIterator.c +++ /dev/null @@ -1,72 +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 . - */ - -#define _DEFAULT_SOURCE -#include "../../../include/client/taos.h" -#include "hash.h" -#include "os.h" -#include "tulog.h" -#include "tutil.h" - -typedef struct HashTestRow { - int32_t keySize; - char key[100]; -} HashTestRow; - -int main(int argc, char *argv[]) { - _hash_fn_t hashFp = taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY); - void * hashHandle = taosHashInit(100, hashFp, true, HASH_ENTRY_LOCK); - - pPrint("insert 3 rows to hash"); - for (int32_t t = 0; t < 3; ++t) { - HashTestRow row = {0}; - row.keySize = sprintf(row.key, "0.db.st%d", t); - - taosHashPut(hashHandle, row.key, row.keySize, &row, sizeof(HashTestRow)); - } - - pPrint("start iterator"); - HashTestRow *row = taosHashIterate(hashHandle, NULL); - while (row) { - pPrint("drop key:%s", row->key); - taosHashRemove(hashHandle, row->key, row->keySize); - - pPrint("get rows from hash"); - for (int32_t t = 0; t < 3; ++t) { - HashTestRow r = {0}; - r.keySize = sprintf(r.key, "0.db.st%d", t); - - void *result = taosHashGet(hashHandle, r.key, r.keySize); - pPrint("get key:%s result:%p", r.key, result); - } - - //Before getting the next iterator, the object just deleted can be obtained - row = taosHashIterate(hashHandle, row); - } - - pPrint("stop iterator"); - taosHashCancelIterate(hashHandle, row); - - pPrint("get rows from hash"); - for (int32_t t = 0; t < 3; ++t) { - HashTestRow r = {0}; - r.keySize = sprintf(r.key, "0.db.st%d", t); - - void *result = taosHashGet(hashHandle, r.key, r.keySize); - pPrint("get key:%s result:%p", r.key, result); - } - - return 0; -} \ No newline at end of file diff --git a/tests/test/c/hashPerformance.c b/tests/test/c/hashPerformance.c deleted file mode 100644 index 0f14fbff6a..0000000000 --- a/tests/test/c/hashPerformance.c +++ /dev/null @@ -1,166 +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 . - */ - -#define _DEFAULT_SOURCE -#include "../../../include/client/taos.h" -#include "hash.h" -#include "os.h" -#include "tulog.h" -#include "tutil.h" - -#define MAX_RANDOM_POINTS 20000 -#define GREEN "\033[1;32m" -#define NC "\033[0m" - -int32_t capacity = 128; -int32_t q1Times = 10; -int32_t q2Times = 10; -int32_t keyNum = 100000; -int32_t printInterval = 1000; -void * hashHandle; -pthread_t thread; - -typedef struct HashTestRow { - int32_t keySize; - char key[100]; -} HashTestRow; - -void shellParseArgument(int argc, char *argv[]); - -void testHashPerformance() { - int64_t initialMs = taosGetTimestampMs(); - _hash_fn_t hashFp = taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY); - hashHandle = taosHashInit(128, hashFp, true, HASH_NO_LOCK); - - int64_t startMs = taosGetTimestampMs(); - float seconds = (startMs - initialMs) / 1000.0; - pPrint("initial time %.2f sec", seconds); - - for (int32_t t = 1; t <= keyNum; ++t) { - HashTestRow row = {0}; - row.keySize = sprintf(row.key, "0.db.st%d", t); - - for (int32_t q = 0; q < q1Times; q++) { - taosHashGet(hashHandle, row.key, row.keySize); - } - - taosHashPut(hashHandle, row.key, row.keySize, &row, sizeof(HashTestRow)); - - for (int32_t q = 0; q < q2Times; q++) { - taosHashGet(hashHandle, row.key, row.keySize); - } - - // test iterator - { - HashTestRow *row = taosHashIterate(hashHandle, NULL); - while (row) { - taosHashGet(hashHandle, row->key, row->keySize); - row = taosHashIterate(hashHandle, row); - } - } - - if (t % printInterval == 0) { - int64_t endMs = taosGetTimestampMs(); - int64_t hashSize = taosHashGetSize(hashHandle); - float seconds = (endMs - startMs) / 1000.0; - float speed = printInterval / seconds; - pPrint("time:%.2f sec, speed:%.1f rows/second, hashSize:%ld", seconds, speed, hashSize); - startMs = endMs; - } - } - - int64_t endMs = taosGetTimestampMs(); - int64_t hashSize = taosHashGetSize(hashHandle); - seconds = (endMs - initialMs) / 1000.0; - float speed = hashSize / seconds; - - pPrint("total time:%.2f sec, avg speed:%.1f rows/second, hashSize:%ld", seconds, speed, hashSize); - taosHashCleanup(hashHandle); -} - -void *multiThreadFunc(void *param) { - for (int i = 0; i < 100; ++i) { - taosMsleep(1000); - HashTestRow *row = taosHashIterate(hashHandle, NULL); - while (row) { - taosHashGet(hashHandle, row->key, row->keySize); - row = taosHashIterate(hashHandle, row); - } - int64_t hashSize = taosHashGetSize(hashHandle); - pPrint("i:%d hashSize:%ld", i, hashSize); - } - - return NULL; -} - -void multiThreadTest() { - pthread_attr_t thattr; - pthread_attr_init(&thattr); - pthread_attr_setdetachstate(&thattr, PTHREAD_CREATE_JOINABLE); - - // Start threads to write - pthread_create(&thread, &thattr, multiThreadFunc, NULL); -} - -int main(int argc, char *argv[]) { - shellParseArgument(argc, argv); - multiThreadTest(); - testHashPerformance(); - pthread_join(thread, NULL); -} - -void printHelp() { - char indent[10] = " "; - printf("Used to test the performance of cache\n"); - - printf("%s%s\n", indent, "-k"); - printf("%s%s%s%d\n", indent, indent, "key num, default is ", keyNum); - printf("%s%s\n", indent, "-p"); - printf("%s%s%s%d\n", indent, indent, "print interval while put into hash, default is ", printInterval); - printf("%s%s\n", indent, "-c"); - printf("%s%s%s%d\n", indent, indent, "the initial capacity of hash ", capacity); - printf("%s%s\n", indent, "-q1"); - printf("%s%s%s%d\n", indent, indent, "query times before put into hash", q1Times); - printf("%s%s\n", indent, "-q2"); - printf("%s%s%s%d\n", indent, indent, "query times after put into hash", q2Times); - - exit(EXIT_SUCCESS); -} - -void shellParseArgument(int argc, char *argv[]) { - for (int i = 1; i < argc; i++) { - if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) { - printHelp(); - exit(0); - } else if (strcmp(argv[i], "-k") == 0) { - keyNum = atoi(argv[++i]); - } else if (strcmp(argv[i], "-p") == 0) { - printInterval = atoi(argv[++i]); - } else if (strcmp(argv[i], "-c") == 0) { - capacity = atoi(argv[++i]); - } else if (strcmp(argv[i], "-q1") == 0) { - q1Times = atoi(argv[++i]); - } else if (strcmp(argv[i], "-q2") == 0) { - q2Times = atoi(argv[++i]); - } else { - } - } - - pPrint("%s capacity:%d %s", GREEN, capacity, NC); - pPrint("%s printInterval:%d %s", GREEN, printInterval, NC); - pPrint("%s q1Times:%d %s", GREEN, q1Times, NC); - pPrint("%s q2Times:%d %s", GREEN, q2Times, NC); - pPrint("%s keyNum:%d %s", GREEN, keyNum, NC); -} diff --git a/tests/test/c/httpTest.c b/tests/test/c/httpTest.c deleted file mode 100644 index 261546770e..0000000000 --- a/tests/test/c/httpTest.c +++ /dev/null @@ -1,48 +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 . - */ - -#include "os.h" -#include "os.h" -#include "tglobal.h" -#include "taoserror.h" -#include "httpSystem.h" - -void signal_handler(int signum) { - httpStopSystem(); - httpCleanUpSystem(); - exit(EXIT_SUCCESS); -} - -int main(int argc, char *argv[]) { - struct sigaction act; - act.sa_handler = signal_handler; - sigaction(SIGTERM, &act, NULL); - sigaction(SIGHUP, &act, NULL); - sigaction(SIGINT, &act, NULL); - sigaction(SIGABRT, &act, NULL); - - // Initialize the system - if (httpInitSystem() < 0) { - exit(EXIT_FAILURE); - } - - if (httpStartSystem() < 0) { - exit(EXIT_FAILURE); - } - - while (1) { - sleep(1000); - } -} diff --git a/tests/test/c/importOneRow.c b/tests/test/c/importOneRow.c deleted file mode 100644 index 510f780163..0000000000 --- a/tests/test/c/importOneRow.c +++ /dev/null @@ -1,182 +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 . - */ - -#define _DEFAULT_SOURCE -#include "../../../include/client/taos.h" -#include "os.h" -#include "tglobal.h" -#include "ttimer.h" -#include "tulog.h" -#include "tutil.h" - -#define MAX_RANDOM_POINTS 20000 -#define GREEN "\033[1;32m" -#define NC "\033[0m" - -void taos_error(TAOS *taos); -void* taos_execute(void *param); - -typedef struct { - pthread_t pid; - int index; -} ThreadObj; - -int threadNum = 1; -int rowNum = 1000; -int replica = 1; - -void printHelp() { - char indent[10] = " "; - printf("Used to test the performance of TDengine\n After writing one row of data to all tables, write the next row\n"); - - printf("%s%s\n", indent, "-r"); - printf("%s%s%s%d\n", indent, indent, "Number of records to write table, default is ", rowNum); - printf("%s%s\n", indent, "-t"); - printf("%s%s%s%d\n", indent, indent, "Number of threads to be used, default is ", threadNum); - printf("%s%s\n", indent, "-replica"); - printf("%s%s%s%d\n", indent, indent, "Database parameters replica, default is ", replica); - - exit(EXIT_SUCCESS); -} - -void shellParseArgument(int argc, char *argv[]) { - for (int i = 1; i < argc; i++) { - if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) { - printHelp(); - exit(0); - } else if (strcmp(argv[i], "-r") == 0) { - rowNum = atoi(argv[++i]); - } else if (strcmp(argv[i], "-t") == 0) { - threadNum = atoi(argv[++i]); - } else if (strcmp(argv[i], "-replica") == 0) { - replica = atoi(argv[++i]); - } else { - } - } - - pPrint("%s rowNum:%d %s", GREEN, rowNum, NC); - pPrint("%s threadNum:%d %s", GREEN, threadNum, NC); - pPrint("%s replica:%d %s", GREEN, replica, NC); -} - -int main(int argc, char *argv[]) { - shellParseArgument(argc, argv); - - taos_init(); - - ThreadObj *threads = calloc(threadNum, sizeof(ThreadObj)); - for (int i = 0; i < threadNum; ++i) { - ThreadObj * pthread = threads + i; - pthread_attr_t thattr; - pthread->index = i; - pthread_attr_init(&thattr); - pthread_attr_setdetachstate(&thattr, PTHREAD_CREATE_JOINABLE); - pthread_create(&pthread->pid, &thattr, taos_execute, pthread); - } - - for (int i = 0; i < threadNum; i++) { - pthread_join(threads[i].pid, NULL); - } - - printf("all finished\n"); - - return 0; -} - -void taos_error(TAOS *con) { - fprintf(stderr, "TDengine error: %s\n", taos_errstr(con)); - taos_close(con); - exit(1); -} - -void* taos_execute(void *param) { - ThreadObj *pThread = (ThreadObj *)param; - - char fqdn[TSDB_FQDN_LEN]; - uint16_t port; - - taosGetFqdnPortFromEp(tsFirst, fqdn, &port); - - void *taos = taos_connect(fqdn, "root", "taosdata", NULL, port); - if (taos == NULL) taos_error(taos); - - char sql[1024] = {0}; - sprintf(sql, "create database if not exists db replica %d", replica); - taos_query(taos, sql); - - sprintf(sql, "create table if not exists db.t%d (ts timestamp, i int, j float, k double)", pThread->index); - taos_query(taos, sql); - - int64_t timestamp = 1530374400000L; - - sprintf(sql, "insert into db.t%d values(%ld, %d, %d, %d)", pThread->index, timestamp, 0, 0, 0); - TAOS_RES *pSql = taos_query(taos, sql); - int code = taos_errno(pSql); - if (code != 0) - { - printf("error code:%d, sql:%s\n", code, sql); - taos_free_result(pSql); - taos_close(taos); - return NULL; - } - int affectrows = taos_affected_rows(taos); - if (affectrows != 1) - { - printf("affect rows:%d, sql:%s\n", affectrows, sql); - taos_free_result(pSql); - taos_close(taos); - return NULL; - } - taos_free_result(pSql); - pSql = NULL; - - - timestamp -= 1000; - - int total_affect_rows = affectrows; - - for (int i = 1; i < rowNum; ++i) { - sprintf(sql, "import into db.t%d values(%ld, %d, %d, %d)", pThread->index, timestamp, i, i, i); - - pSql = taos_query(taos, sql); - code = taos_errno(pSql); - if (code != 0) - { - printf("error code:%d, sql:%s\n", code, sql); - taos_free_result(pSql); - pSql = NULL; - taos_close(taos); - return NULL; - } - int affectrows = taos_affected_rows(taos); - if (affectrows != 1) { - printf("affect rows:%d, sql:%s\n", affectrows, sql); - taos_free_result(pSql); - pSql = NULL; - taos_close(taos); - } - - total_affect_rows += affectrows; - taos_free_result(pSql); - pSql = NULL; - - timestamp -= 1000; - } - - printf("thread:%d run finished total_affect_rows:%d\n", pThread->index, total_affect_rows); - taos_close(taos); - - return NULL; -} diff --git a/tests/test/c/importPerTable.c b/tests/test/c/importPerTable.c deleted file mode 100644 index 7aef676c97..0000000000 --- a/tests/test/c/importPerTable.c +++ /dev/null @@ -1,356 +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 . - */ - -#define _DEFAULT_SOURCE -#include "../../../include/client/taos.h" -#include "os.h" -#include "osTime.h" -#include "tglobal.h" -#include "ttimer.h" -#include "tulog.h" -#include "tutil.h" - -#define MAX_RANDOM_POINTS 20000 -#define GREEN "\033[1;32m" -#define NC "\033[0m" - -typedef struct { - int64_t rowsPerTable; - int64_t pointsPerTable; - int64_t tableBeginIndex; - int64_t tableEndIndex; - int threadIndex; - char dbName[32]; - char stableName[64]; - pthread_t thread; -} SInfo; - -void *syncTest(void *param); -void generateRandomPoints(); -void shellParseArgument(int argc, char *argv[]); -void createDbAndTable(); -void insertData(); - -int32_t randomData[MAX_RANDOM_POINTS]; -int64_t rowsPerTable = 1000000; -int64_t pointsPerTable = 1; -int64_t numOfThreads = 10; -int64_t numOfTablesPerThread = 100; -char dbName[32] = "db"; -char stableName[64] = "st"; -int64_t totalUs = 0; -int64_t reqNum = 0; -int64_t maxUs = 0; -int64_t minUs = 100000000; - -int main(int argc, char *argv[]) { - shellParseArgument(argc, argv); - generateRandomPoints(); - taos_init(); - createDbAndTable(); - insertData(); - int64_t avgUs = totalUs / reqNum; - pError("%s totalUs:%ld, avgUs:%ld maxUs:%ld minUs:%ld reqNum:%ld %s\n", GREEN, totalUs, avgUs, maxUs, minUs, reqNum, NC); -} - -int32_t query(void *con, char *qstr) { - int64_t begin = taosGetTimestampUs(); - - TAOS_RES *pSql = taos_query(con, qstr); - int32_t code = taos_errno(pSql); - if (code != 0) { - pError("failed to exec sql:%s, code:%d reason:%s", qstr, taos_errno(con), taos_errstr(con)); - exit(0); - } - taos_free_result(pSql); - - int64_t us = taosGetTimestampUs() - begin; - maxUs = MAX(us, maxUs); - minUs = MIN(us, minUs); - atomic_add_fetch_64(&totalUs, us); - atomic_add_fetch_64(&reqNum, 1); - if (reqNum > 100000) { - int64_t avgUs = totalUs / reqNum; - if (us > avgUs * 100) { - pError("sql:%s", qstr); - pError("%s totalUs:%ld, avgUs:%ld maxUs:%ld minUs:%ld reqNum:%ld %s\n", GREEN, totalUs, avgUs, maxUs, minUs, - reqNum, NC); - taosMsleep(1000); - exit(0); - } - } - - return code; -} - -void createDbAndTable() { - pPrint("start to create table"); - - TAOS * con; - struct timeval systemTime; - int64_t st, et; - char qstr[64000]; - - char fqdn[TSDB_FQDN_LEN]; - uint16_t port; - - taosGetFqdnPortFromEp(tsFirst, fqdn, &port); - - con = taos_connect(fqdn, "root", "taosdata", NULL, port); - if (con == NULL) { - pError("failed to connect to DB, reason:%s", taos_errstr(con)); - exit(1); - } - - sprintf(qstr, "create database if not exists %s", dbName); - if (query(con, qstr)) { - pError("failed to create database:%s, code:%d reason:%s", dbName, taos_errno(con), taos_errstr(con)); - exit(0); - } - - sprintf(qstr, "use %s", dbName); - if (query(con, qstr)) { - pError("failed to use db, code:%d reason:%s", taos_errno(con), taos_errstr(con)); - exit(0); - } - - gettimeofday(&systemTime, NULL); - st = systemTime.tv_sec * 1000000 + systemTime.tv_usec; - int64_t totalTables = numOfTablesPerThread * numOfThreads; - - if (strcmp(stableName, "no") != 0) { - int len = sprintf(qstr, "create table if not exists %s(ts timestamp", stableName); - for (int64_t f = 0; f < pointsPerTable; ++f) { - len += sprintf(qstr + len, ", f%ld double", f); - } - sprintf(qstr + len, ") tags(t int)"); - - if (query(con, qstr)) { - pError("failed to create stable, code:%d reason:%s", taos_errno(con), taos_errstr(con)); - exit(0); - } - - for (int64_t t = 0; t < totalTables; ++t) { - sprintf(qstr, "create table if not exists %s%ld using %s tags(%ld)", stableName, t, stableName, t); - if (query(con, qstr)) { - pError("failed to create table %s%" PRId64 ", reason:%s", stableName, t, taos_errstr(con)); - exit(0); - } - } - } else { - for (int64_t t = 0; t < totalTables; ++t) { - int len = sprintf(qstr, "create table if not exists %s%ld(ts timestamp", stableName, t); - for (int64_t f = 0; f < pointsPerTable; ++f) { - len += sprintf(qstr + len, ", f%ld double", f); - } - sprintf(qstr + len, ")"); - - if (query(con, qstr)) { - pError("failed to create table %s%ld, reason:%s", stableName, t, taos_errstr(con)); - exit(0); - } - } - } - - gettimeofday(&systemTime, NULL); - et = systemTime.tv_sec * 1000000 + systemTime.tv_usec; - pPrint("%.1f seconds to create %ld tables", (et - st) / 1000.0 / 1000.0, totalTables); -} - -void insertData() { - struct timeval systemTime; - int64_t st, et; - - gettimeofday(&systemTime, NULL); - st = systemTime.tv_sec * 1000000 + systemTime.tv_usec; - - pPrint("%" PRId64 " threads are spawned to import data", numOfThreads); - - pthread_attr_t thattr; - pthread_attr_init(&thattr); - pthread_attr_setdetachstate(&thattr, PTHREAD_CREATE_JOINABLE); - SInfo *pInfo = (SInfo *)malloc(sizeof(SInfo) * numOfThreads); - - // Start threads to write - for (int i = 0; i < numOfThreads; ++i) { - pInfo[i].rowsPerTable = rowsPerTable; - pInfo[i].pointsPerTable = pointsPerTable; - pInfo[i].tableBeginIndex = i * numOfTablesPerThread; - pInfo[i].tableEndIndex = (i + 1) * numOfTablesPerThread; - pInfo[i].threadIndex = i; - strcpy(pInfo[i].dbName, dbName); - strcpy(pInfo[i].stableName, stableName); - pthread_create(&(pInfo[i].thread), &thattr, syncTest, (void *)(pInfo + i)); - } - - taosMsleep(300); - for (int i = 0; i < numOfThreads; i++) { - pthread_join(pInfo[i].thread, NULL); - } - - gettimeofday(&systemTime, NULL); - et = systemTime.tv_sec * 1000000 + systemTime.tv_usec; - double seconds = (et - st) / 1000.0 / 1000.0; - - int64_t totalTables = numOfTablesPerThread * numOfThreads; - int64_t totalRows = totalTables * rowsPerTable; - int64_t totalPoints = totalTables * rowsPerTable * pointsPerTable; - double speedOfRows = totalRows / seconds; - double speedOfPoints = totalPoints / seconds; - - pPrint( - "%sall threads:%ld finished, use %.1lf seconds, tables:%.ld rows:%ld points:%ld, speed RowsPerSecond:%.1lf " - "PointsPerSecond:%.1lf%s", - GREEN, numOfThreads, seconds, totalTables, totalRows, totalPoints, speedOfRows, speedOfPoints, NC); - - pPrint("threads exit"); - - pthread_attr_destroy(&thattr); - free(pInfo); -} - -void *syncTest(void *param) { - TAOS * con; - SInfo * pInfo = (SInfo *)param; - struct timeval systemTime; - int64_t st, et; - char qstr[65000]; - int maxBytes = 60000; - - pPrint("thread:%d, start to run", pInfo->threadIndex); - char fqdn[TSDB_FQDN_LEN]; - uint16_t port; - - taosGetFqdnPortFromEp(tsFirst, fqdn, &port); - - con = taos_connect(fqdn, "root", "taosdata", NULL, port); - if (con == NULL) { - pError("index:%d, failed to connect to DB, reason:%s", pInfo->threadIndex, taos_errstr(con)); - exit(1); - } - - sprintf(qstr, "use %s", pInfo->dbName); - query(con, qstr); - - gettimeofday(&systemTime, NULL); - st = systemTime.tv_sec * 1000000 + systemTime.tv_usec; - - int64_t start = 1587225600000; - int64_t interval = 1000; // 1000 ms - - char *sql = qstr; - char inserStr[] = "import into"; - int len = sprintf(sql, "%s", inserStr); - - for (int64_t table = pInfo->tableBeginIndex; table < pInfo->tableEndIndex; ++table) { - len += sprintf(sql + len, " %s%ld values", pInfo->stableName, table); - for (int64_t row = 0; row < pInfo->rowsPerTable; row++) { - len += sprintf(sql + len, "(%ld", start - row * interval); - for (int64_t point = 0; point < pInfo->pointsPerTable; ++point) { - len += sprintf(sql + len, ",%d", randomData[(123 * table + 456 * row + 789 * point) % MAX_RANDOM_POINTS]); - // len += sprintf(sql + len, ",%ld", row); - } - len += sprintf(sql + len, ")"); - if (len > maxBytes) { - if (query(con, qstr)) { - pError("thread:%d, failed to import table:%s%ld row:%ld, reason:%s", pInfo->threadIndex, pInfo->stableName, - table, row, taos_errstr(con)); - } - - // "insert into" - len = sprintf(sql, "%s", inserStr); - - // "insert into st1 values" - if (row != pInfo->rowsPerTable - 1) { - len += sprintf(sql + len, " %s%ld values", pInfo->stableName, table); - } - } - } - } - - if (len != strlen(inserStr)) { - query(con, qstr); - } - - gettimeofday(&systemTime, NULL); - et = systemTime.tv_sec * 1000000 + systemTime.tv_usec; - int64_t totalTables = pInfo->tableEndIndex - pInfo->tableBeginIndex; - int64_t totalRows = totalTables * pInfo->rowsPerTable; - int64_t totalPoints = totalRows * pInfo->pointsPerTable; - pPrint("thread:%d, import finished, use %.2f seconds, tables:%ld rows:%ld points:%ld", pInfo->threadIndex, - (et - st) / 1000.0 / 1000.0, totalTables, totalRows, totalPoints); - - return NULL; -} - -void generateRandomPoints() { - for (int r = 0; r < MAX_RANDOM_POINTS; ++r) { - randomData[r] = rand() % 1000; - } -} - -void printHelp() { - char indent[10] = " "; - printf("Used to test the performance of TDengine\n After writing all the data in one table, start the next table\n"); - - printf("%s%s\n", indent, "-d"); - printf("%s%s%s%s\n", indent, indent, "The name of the database to be created, default is ", dbName); - printf("%s%s\n", indent, "-s"); - printf("%s%s%s%s%s\n", indent, indent, "The name of the super table to be created, default is ", stableName, ", if 'no' then create normal table"); - printf("%s%s\n", indent, "-c"); - printf("%s%s%s%s\n", indent, indent, "Configuration directory, default is ", configDir); - printf("%s%s\n", indent, "-r"); - printf("%s%s%s%ld\n", indent, indent, "Number of records to write to each table, default is ", rowsPerTable); - printf("%s%s\n", indent, "-p"); - printf("%s%s%s%" PRId64 "\n", indent, indent, "Number of columns per table, default is ", pointsPerTable); - printf("%s%s\n", indent, "-t"); - printf("%s%s%s%" PRId64 "\n", indent, indent, "Number of threads to be used, default is ", numOfThreads); - printf("%s%s\n", indent, "-n"); - printf("%s%s%s%" PRId64 "\n", indent, indent, "Number of tables per thread, default is ", numOfTablesPerThread); - - exit(EXIT_SUCCESS); -} - -void shellParseArgument(int argc, char *argv[]) { - for (int i = 1; i < argc; i++) { - if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) { - printHelp(); - exit(0); - } else if (strcmp(argv[i], "-d") == 0) { - strcpy(dbName, argv[++i]); - } else if (strcmp(argv[i], "-c") == 0) { - strcpy(configDir, argv[++i]); - } else if (strcmp(argv[i], "-s") == 0) { - strcpy(stableName, argv[++i]); - } else if (strcmp(argv[i], "-r") == 0) { - rowsPerTable = atoi(argv[++i]); - } else if (strcmp(argv[i], "-p") == 0) { - pointsPerTable = atoi(argv[++i]); - } else if (strcmp(argv[i], "-t") == 0) { - numOfThreads = atoi(argv[++i]); - } else if (strcmp(argv[i], "-n") == 0) { - numOfTablesPerThread = atoi(argv[++i]); - } else { - } - } - - pPrint("%srowsPerTable:%" PRId64 "%s", GREEN, rowsPerTable, NC); - pPrint("%spointsPerTable:%" PRId64 "%s", GREEN, pointsPerTable, NC); - pPrint("%snumOfThreads:%" PRId64 "%s", GREEN, numOfThreads, NC); - pPrint("%snumOfTablesPerThread:%" PRId64 "%s", GREEN, numOfTablesPerThread, NC); - pPrint("%sdbName:%s%s", GREEN, dbName, NC); - pPrint("%stableName:%s%s", GREEN, stableName, NC); - pPrint("%sstart to run%s", GREEN, NC); -} diff --git a/tests/test/c/insertPerRow.c b/tests/test/c/insertPerRow.c deleted file mode 100644 index bdf27180b2..0000000000 --- a/tests/test/c/insertPerRow.c +++ /dev/null @@ -1,366 +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 . - */ - -#define _DEFAULT_SOURCE -#include "../../../include/client/taos.h" -#include "os.h" -#include "tglobal.h" -#include "ttimer.h" -#include "tulog.h" -#include "tutil.h" - -#define MAX_RANDOM_POINTS 20000 -#define GREEN "\033[1;32m" -#define NC "\033[0m" - -typedef struct { - int64_t rowsPerTable; - int64_t pointsPerTable; - int64_t tableBeginIndex; - int64_t tableEndIndex; - int threadIndex; - char dbName[32]; - char stableName[64]; - float createTableSpeed; - pthread_t thread; -} SInfo; - -void *syncTest(void *param); -void generateRandomPoints(); -void shellParseArgument(int argc, char *argv[]); -void createDbAndTable(); -void insertData(); - -int32_t randomData[MAX_RANDOM_POINTS]; -int64_t rowsPerTable = 1000000000; -int64_t pointsPerTable = 1; -int64_t numOfThreads = 10; -int64_t numOfTablesPerThread = 100; -char dbName[32] = "db"; -char stableName[64] = "st"; -int32_t cache = 1; -int32_t replica = 3; -int32_t days = 10; -int32_t interval = 1000; - -int main(int argc, char *argv[]) { - shellParseArgument(argc, argv); - generateRandomPoints(); - taos_init(); - createDbAndTable(); - insertData(); -} - -void createDbAndTable() { - pPrint("start to create table"); - - TAOS_RES * pSql; - TAOS * con; - char qstr[64000]; - - char fqdn[TSDB_FQDN_LEN]; - uint16_t port; - taosGetFqdnPortFromEp(tsFirst, fqdn, &port); - con = taos_connect(fqdn, "root", "taosdata", NULL, port); - if (con == NULL) { - pError("failed to connect to DB, reason:%s", taos_errstr(con)); - exit(1); - } - - sprintf(qstr, "create database if not exists %s cache %d replica %d days %d", dbName, cache, replica, days); - pSql = taos_query(con, qstr); - int32_t code = taos_errno(pSql); - if (code != 0) { - pError("failed to create database:%s, sql:%s, code:%d reason:%s", dbName, qstr, taos_errno(con), taos_errstr(con)); - exit(0); - } - taos_free_result(pSql); - - sprintf(qstr, "use %s", dbName); - pSql = taos_query(con, qstr); - code = taos_errno(pSql); - if (code != 0) { - pError("failed to use db, code:%d reason:%s", taos_errno(con), taos_errstr(con)); - exit(0); - } - taos_free_result(pSql); - - if (strcmp(stableName, "no") != 0) { - int len = sprintf(qstr, "create table if not exists %s(ts timestamp", stableName); - for (int64_t f = 0; f < pointsPerTable; ++f) { - len += sprintf(qstr + len, ", f%ld double", f); - } - sprintf(qstr + len, ") tags(t int)"); - - pSql = taos_query(con, qstr); - code = taos_errno(pSql); - if (code != 0) { - pError("failed to create stable, code:%d reason:%s", taos_errno(con), taos_errstr(con)); - exit(0); - } - taos_free_result(pSql); - } -} - -void insertData() { - struct timeval systemTime; - int64_t st, et; - - gettimeofday(&systemTime, NULL); - st = systemTime.tv_sec * 1000000 + systemTime.tv_usec; - - pPrint("%" PRId64 " threads are spawned to insert data", numOfThreads); - - pthread_attr_t thattr; - pthread_attr_init(&thattr); - pthread_attr_setdetachstate(&thattr, PTHREAD_CREATE_JOINABLE); - SInfo *pInfo = (SInfo *)calloc(numOfThreads, sizeof(SInfo)); - - // Start threads to write - for (int i = 0; i < numOfThreads; ++i) { - pInfo[i].rowsPerTable = rowsPerTable; - pInfo[i].pointsPerTable = pointsPerTable; - pInfo[i].tableBeginIndex = i * numOfTablesPerThread; - pInfo[i].tableEndIndex = (i + 1) * numOfTablesPerThread; - pInfo[i].threadIndex = i; - strcpy(pInfo[i].dbName, dbName); - strcpy(pInfo[i].stableName, stableName); - pthread_create(&(pInfo[i].thread), &thattr, syncTest, (void *)(pInfo + i)); - } - - taosMsleep(300); - for (int i = 0; i < numOfThreads; i++) { - pthread_join(pInfo[i].thread, NULL); - } - - gettimeofday(&systemTime, NULL); - et = systemTime.tv_sec * 1000000 + systemTime.tv_usec; - double seconds = (et - st) / 1000.0 / 1000.0; - - int64_t totalTables = numOfTablesPerThread * numOfThreads; - int64_t totalRows = totalTables * rowsPerTable; - int64_t totalPoints = totalTables * rowsPerTable * pointsPerTable; - double speedOfRows = totalRows / seconds; - double speedOfPoints = totalPoints / seconds; - - float createTableSpeed = 0; - for (int i = 0; i < numOfThreads; ++i) { - createTableSpeed += pInfo[i].createTableSpeed; - } - - pPrint( - "%sall threads:%ld finished, use %.1lf seconds, tables:%.ld rows:%ld points:%ld, speed RowsPerSecond:%.1lf " - "PointsPerSecond:%.1lf CreateTableSpeed:%.1f t/s %s", - GREEN, numOfThreads, seconds, totalTables, totalRows, totalPoints, speedOfRows, speedOfPoints, createTableSpeed, NC); - - pPrint("threads exit"); - - pthread_attr_destroy(&thattr); - free(pInfo); -} - -void *syncTest(void *param) { - TAOS * con; - SInfo * pInfo = (SInfo *)param; - struct timeval systemTime; - int64_t st, et; - char qstr[65000]; - int maxBytes = 60000; - int code; - - pPrint("thread:%d, start to run", pInfo->threadIndex); - - char fqdn[TSDB_FQDN_LEN]; - uint16_t port; - - taosGetFqdnPortFromEp(tsFirst, fqdn, &port); - con = taos_connect(fqdn, "root", "taosdata", NULL, port); - if (con == NULL) { - pError("index:%d, failed to connect to DB, reason:%s", pInfo->threadIndex, taos_errstr(con)); - exit(1); - } - - sprintf(qstr, "use %s", pInfo->dbName); - taos_query(con, qstr); - - gettimeofday(&systemTime, NULL); - st = systemTime.tv_sec * 1000000 + systemTime.tv_usec; - - if (strcmp(stableName, "no") != 0) { - for (int64_t t = pInfo->tableBeginIndex; t < pInfo->tableEndIndex; ++t) { - sprintf(qstr, "create table if not exists %s%ld using %s tags(%ld)", stableName, t, stableName, t); - TAOS_RES *pSql = taos_query(con, qstr); - code = taos_errno(pSql); - if (code != 0) { - pError("failed to create table %s%" PRId64 ", reason:%s", stableName, t, taos_errstr(con)); - exit(0); - } - taos_free_result(pSql); - } - } else { - for (int64_t t = pInfo->tableBeginIndex; t < pInfo->tableEndIndex; ++t) { - int len = sprintf(qstr, "create table if not exists %s%ld(ts timestamp", stableName, t); - for (int64_t f = 0; f < pointsPerTable; ++f) { - len += sprintf(qstr + len, ", f%ld double", f); - } - sprintf(qstr + len, ")"); - - TAOS_RES *pSql = taos_query(con, qstr); - code = taos_errno(pSql); - if (code != 0) { - pError("failed to create table %s%ld, reason:%s", stableName, t, taos_errstr(con)); - exit(0); - } - taos_free_result(pSql); - } - } - - gettimeofday(&systemTime, NULL); - et = systemTime.tv_sec * 1000000 + systemTime.tv_usec; - float seconds = (et - st) / 1000.0 / 1000.0; - int64_t tables = pInfo->tableEndIndex - pInfo->tableBeginIndex; - pInfo->createTableSpeed = (float)tables / seconds; - pPrint("thread:%d, %.1f seconds to create %ld tables, speed:%.1f", pInfo->threadIndex, seconds, tables, - pInfo->createTableSpeed); - - if (pInfo->rowsPerTable == 0) return NULL; - - gettimeofday(&systemTime, NULL); - st = systemTime.tv_sec * 1000000 + systemTime.tv_usec; - - int64_t start = 1430000000000; - interval = 1000; // 1000 ms - - char *sql = qstr; - char inserStr[] = "insert into"; - int len = sprintf(sql, "%s", inserStr); - - for (int64_t row = 0; row < pInfo->rowsPerTable; row++) { - for (int64_t table = pInfo->tableBeginIndex; table < pInfo->tableEndIndex; ++table) { - len += sprintf(sql + len, " %s%ld values", pInfo->stableName, table); - len += sprintf(sql + len, "(%ld", start + row * interval); - for (int64_t point = 0; point < pInfo->pointsPerTable; ++point) { - len += sprintf(sql + len, ",%d", randomData[(123 * table + 456 * row + 789 * point) % MAX_RANDOM_POINTS]); - // len += sprintf(sql + len, ",%ld", row); - } - len += sprintf(sql + len, ")"); - if (len > maxBytes) { - TAOS_RES *pSql = taos_query(con, qstr); - int32_t code = taos_errno(pSql); - if (code != 0) { - pError("thread:%d, failed to insert table:%s%ld row:%ld, reason:%s", pInfo->threadIndex, pInfo->stableName, - table, row, taos_errstr(con)); - } - taos_free_result(pSql); - - // "insert into" - len = sprintf(sql, "%s", inserStr); - } - } - } - - if (len != strlen(inserStr)) { - TAOS_RES *pSql = taos_query(con, qstr); - taos_free_result(pSql); - } - - gettimeofday(&systemTime, NULL); - et = systemTime.tv_sec * 1000000 + systemTime.tv_usec; - int64_t totalTables = pInfo->tableEndIndex - pInfo->tableBeginIndex; - int64_t totalRows = totalTables * pInfo->rowsPerTable; - int64_t totalPoints = totalRows * pInfo->pointsPerTable; - pPrint("thread:%d, insert finished, use %.2f seconds, tables:%ld rows:%ld points:%ld", pInfo->threadIndex, - (et - st) / 1000.0 / 1000.0, totalTables, totalRows, totalPoints); - - return NULL; -} - -void generateRandomPoints() { - for (int r = 0; r < MAX_RANDOM_POINTS; ++r) { - randomData[r] = rand() % 1000; - } -} - -void printHelp() { - char indent[10] = " "; - printf("Used to test the performance of TDengine\n After writing one row of data to all tables, write the next row\n"); - - printf("%s%s\n", indent, "-d"); - printf("%s%s%s%s\n", indent, indent, "The name of the database to be created, default is ", dbName); - printf("%s%s\n", indent, "-s"); - printf("%s%s%s%s%s\n", indent, indent, "The name of the super table to be created, default is ", stableName, ", if 'no' then create normal table"); - printf("%s%s\n", indent, "-c"); - printf("%s%s%s%s\n", indent, indent, "Configuration directory, default is ", configDir); - printf("%s%s\n", indent, "-r"); - printf("%s%s%s%ld\n", indent, indent, "Number of records to write to each table, default is ", rowsPerTable); - printf("%s%s\n", indent, "-p"); - printf("%s%s%s%" PRId64 "\n", indent, indent, "Number of columns per table, default is ", pointsPerTable); - printf("%s%s\n", indent, "-t"); - printf("%s%s%s%" PRId64 "\n", indent, indent, "Number of threads to be used, default is ", numOfThreads); - printf("%s%s\n", indent, "-n"); - printf("%s%s%s%" PRId64 "\n", indent, indent, "Number of tables per thread, default is ", numOfTablesPerThread); - printf("%s%s\n", indent, "-replica"); - printf("%s%s%s%d\n", indent, indent, "Database parameters replica, default is ", replica); - printf("%s%s\n", indent, "-cache"); - printf("%s%s%s%d\n", indent, indent, "Database parameters replica, default is ", cache); - printf("%s%s\n", indent, "-days"); - printf("%s%s%s%d\n", indent, indent, "Database parameters days, default is ", days); - printf("%s%s\n", indent, "-interval"); - printf("%s%s%s%d\n", indent, indent, "Interval of each rows in ms, default is ", interval); - - exit(EXIT_SUCCESS); -} - -void shellParseArgument(int argc, char *argv[]) { - for (int i = 1; i < argc; i++) { - if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) { - printHelp(); - exit(0); - } else if (strcmp(argv[i], "-d") == 0) { - strcpy(dbName, argv[++i]); - } else if (strcmp(argv[i], "-c") == 0) { - strcpy(configDir, argv[++i]); - } else if (strcmp(argv[i], "-s") == 0) { - strcpy(stableName, argv[++i]); - } else if (strcmp(argv[i], "-r") == 0) { - rowsPerTable = atoi(argv[++i]); - } else if (strcmp(argv[i], "-p") == 0) { - pointsPerTable = atoi(argv[++i]); - } else if (strcmp(argv[i], "-t") == 0) { - numOfThreads = atoi(argv[++i]); - } else if (strcmp(argv[i], "-n") == 0) { - numOfTablesPerThread = atoi(argv[++i]); - } else if (strcmp(argv[i], "-replica") == 0) { - replica = atoi(argv[++i]); - } else if (strcmp(argv[i], "-cache") == 0) { - cache = atoi(argv[++i]); - } else if (strcmp(argv[i], "-days") == 0) { - days = atoi(argv[++i]); - } else if (strcmp(argv[i], "-interval") == 0) { - interval = atoi(argv[++i]); - } else { - } - } - - pPrint("%srowsPerTable:%" PRId64 "%s", GREEN, rowsPerTable, NC); - pPrint("%spointsPerTable:%" PRId64 "%s", GREEN, pointsPerTable, NC); - pPrint("%snumOfThreads:%" PRId64 "%s", GREEN, numOfThreads, NC); - pPrint("%snumOfTablesPerThread:%" PRId64 "%s", GREEN, numOfTablesPerThread, NC); - pPrint("%scache:%" PRId32 "%s", GREEN, cache, NC); - pPrint("%stables:%" PRId32 "%s", GREEN, replica, NC); - pPrint("%sdbName:%s%s", GREEN, dbName, NC); - pPrint("%stableName:%s%s", GREEN, stableName, NC); - pPrint("%sstart to run%s", GREEN, NC); -} diff --git a/tests/test/c/insertPerTable.c b/tests/test/c/insertPerTable.c deleted file mode 100644 index ac3c06f0f3..0000000000 --- a/tests/test/c/insertPerTable.c +++ /dev/null @@ -1,357 +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 . - */ - -#define _DEFAULT_SOURCE -#include "../../../include/client/taos.h" -#include "os.h" -#include "tglobal.h" -#include "ttimer.h" -#include "tulog.h" -#include "tutil.h" - -#define MAX_RANDOM_POINTS 20000 -#define GREEN "\033[1;32m" -#define NC "\033[0m" - -typedef struct { - int64_t rowsPerTable; - int64_t pointsPerTable; - int64_t tableBeginIndex; - int64_t tableEndIndex; - int threadIndex; - char dbName[32]; - char stableName[64]; - pthread_t thread; -} SInfo; - -void *syncTest(void *param); -void generateRandomPoints(); -void shellParseArgument(int argc, char *argv[]); -void createDbAndTable(); -void insertData(); - -int32_t randomData[MAX_RANDOM_POINTS]; -int64_t rowsPerTable = 10000; -int64_t pointsPerTable = 1; -int64_t numOfThreads = 1; -int64_t numOfTablesPerThread = 1; -char dbName[32] = "db"; -char stableName[64] = "st"; -int32_t cache = 16; -int32_t tables = 5000; - -int main(int argc, char *argv[]) { - shellParseArgument(argc, argv); - generateRandomPoints(); - taos_init(); - createDbAndTable(); - insertData(); -} - -void createDbAndTable() { - pPrint("start to create table"); - - TAOS_RES * pSql; - TAOS * con; - struct timeval systemTime; - int64_t st, et; - char qstr[64000]; - - char fqdn[TSDB_FQDN_LEN]; - uint16_t port; - - taosGetFqdnPortFromEp(tsFirst, fqdn, &port); - - con = taos_connect(fqdn, "root", "taosdata", NULL, port); - if (con == NULL) { - pError("failed to connect to DB, reason:%s", taos_errstr(con)); - exit(1); - } - - sprintf(qstr, "create database if not exists %s cache %d maxtables %d", dbName, cache, tables); - pSql = taos_query(con, qstr); - int32_t code = taos_errno(pSql); - if (code != 0) { - pError("failed to create database:%s, sql:%s, code:%d reason:%s", dbName, qstr, taos_errno(con), taos_errstr(con)); - exit(0); - } - - sprintf(qstr, "use %s", dbName); - pSql = taos_query(con, qstr); - code = taos_errno(pSql); - if (code != 0) { - pError("failed to use db, code:%d reason:%s", taos_errno(con), taos_errstr(con)); - exit(0); - } - taos_free_result(pSql); - - gettimeofday(&systemTime, NULL); - st = systemTime.tv_sec * 1000000 + systemTime.tv_usec; - int64_t totalTables = numOfTablesPerThread * numOfThreads; - - if (strcmp(stableName, "no") != 0) { - int len = sprintf(qstr, "create table if not exists %s(ts timestamp", stableName); - for (int64_t f = 0; f < pointsPerTable; ++f) { - len += sprintf(qstr + len, ", f%ld double", f); - } - sprintf(qstr + len, ") tags(t int)"); - - pSql = taos_query(con, qstr); - code = taos_errno(pSql); - if (code != 0) { - pError("failed to create stable, code:%d reason:%s", taos_errno(con), taos_errstr(con)); - exit(0); - } - taos_free_result(pSql); - - for (int64_t t = 0; t < totalTables; ++t) { - sprintf(qstr, "create table if not exists %s%ld using %s tags(%ld)", stableName, t, stableName, t); - pSql = taos_query(con, qstr); - code = taos_errno(pSql); - if (code != 0) { - pError("failed to create table %s%" PRId64 ", reason:%s", stableName, t, taos_errstr(con)); - exit(0); - } - taos_free_result(pSql); - } - } else { - for (int64_t t = 0; t < totalTables; ++t) { - int len = sprintf(qstr, "create table if not exists %s%ld(ts timestamp", stableName, t); - for (int64_t f = 0; f < pointsPerTable; ++f) { - len += sprintf(qstr + len, ", f%ld double", f); - } - sprintf(qstr + len, ")"); - - pSql = taos_query(con, qstr); - code = taos_errno(pSql); - if (code != 0) { - pError("failed to create table %s%ld, reason:%s", stableName, t, taos_errstr(con)); - exit(0); - } - taos_free_result(pSql); - } - } - - gettimeofday(&systemTime, NULL); - et = systemTime.tv_sec * 1000000 + systemTime.tv_usec; - float seconds = (et - st) / 1000.0 / 1000.0; - pPrint("%.1f seconds to create %ld tables, speed:%.1f", seconds, totalTables, totalTables / seconds); - taos_close(con); -} - -void insertData() { - struct timeval systemTime; - int64_t st, et; - - gettimeofday(&systemTime, NULL); - st = systemTime.tv_sec * 1000000 + systemTime.tv_usec; - - if (rowsPerTable <= 0) { - pPrint("not insert data for rowsPerTable is :%" PRId64, rowsPerTable); - exit(0); - } else { - pPrint("%" PRId64 " threads are spawned to insert data", numOfThreads); - } - - pthread_attr_t thattr; - pthread_attr_init(&thattr); - pthread_attr_setdetachstate(&thattr, PTHREAD_CREATE_JOINABLE); - SInfo *pInfo = (SInfo *)malloc(sizeof(SInfo) * numOfThreads); - - // Start threads to write - for (int i = 0; i < numOfThreads; ++i) { - pInfo[i].rowsPerTable = rowsPerTable; - pInfo[i].pointsPerTable = pointsPerTable; - pInfo[i].tableBeginIndex = i * numOfTablesPerThread; - pInfo[i].tableEndIndex = (i + 1) * numOfTablesPerThread; - pInfo[i].threadIndex = i; - strcpy(pInfo[i].dbName, dbName); - strcpy(pInfo[i].stableName, stableName); - pthread_create(&(pInfo[i].thread), &thattr, syncTest, (void *)(pInfo + i)); - } - - taosMsleep(300); - for (int i = 0; i < numOfThreads; i++) { - pthread_join(pInfo[i].thread, NULL); - } - - gettimeofday(&systemTime, NULL); - et = systemTime.tv_sec * 1000000 + systemTime.tv_usec; - double seconds = (et - st) / 1000.0 / 1000.0; - - int64_t totalTables = numOfTablesPerThread * numOfThreads; - int64_t totalRows = totalTables * rowsPerTable; - int64_t totalPoints = totalTables * rowsPerTable * pointsPerTable; - double speedOfRows = totalRows / seconds; - double speedOfPoints = totalPoints / seconds; - - pPrint( - "%sall threads:%ld finished, use %.1lf seconds, tables:%.ld rows:%ld points:%ld, speed RowsPerSecond:%.1lf " - "PointsPerSecond:%.1lf%s", - GREEN, numOfThreads, seconds, totalTables, totalRows, totalPoints, speedOfRows, speedOfPoints, NC); - - pPrint("threads exit"); - - pthread_attr_destroy(&thattr); - free(pInfo); -} - -void *syncTest(void *param) { - TAOS * con; - SInfo * pInfo = (SInfo *)param; - struct timeval systemTime; - int64_t st, et; - char qstr[65000]; - int maxBytes = 60000; - - pPrint("thread:%d, start to run", pInfo->threadIndex); - - char fqdn[TSDB_FQDN_LEN]; - uint16_t port; - - taosGetFqdnPortFromEp(tsFirst, fqdn, &port); - - con = taos_connect(fqdn, "root", "taosdata", NULL, port); - if (con == NULL) { - pError("index:%d, failed to connect to DB, reason:%s", pInfo->threadIndex, taos_errstr(con)); - exit(1); - } - - sprintf(qstr, "use %s", pInfo->dbName); - taos_query(con, qstr); - - gettimeofday(&systemTime, NULL); - st = systemTime.tv_sec * 1000000 + systemTime.tv_usec; - - int64_t start = 1430000000000; - int64_t interval = 1000; // 1000 ms - - char *sql = qstr; - char inserStr[] = "insert into"; - int len = sprintf(sql, "%s", inserStr); - - for (int64_t table = pInfo->tableBeginIndex; table < pInfo->tableEndIndex; ++table) { - len += sprintf(sql + len, " %s%ld values", pInfo->stableName, table); - for (int64_t row = 0; row < pInfo->rowsPerTable; row++) { - len += sprintf(sql + len, "(%ld", start + row * interval); - for (int64_t point = 0; point < pInfo->pointsPerTable; ++point) { - len += sprintf(sql + len, ",%d", randomData[(123 * table + 456 * row + 789 * point) % MAX_RANDOM_POINTS]); - // len += sprintf(sql + len, ",%ld", row); - } - len += sprintf(sql + len, ")"); - if (len > maxBytes) { - TAOS_RES *pSql = taos_query(con, qstr); - int32_t code = taos_errno(pSql); - if (code != 0) { - pError("thread:%d, failed to insert table:%s%ld row:%ld, reason:%s", pInfo->threadIndex, pInfo->stableName, - table, row, taos_errstr(con)); - } - taos_free_result(pSql); - - // "insert into" - len = sprintf(sql, "%s", inserStr); - - // "insert into st1 values" - if (row != pInfo->rowsPerTable - 1) { - len += sprintf(sql + len, " %s%ld values", pInfo->stableName, table); - } - } - } - } - - if (len != strlen(inserStr)) { - taos_query(con, qstr); - } - - gettimeofday(&systemTime, NULL); - et = systemTime.tv_sec * 1000000 + systemTime.tv_usec; - int64_t totalTables = pInfo->tableEndIndex - pInfo->tableBeginIndex; - int64_t totalRows = totalTables * pInfo->rowsPerTable; - int64_t totalPoints = totalRows * pInfo->pointsPerTable; - pPrint("thread:%d, insert finished, use %.2f seconds, tables:%ld rows:%ld points:%ld", pInfo->threadIndex, - (et - st) / 1000.0 / 1000.0, totalTables, totalRows, totalPoints); - - return NULL; -} - -void generateRandomPoints() { - for (int r = 0; r < MAX_RANDOM_POINTS; ++r) { - randomData[r] = rand() % 1000; - } -} - -void printHelp() { - char indent[10] = " "; - printf("Used to test the performance of TDengine\n After writing all the data in one table, start the next table\n"); - - printf("%s%s\n", indent, "-d"); - printf("%s%s%s%s\n", indent, indent, "The name of the database to be created, default is ", dbName); - printf("%s%s\n", indent, "-s"); - printf("%s%s%s%s%s\n", indent, indent, "The name of the super table to be created, default is ", stableName, ", if 'no' then create normal table"); - printf("%s%s\n", indent, "-c"); - printf("%s%s%s%s\n", indent, indent, "Configuration directory, default is ", configDir); - printf("%s%s\n", indent, "-r"); - printf("%s%s%s%ld\n", indent, indent, "Number of records to write to each table, default is ", rowsPerTable); - printf("%s%s\n", indent, "-p"); - printf("%s%s%s%" PRId64 "\n", indent, indent, "Number of columns per table, default is ", pointsPerTable); - printf("%s%s\n", indent, "-t"); - printf("%s%s%s%" PRId64 "\n", indent, indent, "Number of threads to be used, default is ", numOfThreads); - printf("%s%s\n", indent, "-n"); - printf("%s%s%s%" PRId64 "\n", indent, indent, "Number of tables per thread, default is ", numOfTablesPerThread); - printf("%s%s\n", indent, "-tables"); - printf("%s%s%s%d\n", indent, indent, "Database parameters tables, default is ", tables); - printf("%s%s\n", indent, "-cache"); - printf("%s%s%s%d\n", indent, indent, "Database parameters cache, default is ", cache); - - exit(EXIT_SUCCESS); -} - -void shellParseArgument(int argc, char *argv[]) { - for (int i = 1; i < argc; i++) { - if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) { - printHelp(); - exit(0); - } else if (strcmp(argv[i], "-d") == 0) { - strcpy(dbName, argv[++i]); - } else if (strcmp(argv[i], "-c") == 0) { - strcpy(configDir, argv[++i]); - } else if (strcmp(argv[i], "-s") == 0) { - strcpy(stableName, argv[++i]); - } else if (strcmp(argv[i], "-r") == 0) { - rowsPerTable = atoi(argv[++i]); - } else if (strcmp(argv[i], "-p") == 0) { - pointsPerTable = atoi(argv[++i]); - } else if (strcmp(argv[i], "-t") == 0) { - numOfThreads = atoi(argv[++i]); - } else if (strcmp(argv[i], "-n") == 0) { - numOfTablesPerThread = atoi(argv[++i]); - } else if (strcmp(argv[i], "-tables") == 0) { - tables = atoi(argv[++i]); - } else if (strcmp(argv[i], "-cache") == 0) { - cache = atoi(argv[++i]); - } else { - } - } - - pPrint("%srowsPerTable:%" PRId64 "%s", GREEN, rowsPerTable, NC); - pPrint("%spointsPerTable:%" PRId64 "%s", GREEN, pointsPerTable, NC); - pPrint("%snumOfThreads:%" PRId64 "%s", GREEN, numOfThreads, NC); - pPrint("%snumOfTablesPerThread:%" PRId64 "%s", GREEN, numOfTablesPerThread, NC); - pPrint("%scache:%" PRId32 "%s", GREEN, cache, NC); - pPrint("%stables:%" PRId32 "%s", GREEN, tables, NC); - pPrint("%sdbName:%s%s", GREEN, dbName, NC); - pPrint("%stableName:%s%s", GREEN, stableName, NC); - pPrint("%sstart to run%s", GREEN, NC); -} diff --git a/tests/test/c/invalidTableId.c b/tests/test/c/invalidTableId.c deleted file mode 100644 index 286d0f1291..0000000000 --- a/tests/test/c/invalidTableId.c +++ /dev/null @@ -1,220 +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 . - */ - -#define _DEFAULT_SOURCE -#include "../../../include/client/taos.h" -#include "hash.h" -#include "os.h" -#include "taoserror.h" -#include "tglobal.h" -#include "tulog.h" -#include "tutil.h" - -#define MAX_RANDOM_POINTS 20000 -#define GREEN "\033[1;32m" -#define NC "\033[0m" - -#define MAX_DB_NUM 100 -void * con; -char dbNames[MAX_DB_NUM][48]; -int32_t dbNum = 0; -void parseArgument(int argc, char *argv[]); -void connDb(); -void getDbNames(); -void printDbNames(); -void queryTables(char *dbName); -void checkTables(char *dbName); - -int main(int argc, char *argv[]) { - parseArgument(argc, argv); - taos_init(); - connDb(); - getDbNames(); - printDbNames(); - for (int dbIndex = 0; dbIndex < dbNum; ++dbIndex) { - queryTables((char*)(dbNames[dbIndex])); - checkTables((char*)(dbNames[dbIndex])); - } - - pPrint("all %d database is checked", dbNum); -} - -void connDb() { - con = taos_connect(NULL, "root", "taosdata", NULL, 0); - if (con == NULL) { - pError("failed to connect to DB, reason:%s", taos_errstr(con)); - exit(0); - } -} - -void getDbNames() { - if (dbNum != 0) return; - - char * qstr = "show databases"; - TAOS_RES *result = taos_query(con, qstr); - int32_t code = taos_errno(result); - if (result == NULL || code != 0) { - pError("failed to exec sql:%s, code:0x%x reason:%s", qstr, code & 0XFFFF, tstrerror(code)); - exit(0); - } - - TAOS_ROW row; - int num_fields = taos_num_fields(result); - if (num_fields <= 0) return; - while ((row = taos_fetch_row(result))) { - char * dbName = (char*)dbNames[dbNum]; - int32_t *length = taos_fetch_lengths(result); - int len = length[0]; - memcpy(dbName, (char *)row[0], len); - dbName[len] = 0; - dbNum++; - } - - taos_free_result(result); -} - -void printDbNames() { - for (int dbIndex = 0; dbIndex < dbNum; ++dbIndex) { - pPrint("db:%d %s", dbIndex, dbNames[dbIndex]); - } -} - -void queryTables(char *dbName) { - char qstr[1024]; - char fileName[1024]; - char ts[35] = {0}; - int32_t precision = 1000; - - sprintf(qstr, "show %s.tables", dbName); - sprintf(fileName, "%s_tables.txt", dbName); - - TAOS_RES *result = taos_query(con, qstr); - int32_t code = taos_errno(result); - if (result == NULL || code != 0) { - pError("failed to exec sql:%s, code:0x%x reason:%s", qstr, code & 0XFFFF, tstrerror(code)); - exit(0); - } - - FILE *fp = fopen(fileName, "w"); - if (!fp) return; - - TAOS_ROW row; - int32_t rows = 0; - while ((row = taos_fetch_row(result))) { - char tableName[256] = {0}; - int32_t *length = taos_fetch_lengths(result); - int len = length[0]; - memcpy(tableName, (char *)row[0], len); - tableName[len] = 0; - - int64_t t = *((int64_t *)row[1]); - time_t tt = t / 1000; - struct tm *ptm = localtime(&tt); - int32_t tl = (int32_t)strftime(ts, 35, "%Y-%m-%d %H:%M:%S", ptm); - snprintf(ts + tl, 5, ".%03ld", t % precision); - - // fprintf(fp, "%s %s\n", tableName, ts); - fprintf(fp, "%s.%s\n", dbName, tableName); - rows++; - } - - taos_free_result(result); - fclose(fp); - pPrint("db:%s has %d tables, write to %s", dbName, rows, fileName); -} - -void checkTables(char *dbName) { - char qstr[1024]; - char fileName1[1024]; - char fileName2[1024]; - - sprintf(qstr, "show %s.tables", dbName); - sprintf(fileName1, "%s_tables.txt", dbName); - sprintf(fileName2, "%s_count.txt", dbName); - - FILE *fp1 = fopen(fileName1, "r"); - if (!fp1) return; - - FILE *fp2 = fopen(fileName2, "w"); - if (!fp2) return; - - int32_t successRows = 0; - int32_t failedRows = 0; - char tbName[256]; - while (!feof(fp1)) { - int size = fscanf(fp1, "%s", tbName); - if (size <= 0) { - break; - } - - sprintf(qstr, "select count(*) from %s", tbName); - TAOS_RES *result = taos_query(con, qstr); - int32_t code = taos_errno(result); - if (result == NULL || code != 0) { - pError("failed to exec sql:%s, code:0x%x reason:%s", qstr, code & 0XFFFF, tstrerror(code)); - fprintf(fp2, "%s failed to exec sql:%s, code:0x%x reason:%s", tbName, qstr, code & 0XFFFF, tstrerror(code)); - taos_free_result(result); - failedRows++; - continue; - } - - TAOS_ROW row; - int64_t count = 0; - while ((row = taos_fetch_row(result))) { - count = *((int64_t *)row[0]); - } - fprintf(fp2, "%s %" PRId64 "\n", tbName, count); - - successRows++; - if (successRows % 1000 == 0) { - pPrint("query %d tables", successRows); - } - taos_free_result(result); - } - - fclose(fp1); - fclose(fp2); - pPrint("db:%s query tables, success:%d failed:%d write to %s", dbName, successRows, failedRows, fileName2); -} - -void printHelp() { - char indent[10] = " "; - printf("Used to checkTables\n"); - - printf("%s%s\n", indent, "-c"); - printf("%s%s%s%s\n", indent, indent, "Configuration directory, default is ", configDir); - printf("%s%s\n", indent, "-d"); - printf("%s%s%s%s\n", indent, indent, "The name of the database to be checked, default is ", "all"); - - exit(EXIT_SUCCESS); -} - -void parseArgument(int argc, char *argv[]) { - for (int i = 1; i < argc; i++) { - if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) { - printHelp(); - exit(0); - } else if (strcmp(argv[i], "-d") == 0) { - strcpy(dbNames[0], argv[++i]); - dbNum++; - } else if (strcmp(argv[i], "-c") == 0) { - strcpy(configDir, argv[++i]); - } else { - } - } - - pPrint("%s configDir:%s %s", GREEN, configDir, NC); - pPrint("%s start to checkTables %s", GREEN, NC); -} diff --git a/tests/test/c/queryPerformance.c b/tests/test/c/queryPerformance.c deleted file mode 100644 index afe5cd0ccb..0000000000 --- a/tests/test/c/queryPerformance.c +++ /dev/null @@ -1,183 +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 . - */ - -#define _DEFAULT_SOURCE -#include "../../../include/client/taos.h" -#include "os.h" -#include "tglobal.h" -#include "ttimer.h" -#include "tulog.h" -#include "tutil.h" - -#define MAX_RANDOM_POINTS 20000 -#define GREEN "\033[1;32m" -#define NC "\033[0m" - -typedef struct { - int64_t startTimeMs; - int64_t endTimeMs; - int threadIndex; - pthread_t thread; -} SInfo; - -void *syncTest(void *param); -void shellParseArgument(int argc, char *argv[]); -void queryData(); - -int numOfThreads = 10; -int useGlobalConn = 1; -int requestPerThread = 10000; -char requestSql[10240] = "show dnodes"; -TAOS *globalConn; - -int main(int argc, char *argv[]) { - shellParseArgument(argc, argv); - taos_init(); - queryData(); -} - -void queryData() { - struct timeval systemTime; - int64_t st, et; - char fqdn[TSDB_FQDN_LEN]; - uint16_t port; - - if (useGlobalConn) { - taosGetFqdnPortFromEp(tsFirst, fqdn, &port); - - globalConn = taos_connect(fqdn, "root", "taosdata", NULL, port); - if (globalConn == NULL) { - pError("failed to connect to DB, reason:%s", taos_errstr(globalConn)); - exit(1); - } - } - - pPrint("%d threads are spawned to query", numOfThreads); - - gettimeofday(&systemTime, NULL); - st = systemTime.tv_sec * 1000000 + systemTime.tv_usec; - - pthread_attr_t thattr; - pthread_attr_init(&thattr); - pthread_attr_setdetachstate(&thattr, PTHREAD_CREATE_JOINABLE); - SInfo *pInfo = (SInfo *)malloc(sizeof(SInfo) * numOfThreads); - - // Start threads to write - for (int i = 0; i < numOfThreads; ++i) { - pInfo[i].threadIndex = i; - pthread_create(&(pInfo[i].thread), &thattr, syncTest, (void *)(pInfo + i)); - } - - taosMsleep(300); - for (int i = 0; i < numOfThreads; i++) { - pthread_join(pInfo[i].thread, NULL); - } - - gettimeofday(&systemTime, NULL); - et = systemTime.tv_sec * 1000000 + systemTime.tv_usec; - double totalTimeMs = (et - st) / 1000.0; - - int totalReq = requestPerThread * numOfThreads; - float rspTime = totalTimeMs / requestPerThread; - float qps = totalReq / (totalTimeMs / 1000); - - pPrint("%s threads:%d, totalTime %.1fms totalReq:%d qps:%.1f rspTime:%.3fms %s", GREEN, numOfThreads, totalTimeMs, - totalReq, qps, rspTime, NC); - - pthread_attr_destroy(&thattr); - free(pInfo); -} - -void *syncTest(void *param) { - TAOS * con; - SInfo * pInfo = (SInfo *)param; - char fqdn[TSDB_FQDN_LEN]; - uint16_t port; - - if (useGlobalConn) { - pPrint("thread:%d, start to run use global connection", pInfo->threadIndex); - con = globalConn; - } else { - pPrint("thread:%d, start to run, and create new conn", pInfo->threadIndex); - taosGetFqdnPortFromEp(tsFirst, fqdn, &port); - - con = taos_connect(fqdn, "root", "taosdata", NULL, port); - if (con == NULL) { - pError("index:%d, failed to connect to DB, reason:%s", pInfo->threadIndex, taos_errstr(con)); - exit(1); - } - } - - for (int i = 0; i < requestPerThread; ++i) { - void *tres = taos_query(con, requestSql); - - TAOS_ROW row = taos_fetch_row(tres); - if (row == NULL) { - taos_free_result(tres); - exit(0); - } - - do { - row = taos_fetch_row(tres); - } while (row != NULL); - - taos_free_result(tres); - } - return NULL; -} - -void printHelp() { - char indent[10] = " "; - printf("Used to test the query performance of TDengine\n"); - - printf("%s%s\n", indent, "-c"); - printf("%s%s%s%s\n", indent, indent, "Configuration directory, default is ", configDir); - printf("%s%s\n", indent, "-s"); - printf("%s%s%s%s\n", indent, indent, "The sql to be executed, default is ", requestSql); - printf("%s%s\n", indent, "-r"); - printf("%s%s%s%d\n", indent, indent, "Request per thread, default is ", requestPerThread); - printf("%s%s\n", indent, "-t"); - printf("%s%s%s%d\n", indent, indent, "Number of threads to be used, default is ", numOfThreads); - printf("%s%s\n", indent, "-g"); - printf("%s%s%s%d\n", indent, indent, "Whether to share connections between threads, default is ", useGlobalConn); - - exit(EXIT_SUCCESS); -} - -void shellParseArgument(int argc, char *argv[]) { - for (int i = 1; i < argc; i++) { - if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) { - printHelp(); - exit(0); - } else if (strcmp(argv[i], "-c") == 0) { - strcpy(configDir, argv[++i]); - } else if (strcmp(argv[i], "-s") == 0) { - strcpy(requestSql, argv[++i]); - } else if (strcmp(argv[i], "-r") == 0) { - requestPerThread = atoi(argv[++i]); - } else if (strcmp(argv[i], "-t") == 0) { - numOfThreads = atoi(argv[++i]); - } else if (strcmp(argv[i], "-g") == 0) { - useGlobalConn = atoi(argv[++i]); - } else { - } - } - - pPrint("%s sql:%s %s", GREEN, requestSql, NC); - pPrint("%s requestPerThread:%d %s", GREEN, requestPerThread, NC); - pPrint("%s numOfThreads:%d %s", GREEN, numOfThreads, NC); - pPrint("%s useGlobalConn:%d %s", GREEN, useGlobalConn, NC); - pPrint("%s start to run %s", GREEN, NC); -}