• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

taosdata / TDengine / #3631

07 Mar 2025 03:18PM UTC coverage: 60.671% (-3.0%) from 63.629%
#3631

push

travis-ci

web-flow
Merge pull request #30074 from taosdata/ciup30

ci: update ci workflow to fix path issue

141481 of 300084 branches covered (47.15%)

Branch coverage included in aggregate %.

223132 of 300884 relevant lines covered (74.16%)

7878557.0 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

62.61
/source/client/src/clientMsgHandler.c
1
/*
2
 * Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
3
 *
4
 * This program is free software: you can use, redistribute, and/or modify
5
 * it under the terms of the GNU Affero General Public License, version 3
6
 * or later ("AGPL"), as published by the Free Software Foundation.
7
 *
8
 * This program is distributed in the hope that it will be useful, but WITHOUT
9
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10
 * FITNESS FOR A PARTICULAR PURPOSE.
11
 *
12
 * You should have received a copy of the GNU Affero General Public License
13
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14
 */
15

16
#include "catalog.h"
17
#include "clientInt.h"
18
#include "clientLog.h"
19
#include "clientMonitor.h"
20
#include "cmdnodes.h"
21
#include "command.h"
22
#include "os.h"
23
#include "query.h"
24
#include "systable.h"
25
#include "tdatablock.h"
26
#include "tdef.h"
27
#include "tglobal.h"
28
#include "tname.h"
29
#include "tversion.h"
30

31
extern SClientHbMgr clientHbMgr;
32

33
static void setErrno(SRequestObj* pRequest, int32_t code) {
8,525✔
34
  pRequest->code = code;
8,525✔
35
  terrno = code;
8,525✔
36
}
8,525✔
37

38
int32_t genericRspCallback(void* param, SDataBuf* pMsg, int32_t code) {
7,496✔
39
  SRequestObj* pRequest = param;
7,496✔
40
  setErrno(pRequest, code);
7,496✔
41

42
  if (NEED_CLIENT_RM_TBLMETA_REQ(pRequest->type)) {
7,496!
43
    if (removeMeta(pRequest->pTscObj, pRequest->targetTableList, IS_VIEW_REQUEST(pRequest->type)) != 0) {
1,575!
44
      tscError("failed to remove meta data for table");
×
45
    }
46
  }
47

48
  taosMemoryFree(pMsg->pEpSet);
7,496!
49
  taosMemoryFree(pMsg->pData);
7,496!
50
  if (pRequest->body.queryFp != NULL) {
7,496✔
51
    doRequestCallback(pRequest, code);
7,490✔
52
  } else {
53
    if (tsem_post(&pRequest->body.rspSem) != 0) {
6!
54
      tscError("failed to post semaphore");
×
55
    }
56
  }
57
  return code;
7,496✔
58
}
59

