fix: refact shell arguments

This commit is contained in:
Shengliang Guan 2022-04-19 16:50:25 +08:00
parent cf433ec94c
commit 7d65802571
3 changed files with 70 additions and 68 deletions

View File

@ -505,6 +505,7 @@ static void dmCleanupServer(SDnode *pDnode) {
int32_t dmInitTrans(SDnode *pDnode) { int32_t dmInitTrans(SDnode *pDnode) {
if (dmInitServer(pDnode) != 0) return -1; if (dmInitServer(pDnode) != 0) return -1;
if (dmInitClient(pDnode) != 0) return -1; if (dmInitClient(pDnode) != 0) return -1;
dmReportStartup(pDnode, "transport", "initialized");
return 0; return 0;
} }

View File

@ -154,10 +154,12 @@ static void dmGetServerStatus(SDnode *pDnode, SServerStatusRsp *pStatus) {
if (pStatus->statusCode == TSDB_SRV_STATUS_NETWORK_OK) { if (pStatus->statusCode == TSDB_SRV_STATUS_NETWORK_OK) {
SStartupInfo *pStartup = &pDnode->startup; SStartupInfo *pStartup = &pDnode->startup;
int32_t len = strlen(pStartup->name) + strlen(pStartup->desc) + 24; int32_t len = strlen(pStartup->name) + strlen(pStartup->desc);
pStatus->details = taosMemoryCalloc(1, len); if (len > 0) {
pStatus->details = taosMemoryCalloc(1, len + 24);
if (pStatus->details != NULL) { if (pStatus->details != NULL) {
pStatus->detailLen = snprintf(pStatus->details, len - 1, "%s: %s", pStartup->name, pStartup->desc) + 1; pStatus->detailLen = snprintf(pStatus->details, len + 20, "%s: %s", pStartup->name, pStartup->desc) + 1;
}
} }
} }

View File

@ -531,10 +531,10 @@ void showOnScreen(Command *cmd) {
void cleanup_handler(void *arg) { resetTerminalMode(); } void cleanup_handler(void *arg) { resetTerminalMode(); }
void exitShell() { void exitShell() {
/*int32_t ret =*/resetTerminalMode();
taos_cleanup(); taos_cleanup();
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);
} }
void shellQueryInterruptHandler(int32_t signum, void *sigInfo, void *context) { tsem_post(&cancelSem); } void shellQueryInterruptHandler(int32_t signum, void *sigInfo, void *context) { tsem_post(&cancelSem); }
void *cancelHandler(void *arg) { void *cancelHandler(void *arg) {
@ -546,21 +546,9 @@ void *cancelHandler(void *arg) {
continue; continue;
} }
#ifdef LINUX
#if 0
int64_t rid = atomic_val_compare_exchange_64(&result, result, 0);
SSqlObj* pSql = taosAcquireRef(tscObjRef, rid);
taos_stop_query(pSql);
taosReleaseRef(tscObjRef, rid);
#endif
#else
resetTerminalMode(); resetTerminalMode();
printf("\nReceive ctrl+c or other signal, quit shell.\n"); printf("\nReceive ctrl+c or other signal, quit shell.\n");
exit(0); exitShell();
#endif
resetTerminalMode();
printf("\nReceive ctrl+c or other signal, quit shell.\n");
exit(0);
} }
return NULL; return NULL;
@ -587,10 +575,8 @@ int checkVersion() {
} }
// Global configurations // Global configurations
SShellArguments args = {.host = NULL, SShellArguments args = {
#ifndef TD_WINDOWS .host = NULL,
.password = NULL,
#endif
.user = NULL, .user = NULL,
.database = NULL, .database = NULL,
.timezone = NULL, .timezone = NULL,
@ -604,35 +590,38 @@ SShellArguments args = {.host = NULL,
.pktLen = 1000, .pktLen = 1000,
.pktNum = 100, .pktNum = 100,
.pktType = "TCP", .pktType = "TCP",
.netTestRole = NULL}; .netTestRole = NULL,
#ifndef TD_WINDOWS
.password = NULL,
#endif
};
/* void shellDumpConfig() {
* Main function. if (!args.dump_config) return;
*/
int main(int argc, char *argv[]) {
/*setlocale(LC_ALL, "en_US.UTF-8"); */
if (!checkVersion()) {
exit(EXIT_FAILURE);
}
shellParseArgument(argc, argv, &args);
taos_init();
if (args.dump_config) {
SConfig *pCfg = taosGetCfg(); SConfig *pCfg = taosGetCfg();
if (NULL == pCfg) { if (NULL == pCfg) {
printf("TDengine read global config failed!\n"); printf("TDengine read global config failed!\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
cfgDumpCfg(pCfg, 0, 1); cfgDumpCfg(pCfg, 0, 1);
exit(0); exitShell();
} }
if (args.status || args.verbose) { void shellTestNetWork() {
if (args.netTestRole && args.netTestRole[0] != 0) {
taosNetTest(args.netTestRole, args.host, args.port, args.pktLen, args.pktNum, args.pktType);
exitShell();
}
}
void shellCheckServerStatus() {
if (!args.status && !args.verbose) return;
char details[1024] = {0}; char details[1024] = {0};
TSDB_SERVER_STATUS code = taos_check_server_status(args.host, args.port, details, args.verbose ? 1024 : 0); TSDB_SERVER_STATUS code;
do {
code = taos_check_server_status(args.host, args.port, details, args.verbose ? 1024 : 0);
switch (code) { switch (code) {
case TSDB_SRV_STATUS_UNAVAILABLE: case TSDB_SRV_STATUS_UNAVAILABLE:
printf("0: unavailable\n"); printf("0: unavailable\n");
@ -650,44 +639,54 @@ int main(int argc, char *argv[]) {
printf("4: exiting\n"); printf("4: exiting\n");
break; break;
} }
if (strlen(details) != 0) { if (strlen(details) != 0) {
printf("detail info:\n%s\n", details); printf("%s\n\n", details);
} }
exit(0); if (code == TSDB_SRV_STATUS_NETWORK_OK) {
taosMsleep(1000);
} }
} while (code == TSDB_SRV_STATUS_NETWORK_OK);
if (args.netTestRole && args.netTestRole[0] != 0) { exitShell();
taosNetTest(args.netTestRole, args.host, args.port, args.pktLen, args.pktNum, args.pktType); }
exit(0);
}
/* Initialize the shell */ void shellExecute() {
TAOS *con = shellInit(&args); TAOS *con = shellInit(&args);
if (con == NULL) { if (con == NULL) {
exit(EXIT_FAILURE); exitShell();
} }
if (tsem_init(&cancelSem, 0, 0) != 0) { if (tsem_init(&cancelSem, 0, 0) != 0) {
printf("failed to create cancel semphore\n"); printf("failed to create cancel semphore\n");
exit(EXIT_FAILURE); exitShell();
} }
TdThread spid; TdThread spid;
taosThreadCreate(&spid, NULL, cancelHandler, NULL); taosThreadCreate(&spid, NULL, cancelHandler, NULL);
/* Interrupt handler. */
taosSetSignal(SIGTERM, shellQueryInterruptHandler); taosSetSignal(SIGTERM, shellQueryInterruptHandler);
taosSetSignal(SIGINT, shellQueryInterruptHandler); taosSetSignal(SIGINT, shellQueryInterruptHandler);
taosSetSignal(SIGHUP, shellQueryInterruptHandler); taosSetSignal(SIGHUP, shellQueryInterruptHandler);
taosSetSignal(SIGABRT, shellQueryInterruptHandler); taosSetSignal(SIGABRT, shellQueryInterruptHandler);
/* Get grant information */
shellGetGrantInfo(con); shellGetGrantInfo(con);
/* Loop to query the input. */
while (1) { while (1) {
taosThreadCreate(&pid, NULL, shellLoopQuery, con); taosThreadCreate(&pid, NULL, shellLoopQuery, con);
taosThreadJoin(pid, NULL); taosThreadJoin(pid, NULL);
} }
} }
int main(int argc, char *argv[]) {
if (!checkVersion()) exitShell();
shellParseArgument(argc, argv, &args);
taos_init();
shellDumpConfig();
shellCheckServerStatus();
shellTestNetWork();
shellExecute();
return 0;
}