diff --git a/src/common/src/tglobal.c b/src/common/src/tglobal.c index e588339ca742af86b97898e1dd70e928622302f0..d04033abc911bc0d988d8bcb116e3fd1f0249d52 100644 --- a/src/common/src/tglobal.c +++ b/src/common/src/tglobal.c @@ -1183,9 +1183,7 @@ bool taosCheckGlobalCfg() { taosGetFqdn(tsLocalFqdn); } - strcpy(tsLocalEp, tsLocalFqdn); - - snprintf(tsLocalEp + strlen(tsLocalEp), sizeof(tsLocalEp), ":%d", tsServerPort); + snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%d", tsLocalFqdn, tsServerPort); uPrint("localEp is: %s", tsLocalEp); if (tsFirst[0] == 0) { diff --git a/src/rpc/src/rpcMain.c b/src/rpc/src/rpcMain.c index f62df5677167d50bfe3c39717efa47c69debc487..1a81f32cf24ee01860c2443c694978f6ded2db7d 100644 --- a/src/rpc/src/rpcMain.c +++ b/src/rpc/src/rpcMain.c @@ -434,6 +434,7 @@ void rpcSendResponse(const SRpcMsg *pRsp) { pConn->rspMsgLen = msgLen; if (pMsg->code == TSDB_CODE_RPC_ACTION_IN_PROGRESS) pConn->inTranId--; + // stop the progress timer taosTmrStopA(&pConn->pTimer); // set the idle timer to monitor the activity @@ -1021,7 +1022,11 @@ static void rpcProcessIncomingMsg(SRpcConn *pConn, SRpcHead *pHead) { if ( rpcIsReq(pHead->msgType) ) { rpcMsg.handle = pConn; rpcAddRef(pRpc); // add the refCount for requests + + // start the progress timer to monitor the response from server app pConn->pTimer = taosTmrStart(rpcProcessProgressTimer, tsProgressTimer, pConn, pRpc->tmrCtrl); + + // notify the server app (*(pRpc->cfp))(&rpcMsg, NULL); } else { // it's a response diff --git a/src/util/inc/tutil.h b/src/util/inc/tutil.h index 23d8348cbe5def10d447af4da44aa3fdbe17d183..949e9eb10972657e8bd72e49124c217bdb1679a0 100644 --- a/src/util/inc/tutil.h +++ b/src/util/inc/tutil.h @@ -183,6 +183,7 @@ char *taosIpStr(uint32_t ipInt); uint32_t ip2uint(const char *const ip_addr); void taosRemoveDir(char *rootDir); +int tmkdir(const char *pathname, mode_t mode); #define TAOS_ALLOC_MODE_DEFAULT 0 #define TAOS_ALLOC_MODE_RANDOM_FAIL 1 diff --git a/src/util/src/tutil.c b/src/util/src/tutil.c index 2bfef63f846d9cebd929c4cedf2485619194113d..481cf498ca270f812325b88e52bfe874fe923986 100644 --- a/src/util/src/tutil.c +++ b/src/util/src/tutil.c @@ -793,3 +793,9 @@ void taosRemoveDir(char *rootDir) { uPrint("dir:%s is removed", rootDir); } + +int tmkdir(const char *path, mode_t mode) { + int code = mkdir(path, 0755); + if (code < 0 && errno == EEXIST) code = 0; + return code; +} diff --git a/src/wal/src/walMain.c b/src/wal/src/walMain.c index b05b0db4c94ffa85779bcfd0f73246464f95101f..41669fc691a1d77160145b31c79308fdc5173618 100644 --- a/src/wal/src/walMain.c +++ b/src/wal/src/walMain.c @@ -71,14 +71,12 @@ void *walOpen(const char *path, const SWalCfg *pCfg) { tstrncpy(pWal->path, path, sizeof(pWal->path)); pthread_mutex_init(&pWal->mutex, NULL); - if (access(path, F_OK) != 0) { - if (mkdir(path, 0755) != 0) { - terrno = TAOS_SYSTEM_ERROR(errno); - wError("wal:%s, failed to create directory(%s)", path, strerror(errno)); - pthread_mutex_destroy(&pWal->mutex); - free(pWal); - pWal = NULL; - } + if (tmkdir(path, 0755) != 0) { + terrno = TAOS_SYSTEM_ERROR(errno); + wError("wal:%s, failed to create directory(%s)", path, strerror(errno)); + pthread_mutex_destroy(&pWal->mutex); + free(pWal); + pWal = NULL; } if (pCfg->keep == 1) return pWal; @@ -86,16 +84,15 @@ void *walOpen(const char *path, const SWalCfg *pCfg) { if (walHandleExistingFiles(path) == 0) walRenew(pWal); - if (pWal->fd <0) { + if (pWal && pWal->fd <0) { terrno = TAOS_SYSTEM_ERROR(errno); wError("wal:%s, failed to open(%s)", path, strerror(errno)); pthread_mutex_destroy(&pWal->mutex); free(pWal); pWal = NULL; - } else { - wTrace("wal:%s, it is open, level:%d", path, pWal->level); - } + } + if (pWal) wTrace("wal:%s, it is open, level:%d", path, pWal->level); return pWal; } @@ -218,10 +215,13 @@ int walRestore(void *handle, void *pVnode, int (*writeFp)(void *, void *, int)) if ( pWal->keep == 0) strcpy(opath+slen, "/old"); - // is there old directory? - if (access(opath, F_OK)) return 0; - DIR *dir = opendir(opath); + if (dir == NULL && errno == ENOENT) return 0; + if (dir == NULL) { + terrno = TAOS_SYSTEM_ERROR(errno); + return terrno; + } + while ((ent = readdir(dir))!= NULL) { if ( strncmp(ent->d_name, walPrefix, plen) == 0) { index = atol(ent->d_name + plen); @@ -379,12 +379,10 @@ int walHandleExistingFiles(const char *path) { if ( strncmp(ent->d_name, walPrefix, plen) == 0) { snprintf(oname, sizeof(oname), "%s/%s", path, ent->d_name); snprintf(nname, sizeof(nname), "%s/old/%s", path, ent->d_name); - if (access(opath, F_OK) != 0) { - if (mkdir(opath, 0755) != 0) { - wError("wal:%s, failed to create directory:%s(%s)", oname, opath, strerror(errno)); - terrno = TAOS_SYSTEM_ERROR(errno); - break; - } + if (tmkdir(opath, 0755) != 0) { + wError("wal:%s, failed to create directory:%s(%s)", oname, opath, strerror(errno)); + terrno = TAOS_SYSTEM_ERROR(errno); + break; } if (rename(oname, nname) < 0) { @@ -409,10 +407,14 @@ static int walRemoveWalFiles(const char *path) { char name[TSDB_FILENAME_LEN * 3]; terrno = 0; - if (access(path, F_OK) != 0) return 0; struct dirent *ent; DIR *dir = opendir(path); + if (dir == NULL && errno == ENOENT) return 0; + if (dir == NULL) { + terrno = TAOS_SYSTEM_ERROR(errno); + return terrno; + } while ((ent = readdir(dir))!= NULL) { if ( strncmp(ent->d_name, walPrefix, plen) == 0) {