60
int32_t processConnectRsp(void* param, SDataBuf* pMsg, int32_t code) {
14,530✔
61
  SRequestObj* pRequest = acquireRequest(*(int64_t*)param);
14,530✔
62
  if (NULL == pRequest) {
14,530!
63
    goto EXIT;
×
64
  }
65

66
  if (code != TSDB_CODE_SUCCESS) {
14,530✔
67
    goto End;
39✔
68
  }
69

70
  STscObj* pTscObj = pRequest->pTscObj;
14,491✔
71

72
  if (NULL == pTscObj->pAppInfo) {
14,491!
73
    code = TSDB_CODE_TSC_DISCONNECTED;
×
74
    goto End;
×
75
  }
76

77
  SConnectRsp connectRsp = {0};
14,491✔
78
  if (tDeserializeSConnectRsp(pMsg->pData, pMsg->len, &connectRsp) != 0) {
14,491!
79
    code = TSDB_CODE_TSC_INVALID_VERSION;
×
80
    goto End;
×
81
  }
82

83
  if ((code = taosCheckVersionCompatibleFromStr(td_version, connectRsp.sVer, 3)) != 0) {
14,490!
84
    tscError("version not compatible. client version:%s, server version:%s", td_version, connectRsp.sVer);
×
85
    goto End;
×
86
  }
87

88
  int32_t now = taosGetTimestampSec();
14,489✔
89
  int32_t delta = abs(now - connectRsp.svrTimestamp);
14,490✔
90
  if (delta > timestampDeltaLimit) {
14,490!
91
    code = TSDB_CODE_TIME_UNSYNCED;
×
92
    tscError("time diff:%ds is too big", delta);
×
93
    goto End;
×
94
  }
95

96
  if (connectRsp.epSet.numOfEps == 0) {
14,490!
97
    code = TSDB_CODE_APP_ERROR;
×
98
    goto End;
×
99
  }
100

101
  int updateEpSet = 1;
14,490✔
102
  if (connectRsp.dnodeNum == 1) {
14,490✔
103
    SEpSet srcEpSet = getEpSet_s(&pTscObj->pAppInfo->mgmtEp);
11,628✔
104
    SEpSet dstEpSet = connectRsp.epSet;
11,628✔
105
    if (srcEpSet.numOfEps == 1) {
11,628✔
106
      if (rpcSetDefaultAddr(pTscObj->pAppInfo->pTransporter, srcEpSet.eps[srcEpSet.inUse].fqdn,
10,399!
107
                            dstEpSet.eps[dstEpSet.inUse].fqdn) != 0) {
10,398✔
108
        tscError("failed to set default addr for rpc");
×
109
      }
110
      updateEpSet = 0;
10,399✔
111
    }
112
  }
113
  if (updateEpSet == 1 && !isEpsetEqual(&pTscObj->pAppInfo->mgmtEp.epSet, &connectRsp.epSet)) {
14,491✔
114
    SEpSet corEpSet = getEpSet_s(&pTscObj->pAppInfo->mgmtEp);
1,432✔
115

116
    SEpSet* pOrig = &corEpSet;
1,432✔
117
    SEp*    pOrigEp = &pOrig->eps[pOrig->inUse];
1,432✔
118
    SEp*    pNewEp = &connectRsp.epSet.eps[connectRsp.epSet.inUse];
1,432✔
119
    tscDebug("mnode epset updated from %d/%d=>%s:%d to %d/%d=>%s:%d in connRsp", pOrig->inUse, pOrig->numOfEps,
1,432✔
120
             pOrigEp->fqdn, pOrigEp->port, connectRsp.epSet.inUse, connectRsp.epSet.numOfEps, pNewEp->fqdn,
121
             pNewEp->port);
122
    updateEpSet_s(&pTscObj->pAppInfo->mgmtEp, &connectRsp.epSet);
1,432✔
123
  }
124

125
  for (int32_t i = 0; i < connectRsp.epSet.numOfEps; ++i) {
29,523✔
126
    tscDebug("QID:0x%" PRIx64 ", epSet.fqdn[%d]:%s port:%d, connObj:0x%" PRIx64, pRequest->requestId, i,
15,033✔
127
             connectRsp.epSet.eps[i].fqdn, connectRsp.epSet.eps[i].port, pTscObj->id);
128
  }
129

130
  pTscObj->sysInfo = connectRsp.sysInfo;
14,490✔
131
  pTscObj->connId = connectRsp.connId;
14,490✔
132
  pTscObj->acctId = connectRsp.acctId;
14,490✔
133
  tstrncpy(pTscObj->sVer, connectRsp.sVer, tListLen(pTscObj->sVer));
14,490✔
134
  tstrncpy(pTscObj->sDetailVer, connectRsp.sDetailVer, tListLen(pTscObj->sDetailVer));
14,490✔
135

136
  // update the appInstInfo
137
  pTscObj->pAppInfo->clusterId = connectRsp.clusterId;
14,490✔
138
  pTscObj->pAppInfo->serverCfg.monitorParas = connectRsp.monitorParas;
14,490✔
139
  pTscObj->pAppInfo->serverCfg.enableAuditDelete = connectRsp.enableAuditDelete;
14,490✔
140
  tscDebug("monitor paras from connect rsp, clusterId:0x%" PRIx64 ", threshold:%d scope:%d",
14,490✔
141
           connectRsp.clusterId, connectRsp.monitorParas.tsSlowLogThreshold, connectRsp.monitorParas.tsSlowLogScope);
142
  lastClusterId = connectRsp.clusterId;
14,490✔
143

144
  pTscObj->connType = connectRsp.connType;
14,490✔
145
  pTscObj->passInfo.ver = connectRsp.passVer;
14,490✔
146
  pTscObj->authVer = connectRsp.authVer;
14,490✔
147
  pTscObj->whiteListInfo.ver = connectRsp.whiteListVer;
14,490✔
148

149
  if (taosHashGet(appInfo.pInstMapByClusterId, &connectRsp.clusterId, LONG_BYTES) == NULL) {
14,490✔
150
    if (taosHashPut(appInfo.pInstMapByClusterId, &connectRsp.clusterId, LONG_BYTES, &pTscObj->pAppInfo,
2,497!
151
                    POINTER_BYTES) != 0) {
152
      tscError("failed to put appInfo into appInfo.pInstMapByClusterId");
×
153
    } else {
154
      MonitorSlowLogData data = {0};
2,497✔
155
      data.clusterId = pTscObj->pAppInfo->clusterId;
2,497✔
156
      data.type = SLOW_LOG_READ_BEGINNIG;
2,497✔
157
      (void)monitorPutData2MonitorQueue(data);  // ignore
2,497✔
158
      monitorClientSlowQueryInit(connectRsp.clusterId);
2,497✔
159
      monitorClientSQLReqInit(connectRsp.clusterId);
2,497✔
160
    }
161
  }
162

163
  (void)taosThreadMutexLock(&clientHbMgr.lock);
14,491✔
164
  SAppHbMgr* pAppHbMgr = taosArrayGetP(clientHbMgr.appHbMgrs, pTscObj->appHbMgrIdx);
14,491✔
165
  if (pAppHbMgr) {
14,491!
166
    if (hbRegisterConn(pAppHbMgr, pTscObj->id, connectRsp.clusterId, connectRsp.connType) != 0) {
14,491!
167
      tscError("QID:0x%" PRIx64 ", failed to register conn to hbMgr", pRequest->requestId);
×
168
    }
169
  } else {
170
    (void)taosThreadMutexUnlock(&clientHbMgr.lock);
×
171
    code = TSDB_CODE_TSC_DISCONNECTED;
×
172
    goto End;
×
173
  }
174
  (void)taosThreadMutexUnlock(&clientHbMgr.lock);
14,491✔
175

176
  tscDebug("QID:0x%" PRIx64 ", clusterId:0x%" PRIx64 ", totalConn:%" PRId64, pRequest->requestId, connectRsp.clusterId,
14,491✔
177
           pTscObj->pAppInfo->numOfConns);
178

179
End:
10,425✔
180
  if (code != 0) {
14,530✔
181
    setErrno(pRequest, code);
39✔
182
  }
183
  if (tsem_post(&pRequest->body.rspSem) != 0) {
14,530!
184
    tscError("failed to post semaphore");
×
185
  }
186

187
  if (pRequest) {
14,530!
188
    (void)releaseRequest(pRequest->self);
14,530✔
189
  }
190

191
EXIT:
×
192
  taosMemoryFree(param);
14,530!
193
  taosMemoryFree(pMsg->pEpSet);
14,530!
194
  taosMemoryFree(pMsg->pData);
14,530!
195
  return code;
14,530✔
196
}
197

198
SMsgSendInfo* buildMsgInfoImpl(SRequestObj* pRequest) {
32,532✔
199
  SMsgSendInfo* pMsgSendInfo = taosMemoryCalloc(1, sizeof(SMsgSendInfo));
32,532!
200
  if (pMsgSendInfo == NULL) return pMsgSendInfo;
32,531!
201
  pMsgSendInfo->requestObjRefId = pRequest->self;
32,531✔
202
  pMsgSendInfo->requestId = pRequest->requestId;
32,531✔
203
  pMsgSendInfo->param = pRequest;
32,531✔
204
  pMsgSendInfo->msgType = pRequest->type;
32,531✔
205
  pMsgSendInfo->target.type = TARGET_TYPE_MNODE;
32,531✔
206

207
  pMsgSendInfo->msgInfo = pRequest->body.requestMsg;
32,531✔
208
  pMsgSendInfo->fp = getMsgRspHandle(pRequest->type);
32,531✔
209
  return pMsgSendInfo;
32,532✔
210
}
211

