simSystem.c 4.7 KB
Newer Older
S
[TD-73]  
slguan 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/*
 * Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
 *
 * 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 <http://www.gnu.org/licenses/>.
 */

16
#define _DEFAULT_SOURCE
S
slguan 已提交
17 18 19
#include "os.h"
#include "sim.h"
#include "taos.h"
S
slguan 已提交
20
#include "tglobal.h"
S
slguan 已提交
21 22
#include "ttimer.h"
#include "tutil.h"
S
slguan 已提交
23
#include "tsocket.h"
S
Shengliang Guan 已提交
24
#undef TAOS_MEM_CHECK
S
slguan 已提交
25 26 27

SScript *simScriptList[MAX_MAIN_SCRIPT_NUM];
SCommand simCmdList[SIM_CMD_END];
28 29 30 31 32
int32_t  simScriptPos = -1;
int32_t  simScriptSucced = 0;
int32_t  simDebugFlag = 135;
void     simCloseTaosdConnect(SScript *script);
char     simHostName[128];
S
slguan 已提交
33

H
Hui Li 已提交
34 35 36 37 38 39
char *simParseArbitratorName(char *varName) {
  static char hostName[140];
  sprintf(hostName, "%s:%d", simHostName, 8000);
  return hostName;
}

S
slguan 已提交
40 41 42
char *simParseHostName(char *varName) {
  static char hostName[140];

43 44
  int32_t index = atoi(varName + 8);
  int32_t port = 7100;
S
slguan 已提交
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
  switch (index) {
    case 1:
      port = 7100;
      break;
    case 2:
      port = 7200;
      break;
    case 3:
      port = 7300;
      break;
    case 4:
      port = 7400;
      break;
    case 5:
      port = 7500;
      break;
    case 6:
      port = 7600;
      break;
    case 7:
      port = 7700;
      break;
    case 8:
      port = 7800;
      break;
    case 9:
      port = 7900;
      break;
  }
74

S
slguan 已提交
75
  sprintf(hostName, "'%s:%d'", simHostName, port);
76
  // simInfo("hostName:%s", hostName);
S
slguan 已提交
77 78
  return hostName;
}
S
slguan 已提交
79 80

bool simSystemInit() {
S
slguan 已提交
81
  taosGetFqdn(simHostName);
S
slguan 已提交
82 83 84 85 86 87 88 89 90 91
  taos_init();
  simInitsimCmdList();
  memset(simScriptList, 0, sizeof(SScript *) * MAX_MAIN_SCRIPT_NUM);
  return true;
}

void simSystemCleanUp() {}

void simFreeScript(SScript *script) {
  if (script->type == SIM_SCRIPT_TYPE_MAIN) {
92 93 94
    simInfo("script:%s, background script num:%d, stop them", script->fileName, script->bgScriptLen);

    for (int32_t i = 0; i < script->bgScriptLen; ++i) {
S
slguan 已提交
95
      SScript *bgScript = script->bgScripts[i];
P
TD-2652  
Ping Xiao 已提交
96
      simDebug("script:%s, is background script, set stop flag", bgScript->fileName);
S
slguan 已提交
97
      bgScript->killed = true;
S
Shengliang Guan 已提交
98
      if (taosCheckPthreadValid(bgScript->bgPid)) {
99 100
        pthread_join(bgScript->bgPid, NULL);
      }
P
TD-2652  
Ping Xiao 已提交
101 102 103 104 105 106

      simDebug("script:%s, background thread joined", bgScript->fileName);
      taos_close(bgScript->taos);
      tfree(bgScript->lines);
      tfree(bgScript->optionBuffer);
      tfree(bgScript);
S
slguan 已提交
107 108
    }

P
TD-2652  
Ping Xiao 已提交
109 110 111 112 113 114
    simDebug("script:%s, is cleaned", script->fileName);
    taos_close(script->taos);
    tfree(script->lines);
    tfree(script->optionBuffer);
    tfree(script);
  }
S
slguan 已提交
115 116 117 118
}

SScript *simProcessCallOver(SScript *script) {
  if (script->type == SIM_SCRIPT_TYPE_MAIN) {
P
TD-2652  
Ping Xiao 已提交
119
    simDebug("script:%s, is main script, set stop flag", script->fileName);
S
slguan 已提交
120
    if (script->killed) {
121 122
      simInfo("script:" FAILED_PREFIX "%s" FAILED_POSTFIX ", " FAILED_PREFIX "failed" FAILED_POSTFIX ", error:%s",
              script->fileName, script->error);
123
      return NULL;
S
slguan 已提交
124
    } else {
125 126
      simInfo("script:" SUCCESS_PREFIX "%s" SUCCESS_POSTFIX ", " SUCCESS_PREFIX "success" SUCCESS_POSTFIX,
              script->fileName);
S
slguan 已提交
127 128 129
      simCloseTaosdConnect(script);
      simScriptSucced++;
      simScriptPos--;
130 131

      simFreeScript(script);
S
slguan 已提交
132
      if (simScriptPos == -1) {
S
Shengliang Guan 已提交
133 134
        simInfo("----------------------------------------------------------------------");
        simInfo("Simulation Test Done, " SUCCESS_PREFIX "%d" SUCCESS_POSTFIX " Passed:\n", simScriptSucced);
135
        return NULL;
S
slguan 已提交
136 137
      }

S
TD-1952  
Shengliang Guan 已提交
138
      return simScriptList[simScriptPos];
S
slguan 已提交
139 140
    }
  } else {
P
TD-2652  
Ping Xiao 已提交
141
    simDebug("script:%s,  is stopped", script->fileName);
S
slguan 已提交
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
    simFreeScript(script);
    return NULL;
  }
}

void *simExecuteScript(void *inputScript) {
  SScript *script = (SScript *)inputScript;

  while (1) {
    if (script->type == SIM_SCRIPT_TYPE_MAIN) {
      script = simScriptList[simScriptPos];
    }

    if (script->killed || script->linePos >= script->numOfLines) {
      script = simProcessCallOver(script);
      if (script == NULL) break;
    } else {
      SCmdLine *line = &script->lines[script->linePos];
160
      char *    option = script->optionBuffer + line->optionOffset;
S
Shengliang Guan 已提交
161
      simDebug("script:%s, line:%d with option \"%s\"", script->fileName, line->lineNum, option);
S
slguan 已提交
162 163

      SCommand *cmd = &simCmdList[line->cmdno];
164
      int32_t   ret = (*(cmd->executeCmd))(script, option);
S
slguan 已提交
165 166 167 168 169 170
      if (!ret) {
        script->killed = true;
      }
    }
  }

P
TD-2652  
Ping Xiao 已提交
171
  simInfo("thread is stopped");
S
slguan 已提交
172 173
  return NULL;
}