diff --git a/packaging/tools/install_client.sh b/packaging/tools/install_client.sh index 605944e9b3d3a296b9cd6ce252224d3702e57fc8..0ec8dbd0cce46cd6861ef4f93b4b180df949a65f 100755 --- a/packaging/tools/install_client.sh +++ b/packaging/tools/install_client.sh @@ -31,6 +31,7 @@ cfg_install_dir="/etc/taos" if [ "$osType" != "Darwin" ]; then bin_link_dir="/usr/bin" lib_link_dir="/usr/lib" + lib64_link_dir="/usr/lib64" inc_link_dir="/usr/include" else bin_link_dir="/usr/local/bin" @@ -45,7 +46,7 @@ install_main_dir="/usr/local/taos" bin_dir="/usr/local/taos/bin" # v1.5 jar dir -v15_java_app_dir="/usr/local/lib/taos" +#v15_java_app_dir="/usr/local/lib/taos" # Color setting RED='\033[0;31m' @@ -90,7 +91,7 @@ function install_bin() { ${csudo} cp -r ${script_dir}/bin/* ${install_main_dir}/bin && ${csudo} chmod 0555 ${install_main_dir}/bin/* - #Make link + #Make link [ -x ${install_main_dir}/bin/taos ] && ${csudo} ln -s ${install_main_dir}/bin/taos ${bin_link_dir}/taos || : if [ "$osType" == "Darwin" ]; then [ -x ${install_main_dir}/bin/taosdump ] && ${csudo} ln -s ${install_main_dir}/bin/taosdump ${bin_link_dir}/taosdump || : @@ -106,13 +107,16 @@ function clean_lib() { function install_lib() { # Remove links ${csudo} rm -f ${lib_link_dir}/libtaos.* || : - ${csudo} rm -rf ${v15_java_app_dir} || : + ${csudo} rm -f ${lib64_link_dir}/libtaos.* || : + #${csudo} rm -rf ${v15_java_app_dir} || : ${csudo} cp -rf ${script_dir}/driver/* ${install_main_dir}/driver && ${csudo} chmod 777 ${install_main_dir}/driver/* if [ "$osType" != "Darwin" ]; then ${csudo} ln -s ${install_main_dir}/driver/libtaos.* ${lib_link_dir}/libtaos.so.1 ${csudo} ln -s ${lib_link_dir}/libtaos.so.1 ${lib_link_dir}/libtaos.so + ${csudo} ln -s ${install_main_dir}/driver/libtaos.* ${lib64_link_dir}/libtaos.so.1 || : + ${csudo} ln -s ${lib64_link_dir}/libtaos.so.1 ${lib64_link_dir}/libtaos.so || : else ${csudo} ln -s ${install_main_dir}/driver/libtaos.* ${lib_link_dir}/libtaos.1.dylib ${csudo} ln -s ${lib_link_dir}/libtaos.1.dylib ${lib_link_dir}/libtaos.dylib diff --git a/packaging/tools/remove.sh b/packaging/tools/remove.sh index 9fb8731449ec4db6a56e617febd6e073119e3f21..63e09dc56894a4e035c691be29b2bbc34e48bd7c 100755 --- a/packaging/tools/remove.sh +++ b/packaging/tools/remove.sh @@ -18,11 +18,12 @@ log_link_dir="/usr/local/taos/log" cfg_link_dir="/usr/local/taos/cfg" bin_link_dir="/usr/bin" lib_link_dir="/usr/lib" +lib64_link_dir="/usr/lib64" inc_link_dir="/usr/include" install_nginxd_dir="/usr/local/nginxd" # v1.5 jar dir -v15_java_app_dir="/usr/local/lib/taos" +#v15_java_app_dir="/usr/local/lib/taos" service_config_dir="/etc/systemd/system" taos_service_name="taosd" @@ -78,7 +79,8 @@ function clean_bin() { function clean_lib() { # Remove link ${csudo} rm -f ${lib_link_dir}/libtaos.* || : - ${csudo} rm -rf ${v15_java_app_dir} || : + ${csudo} rm -f ${lib64_link_dir}/libtaos.* || : + #${csudo} rm -rf ${v15_java_app_dir} || : } function clean_header() { diff --git a/packaging/tools/remove_client.sh b/packaging/tools/remove_client.sh index 9210546a9f407fd821a176cadfcf88ae8023dc2f..4bc278fcf06ec18534535547f2c60ae156bc5da1 100755 --- a/packaging/tools/remove_client.sh +++ b/packaging/tools/remove_client.sh @@ -15,11 +15,12 @@ log_link_dir="/usr/local/taos/log" cfg_link_dir="/usr/local/taos/cfg" bin_link_dir="/usr/bin" lib_link_dir="/usr/lib" +lib64_link_dir="/usr/lib64" inc_link_dir="/usr/include" # v1.5 jar dir -v15_java_app_dir="/usr/local/lib/taos" +#v15_java_app_dir="/usr/local/lib/taos" csudo="" if command -v sudo > /dev/null; then @@ -43,7 +44,8 @@ function clean_bin() { function clean_lib() { # Remove link ${csudo} rm -f ${lib_link_dir}/libtaos.* || : - ${csudo} rm -rf ${v15_java_app_dir} || : + ${csudo} rm -f ${lib64_link_dir}/libtaos.* || : + #${csudo} rm -rf ${v15_java_app_dir} || : } function clean_header() { diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 8e398fbf1fe63207254caed0f1918761373bce8f..bcf43a1a8b01a1d07845defce56f68647f81259b 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -5996,7 +5996,12 @@ int32_t doCheckForQuery(SSqlObj* pSql, SQuerySQL* pQuerySql, int32_t index) { return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg11); } - tstrncpy(pTableMetaInfo1->aliasName, pTableItem1->pz, sizeof(pTableMetaInfo1->aliasName)); + // has no table alias name + if (memcmp(pTableItem->pz, pTableItem1->pz, pTableItem1->nLen) == 0) { + extractTableName(pTableMetaInfo1->name, pTableMetaInfo1->aliasName); + } else { + tstrncpy(pTableMetaInfo1->aliasName, pTableItem1->pz, sizeof(pTableMetaInfo1->aliasName)); + } code = tscGetTableMeta(pSql, pTableMetaInfo1); if (code != TSDB_CODE_SUCCESS) { diff --git a/src/dnode/inc/dnodeCheck.h b/src/dnode/inc/dnodeCheck.h new file mode 100644 index 0000000000000000000000000000000000000000..a4880b3c114342c8900337372bd1dfd07e7815b7 --- /dev/null +++ b/src/dnode/inc/dnodeCheck.h @@ -0,0 +1,30 @@ +/* + * 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 . + */ + +#ifndef TDENGINE_DNODE_CHECK_H +#define TDENGINE_DNODE_CHECK_H + +#ifdef __cplusplus +extern "C" { +#endif + +int32_t dnodeInitCheck(); +void dnodeCleanupCheck(); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/dnode/src/dnodeCheck.c b/src/dnode/src/dnodeCheck.c new file mode 100644 index 0000000000000000000000000000000000000000..dfdc3fa53fe7ef01c3cb95c6bd8295251909bc03 --- /dev/null +++ b/src/dnode/src/dnodeCheck.c @@ -0,0 +1,269 @@ +/* + * 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 "os.h" +#include "taosdef.h" +#include "tglobal.h" +#include "mnode.h" +#include "dnodeInt.h" +#include "dnodeCheck.h" + +typedef struct { + bool enable; + char * name; + int32_t (*initFp)(); + int32_t (*startFp)(); + void (*cleanUpFp)(); + void (*stopFp)(); +} SCheckItem; + +static SCheckItem tsCheckItem[TSDB_CHECK_ITEM_MAX] = {{0}}; +int64_t tsMinFreeMemSizeForStart = 0; + +static int bindTcpPort(int port) { + int serverSocket; + struct sockaddr_in server_addr; + + if ((serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { + dError("socket() fail: %s", strerror(errno)); + return -1; + } + + bzero(&server_addr, sizeof(server_addr)); + server_addr.sin_family = AF_INET; + server_addr.sin_port = htons(port); + server_addr.sin_addr.s_addr = htonl(INADDR_ANY); + + if (bind(serverSocket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { + dError("port:%d tcp bind() fail: %s", port, strerror(errno)); + close(serverSocket); + return -1; + } + + if (listen(serverSocket, 5) < 0) { + dError("port:%d listen() fail: %s", port, strerror(errno)); + close(serverSocket); + return -1; + } + + close(serverSocket); + return 0; +} + +static int bindUdpPort(int port) { + int serverSocket; + struct sockaddr_in server_addr; + + if ((serverSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) { + dError("socket() fail: %s", strerror(errno)); + return -1; + } + + bzero(&server_addr, sizeof(server_addr)); + server_addr.sin_family = AF_INET; + server_addr.sin_port = htons(port); + server_addr.sin_addr.s_addr = htonl(INADDR_ANY); + + if (bind(serverSocket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { + dError("port:%d udp bind() fail: %s", port, strerror(errno)); + close(serverSocket); + return -1; + } + + close(serverSocket); + return 0; +} + +static int dnodeCheckNetwork() { + int ret; + int startPort = tsServerPort; + + for (int port = startPort; port < startPort + 12; port++) { + ret = bindTcpPort(port); + if (0 != ret) { + dError("failed to tcp bind port %d, quit", port); + return -1; + } + ret = bindUdpPort(port); + if (0 != ret) { + dError("failed to udp bind port %d, quit", port); + return -1; + } + } + + return 0; +} + +static int dnodeCheckMem() { + float memoryUsedMB; + float memoryAvailMB; + if (true != taosGetSysMemory(&memoryUsedMB)) { + dError("failed to get system mem infomation, errno:%u, reason:%s", errno, strerror(errno)); + return -1; + } + + memoryAvailMB = (float)tsTotalMemoryMB - memoryUsedMB; + + if (memoryAvailMB < tsMinFreeMemSizeForStart) { + dError("free mem %f too little, quit", memoryAvailMB); + return -1; + } + + return 0; +} + +static int dnodeCheckCpu() { + // TODO: + return 0; +} + +static int dnodeCheckDisk() { + if (tsAvailDataDirGB < tsMinimalDataDirGB) { + dError("free disk size: %f GB, too little, quit", tsAvailDataDirGB); + return -1; + } + + if (tsAvailLogDirGB < tsMinimalLogDirGB) { + dError("free disk size: %f GB, too little, quit", tsAvailLogDirGB); + return -1; + } + + if (tsAvailTmpDirectorySpace < tsReservedTmpDirectorySpace) { + dError("free disk size: %f GB, too little, quit", tsAvailTmpDirectorySpace); + return -1; + } + + return 0; +} + +static int dnodeCheckOs() { + // TODO: + + return 0; +} +static int dnodeCheckAccess() { + // TODO: + + return 0; +} + +static int dnodeCheckVersion() { + // TODO: + + return 0; +} + +static int dnodeCheckDatafile() { + // TODO: + + return 0; +} + +static void dnodeAllocCheckItem() { + tsCheckItem[TSDB_CHECK_ITEM_NETWORK].enable = false; + tsCheckItem[TSDB_CHECK_ITEM_NETWORK].name = "network"; + tsCheckItem[TSDB_CHECK_ITEM_NETWORK].initFp = NULL; + tsCheckItem[TSDB_CHECK_ITEM_NETWORK].cleanUpFp = NULL; + tsCheckItem[TSDB_CHECK_ITEM_NETWORK].startFp = dnodeCheckNetwork; + tsCheckItem[TSDB_CHECK_ITEM_NETWORK].stopFp = NULL; + + tsCheckItem[TSDB_CHECK_ITEM_MEM].enable = true; + tsCheckItem[TSDB_CHECK_ITEM_MEM].name = "mem"; + tsCheckItem[TSDB_CHECK_ITEM_MEM].initFp = NULL; + tsCheckItem[TSDB_CHECK_ITEM_MEM].cleanUpFp = NULL; + tsCheckItem[TSDB_CHECK_ITEM_MEM].startFp = dnodeCheckMem; + tsCheckItem[TSDB_CHECK_ITEM_MEM].stopFp = NULL; + + tsCheckItem[TSDB_CHECK_ITEM_CPU].enable = true; + tsCheckItem[TSDB_CHECK_ITEM_CPU].name = "cpu"; + tsCheckItem[TSDB_CHECK_ITEM_CPU].initFp = NULL; + tsCheckItem[TSDB_CHECK_ITEM_CPU].cleanUpFp = NULL; + tsCheckItem[TSDB_CHECK_ITEM_CPU].startFp = dnodeCheckCpu; + tsCheckItem[TSDB_CHECK_ITEM_CPU].stopFp = NULL; + + tsCheckItem[TSDB_CHECK_ITEM_DISK].enable = true; + tsCheckItem[TSDB_CHECK_ITEM_DISK].name = "disk"; + tsCheckItem[TSDB_CHECK_ITEM_DISK].initFp = NULL; + tsCheckItem[TSDB_CHECK_ITEM_DISK].cleanUpFp = NULL; + tsCheckItem[TSDB_CHECK_ITEM_DISK].startFp = dnodeCheckDisk; + tsCheckItem[TSDB_CHECK_ITEM_DISK].stopFp = NULL; + + tsCheckItem[TSDB_CHECK_ITEM_OS].enable = true; + tsCheckItem[TSDB_CHECK_ITEM_OS].name = "os"; + tsCheckItem[TSDB_CHECK_ITEM_OS].initFp = NULL; + tsCheckItem[TSDB_CHECK_ITEM_OS].cleanUpFp = NULL; + tsCheckItem[TSDB_CHECK_ITEM_OS].startFp = dnodeCheckOs; + tsCheckItem[TSDB_CHECK_ITEM_OS].stopFp = NULL; + + tsCheckItem[TSDB_CHECK_ITEM_ACCESS].enable = true; + tsCheckItem[TSDB_CHECK_ITEM_ACCESS].name = "access"; + tsCheckItem[TSDB_CHECK_ITEM_ACCESS].initFp = NULL; + tsCheckItem[TSDB_CHECK_ITEM_ACCESS].cleanUpFp = NULL; + tsCheckItem[TSDB_CHECK_ITEM_ACCESS].startFp = dnodeCheckAccess; + tsCheckItem[TSDB_CHECK_ITEM_ACCESS].stopFp = NULL; + + tsCheckItem[TSDB_CHECK_ITEM_VERSION].enable = true; + tsCheckItem[TSDB_CHECK_ITEM_VERSION].name = "version"; + tsCheckItem[TSDB_CHECK_ITEM_VERSION].initFp = NULL; + tsCheckItem[TSDB_CHECK_ITEM_VERSION].cleanUpFp = NULL; + tsCheckItem[TSDB_CHECK_ITEM_VERSION].startFp = dnodeCheckVersion; + tsCheckItem[TSDB_CHECK_ITEM_VERSION].stopFp = NULL; + + tsCheckItem[TSDB_CHECK_ITEM_DATAFILE].enable = true; + tsCheckItem[TSDB_CHECK_ITEM_DATAFILE].name = "datafile"; + tsCheckItem[TSDB_CHECK_ITEM_DATAFILE].initFp = NULL; + tsCheckItem[TSDB_CHECK_ITEM_DATAFILE].cleanUpFp = NULL; + tsCheckItem[TSDB_CHECK_ITEM_DATAFILE].startFp = dnodeCheckDatafile; + tsCheckItem[TSDB_CHECK_ITEM_DATAFILE].stopFp = NULL; +} + +void dnodeCleanupCheck() { + for (ECheckItemType index = 0; index < TSDB_CHECK_ITEM_MAX; ++index) { + if (tsCheckItem[index].enable && tsCheckItem[index].stopFp) { + (*tsCheckItem[index].stopFp)(); + } + if (tsCheckItem[index].cleanUpFp) { + (*tsCheckItem[index].cleanUpFp)(); + } + } +} + +int32_t dnodeInitCheck() { + dnodeAllocCheckItem(); + + for (ECheckItemType index = 0; index < TSDB_CHECK_ITEM_MAX; ++index) { + if (tsCheckItem[index].initFp) { + if ((*tsCheckItem[index].initFp)() != 0) { + dError("failed to init check item:%s", tsCheckItem[index].name); + return -1; + } + } + } + + for (ECheckItemType index = 0; index < TSDB_CHECK_ITEM_MAX; ++index) { + if (tsCheckItem[index].enable && tsCheckItem[index].startFp) { + if ((*tsCheckItem[index].startFp)() != 0) { + dError("failed to check item:%s", tsCheckItem[index].name); + exit(-1); + } + } + } + + return 0; +} + + + diff --git a/src/dnode/src/dnodeMain.c b/src/dnode/src/dnodeMain.c index 96f8f43265e30a75db2477e050eed54d66dc3399..dded10bd1c7c8e1ea0448e942175e92b7e09a169 100644 --- a/src/dnode/src/dnodeMain.c +++ b/src/dnode/src/dnodeMain.c @@ -24,6 +24,7 @@ #include "dnodeMgmt.h" #include "dnodePeer.h" #include "dnodeModule.h" +#include "dnodeCheck.h" #include "dnodeVRead.h" #include "dnodeVWrite.h" #include "dnodeMRead.h" @@ -48,6 +49,7 @@ typedef struct { } SDnodeComponent; static const SDnodeComponent tsDnodeComponents[] = { + {"check", dnodeInitCheck, dnodeCleanupCheck}, // NOTES: dnodeInitCheck must be first component !!! {"storage", dnodeInitStorage, dnodeCleanupStorage}, {"vread", dnodeInitVnodeRead, dnodeCleanupVnodeRead}, {"vwrite", dnodeInitVnodeWrite, dnodeCleanupVnodeWrite}, diff --git a/src/inc/taosdef.h b/src/inc/taosdef.h index aa594183478c3c7dc924531525ec5a6ca98ab750..f8b9d0ee7954b1a6d0b83a903970de44c06ce0ba 100644 --- a/src/inc/taosdef.h +++ b/src/inc/taosdef.h @@ -416,6 +416,19 @@ typedef enum { TSDB_MOD_MAX } EModuleType; + typedef enum { + TSDB_CHECK_ITEM_NETWORK, + TSDB_CHECK_ITEM_MEM, + TSDB_CHECK_ITEM_CPU, + TSDB_CHECK_ITEM_DISK, + TSDB_CHECK_ITEM_OS, + TSDB_CHECK_ITEM_ACCESS, + TSDB_CHECK_ITEM_VERSION, + TSDB_CHECK_ITEM_DATAFILE, + TSDB_CHECK_ITEM_MAX + } ECheckItemType; + + #ifdef __cplusplus } #endif