212
int32_t processCreateDbRsp(void* param, SDataBuf* pMsg, int32_t code) {
4,890✔
213
  // todo rsp with the vnode id list
214
  SRequestObj* pRequest = param;
4,890✔
215
  taosMemoryFree(pMsg->pData);
4,890!
216
  taosMemoryFree(pMsg->pEpSet);
4,890!
217
  if (code != TSDB_CODE_SUCCESS) {
4,890✔
218
    setErrno(pRequest, code);
572✔
219
  } else {
220
    struct SCatalog* pCatalog = NULL;
4,318✔
221
    code = catalogGetHandle(pRequest->pTscObj->pAppInfo->clusterId, &pCatalog);
4,318✔
222
    if (TSDB_CODE_SUCCESS == code) {
4,318!
223
      STscObj* pTscObj = pRequest->pTscObj;
4,318✔
224

225
      SRequestConnInfo conn = {.pTrans = pTscObj->pAppInfo->pTransporter,
4,318✔
226
                               .requestId = pRequest->requestId,
4,318✔
227
                               .requestObjRefId = pRequest->self,
4,318✔
228
                               .mgmtEps = getEpSet_s(&pTscObj->pAppInfo->mgmtEp)};
4,318✔
229
      char             dbFName[TSDB_DB_FNAME_LEN];
230
      (void)snprintf(dbFName, sizeof(dbFName) - 1, "%d.%s", pTscObj->acctId, TSDB_INFORMATION_SCHEMA_DB);
4,318✔
231
      if (catalogRefreshDBVgInfo(pCatalog, &conn, dbFName) != 0) {
4,318✔
232
        tscError("QID:0x%" PRIx64 ", failed to refresh db vg info", pRequest->requestId);
1!
233
      }
234
      (void)snprintf(dbFName, sizeof(dbFName) - 1, "%d.%s", pTscObj->acctId, TSDB_PERFORMANCE_SCHEMA_DB);
4,318✔
235
      if (catalogRefreshDBVgInfo(pCatalog, &conn, dbFName) != 0) {
4,318!
236
        tscError("QID:0x%" PRIx64 ", failed to refresh db vg info", pRequest->requestId);
×
237
      }
238
    }
239
  }
240

241
  if (pRequest->body.queryFp) {
4,890!
242
    doRequestCallback(pRequest, code);
4,890✔
243
  } else {
244
    if (tsem_post(&pRequest->body.rspSem) != 0) {
×
245
      tscError("failed to post semaphore");
×
246
    }
247
  }
248
  return code;
4,890✔
249
}
250

251
int32_t processUseDbRsp(void* param, SDataBuf* pMsg, int32_t code) {
7,421✔
252
  SRequestObj* pRequest = param;
7,421✔
253
  if (TSDB_CODE_MND_DB_NOT_EXIST == code || TSDB_CODE_MND_DB_IN_CREATING == code ||
7,421!
254
      TSDB_CODE_MND_DB_IN_DROPPING == code) {
255
    SUseDbRsp usedbRsp = {0};
2✔
256
    if (tDeserializeSUseDbRsp(pMsg->pData, pMsg->len, &usedbRsp) != 0) {
2!
257
      tscError("QID:0x%" PRIx64 ", deserialize SUseDbRsp failed", pRequest->requestId);
2!
258
    }
259
    struct SCatalog* pCatalog = NULL;
2✔
260

261
    if (usedbRsp.vgVersion >= 0) {  // cached in local
2!
262
      int64_t clusterId = pRequest->pTscObj->pAppInfo->clusterId;
2✔
263
      int32_t code1 = catalogGetHandle(clusterId, &pCatalog);
2✔
264
      if (code1 != TSDB_CODE_SUCCESS) {
2!
265
        tscWarn("QID:0x%" PRIx64 ", catalogGetHandle failed, clusterId:0x%" PRIx64 ", error:%s", pRequest->requestId, clusterId,
×
266
                tstrerror(code1));
267
      } else {
268
        if (catalogRemoveDB(pCatalog, usedbRsp.db, usedbRsp.uid) != 0) {
2!
269
          tscError("QID:0x%" PRIx64 ", catalogRemoveDB failed, db:%s, uid:%" PRId64, pRequest->requestId, usedbRsp.db,
×
270
                   usedbRsp.uid);
271
        }
272
      }
273
    }
274
    tFreeSUsedbRsp(&usedbRsp);
2✔
275
  }
276

277
  if (code != TSDB_CODE_SUCCESS) {
7,421✔
278
    taosMemoryFree(pMsg->pData);
3!
279
    taosMemoryFree(pMsg->pEpSet);
3!
280
    setErrno(pRequest, code);
3✔
281

282
    if (pRequest->body.queryFp != NULL) {
3!
283
      doRequestCallback(pRequest, pRequest->code);
3✔
284

285
    } else {
286
      if (tsem_post(&pRequest->body.rspSem) != 0) {
×
287
        tscError("failed to post semaphore");
×
288
      }
289
    }
290

291
    return code;
3✔
292
  }
293

294
  SUseDbRsp usedbRsp = {0};
7,418✔
295
  if (tDeserializeSUseDbRsp(pMsg->pData, pMsg->len, &usedbRsp) != 0) {
7,418!
296
    tscError("QID:0x%" PRIx64 ", deserialize SUseDbRsp failed", pRequest->requestId);
×
297
  }
298

299
  if (strlen(usedbRsp.db) == 0) {
7,418!
300
    taosMemoryFree(pMsg->pData);
×
301
    taosMemoryFree(pMsg->pEpSet);
×
302

303
    if (usedbRsp.errCode != 0) {
×
304
      return usedbRsp.errCode;
×
305
    } else {
306
      return TSDB_CODE_APP_ERROR;
×
307
    }
308
  }
309

310
  tscTrace("db:%s, usedbRsp received, numOfVgroups:%d", usedbRsp.db, usedbRsp.vgNum);
7,418✔
311
  for (int32_t i = 0; i < usedbRsp.vgNum; ++i) {
14,985✔
312
    SVgroupInfo* pInfo = taosArrayGet(usedbRsp.pVgroupInfos, i);
7,567✔
313
    if (pInfo == NULL) {
7,567!
314
      continue;
×
315
    }
316
    tscTrace("vgId:%d, numOfEps:%d inUse:%d ", pInfo->vgId, pInfo->epSet.numOfEps, pInfo->epSet.inUse);
7,567✔
317
    for (int32_t j = 0; j < pInfo->epSet.numOfEps; ++j) {
15,701✔
318
      tscTrace("vgId:%d, index:%d epset:%s:%u", pInfo->vgId, j, pInfo->epSet.eps[j].fqdn, pInfo->epSet.eps[j].port);
8,134✔
319
    }
320
  }
321

322
  SName name = {0};
7,418✔
323
  if (tNameFromString(&name, usedbRsp.db, T_NAME_ACCT | T_NAME_DB) != TSDB_CODE_SUCCESS) {
7,418!
324
    tscError("QID:0x%" PRIx64 ", failed to parse db name:%s", pRequest->requestId, usedbRsp.db);
×
325
  }
326

327
  SUseDbOutput output = {0};
7,418✔
328
  code = queryBuildUseDbOutput(&output, &usedbRsp);
7,418✔
329
  if (code != 0) {
7,418!
330
    terrno = code;
×
331
    if (output.dbVgroup) taosHashCleanup(output.dbVgroup->vgHash);
×
332

333
    tscError("QID:0x%" PRIx64 ", failed to build use db output since %s", pRequest->requestId, terrstr());
×
334
  } else if (output.dbVgroup && output.dbVgroup->vgHash) {
7,418!
335
    struct SCatalog* pCatalog = NULL;
3,362✔
336

337
    int32_t code1 = catalogGetHandle(pRequest->pTscObj->pAppInfo->clusterId, &pCatalog);
3,362✔
338
    if (code1 != TSDB_CODE_SUCCESS) {
3,362!
339
      tscWarn("catalogGetHandle failed, clusterId:0x%" PRIx64 ", error:%s", pRequest->pTscObj->pAppInfo->clusterId,
×
340
              tstrerror(code1));
341
    } else {
342
      if (catalogUpdateDBVgInfo(pCatalog, output.db, output.dbId, output.dbVgroup) != 0) {
3,362!
343
        tscError("QID:0x%" PRIx64 ", failed to update db vg info, db:%s, dbId:%" PRId64, pRequest->requestId, output.db,
×
344
                 output.dbId);
345
      }
346
      output.dbVgroup = NULL;
3,362✔
347
    }
348
  }
349

350
  taosMemoryFreeClear(output.dbVgroup);
7,418!
351
  tFreeSUsedbRsp(&usedbRsp);
7,418✔
352

353
  char db[TSDB_DB_NAME_LEN] = {0};
7,418✔
354
  if (tNameGetDbName(&name, db) != TSDB_CODE_SUCCESS) {
7,418!
355
    tscError("QID:0x%" PRIx64 ", failed to get db name since %s", pRequest->requestId, tstrerror(code));
×
356
  }
357

358
  setConnectionDB(pRequest->pTscObj, db);
7,418✔
359

360
  taosMemoryFree(pMsg->pData);
7,418!
361
  taosMemoryFree(pMsg->pEpSet);
7,418!
362

363
  if (pRequest->body.queryFp != NULL) {
7,418!
364
    doRequestCallback(pRequest, pRequest->code);
7,418✔
365
  } else {
366
    if (tsem_post(&pRequest->body.rspSem) != 0) {
×
367
      tscError("failed to post semaphore");
×
368
    }
369
  }
370
  return 0;
7,418✔
371
}
372

