diff --git a/src/client/src/tscSql.c b/src/client/src/tscSql.c index bc2c42cf79..13539a9b19 100644 --- a/src/client/src/tscSql.c +++ b/src/client/src/tscSql.c @@ -52,7 +52,9 @@ static bool validPassword(const char* passwd) { static SSqlObj *taosConnectImpl(const char *ip, const char *user, const char *pass, const char *auth, const char *db, uint16_t port, void (*fp)(void *, TAOS_RES *, int), void *param, TAOS **taos) { - taos_init(); + if (taos_init()) { + return NULL; + } if (!validUserName(user)) { terrno = TSDB_CODE_TSC_INVALID_USER_LENGTH; diff --git a/src/client/src/tscSystem.c b/src/client/src/tscSystem.c index 6a4ab416ae..4da922dadd 100644 --- a/src/client/src/tscSystem.c +++ b/src/client/src/tscSystem.c @@ -47,6 +47,7 @@ void *tscRpcCache; // cache to keep rpc obj int32_t tscNumOfThreads = 1; // num of rpc threads static pthread_mutex_t rpcObjMutex; // mutex to protect open the rpc obj concurrently static pthread_once_t tscinit = PTHREAD_ONCE_INIT; +static volatile int tscInitRes = 0; void tscCheckDiskUsage(void *UNUSED_PARAM(para), void *UNUSED_PARAM(param)) { taosGetDisk(); @@ -137,7 +138,11 @@ void taos_init_imp(void) { } taosReadGlobalCfg(); - taosCheckGlobalCfg(); + if (taosCheckGlobalCfg()) { + tscInitRes = -1; + return; + } + taosInitNotes(); rpcInit(); @@ -159,6 +164,7 @@ void taos_init_imp(void) { tscQhandle = taosInitScheduler(queueSize, tscNumOfThreads, "tsc"); if (NULL == tscQhandle) { tscError("failed to init scheduler"); + tscInitRes = -1; return; } @@ -187,7 +193,7 @@ void taos_init_imp(void) { tscDebug("client is initialized successfully"); } -void taos_init() { pthread_once(&tscinit, taos_init_imp); } +int taos_init() { pthread_once(&tscinit, taos_init_imp); return tscInitRes;} // this function may be called by user or system, or by both simultaneously. void taos_cleanup(void) { diff --git a/src/common/src/tglobal.c b/src/common/src/tglobal.c index fb6d745931..5bb4a285f4 100644 --- a/src/common/src/tglobal.c +++ b/src/common/src/tglobal.c @@ -373,6 +373,23 @@ static void taosCheckDataDirCfg() { } } +static int32_t taosCheckTmpDir(void) { + if (strlen(tsTempDir) <= 0){ + uError("tempDir is not set"); + return -1; + } + + DIR *dir = opendir(tsTempDir); + if (dir == NULL) { + uError("can not open tempDir:%s, error:%s", tsTempDir, strerror(errno)); + return -1; + } + + closedir(dir); + + return 0; +} + static void doInitGlobalConfig(void) { osInit(); srand(taosSafeRand()); @@ -1488,6 +1505,11 @@ int32_t taosCheckGlobalCfg() { } taosCheckDataDirCfg(); + + if (taosCheckTmpDir()) { + return -1; + } + taosGetSystemInfo(); tsSetLocale(); diff --git a/src/inc/taos.h b/src/inc/taos.h index 05d390ffd0..cd8e116053 100644 --- a/src/inc/taos.h +++ b/src/inc/taos.h @@ -68,7 +68,7 @@ typedef struct taosField { #define DLL_EXPORT #endif -DLL_EXPORT void taos_init(); +DLL_EXPORT int taos_init(); DLL_EXPORT void taos_cleanup(void); 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); diff --git a/src/kit/shell/src/shellEngine.c b/src/kit/shell/src/shellEngine.c index 8e6c4d8817..31db1e7971 100644 --- a/src/kit/shell/src/shellEngine.c +++ b/src/kit/shell/src/shellEngine.c @@ -76,7 +76,11 @@ TAOS *shellInit(SShellArguments *args) { args->user = TSDB_DEFAULT_USER; } - taos_init(); + if (taos_init()) { + printf("failed to init taos\n"); + fflush(stdout); + return NULL; + } // Connect to the database. TAOS *con = NULL; diff --git a/src/kit/shell/src/shellMain.c b/src/kit/shell/src/shellMain.c index 49de42796c..4c7e550760 100644 --- a/src/kit/shell/src/shellMain.c +++ b/src/kit/shell/src/shellMain.c @@ -110,7 +110,10 @@ int main(int argc, char* argv[]) { } if (args.netTestRole && args.netTestRole[0] != 0) { - taos_init(); + if (taos_init()) { + printf("Failed to init taos"); + exit(EXIT_FAILURE); + } taosNetTest(args.netTestRole, args.host, args.port, args.pktLen); exit(0); } diff --git a/src/kit/taosdemo/taosdemo.c b/src/kit/taosdemo/taosdemo.c index abcadd64b1..8544c8a5ea 100644 --- a/src/kit/taosdemo/taosdemo.c +++ b/src/kit/taosdemo/taosdemo.c @@ -711,7 +711,11 @@ int main(int argc, char *argv[]) { fprintf(fp, "###################################################################\n\n"); fprintf(fp, "| WRecords | Records/Second | Requests/Second | WLatency(ms) |\n"); - taos_init(); + if (taos_init()) { + fprintf(stderr, "Failed to init taos\n"); + return 1; + } + TAOS *taos = taos_connect(ip_addr, user, pass, NULL, port); if (taos == NULL) { fprintf(stderr, "Failed to connect to TDengine, reason:%s\n", taos_errstr(NULL)); diff --git a/src/kit/taosdemox/taosdemox.c b/src/kit/taosdemox/taosdemox.c index deb2a47645..674c9aa0b8 100644 --- a/src/kit/taosdemox/taosdemox.c +++ b/src/kit/taosdemox/taosdemox.c @@ -1971,7 +1971,11 @@ static int createSuperTable(TAOS * taos, char* dbName, SSuperTable* superTbls, static int createDatabases() { TAOS * taos = NULL; int ret = 0; - taos_init(); + if (taos_init()) { + fprintf(stderr, "Failed to init taos\n"); + exit(-1); + } + 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)); @@ -4496,7 +4500,11 @@ void *subQueryProcess(void *sarg) { int queryTestProcess() { TAOS * taos = NULL; - taos_init(); + if (taos_init()) { + fprintf(stderr, "Failed to init taos\n"); + exit(-1); + } + 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)); @@ -4772,7 +4780,11 @@ int subscribeTestProcess() { } TAOS * taos = NULL; - taos_init(); + if (taos_init()) { + fprintf(stderr, "Failed to init taos\n"); + exit(-1); + } + 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)); diff --git a/src/plugins/monitor/src/monMain.c b/src/plugins/monitor/src/monMain.c index 424ab0f216..ac80ad6250 100644 --- a/src/plugins/monitor/src/monMain.c +++ b/src/plugins/monitor/src/monMain.c @@ -103,7 +103,9 @@ int32_t monInitSystem() { } int32_t monStartSystem() { - taos_init(); + if (taos_init()) { + return -1; + } tsMonitor.start = 1; monExecuteSQLFp = monExecuteSQL; monInfo("monitor module start"); diff --git a/tests/examples/c/demo.c b/tests/examples/c/demo.c index 45ec546803..0b12c3d3ea 100644 --- a/tests/examples/c/demo.c +++ b/tests/examples/c/demo.c @@ -62,7 +62,10 @@ int main(int argc, char *argv[]) { } // init TAOS - taos_init(); + if (taos_init()) { + exit(1); + } + TAOS *taos = taos_connect(argv[1], "root", "taosdata", NULL, 0); if (taos == NULL) { printf("failed to connect to server, reason:%s\n", "null taos"/*taos_errstr(taos)*/); diff --git a/tests/examples/c/prepare.c b/tests/examples/c/prepare.c index 7a70b744ee..bd650ed64b 100644 --- a/tests/examples/c/prepare.c +++ b/tests/examples/c/prepare.c @@ -23,7 +23,10 @@ int main(int argc, char *argv[]) } // init TAOS - taos_init(); + if (taos_init()) { + printf("failed to init taos\n"); + exit(1); + } taos = taos_connect(argv[1], "root", "taosdata", NULL, 0); if (taos == NULL) { diff --git a/tests/examples/c/stream.c b/tests/examples/c/stream.c index 060f5b84ff..e3053d1969 100644 --- a/tests/examples/c/stream.c +++ b/tests/examples/c/stream.c @@ -55,7 +55,10 @@ int main(int argc, char *argv[]) } // init TAOS - taos_init(); + if (taos_init()) { + printf("failed to init taos\n"); + exit(1); + } strcpy(db_name, argv[2]); strcpy(tbl_name, argv[3]); diff --git a/tests/examples/c/subscribe.c b/tests/examples/c/subscribe.c index cdd8ddaf7f..5a40297624 100644 --- a/tests/examples/c/subscribe.c +++ b/tests/examples/c/subscribe.c @@ -217,7 +217,10 @@ int main(int argc, char *argv[]) { } // init TAOS - taos_init(); + if (taos_init()) { + printf("failed to init taos\n"); + exit(1); + } TAOS* taos = taos_connect(host, user, passwd, "", 0); if (taos == NULL) { diff --git a/tests/tsim/src/simSystem.c b/tests/tsim/src/simSystem.c index 3a409ecbf9..40937e7053 100644 --- a/tests/tsim/src/simSystem.c +++ b/tests/tsim/src/simSystem.c @@ -81,7 +81,9 @@ char *simParseHostName(char *varName) { } bool simSystemInit() { - taos_init(); + if (taos_init()) { + return false; + } taosGetFqdn(simHostName); simInitsimCmdList(); memset(simScriptList, 0, sizeof(SScript *) * MAX_MAIN_SCRIPT_NUM);