提交 2cb57add 编写于 作者: H hjxilinx

[td-98] cleanup taos env after shell quit

上级 223f78d8
......@@ -171,17 +171,51 @@ void taos_init_imp() {
if(0 == tscEmbedded){
taosTmrReset(tscCheckDiskUsage, 10, NULL, tscTmr, &tscCheckDiskUsageTmr);
}
int64_t refreshTime = tsMetricMetaKeepTimer < tsMeterMetaKeepTimer ? tsMetricMetaKeepTimer : tsMeterMetaKeepTimer;
refreshTime = refreshTime > 2 ? 2 : refreshTime;
refreshTime = refreshTime < 1 ? 1 : refreshTime;
if (tscCacheHandle == NULL) tscCacheHandle = taosCacheInit(tscTmr, refreshTime);
if (tscCacheHandle == NULL) {
tscCacheHandle = taosCacheInit(tscTmr, refreshTime);
}
tscTrace("client is initialized successfully");
}
void taos_init() { pthread_once(&tscinit, taos_init_imp); }
void taos_cleanup() {
if (tscCacheHandle != NULL) {
taosCacheCleanup(tscCacheHandle);
// tscCacheHandle = NULL;
}
if (tscQhandle != NULL) {
taosCleanUpScheduler(tscQhandle);
tscQhandle = NULL;
}
taosCloseLogger();
if (pVnodeConn != NULL) {
rpcClose(pVnodeConn);
pVnodeConn = NULL;
}
if (pTscMgmtConn != NULL) {
rpcClose(pTscMgmtConn);
pTscMgmtConn = NULL;
}
if (tsGlobalConfig != NULL) {
tfree(tsGlobalConfig);
}
taosMsleep(1000);
taosTmrCleanUp(tscTmr);
}
static int taos_options_imp(TSDB_OPTION option, const char *pStr) {
SGlobalConfig *cfg = NULL;
......
......@@ -52,6 +52,7 @@ typedef struct taosField {
#endif
DLL_EXPORT void taos_init();
DLL_EXPORT void taos_cleanup();
DLL_EXPORT int taos_options(TSDB_OPTION option, const void *arg, ...);
DLL_EXPORT TAOS *taos_connect(const char *ip, const char *user, const char *pass, const char *db, uint16_t port);
DLL_EXPORT void taos_close(TAOS *taos);
......
......@@ -71,7 +71,7 @@ extern void* shellLoopQuery(void* arg);
extern void taos_error(TAOS* con);
extern int regex_match(const char* s, const char* reg, int cflags);
void shellReadCommand(TAOS* con, char command[]);
void shellRunCommand(TAOS* con, char* command);
int32_t shellRunCommand(TAOS* con, char* command);
void shellRunCommandOnServer(TAOS* con, char command[]);
void read_history();
void write_history();
......
......@@ -166,10 +166,10 @@ void shellReplaceCtrlChar(char *str) {
*pstr = '\0';
}
void shellRunCommand(TAOS *con, char *command) {
int32_t shellRunCommand(TAOS *con, char *command) {
/* If command is empty just return */
if (regex_match(command, "^[ \t;]*$", REG_EXTENDED)) {
return;
return 0;
}
/* Update the history vector. */
......@@ -193,11 +193,11 @@ void shellRunCommand(TAOS *con, char *command) {
if (regex_match(command, "^[ \t]*(quit|q|exit)[ \t;]*$", REG_EXTENDED | REG_ICASE)) {
taos_close(con);
write_history();
exitShell();
return -1;
} else if (regex_match(command, "^[\t ]*clear[ \t;]*$", REG_EXTENDED | REG_ICASE)) {
// If clear the screen.
system("clear");
return;
return 0;
} else if (regex_match(command, "^[ \t]*source[\t ]+[^ ]+[ \t;]*$", REG_EXTENDED | REG_ICASE)) {
/* If source file. */
char *c_ptr = strtok(command, " ;");
......@@ -209,6 +209,8 @@ void shellRunCommand(TAOS *con, char *command) {
} else {
shellRunCommandOnServer(con, command);
}
return 0;
}
void shellRunCommandOnServer(TAOS *con, char command[]) {
......
......@@ -295,6 +295,7 @@ void *shellLoopQuery(void *arg) {
tscError("failed to malloc command");
return NULL;
}
while (1) {
// Read command from shell.
......@@ -304,11 +305,16 @@ void *shellLoopQuery(void *arg) {
reset_terminal_mode();
// Run the command
shellRunCommand(con, command);
if (shellRunCommand(con, command) != 0) {
break;
}
}
tfree(command);
exitShell();
pthread_cleanup_pop(1);
return NULL;
}
......@@ -487,6 +493,7 @@ void showOnScreen(Command *cmd) {
void cleanup_handler(void *arg) { tcsetattr(0, TCSANOW, &oldtio); }
void exitShell() {
tcsetattr(0, TCSANOW, &oldtio);
/*int32_t ret =*/ tcsetattr(STDIN_FILENO, TCSANOW, &oldtio);
taos_cleanup();
exit(EXIT_SUCCESS);
}
......@@ -95,7 +95,7 @@ int main(int argc, char* argv[]) {
exit(EXIT_FAILURE);
}
/* Interupt handler. */
/* Interrupt handler. */
struct sigaction act;
memset(&act, 0, sizeof(struct sigaction));
......
......@@ -101,8 +101,6 @@ static void doUpdateHashTable(SHashObj *pHashObj, SHashNode *pNode) {
if (pNode->next) {
(pNode->next)->prev = pNode;
}
pTrace("key:%s %p update hash table", pNode->key, pNode);
}
/**
......@@ -153,18 +151,18 @@ static void taosHashTableResize(SHashObj *pHashObj) {
SHashNode *pNode = NULL;
SHashNode *pNext = NULL;
int32_t newSize = pHashObj->capacity << 1U;
int32_t newSize = pHashObj->capacity << 1u;
if (newSize > HASH_MAX_CAPACITY) {
pTrace("current capacity:%d, maximum capacity:%d, no resize applied due to limitation is reached",
pHashObj->capacity, HASH_MAX_CAPACITY);
// pTrace("current capacity:%d, maximum capacity:%d, no resize applied due to limitation is reached",
// pHashObj->capacity, HASH_MAX_CAPACITY);
return;
}
int64_t st = taosGetTimestampUs();
// int64_t st = taosGetTimestampUs();
SHashEntry **pNewEntry = realloc(pHashObj->hashList, sizeof(SHashEntry *) * newSize);
if (pNewEntry == NULL) {
pTrace("cache resize failed due to out of memory, capacity remain:%d", pHashObj->capacity);
// pTrace("cache resize failed due to out of memory, capacity remain:%d", pHashObj->capacity);
return;
}
......@@ -230,10 +228,9 @@ static void taosHashTableResize(SHashObj *pHashObj) {
}
}
int64_t et = taosGetTimestampUs();
pTrace("hash table resize completed, new capacity:%d, load factor:%f, elapsed time:%fms", pHashObj->capacity,
((double)pHashObj->size) / pHashObj->capacity, (et - st) / 1000.0);
// int64_t et = taosGetTimestampUs();
// pTrace("hash table resize completed, new capacity:%d, load factor:%f, elapsed time:%fms", pHashObj->capacity,
// ((double)pHashObj->size) / pHashObj->capacity, (et - st) / 1000.0);
}
/**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册