373
int32_t processCreateSTableRsp(void* param, SDataBuf* pMsg, int32_t code) {
5,834✔
374
  if (pMsg == NULL) {
5,834!
375
    tscError("processCreateSTableRsp: invalid input param, pMsg is NULL");
×
376
    return TSDB_CODE_TSC_INVALID_INPUT;
×
377
  }
378
  if (param == NULL) {
5,834!
379
    taosMemoryFree(pMsg->pEpSet);
×
380
    taosMemoryFree(pMsg->pData);
×
381
    tscError("processCreateSTableRsp: invalid input param, param is NULL");
×
382
    return TSDB_CODE_TSC_INVALID_INPUT;
×
383
  }
384

385
  SRequestObj* pRequest = param;
5,834✔
386

387
  if (code != TSDB_CODE_SUCCESS) {
5,834✔
388
    setErrno(pRequest, code);
177✔
389
  } else {
390
    SMCreateStbRsp createRsp = {0};
5,657✔
391
    SDecoder       coder = {0};
5,657✔
392
    tDecoderInit(&coder, pMsg->pData, pMsg->len);
5,657✔
393
    if (pMsg->len > 0) {
5,657✔
394
      code = tDecodeSMCreateStbRsp(&coder, &createRsp);  // pMsg->len == 0
5,549✔
395
      if (code != TSDB_CODE_SUCCESS) {
5,549!
396
        setErrno(pRequest, code);
×
397
      }
398
    }
399
    tDecoderClear(&coder);
5,657✔
400

401
    pRequest->body.resInfo.execRes.msgType = TDMT_MND_CREATE_STB;
5,657✔
402
    pRequest->body.resInfo.execRes.res = createRsp.pMeta;
5,657✔
403
  }
404

405
  taosMemoryFree(pMsg->pEpSet);
5,834!
406
  taosMemoryFree(pMsg->pData);
5,834!
407

408
  if (pRequest->body.queryFp != NULL) {
5,834✔
409
    SExecResult* pRes = &pRequest->body.resInfo.execRes;
5,338✔
410

411
    if (code == TSDB_CODE_SUCCESS) {
5,338✔
412
      SCatalog* pCatalog = NULL;
5,270✔
413
      int32_t   ret = catalogGetHandle(pRequest->pTscObj->pAppInfo->clusterId, &pCatalog);
5,270✔
414
      if (pRes->res != NULL) {
5,270✔
415
        ret = handleCreateTbExecRes(pRes->res, pCatalog);
5,251✔
416
      }
417

418
      if (ret != TSDB_CODE_SUCCESS) {
5,270!
419
        code = ret;
×
420
      }
421
    }
422

423
    doRequestCallback(pRequest, code);
5,338✔
424
  } else {
425
    if (tsem_post(&pRequest->body.rspSem) != 0) {
496!
426
      tscError("failed to post semaphore");
×
427
    }
428
  }
429
  return code;
5,834✔
430
}
431

432
int32_t processDropDbRsp(void* param, SDataBuf* pMsg, int32_t code) {
3,493✔
433
  SRequestObj* pRequest = param;
3,493✔
434
  if (code != TSDB_CODE_SUCCESS) {
3,493✔
435
    setErrno(pRequest, code);
74✔
436
  } else {
437
    SDropDbRsp dropdbRsp = {0};
3,419✔
438
    if (tDeserializeSDropDbRsp(pMsg->pData, pMsg->len, &dropdbRsp) != 0) {
3,419!
439
      tscError("QID:0x%" PRIx64 ", deserialize SDropDbRsp failed", pRequest->requestId);
×
440
    }
441
    struct SCatalog* pCatalog = NULL;
3,419✔
442
    code = catalogGetHandle(pRequest->pTscObj->pAppInfo->clusterId, &pCatalog);
3,419✔
443
    if (TSDB_CODE_SUCCESS == code) {
3,419!
444
      if (catalogRemoveDB(pCatalog, dropdbRsp.db, dropdbRsp.uid) != 0) {
3,419!
445
        tscError("QID:0x%" PRIx64 ", failed to remove db:%s", pRequest->requestId, dropdbRsp.db);
×
446
      }
447
      STscObj* pTscObj = pRequest->pTscObj;
3,419✔
448

449
      SRequestConnInfo conn = {.pTrans = pTscObj->pAppInfo->pTransporter,
3,419✔
450
                               .requestId = pRequest->requestId,
3,419✔
451
                               .requestObjRefId = pRequest->self,
3,419✔
452
                               .mgmtEps = getEpSet_s(&pTscObj->pAppInfo->mgmtEp)};
3,419✔
453
      char             dbFName[TSDB_DB_FNAME_LEN] = {0};
3,419✔
454
      (void)snprintf(dbFName, sizeof(dbFName) - 1, "%d.%s", pTscObj->acctId, TSDB_INFORMATION_SCHEMA_DB);
3,419✔
455
      if (catalogRefreshDBVgInfo(pCatalog, &conn, dbFName) != TSDB_CODE_SUCCESS) {
3,419!
456
        tscError("QID:0x%" PRIx64 ", failed to refresh db vg info, db:%s", pRequest->requestId, dbFName);
×
457
      }
458
      (void)snprintf(dbFName, sizeof(dbFName) - 1, "%d.%s", pTscObj->acctId, TSDB_PERFORMANCE_SCHEMA_DB);
3,419✔
459
      if (catalogRefreshDBVgInfo(pCatalog, &conn, dbFName) != 0) {
3,419!
460
        tscError("QID:0x%" PRIx64 ", failed to refresh db vg info, db:%s", pRequest->requestId, dbFName);
×
461
      }
462
    }
463
  }
464

465
  taosMemoryFree(pMsg->pData);
3,493!
466
  taosMemoryFree(pMsg->pEpSet);
3,493!
467

468
  if (pRequest->body.queryFp != NULL) {
3,493!
469
    doRequestCallback(pRequest, code);
3,493✔
470
  } else {
471
    if (tsem_post(&pRequest->body.rspSem) != 0) {
×
472
      tscError("failed to post semaphore");
×
473
    }
474
  }
475
  return code;
3,493✔
476
}
477

478
int32_t processAlterStbRsp(void* param, SDataBuf* pMsg, int32_t code) {
3,258✔
479
  SRequestObj* pRequest = param;
3,258✔
480
  if (code != TSDB_CODE_SUCCESS) {
3,258✔
481
    setErrno(pRequest, code);
160✔
482
  } else {
483
    SMAlterStbRsp alterRsp = {0};
3,098✔
484
    SDecoder      coder = {0};
3,098✔
485
    tDecoderInit(&coder, pMsg->pData, pMsg->len);
3,098✔
486
    if (pMsg->len > 0) {
3,098✔
487
      code = tDecodeSMAlterStbRsp(&coder, &alterRsp);  // pMsg->len == 0
3,080✔
488
      if (code != TSDB_CODE_SUCCESS) {
3,080!
489
        setErrno(pRequest, code);
×
490
      }
491
    }
492
    tDecoderClear(&coder);
3,098✔
493

494
    pRequest->body.resInfo.execRes.msgType = TDMT_MND_ALTER_STB;
3,098✔
495
    pRequest->body.resInfo.execRes.res = alterRsp.pMeta;
3,098✔
496
  }
497

498
  taosMemoryFree(pMsg->pData);
3,258!
499
  taosMemoryFree(pMsg->pEpSet);
3,258!
500

501
  if (pRequest->body.queryFp != NULL) {
3,258!
502
    SExecResult* pRes = &pRequest->body.resInfo.execRes;
3,258✔
503

504
    if (code == TSDB_CODE_SUCCESS) {
3,258✔
505
      SCatalog* pCatalog = NULL;
3,098✔
506
      int32_t   ret = catalogGetHandle(pRequest->pTscObj->pAppInfo->clusterId, &pCatalog);
3,098✔
507
      if (pRes->res != NULL) {
3,098✔
508
        ret = handleAlterTbExecRes(pRes->res, pCatalog);
3,080✔
509
      }
510

511
      if (ret != TSDB_CODE_SUCCESS) {
3,098!
512
        code = ret;
×
513
      }
514
    }
515

516
    doRequestCallback(pRequest, code);
3,258✔
517
  } else {
518
    if (tsem_post(&pRequest->body.rspSem) != 0) {
×
519
      tscError("failed to post semaphore");
×
520
    }
521
  }
522
  return code;
3,258✔
523
}
524

525
static int32_t buildShowVariablesBlock(SArray* pVars, SSDataBlock** block) {
126✔
526
  int32_t      code = 0;
126✔
527
  int32_t      line = 0;
126✔
528
  SSDataBlock* pBlock = taosMemoryCalloc(1, sizeof(SSDataBlock));
126!
529
  TSDB_CHECK_NULL(pBlock, code, line, END, terrno);
126!
530
  pBlock->info.hasVarCol = true;
126✔
531

532
  pBlock->pDataBlock = taosArrayInit(SHOW_VARIABLES_RESULT_COLS, sizeof(SColumnInfoData));
126✔
533
  TSDB_CHECK_NULL(pBlock->pDataBlock, code, line, END, terrno);
126!
534
  SColumnInfoData infoData = {0};
126✔
535
  infoData.info.type = TSDB_DATA_TYPE_VARCHAR;
126✔
536
  infoData.info.bytes = SHOW_VARIABLES_RESULT_FIELD1_LEN;
126✔
537
  TSDB_CHECK_NULL(taosArrayPush(pBlock->pDataBlock, &infoData), code, line, END, terrno);
252!
538

539
  infoData.info.type = TSDB_DATA_TYPE_VARCHAR;
126✔
540
  infoData.info.bytes = SHOW_VARIABLES_RESULT_FIELD2_LEN;
126✔
541
  TSDB_CHECK_NULL(taosArrayPush(pBlock->pDataBlock, &infoData), code, line, END, terrno);
252!
542

543
  infoData.info.type = TSDB_DATA_TYPE_VARCHAR;
126✔
544
  infoData.info.bytes = SHOW_VARIABLES_RESULT_FIELD3_LEN;
126✔
545
  TSDB_CHECK_NULL(taosArrayPush(pBlock->pDataBlock, &infoData), code, line, END, terrno);
252!
546

547
  infoData.info.type = TSDB_DATA_TYPE_VARCHAR;
126✔
548
  infoData.info.bytes = SHOW_VARIABLES_RESULT_FIELD4_LEN;
126✔
549
  TSDB_CHECK_NULL(taosArrayPush(pBlock->pDataBlock, &infoData), code, line, END, terrno);
252!
550

551
  infoData.info.type = TSDB_DATA_TYPE_VARCHAR;
126✔
552
  infoData.info.bytes = SHOW_VARIABLES_RESULT_FIELD5_LEN;
126✔
553
  TSDB_CHECK_NULL(taosArrayPush(pBlock->pDataBlock, &infoData), code, line, END, terrno);
252!
554

555
  int32_t numOfCfg = taosArrayGetSize(pVars);
126✔
556
  code = blockDataEnsureCapacity(pBlock, numOfCfg);
126✔
557
  TSDB_CHECK_CODE(code, line, END);
126!
558

559
  for (int32_t i = 0, c = 0; i < numOfCfg; ++i, c = 0) {
11,214✔
560
    SVariablesInfo* pInfo = taosArrayGet(pVars, i);
11,088✔
561
    TSDB_CHECK_NULL(pInfo, code, line, END, terrno);
11,088!
562

563
    char name[TSDB_CONFIG_OPTION_LEN + VARSTR_HEADER_SIZE] = {0};
11,088✔
564
    STR_WITH_MAXSIZE_TO_VARSTR(name, pInfo->name, TSDB_CONFIG_OPTION_LEN + VARSTR_HEADER_SIZE);
11,088✔
565
    SColumnInfoData* pColInfo = taosArrayGet(pBlock->pDataBlock, c++);
11,088✔
566
    TSDB_CHECK_NULL(pColInfo, code, line, END, terrno);
11,088!
567
    code = colDataSetVal(pColInfo, i, name, false);
11,088✔
568
    TSDB_CHECK_CODE(code, line, END);
11,088!
569

570
    char value[TSDB_CONFIG_VALUE_LEN + VARSTR_HEADER_SIZE] = {0};
11,088✔
571
    STR_WITH_MAXSIZE_TO_VARSTR(value, pInfo->value, TSDB_CONFIG_VALUE_LEN + VARSTR_HEADER_SIZE);
11,088✔
572
    pColInfo = taosArrayGet(pBlock->pDataBlock, c++);
11,088✔
573
    TSDB_CHECK_NULL(pColInfo, code, line, END, terrno);
11,088!
574
    code = colDataSetVal(pColInfo, i, value, false);
11,088✔
575
    TSDB_CHECK_CODE(code, line, END);
11,088!
576

577
    char scope[TSDB_CONFIG_SCOPE_LEN + VARSTR_HEADER_SIZE] = {0};
11,088✔
578
    STR_WITH_MAXSIZE_TO_VARSTR(scope, pInfo->scope, TSDB_CONFIG_SCOPE_LEN + VARSTR_HEADER_SIZE);
11,088✔
579
    pColInfo = taosArrayGet(pBlock->pDataBlock, c++);
11,088✔
580
    TSDB_CHECK_NULL(pColInfo, code, line, END, terrno);
11,088!
581
    code = colDataSetVal(pColInfo, i, scope, false);
11,088✔
582
    TSDB_CHECK_CODE(code, line, END);
11,088!
583

584
    char category[TSDB_CONFIG_CATEGORY_LEN + VARSTR_HEADER_SIZE] = {0};
11,088✔
585
    STR_WITH_MAXSIZE_TO_VARSTR(category, pInfo->category, TSDB_CONFIG_CATEGORY_LEN + VARSTR_HEADER_SIZE);
11,088✔
586
    pColInfo = taosArrayGet(pBlock->pDataBlock, c++);
11,088✔
587
    TSDB_CHECK_NULL(pColInfo, code, line, END, terrno);
11,088!
588
    code = colDataSetVal(pColInfo, i, category, false);
11,088✔
589
    TSDB_CHECK_CODE(code, line, END);
11,088!
590

591
    char info[TSDB_CONFIG_INFO_LEN + VARSTR_HEADER_SIZE] = {0};
11,088✔
592
    STR_WITH_MAXSIZE_TO_VARSTR(info, pInfo->info, TSDB_CONFIG_INFO_LEN + VARSTR_HEADER_SIZE);
11,088✔
593
    pColInfo = taosArrayGet(pBlock->pDataBlock, c++);
11,088✔
594
    TSDB_CHECK_NULL(pColInfo, code, line, END, terrno);
11,088!
595
    code = colDataSetVal(pColInfo, i, info, false);
11,088✔
596
    TSDB_CHECK_CODE(code, line, END);
11,088!
597
  }
598

599
  pBlock->info.rows = numOfCfg;
126✔
600

601
  *block = pBlock;
126✔
602
  return code;
126✔
603

604
END:
×
605
  taosArrayDestroy(pBlock->pDataBlock);
×
606
  taosMemoryFree(pBlock);
×
607
  return code;
×
608
}
609

610
static int32_t buildShowVariablesRsp(SArray* pVars, SRetrieveTableRsp** pRsp) {
126✔
611
  SSDataBlock* pBlock = NULL;
126✔
612
  int32_t      code = buildShowVariablesBlock(pVars, &pBlock);
126✔
613
  if (code) {
126!
614
    return code;
×
615
  }
616

617
  size_t dataEncodeBufSize = blockGetEncodeSize(pBlock);
126✔
618
  size_t rspSize = sizeof(SRetrieveTableRsp) + dataEncodeBufSize + PAYLOAD_PREFIX_LEN;
126✔
619
  *pRsp = taosMemoryCalloc(1, rspSize);
126!
620
  if (NULL == *pRsp) {
126!
621
    code = terrno;
×
622
    goto _exit;
×
623
  }
624

625
  (*pRsp)->useconds = 0;
126✔
626
  (*pRsp)->completed = 1;
126✔
627
  (*pRsp)->precision = 0;
126✔
628
  (*pRsp)->compressed = 0;
126✔
629

630
  (*pRsp)->numOfRows = htobe64((int64_t)pBlock->info.rows);
126✔
631
  (*pRsp)->numOfCols = htonl(SHOW_VARIABLES_RESULT_COLS);
126✔
632

633
  int32_t len = 0;
126✔
634
  if ((*pRsp)->numOfRows > 0) {
126!
635
    len = blockEncode(pBlock, (*pRsp)->data + PAYLOAD_PREFIX_LEN, dataEncodeBufSize, SHOW_VARIABLES_RESULT_COLS);
126✔
636
    if (len < 0) {
126!
637
      uError("buildShowVariablesRsp error, len:%d", len);
×
638
      code = terrno;
×
639
      goto _exit;
×
640
    }
641
    SET_PAYLOAD_LEN((*pRsp)->data, len, len);
126✔
642

643
    int32_t payloadLen = len + PAYLOAD_PREFIX_LEN;
126✔
644
    (*pRsp)->payloadLen = htonl(payloadLen);
126✔
645
    (*pRsp)->compLen = htonl(payloadLen);
126✔
646

647
    if (payloadLen != rspSize - sizeof(SRetrieveTableRsp)) {
126!
648
      uError("buildShowVariablesRsp error, len:%d != rspSize - sizeof(SRetrieveTableRsp):%" PRIu64, len,
×
649
             (uint64_t)(rspSize - sizeof(SRetrieveTableRsp)));
650
      code = TSDB_CODE_TSC_INVALID_INPUT;
×
651
      goto _exit;
×
652
    }
653
  }
654

655
  blockDataDestroy(pBlock);
126✔
656
  pBlock = NULL;
126✔
657

658
  return TSDB_CODE_SUCCESS;
126✔
659
_exit:
×
660
  if (*pRsp) {
×
661
    taosMemoryFree(*pRsp);
×
662
    *pRsp = NULL;
×
663
  }
664
  if (pBlock) {
×
665
    blockDataDestroy(pBlock);
×
666
    pBlock = NULL;
×
667
  }
668
  return code;
×
669
}
670

671
int32_t processShowVariablesRsp(void* param, SDataBuf* pMsg, int32_t code) {
126✔
672
  SRequestObj* pRequest = param;
126✔
673
  if (code != TSDB_CODE_SUCCESS) {
126!
674
    setErrno(pRequest, code);
×
675
  } else {
676
    SShowVariablesRsp  rsp = {0};
126✔
677
    SRetrieveTableRsp* pRes = NULL;
126✔
678
    code = tDeserializeSShowVariablesRsp(pMsg->pData, pMsg->len, &rsp);
126✔
679
    if (TSDB_CODE_SUCCESS == code) {
126!
680
      code = buildShowVariablesRsp(rsp.variables, &pRes);
126✔
681
    }
682
    if (TSDB_CODE_SUCCESS == code) {
126!
683
      code = setQueryResultFromRsp(&pRequest->body.resInfo, pRes, false);
126✔
684
    }
685

686
    if (code != 0) {
126!
687
      taosMemoryFree(pRes);
×
688
    }
689
    tFreeSShowVariablesRsp(&rsp);
126✔
690
  }
691

692
  taosMemoryFree(pMsg->pData);
126!
693
  taosMemoryFree(pMsg->pEpSet);
126!
694

695
  if (pRequest->body.queryFp != NULL) {
126!
696
    doRequestCallback(pRequest, code);
126✔
697
  } else {
698
    if (tsem_post(&pRequest->body.rspSem) != 0) {
×
699
      tscError("failed to post semaphore");
×
700
    }
701
  }
702
  return code;
126✔
703
}
704

705
static int32_t buildCompactDbBlock(SCompactDbRsp* pRsp, SSDataBlock** block) {
10✔
706
  int32_t      code = 0;
10✔
707
  int32_t      line = 0;
10✔
708
  SSDataBlock* pBlock = taosMemoryCalloc(1, sizeof(SSDataBlock));
10!
709
  TSDB_CHECK_NULL(pBlock, code, line, END, terrno);
10!
710
  pBlock->info.hasVarCol = true;
10✔
711

712
  pBlock->pDataBlock = taosArrayInit(COMPACT_DB_RESULT_COLS, sizeof(SColumnInfoData));
10✔
713
  TSDB_CHECK_NULL(pBlock->pDataBlock, code, line, END, terrno);
10!
714
  SColumnInfoData infoData = {0};
10✔
715
  infoData.info.type = TSDB_DATA_TYPE_VARCHAR;
10✔
716
  infoData.info.bytes = COMPACT_DB_RESULT_FIELD1_LEN;
10✔
717
  TSDB_CHECK_NULL(taosArrayPush(pBlock->pDataBlock, &infoData), code, line, END, terrno);
20!
718

719
  infoData.info.type = TSDB_DATA_TYPE_INT;
10✔
720
  infoData.info.bytes = tDataTypes[TSDB_DATA_TYPE_INT].bytes;
10✔
721
  TSDB_CHECK_NULL(taosArrayPush(pBlock->pDataBlock, &infoData), code, line, END, terrno);
20!
722

723
  infoData.info.type = TSDB_DATA_TYPE_VARCHAR;
10✔
724
  infoData.info.bytes = COMPACT_DB_RESULT_FIELD3_LEN;
10✔
725
  TSDB_CHECK_NULL(taosArrayPush(pBlock->pDataBlock, &infoData), code, line, END, terrno);
20!
726

727
  code = blockDataEnsureCapacity(pBlock, 1);
10✔
728
  TSDB_CHECK_CODE(code, line, END);
10!
729

730
  SColumnInfoData* pResultCol = taosArrayGet(pBlock->pDataBlock, 0);
10✔
731
  TSDB_CHECK_NULL(pResultCol, code, line, END, terrno);
10!
732
  SColumnInfoData* pIdCol = taosArrayGet(pBlock->pDataBlock, 1);
10✔
733
  TSDB_CHECK_NULL(pIdCol, code, line, END, terrno);
10!
734
  SColumnInfoData* pReasonCol = taosArrayGet(pBlock->pDataBlock, 2);
10✔
735
  TSDB_CHECK_NULL(pReasonCol, code, line, END, terrno);
10!
736

737
  char result[COMPACT_DB_RESULT_FIELD1_LEN] = {0};
10✔
738
  char reason[COMPACT_DB_RESULT_FIELD3_LEN] = {0};
10✔
739
  if (pRsp->bAccepted) {
10!
740
    STR_TO_VARSTR(result, "accepted");
10✔
741
    code = colDataSetVal(pResultCol, 0, result, false);
10✔
742
    TSDB_CHECK_CODE(code, line, END);
10!
743
    code = colDataSetVal(pIdCol, 0, (void*)&pRsp->compactId, false);
10✔
744
    TSDB_CHECK_CODE(code, line, END);
10!
745
    STR_TO_VARSTR(reason, "success");
10✔
746
    code = colDataSetVal(pReasonCol, 0, reason, false);
10✔
747
    TSDB_CHECK_CODE(code, line, END);
10!
748
  } else {
749
    STR_TO_VARSTR(result, "rejected");
×
750
    code = colDataSetVal(pResultCol, 0, result, false);
×
751
    TSDB_CHECK_CODE(code, line, END);
×
752
    colDataSetNULL(pIdCol, 0);
753
    STR_TO_VARSTR(reason, "compaction is ongoing");
×
754
    code = colDataSetVal(pReasonCol, 0, reason, false);
×
755
    TSDB_CHECK_CODE(code, line, END);
×
756
  }
757
  pBlock->info.rows = 1;
10✔
758

759
  *block = pBlock;
10✔
760

761
  return TSDB_CODE_SUCCESS;
10✔
762
END:
×
763
  taosMemoryFree(pBlock);
×
764
  taosArrayDestroy(pBlock->pDataBlock);
×
765
  return code;
×
766
}
767

768
static int32_t buildRetriveTableRspForCompactDb(SCompactDbRsp* pCompactDb, SRetrieveTableRsp** pRsp) {
10✔
769
  SSDataBlock* pBlock = NULL;
10✔
770
  int32_t      code = buildCompactDbBlock(pCompactDb, &pBlock);
10✔
771
  if (code) {
10!
772
    return code;
×
773
  }
774

775
  size_t dataEncodeBufSize = blockGetEncodeSize(pBlock);
10✔
776
  size_t rspSize = sizeof(SRetrieveTableRsp) + dataEncodeBufSize + PAYLOAD_PREFIX_LEN;
10✔
777
  *pRsp = taosMemoryCalloc(1, rspSize);
10!
778
  if (NULL == *pRsp) {
10!
779
    code = terrno;
×
780
    goto _exit;
×
781
  }
782

783
  (*pRsp)->useconds = 0;
10✔
784
  (*pRsp)->completed = 1;
10✔
785
  (*pRsp)->precision = 0;
10✔
786
  (*pRsp)->compressed = 0;
10✔
787
  (*pRsp)->compLen = 0;
10✔
788
  (*pRsp)->payloadLen = 0;
10✔
789
  (*pRsp)->numOfRows = htobe64((int64_t)pBlock->info.rows);
10✔
790
  (*pRsp)->numOfCols = htonl(COMPACT_DB_RESULT_COLS);
10✔
791

792
  int32_t len = blockEncode(pBlock, (*pRsp)->data + PAYLOAD_PREFIX_LEN, dataEncodeBufSize, COMPACT_DB_RESULT_COLS);
10✔
793
  if (len < 0) {
10!
794
    uError("buildRetriveTableRspForCompactDb error, len:%d", len);
×
795
    code = terrno;
×
796
    goto _exit;
×
797
  }
798
  blockDataDestroy(pBlock);
10✔
799

800
  SET_PAYLOAD_LEN((*pRsp)->data, len, len);
10✔
801

802
  int32_t payloadLen = len + PAYLOAD_PREFIX_LEN;
10✔
803
  (*pRsp)->payloadLen = htonl(payloadLen);
10✔
804
  (*pRsp)->compLen = htonl(payloadLen);
10✔
805

806
  if (payloadLen != rspSize - sizeof(SRetrieveTableRsp)) {
10!
807
    uError("buildRetriveTableRspForCompactDb error, len:%d != rspSize - sizeof(SRetrieveTableRsp):%" PRIu64, len,
×
808
           (uint64_t)(rspSize - sizeof(SRetrieveTableRsp)));
809
    code = TSDB_CODE_TSC_INVALID_INPUT;
×
810
    goto _exit;
×
811
  }
812

813
  return TSDB_CODE_SUCCESS;
10✔
814
_exit:
×
815
  if (*pRsp) {
×
816
    taosMemoryFree(*pRsp);
×
817
    *pRsp = NULL;
×
818
  }
819
  if (pBlock) {
×
820
    blockDataDestroy(pBlock);
×
821
    pBlock = NULL;
×
822
  }
823
  return code;
×
824
}
825

826
int32_t processCompactDbRsp(void* param, SDataBuf* pMsg, int32_t code) {
14✔
827
  SRequestObj* pRequest = param;
14✔
828
  if (code != TSDB_CODE_SUCCESS) {
14✔
829
    setErrno(pRequest, code);
4✔
830
  } else {
831
    SCompactDbRsp      rsp = {0};
10✔
832
    SRetrieveTableRsp* pRes = NULL;
10✔
833
    code = tDeserializeSCompactDbRsp(pMsg->pData, pMsg->len, &rsp);
10✔
834
    if (TSDB_CODE_SUCCESS == code) {
10!
835
      code = buildRetriveTableRspForCompactDb(&rsp, &pRes);
10✔
836
    }
837
    if (TSDB_CODE_SUCCESS == code) {
10!
838
      code = setQueryResultFromRsp(&pRequest->body.resInfo, pRes, false);
10✔
839
    }
840

841
    if (code != 0) {
10!
842
      taosMemoryFree(pRes);
×
843
    }
844
  }
845

846
  taosMemoryFree(pMsg->pData);
14!
847
  taosMemoryFree(pMsg->pEpSet);
14!
848

849
  if (pRequest->body.queryFp != NULL) {
14!
850
    pRequest->body.queryFp(((SSyncQueryParam*)pRequest->body.interParam)->userParam, pRequest, code);
14✔
851
  } else {
852
    if (tsem_post(&pRequest->body.rspSem) != 0) {
×
853
      tscError("failed to post semaphore");
×
854
    }
855
  }
856
  return code;
14✔
857
}
858

859
__async_send_cb_fn_t getMsgRspHandle(int32_t msgType) {
47,060✔
860
  switch (msgType) {
47,060✔
861
    case TDMT_MND_CONNECT:
14,530✔
862
      return processConnectRsp;
14,530✔
863
    case TDMT_MND_CREATE_DB:
4,889✔
864
      return processCreateDbRsp;
4,889✔
865
    case TDMT_MND_USE_DB:
7,421✔
866
      return processUseDbRsp;
7,421✔
867
    case TDMT_MND_CREATE_STB:
5,834✔
868
      return processCreateSTableRsp;
5,834✔
869
    case TDMT_MND_DROP_DB:
3,493✔
870
      return processDropDbRsp;
3,493✔
871
    case TDMT_MND_ALTER_STB:
3,258✔
872
      return processAlterStbRsp;
3,258✔
873
    case TDMT_MND_SHOW_VARIABLES:
126✔
874
      return processShowVariablesRsp;
126✔
875
    case TDMT_MND_COMPACT_DB:
14✔
876
      return processCompactDbRsp;
14✔
877
    default:
7,495✔
878
      return genericRspCallback;
7,495✔
879
  }
880
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc