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

taosdata / TDengine / #3660

15 Mar 2025 09:06AM UTC coverage: 62.039% (-1.3%) from 63.314%
#3660

push

travis-ci

web-flow
feat(stream): support stream processing for virtual tables (#30144)

* enh: add client processing

* enh: add mnode vtables processing

* enh: add mnode vtable processing

* enh: add normal child vtable support

* fix: compile issues

* fix: compile issues

* fix: create stream issues

* fix: multi stream scan issue

* fix: remove debug info

* fix: agg task and task level issues

* fix: correct task output type

* fix: split vtablescan from agg

* fix: memory leak issues

* fix: add limitations

* Update 09-error-code.md

* Update 09-error-code.md

* fix: remove usless case

* feat(stream): extract original table data in source scan task

Implemented functionality in the source task to extract data
corresponding to the virtual table from the original table using WAL.
The extracted data is then sent to the downstream merge task for further
processing.

* feat(stream): multi-way merge using loser tree in virtual merge task

Implemented multi-way merge in the merge task using a loser tree to
combine data from multiple original table into a single virtual table.
The merged virtual table data is then pushed downstream for further
processing.  Introduced memory limit handling during the merge process
with configurable behavior when the memory limit is reached.

* fix(test): remove useless cases

---------

Co-authored-by: dapan1121 <wpan@taosdata.com>
Co-authored-by: Pan Wei <72057773+dapan1121@users.noreply.github.com>

154078 of 317582 branches covered (48.52%)

Branch coverage included in aggregate %.

313 of 2391 new or added lines in 34 files covered. (13.09%)

26134 existing lines in 205 files now uncovered.

240261 of 318051 relevant lines covered (75.54%)

16655189.27 hits per line

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

18.93
/source/dnode/mnode/impl/src/mndDump.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
#define _DEFAULT_SOURCE
17
#include "mndDb.h"
18
#include "mndInt.h"
19
#include "mndShow.h"
20
#include "mndStb.h"
21
#include "sdb.h"
22
#include "tconfig.h"
23
#include "tjson.h"
24
#include "ttypes.h"
25

26
#pragma GCC diagnostic push
27
#pragma GCC diagnostic ignored "-Wunused-result"
28

29
void reportStartup(const char *name, const char *desc) {}
36✔
30
void sendRsp(SRpcMsg *pMsg) { rpcFreeCont(pMsg->pCont); }
×
31

32
int32_t sendReq(const SEpSet *pEpSet, SRpcMsg *pMsg) {
×
33
  int32_t code = 0;
×
34
  code = TSDB_CODE_INVALID_PTR;
×
35
  TAOS_RETURN(code);
×
36
}
37
int32_t sendSyncReq(const SEpSet *pEpSet, SRpcMsg *pMsg) {
×
38
  int32_t code = 0;
×
39
  code = TSDB_CODE_INVALID_PTR;
×
40
  TAOS_RETURN(code);
×
41
}
42

43
char *i642str(int64_t val) {
83✔
44
  static threadlocal char str[24] = {0};
45
  (void)snprintf(str, sizeof(str), "%" PRId64, val);
83✔
46
  return str;
83✔
47
}
48

49
void dumpFunc(SSdb *pSdb, SJson *json) {
1✔
50
  int32_t code = 0;
1✔
51
  int32_t lino = 0;
1✔
52
  void   *pIter = NULL;
1✔
53
  SJson *items = tjsonAddArrayToObject(json, "funcs");
1✔
54

55
  while (1) {
×
56
    SFuncObj *pObj = NULL;
1✔
57
    pIter = sdbFetch(pSdb, SDB_FUNC, pIter, (void **)&pObj);
1✔
58
    if (pIter == NULL) break;
1!
59

60
    SJson *item = tjsonCreateObject();
×
61
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
×
62
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "name", pObj->name), pObj, &lino, _OVER);
×
63
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)), pObj, &lino, _OVER);
×
64
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "funcType", i642str(pObj->funcType)), pObj, &lino, _OVER);
×
65
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "scriptType", i642str(pObj->scriptType)), pObj, &lino, _OVER);
×
66
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "align", i642str(pObj->align)), pObj, &lino, _OVER);
×
67
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "outputType", i642str(pObj->outputType)), pObj, &lino, _OVER);
×
68
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "outputLen", i642str(pObj->outputLen)), pObj, &lino, _OVER);
×
69
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "bufSize", i642str(pObj->bufSize)), pObj, &lino, _OVER);
×
70
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "signature", i642str(pObj->signature)), pObj, &lino, _OVER);
×
71
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "commentSize", i642str(pObj->commentSize)), pObj, &lino, _OVER);
×
72
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "codeSize", i642str(pObj->codeSize)), pObj, &lino, _OVER);
×
73
    sdbRelease(pSdb, pObj);
×
74
  }
75
_OVER:
1✔
76
  if (code != 0) mError("failed to dump func info at line:%d since %s", lino, tstrerror(code));
1!
77
}
1✔
78

79
void dumpDb(SSdb *pSdb, SJson *json) {
1✔
80
  int32_t code = 0;
1✔
81
  int32_t lino = 0;
1✔
82
  void  *pIter = NULL;
1✔
83
  SJson *items = tjsonCreateObject();
1✔
84
  TAOS_CHECK_GOTO(tjsonAddItemToObject(json, "dbs", items), &lino, _OVER);
1!
85

86
  while (1) {
×
87
    SDbObj *pObj = NULL;
1✔
88
    pIter = sdbFetch(pSdb, SDB_DB, pIter, (void **)&pObj);
1✔
89
    if (pIter == NULL) break;
1!
90

91
    SJson *item = tjsonCreateObject();
×
92
    RETRIEVE_CHECK_GOTO(tjsonAddItemToObject(items, "db", item), pObj, &lino, _OVER);
×
93

94
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "name", mndGetDbStr(pObj->name)), pObj, &lino, _OVER);
×
95
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "acct", pObj->acct), pObj, &lino, _OVER);
×
96
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createUser", pObj->createUser), pObj, &lino, _OVER);
×
97
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)), pObj, &lino, _OVER);
×
98
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)), pObj, &lino, _OVER);
×
99
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "uid", i642str(pObj->uid)), pObj, &lino, _OVER);
×
100
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "cfgVersion", i642str(pObj->cfgVersion)), pObj, &lino, _OVER);
×
101
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "vgVersion", i642str(pObj->vgVersion)), pObj, &lino, _OVER);
×
102
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "numOfVgroups", i642str(pObj->cfg.numOfVgroups)), pObj, &lino,
×
103
                        _OVER);
104
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "numOfStables", i642str(pObj->cfg.numOfStables)), pObj, &lino,
×
105
                        _OVER);
106
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "buffer", i642str(pObj->cfg.buffer)), pObj, &lino, _OVER);
×
107
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "pageSize", i642str(pObj->cfg.pageSize)), pObj, &lino, _OVER);
×
108
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "pages", i642str(pObj->cfg.pages)), pObj, &lino, _OVER);
×
109
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "cacheLastSize", i642str(pObj->cfg.cacheLastSize)), pObj, &lino,
×
110
                        _OVER);
111
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "daysPerFile", i642str(pObj->cfg.daysPerFile)), pObj, &lino,
×
112
                        _OVER);
113
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "daysToKeep0", i642str(pObj->cfg.daysToKeep0)), pObj, &lino,
×
114
                        _OVER);
115
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "daysToKeep1", i642str(pObj->cfg.daysToKeep1)), pObj, &lino,
×
116
                        _OVER);
117
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "daysToKeep2", i642str(pObj->cfg.daysToKeep2)), pObj, &lino,
×
118
                        _OVER);
119
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "minRows", i642str(pObj->cfg.minRows)), pObj, &lino, _OVER);
×
120
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "maxRows", i642str(pObj->cfg.maxRows)), pObj, &lino, _OVER);
×
121
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "precision", i642str(pObj->cfg.precision)), pObj, &lino, _OVER);
×
122
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "compression", i642str(pObj->cfg.compression)), pObj, &lino,
×
123
                        _OVER);
124
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "encryptAlgorithm", i642str(pObj->cfg.encryptAlgorithm)), pObj,
×
125
                        &lino, _OVER);
126
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "replications", i642str(pObj->cfg.replications)), pObj, &lino,
×
127
                        _OVER);
128
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "strict", i642str(pObj->cfg.strict)), pObj, &lino, _OVER);
×
129
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "cacheLast", i642str(pObj->cfg.cacheLast)), pObj, &lino, _OVER);
×
130
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "hashMethod", i642str(pObj->cfg.hashMethod)), pObj, &lino, _OVER);
×
131
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "hashPrefix", i642str(pObj->cfg.hashPrefix)), pObj, &lino, _OVER);
×
132
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "hashSuffix", i642str(pObj->cfg.hashSuffix)), pObj, &lino, _OVER);
×
133
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "sstTrigger", i642str(pObj->cfg.sstTrigger)), pObj, &lino, _OVER);
×
134
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "tsdbPageSize", i642str(pObj->cfg.tsdbPageSize)), pObj, &lino,
×
135
                        _OVER);
136
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "schemaless", i642str(pObj->cfg.schemaless)), pObj, &lino, _OVER);
×
137
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "walLevel", i642str(pObj->cfg.walLevel)), pObj, &lino, _OVER);
×
138
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "walFsyncPeriod", i642str(pObj->cfg.walFsyncPeriod)), pObj, &lino,
×
139
                        _OVER);
140
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "walRetentionPeriod", i642str(pObj->cfg.walRetentionPeriod)), pObj,
×
141
                        &lino, _OVER);
142
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "walRetentionSize", i642str(pObj->cfg.walRetentionSize)), pObj,
×
143
                        &lino, _OVER);
144
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "walRollPeriod", i642str(pObj->cfg.walRollPeriod)), pObj, &lino,
×
145
                        _OVER);
146
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "walSegmentSize", i642str(pObj->cfg.walSegmentSize)), pObj, &lino,
×
147
                        _OVER);
148

149
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "numOfRetensions", i642str(pObj->cfg.numOfRetensions)), pObj,
×
150
                        &lino, _OVER);
151
    for (int32_t i = 0; i < pObj->cfg.numOfRetensions; ++i) {
×
152
      SJson *rentensions = tjsonAddArrayToObject(item, "rentensions");
×
153
      SJson *rentension = tjsonCreateObject();
×
154
      RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(rentensions, rentension), pObj, &lino, _OVER);
×
155

156
      SRetention *pRetension = taosArrayGet(pObj->cfg.pRetensions, i);
×
157
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "freq", i642str(pRetension->freq)), pObj, &lino, _OVER);
×
158
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "freqUnit", i642str(pRetension->freqUnit)), pObj, &lino, _OVER);
×
159
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "keep", i642str(pRetension->keep)), pObj, &lino, _OVER);
×
160
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "keepUnit", i642str(pRetension->keepUnit)), pObj, &lino, _OVER);
×
161
    }
162

163
    sdbRelease(pSdb, pObj);
×
164
  }
165
_OVER:
1✔
166
  if (code != 0) mError("failed to dump db info at line:%d since %s", lino, tstrerror(code));
1!
167
}
1✔
168

169
void dumpStb(SSdb *pSdb, SJson *json) {
1✔
170
  int32_t code = 0;
1✔
171
  int32_t lino = 0;
1✔
172
  void  *pIter = NULL;
1✔
173
  SJson *items = tjsonAddArrayToObject(json, "stbs");
1✔
174

175
  while (1) {
×
176
    SStbObj *pObj = NULL;
1✔
177
    pIter = sdbFetch(pSdb, SDB_STB, pIter, (void **)&pObj);
1✔
178
    if (pIter == NULL) break;
1!
179

180
    SJson *item = tjsonCreateObject();
×
181
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
×
182
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "name", mndGetStbStr(pObj->name)), pObj, &lino, _OVER);
×
183
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "db", mndGetDbStr(pObj->db)), pObj, &lino, _OVER);
×
184
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)), pObj, &lino, _OVER);
×
185
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)), pObj, &lino, _OVER);
×
186
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "uid", i642str(pObj->uid)), pObj, &lino, _OVER);
×
187
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "dbUid", i642str(pObj->dbUid)), pObj, &lino, _OVER);
×
188
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "tagVer", i642str(pObj->tagVer)), pObj, &lino, _OVER);
×
189
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "colVer", i642str(pObj->colVer)), pObj, &lino, _OVER);
×
190
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "smaVer", i642str(pObj->smaVer)), pObj, &lino, _OVER);
×
191
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "nextColId", i642str(pObj->nextColId)), pObj, &lino, _OVER);
×
192
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "watermark1", i642str(pObj->watermark[0])), pObj, &lino, _OVER);
×
193
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "watermark2", i642str(pObj->watermark[1])), pObj, &lino, _OVER);
×
194
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "maxdelay0", i642str(pObj->maxdelay[0])), pObj, &lino, _OVER);
×
195
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "maxdelay1", i642str(pObj->maxdelay[1])), pObj, &lino, _OVER);
×
196
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "ttl", i642str(pObj->ttl)), pObj, &lino, _OVER);
×
197
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "numOfFuncs", i642str(pObj->numOfFuncs)), pObj, &lino, _OVER);
×
198
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "commentLen", i642str(pObj->commentLen)), pObj, &lino, _OVER);
×
199
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "ast1Len", i642str(pObj->ast1Len)), pObj, &lino, _OVER);
×
200
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "ast2Len", i642str(pObj->ast2Len)), pObj, &lino, _OVER);
×
UNCOV
201
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "virtual", i642str(pObj->virtualStb)), pObj, &lino, _OVER);
×
202

203
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "numOfColumns", i642str(pObj->numOfColumns)), pObj, &lino, _OVER);
×
204
    SJson *columns = tjsonAddArrayToObject(item, "columns");
×
205
    for (int32_t i = 0; i < pObj->numOfColumns; ++i) {
×
206
      SJson *column = tjsonCreateObject();
×
UNCOV
207
      RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(columns, column), pObj, &lino, _OVER);
×
208

209
      SSchema *pColumn = &pObj->pColumns[i];
×
210
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(column, "type", i642str(pColumn->type)), pObj, &lino, _OVER);
×
UNCOV
211
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(column, "typestr", tDataTypes[pColumn->type].name), pObj, &lino,
×
212
                          _OVER);
213
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(column, "flags", i642str(pColumn->flags)), pObj, &lino, _OVER);
×
214
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(column, "colId", i642str(pColumn->colId)), pObj, &lino, _OVER);
×
215
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(column, "bytes", i642str(pColumn->bytes)), pObj, &lino, _OVER);
×
UNCOV
216
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(column, "name", pColumn->name), pObj, &lino, _OVER);
×
217
    }
218

219
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "numOfTags", i642str(pObj->numOfTags)), pObj, &lino, _OVER);
×
220
    SJson *tags = tjsonAddArrayToObject(item, "tags");
×
221
    for (int32_t i = 0; i < pObj->numOfTags; ++i) {
×
222
      SJson *tag = tjsonCreateObject();
×
UNCOV
223
      RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(tags, tag), pObj, &lino, _OVER);
×
224

225
      SSchema *pTag = &pObj->pTags[i];
×
226
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(tag, "type", i642str(pTag->type)), pObj, &lino, _OVER);
×
227
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(tag, "typestr", tDataTypes[pTag->type].name), pObj, &lino, _OVER);
×
228
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(tag, "flags", i642str(pTag->flags)), pObj, &lino, _OVER);
×
229
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(tag, "colId", i642str(pTag->colId)), pObj, &lino, _OVER);
×
230
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(tag, "bytes", i642str(pTag->bytes)), pObj, &lino, _OVER);
×
UNCOV
231
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(tag, "name", pTag->name), pObj, &lino, _OVER);
×
232
    }
233

UNCOV
234
    sdbRelease(pSdb, pObj);
×
235
  }
236
_OVER:
1✔
237
  if (code != 0) mError("failed to dump stable info at line:%d since %s", lino, tstrerror(code));
1!
238
}
1✔
239

240
void dumpSma(SSdb *pSdb, SJson *json) {
1✔
241
  int32_t code = 0;
1✔
242
  int32_t lino = 0;
1✔
243
  void  *pIter = NULL;
1✔
244
  SJson *items = tjsonAddArrayToObject(json, "smas");
1✔
245

UNCOV
246
  while (1) {
×
247
    SSmaObj *pObj = NULL;
1✔
248
    pIter = sdbFetch(pSdb, SDB_SMA, pIter, (void **)&pObj);
1✔
249
    if (pIter == NULL) break;
1!
250

251
    SJson *item = tjsonCreateObject();
×
252
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
×
253
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "name", mndGetStbStr(pObj->name)), pObj, &lino, _OVER);
×
254
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "stb", mndGetStbStr(pObj->stb)), pObj, &lino, _OVER);
×
255
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "db", mndGetDbStr(pObj->db)), pObj, &lino, _OVER);
×
256
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "dstTbName", mndGetStbStr(pObj->dstTbName)), pObj, &lino, _OVER);
×
257
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)), pObj, &lino, _OVER);
×
258
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "uid", i642str(pObj->uid)), pObj, &lino, _OVER);
×
259
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "stbUid", i642str(pObj->stbUid)), pObj, &lino, _OVER);
×
260
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "dbUid", i642str(pObj->dbUid)), pObj, &lino, _OVER);
×
261
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "dstTbUid", i642str(pObj->dstTbUid)), pObj, &lino, _OVER);
×
262
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "intervalUnit", i642str(pObj->intervalUnit)), pObj, &lino, _OVER);
×
263
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "slidingUnit", i642str(pObj->slidingUnit)), pObj, &lino, _OVER);
×
264
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "timezone", i642str(pObj->timezone)), pObj, &lino, _OVER);
×
265
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "dstVgId", i642str(pObj->dstVgId)), pObj, &lino, _OVER);
×
266
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "interval", i642str(pObj->interval)), pObj, &lino, _OVER);
×
267
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "offset", i642str(pObj->offset)), pObj, &lino, _OVER);
×
268
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "sliding", i642str(pObj->sliding)), pObj, &lino, _OVER);
×
269
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "exprLen", i642str(pObj->exprLen)), pObj, &lino, _OVER);
×
UNCOV
270
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "tagsFilterLen", i642str(pObj->tagsFilterLen)), pObj, &lino,
×
271
                        _OVER);
272
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "sqlLen", i642str(pObj->sqlLen)), pObj, &lino, _OVER);
×
273
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "astLen", i642str(pObj->astLen)), pObj, &lino, _OVER);
×
UNCOV
274
    sdbRelease(pSdb, pObj);
×
275
  }
276
_OVER:
1✔
277
  if (code != 0) mError("failed to dump sma info at line:%d since %s", lino, tstrerror(code));
1!
278
}
1✔
279

280
void dumpVgroup(SSdb *pSdb, SJson *json) {
1✔
281
  int32_t code = 0;
1✔
282
  int32_t lino = 0;
1✔
283
  void  *pIter = NULL;
1✔
284
  SJson *items = tjsonAddArrayToObject(json, "vgroups");
1✔
285

UNCOV
286
  while (1) {
×
287
    SVgObj *pObj = NULL;
1✔
288
    pIter = sdbFetch(pSdb, SDB_VGROUP, pIter, (void **)&pObj);
1✔
289
    if (pIter == NULL) break;
1!
290

291
    SJson *item = tjsonCreateObject();
×
292
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
×
293
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "vgId", i642str(pObj->vgId)), pObj, &lino, _OVER);
×
294
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)), pObj, &lino, _OVER);
×
295
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)), pObj, &lino, _OVER);
×
296
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "version", i642str(pObj->version)), pObj, &lino, _OVER);
×
297
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "hashBegin", i642str(pObj->hashBegin)), pObj, &lino, _OVER);
×
298
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "hashEnd", i642str(pObj->hashEnd)), pObj, &lino, _OVER);
×
299
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "db", mndGetDbStr(pObj->dbName)), pObj, &lino, _OVER);
×
300
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "dbUid", i642str(pObj->dbUid)), pObj, &lino, _OVER);
×
301
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "isTsma", i642str(pObj->isTsma)), pObj, &lino, _OVER);
×
302
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "replica", i642str(pObj->replica)), pObj, &lino, _OVER);
×
303
    for (int32_t i = 0; i < pObj->replica; ++i) {
×
304
      SJson *replicas = tjsonAddArrayToObject(item, "replicas");
×
305
      SJson *replica = tjsonCreateObject();
×
306
      RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(replicas, replica), pObj, &lino, _OVER);
×
UNCOV
307
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(replica, "dnodeId", i642str(pObj->vnodeGid[i].dnodeId)), pObj, &lino,
×
308
                          _OVER);
309
    }
UNCOV
310
    sdbRelease(pSdb, pObj);
×
311
  }
312
_OVER:
1✔
313
  if (code != 0) mError("failed to dump vgroup info at line:%d since %s", lino, tstrerror(code));
1!
314
}
1✔
315

316
void dumpTopic(SSdb *pSdb, SJson *json) {
1✔
317
  int32_t code = 0;
1✔
318
  int32_t lino = 0;
1✔
319
  void  *pIter = NULL;
1✔
320
  SJson *items = tjsonAddArrayToObject(json, "topics");
1✔
321

UNCOV
322
  while (1) {
×
323
    SMqTopicObj *pObj = NULL;
1✔
324
    pIter = sdbFetch(pSdb, SDB_TOPIC, pIter, (void **)&pObj);
1✔
325
    if (pIter == NULL) break;
1!
326

327
    SJson *item = tjsonCreateObject();
×
328
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
×
329
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "name", mndGetDbStr(pObj->name)), pObj, &lino, _OVER);
×
330
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "name", mndGetDbStr(pObj->db)), pObj, &lino, _OVER);
×
331
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createTime", i642str(pObj->createTime)), pObj, &lino, _OVER);
×
332
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)), pObj, &lino, _OVER);
×
333
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "uid", i642str(pObj->uid)), pObj, &lino, _OVER);
×
334
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "dbUid", i642str(pObj->dbUid)), pObj, &lino, _OVER);
×
335
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "version", i642str(pObj->version)), pObj, &lino, _OVER);
×
336
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "subType", i642str(pObj->subType)), pObj, &lino, _OVER);
×
337
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "withMeta", i642str(pObj->withMeta)), pObj, &lino, _OVER);
×
338
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "stbUid", i642str(pObj->stbUid)), pObj, &lino, _OVER);
×
339
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "stbName", mndGetStableStr(pObj->stbName)), pObj, &lino, _OVER);
×
340
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "sqlLen", i642str(pObj->sqlLen)), pObj, &lino, _OVER);
×
341
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "astLen", i642str(pObj->astLen)), pObj, &lino, _OVER);
×
342
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "sqlLen", i642str(pObj->sqlLen)), pObj, &lino, _OVER);
×
343
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "ntbUid", i642str(pObj->ntbUid)), pObj, &lino, _OVER);
×
344
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "ctbStbUid", i642str(pObj->ctbStbUid)), pObj, &lino, _OVER);
×
UNCOV
345
    sdbRelease(pSdb, pObj);
×
346
  }
347
_OVER:
1✔
348
  if (code != 0) mError("failed to dump topic info at line:%d since %s", lino, tstrerror(code));
1!
349
}
1✔
350

351
void dumpConsumer(SSdb *pSdb, SJson *json) {
1✔
352
  int32_t code = 0;
1✔
353
  int32_t lino = 0;
1✔
354
  void  *pIter = NULL;
1✔
355
  SJson *items = tjsonAddArrayToObject(json, "consumers");
1✔
356

UNCOV
357
  while (1) {
×
358
    SMqConsumerObj *pObj = NULL;
1✔
359
    pIter = sdbFetch(pSdb, SDB_CONSUMER, pIter, (void **)&pObj);
1✔
360
    if (pIter == NULL) break;
1!
361

362
    SJson *item = tjsonCreateObject();
×
363
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
×
364
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "consumerId", i642str(pObj->consumerId)), pObj, &lino, _OVER);
×
365
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "cgroup", pObj->cgroup), pObj, &lino, _OVER);
×
UNCOV
366
    sdbRelease(pSdb, pObj);
×
367
  }
368
_OVER:
1✔
369
  if (code != 0) mError("failed to dump consumer info at line:%d since %s", lino, tstrerror(code));
1!
370
}
1✔
371

372
void dumpSubscribe(SSdb *pSdb, SJson *json) {
1✔
373
  int32_t code = 0;
1✔
374
  int32_t lino = 0;
1✔
375
  void  *pIter = NULL;
1✔
376
  SJson *items = tjsonAddArrayToObject(json, "subscribes");
1✔
377

UNCOV
378
  while (1) {
×
379
    SMqSubscribeObj *pObj = NULL;
1✔
380
    pIter = sdbFetch(pSdb, SDB_SUBSCRIBE, pIter, (void **)&pObj);
1✔
381
    if (pIter == NULL) break;
1!
382

383
    SJson *item = tjsonCreateObject();
×
384
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
×
385
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "key", pObj->key), pObj, &lino, _OVER);
×
386
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "dbUid", i642str(pObj->dbUid)), pObj, &lino, _OVER);
×
387
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "stbUid", i642str(pObj->stbUid)), pObj, &lino, _OVER);
×
UNCOV
388
    sdbRelease(pSdb, pObj);
×
389
  }
390
_OVER:
1✔
391
  if (code != 0) mError("failed to dump subscribe info at line:%d since %s", lino, tstrerror(code));
1!
392
}
1✔
393

394
void dumpStream(SSdb *pSdb, SJson *json) {
1✔
395
  int32_t code = 0;
1✔
396
  int32_t lino = 0;
1✔
397
  void   *pIter = NULL;
1✔
398
  SJson *items = tjsonAddArrayToObject(json, "streams");
1✔
399

UNCOV
400
  while (1) {
×
401
    SStreamObj *pObj = NULL;
1✔
402
    pIter = sdbFetch(pSdb, SDB_STREAM, pIter, (void **)&pObj);
1✔
403
    if (pIter == NULL) break;
1!
404

405
    SJson *item = tjsonCreateObject();
×
406
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
×
407
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "name", mndGetDbStr(pObj->name)), pObj, &lino, _OVER);
×
408
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createTime", i642str(pObj->createTime)), pObj, &lino, _OVER);
×
409
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)), pObj, &lino, _OVER);
×
410
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "version", i642str(pObj->version)), pObj, &lino, _OVER);
×
411
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "totalLevel", i642str(pObj->totalLevel)), pObj, &lino, _OVER);
×
412
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "smaId", i642str(pObj->smaId)), pObj, &lino, _OVER);
×
413
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "uid", i642str(pObj->uid)), pObj, &lino, _OVER);
×
414
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "status", i642str(pObj->status)), pObj, &lino, _OVER);
×
415
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "igExpired", i642str(pObj->conf.igExpired)), pObj, &lino, _OVER);
×
416
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "trigger", i642str(pObj->conf.trigger)), pObj, &lino, _OVER);
×
UNCOV
417
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "triggerParam", i642str(pObj->conf.triggerParam)), pObj, &lino,
×
418
                        _OVER);
419
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "watermark", i642str(pObj->conf.watermark)), pObj, &lino, _OVER);
×
420
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "sourceDbUid", i642str(pObj->sourceDbUid)), pObj, &lino, _OVER);
×
421
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "targetDbUid", i642str(pObj->targetDbUid)), pObj, &lino, _OVER);
×
422
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "sourceDb", mndGetDbStr(pObj->sourceDb)), pObj, &lino, _OVER);
×
423
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "targetDb", mndGetDbStr(pObj->targetDb)), pObj, &lino, _OVER);
×
UNCOV
424
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "targetSTbName", mndGetStbStr(pObj->targetSTbName)), pObj, &lino,
×
425
                        _OVER);
426
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "targetStbUid", i642str(pObj->targetStbUid)), pObj, &lino, _OVER);
×
UNCOV
427
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "fixedSinkVgId", i642str(pObj->fixedSinkVgId)), pObj, &lino,
×
428
                        _OVER);
UNCOV
429
    sdbRelease(pSdb, pObj);
×
430
  }
431
_OVER:
1✔
432
  if (code != 0) mError("failed to dump stream info at line:%d since %s", lino, tstrerror(code));
1!
433
}
1✔
434

435
void dumpAcct(SSdb *pSdb, SJson *json) {
1✔
436
  int32_t code = 0;
1✔
437
  int32_t lino = 0;
1✔
438
  void  *pIter = NULL;
1✔
439
  SJson *items = tjsonAddArrayToObject(json, "accts");
1✔
440

441
  while (1) {
1✔
442
    SAcctObj *pObj = NULL;
2✔
443
    pIter = sdbFetch(pSdb, SDB_ACCT, pIter, (void **)&pObj);
2✔
444
    if (pIter == NULL) break;
2✔
445

446
    SJson *item = tjsonCreateObject();
1✔
447
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
1!
448
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "acct", pObj->acct), pObj, &lino, _OVER);
1!
449
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)), pObj, &lino, _OVER);
1!
450
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)), pObj, &lino, _OVER);
1!
451
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "acctId", i642str(pObj->acctId)), pObj, &lino, _OVER);
1!
452
    sdbRelease(pSdb, pObj);
1✔
453
  }
454
_OVER:
1✔
455
  if (code != 0) mError("failed to dump acct info at line:%d since %s", lino, tstrerror(code));
1!
456
}
1✔
457

458
void dumpAuth(SSdb *pSdb, SJson *json) {
1✔
459
  // todo
460
}
1✔
461

462
void dumpUser(SSdb *pSdb, SJson *json) {
1✔
463
  int32_t code = 0;
1✔
464
  int32_t lino = 0;
1✔
465
  void  *pIter = NULL;
1✔
466
  SJson *items = tjsonAddArrayToObject(json, "users");
1✔
467

468
  while (1) {
1✔
469
    SUserObj *pObj = NULL;
2✔
470
    pIter = sdbFetch(pSdb, SDB_USER, pIter, (void **)&pObj);
2✔
471
    if (pIter == NULL) break;
2✔
472

473
    SJson *item = tjsonCreateObject();
1✔
474
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
1!
475
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "name", pObj->user), pObj, &lino, _OVER);
1!
476
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "acct", pObj->acct), pObj, &lino, _OVER);
1!
477
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)), pObj, &lino, _OVER);
1!
478
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)), pObj, &lino, _OVER);
1!
479
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "superUser", i642str(pObj->superUser)), pObj, &lino, _OVER);
1!
480
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "authVersion", i642str(pObj->authVersion)), pObj, &lino, _OVER);
1!
481
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "passVersion", i642str(pObj->passVersion)), pObj, &lino, _OVER);
1!
482
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "numOfReadDbs", i642str(taosHashGetSize(pObj->readDbs))), pObj,
1!
483
                        &lino, _OVER);
484
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "numOfWriteDbs", i642str(taosHashGetSize(pObj->writeDbs))), pObj,
1!
485
                        &lino, _OVER);
486
    sdbRelease(pSdb, pObj);
1✔
487
  }
488
_OVER:
1✔
489
  if (code != 0) mError("failed to dump user info at line:%d since %s", lino, tstrerror(code));
1!
490
}
1✔
491

492
void dumpDnode(SSdb *pSdb, SJson *json) {
1✔
493
  int32_t code = 0;
1✔
494
  int32_t lino = 0;
1✔
495
  void  *pIter = NULL;
1✔
496
  SJson *items = tjsonAddArrayToObject(json, "dnodes");
1✔
497

498
  while (1) {
1✔
499
    SDnodeObj *pObj = NULL;
2✔
500
    pIter = sdbFetch(pSdb, SDB_DNODE, pIter, (void **)&pObj);
2✔
501
    if (pIter == NULL) break;
2✔
502

503
    SJson *item = tjsonCreateObject();
1✔
504
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
1!
505
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "id", i642str(pObj->id)), pObj, &lino, _OVER);
1!
506
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)), pObj, &lino, _OVER);
1!
507
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)), pObj, &lino, _OVER);
1!
508
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "port", i642str(pObj->port)), pObj, &lino, _OVER);
1!
509
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "fqdn", pObj->fqdn), pObj, &lino, _OVER);
1!
510
    sdbRelease(pSdb, pObj);
1✔
511
  }
512
_OVER:
1✔
513
  if (code != 0) mError("failed to dump dnode info at line:%d since %s", lino, tstrerror(code));
1!
514
}
1✔
515

516
void dumpSnode(SSdb *pSdb, SJson *json) {
1✔
517
  int32_t code = 0;
1✔
518
  int32_t lino = 0;
1✔
519
  void  *pIter = NULL;
1✔
520
  SJson *items = tjsonAddArrayToObject(json, "snodes");
1✔
521

UNCOV
522
  while (1) {
×
523
    SSnodeObj *pObj = NULL;
1✔
524
    pIter = sdbFetch(pSdb, SDB_QNODE, pIter, (void **)&pObj);
1✔
525
    if (pIter == NULL) break;
1!
526

527
    SJson *item = tjsonCreateObject();
×
528
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
×
529
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "id", i642str(pObj->id)), pObj, &lino, _OVER);
×
530
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)), pObj, &lino, _OVER);
×
531
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)), pObj, &lino, _OVER);
×
UNCOV
532
    sdbRelease(pSdb, pObj);
×
533
  }
534
_OVER:
1✔
535
  if (code != 0) mError("failed to dump snode info at line:%d since %s", lino, tstrerror(code));
1!
536
}
1✔
537

538
void dumpQnode(SSdb *pSdb, SJson *json) {
1✔
539
  int32_t code = 0;
1✔
540
  int32_t lino = 0;
1✔
541
  void  *pIter = NULL;
1✔
542
  SJson *items = tjsonAddArrayToObject(json, "qnodes");
1✔
543

UNCOV
544
  while (1) {
×
545
    SQnodeObj *pObj = NULL;
1✔
546
    pIter = sdbFetch(pSdb, SDB_QNODE, pIter, (void **)&pObj);
1✔
547
    if (pIter == NULL) break;
1!
548

549
    SJson *item = tjsonCreateObject();
×
550
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
×
551
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "id", i642str(pObj->id)), pObj, &lino, _OVER);
×
552
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)), pObj, &lino, _OVER);
×
553
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)), pObj, &lino, _OVER);
×
UNCOV
554
    sdbRelease(pSdb, pObj);
×
555
  }
556
_OVER:
1✔
557
  if (code != 0) mError("failed to dump qnode info at line:%d since %s", lino, tstrerror(code));
1!
558
}
1✔
559

560
void dumpMnode(SSdb *pSdb, SJson *json) {
1✔
561
  int32_t code = 0;
1✔
562
  int32_t lino = 0;
1✔
563
  void  *pIter = NULL;
1✔
564
  SJson *items = tjsonAddArrayToObject(json, "mnodes");
1✔
565

566
  while (1) {
1✔
567
    SMnodeObj *pObj = NULL;
2✔
568
    pIter = sdbFetch(pSdb, SDB_MNODE, pIter, (void **)&pObj);
2✔
569
    if (pIter == NULL) break;
2✔
570

571
    SJson *item = tjsonCreateObject();
1✔
572
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
1!
573
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "id", i642str(pObj->id)), pObj, &lino, _OVER);
1!
574
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)), pObj, &lino, _OVER);
1!
575
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)), pObj, &lino, _OVER);
1!
576
    sdbRelease(pSdb, pObj);
1✔
577
  }
578
_OVER:
1✔
579
  if (code != 0) mError("failed to dump mnode info at line:%d since %s", lino, tstrerror(code));
1!
580
}
1✔
581

582
void dumpCluster(SSdb *pSdb, SJson *json) {
1✔
583
  int32_t code = 0;
1✔
584
  int32_t lino = 0;
1✔
585

586
  void  *pIter = NULL;
1✔
587
  SJson *items = tjsonAddArrayToObject(json, "clusters");
1✔
588

589
  while (1) {
1✔
590
    SClusterObj *pObj = NULL;
2✔
591
    pIter = sdbFetch(pSdb, SDB_CLUSTER, pIter, (void **)&pObj);
2✔
592
    if (pIter == NULL) break;
2✔
593

594
    SJson *item = tjsonCreateObject();
1✔
595
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
1!
596
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "id", i642str(pObj->id)), pObj, &lino, _OVER);
1!
597
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)), pObj, &lino, _OVER);
1!
598
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)), pObj, &lino, _OVER);
1!
599
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "name", pObj->name), pObj, &lino, _OVER);
1!
600
    sdbRelease(pSdb, pObj);
1✔
601
  }
602

603
_OVER:
1✔
604
  if (code != 0) mError("failed to dump cluster info at line:%d since %s", lino, tstrerror(code));
1!
605
}
1✔
606

607
void dumpTrans(SSdb *pSdb, SJson *json) {
1✔
608
  int32_t code = 0;
1✔
609
  int32_t lino = 0;
1✔
610
  void  *pIter = NULL;
1✔
611
  SJson *items = tjsonAddArrayToObject(json, "transactions");
1✔
612

UNCOV
613
  while (1) {
×
614
    STrans *pObj = NULL;
1✔
615
    pIter = sdbFetch(pSdb, SDB_TRANS, pIter, (void **)&pObj);
1✔
616
    if (pIter == NULL) break;
1!
617

618
    SJson *item = tjsonCreateObject();
×
619
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
×
620
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "id", i642str(pObj->id)), pObj, &lino, _OVER);
×
621
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "stage", i642str(pObj->stage)), pObj, &lino, _OVER);
×
622
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "policy", i642str(pObj->policy)), pObj, &lino, _OVER);
×
623
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "conflict", i642str(pObj->conflict)), pObj, &lino, _OVER);
×
624
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "exec", i642str(pObj->exec)), pObj, &lino, _OVER);
×
625
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "oper", i642str(pObj->oper)), pObj, &lino, _OVER);
×
626
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)), pObj, &lino, _OVER);
×
627
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "dbname", pObj->dbname), pObj, &lino, _OVER);
×
628
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "stbname", pObj->stbname), pObj, &lino, _OVER);
×
629
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "opername", pObj->opername), pObj, &lino, _OVER);
×
UNCOV
630
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "commitLogNum", i642str(taosArrayGetSize(pObj->commitActions))),
×
631
                        pObj, &lino, _OVER);
UNCOV
632
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "redoActionNum", i642str(taosArrayGetSize(pObj->redoActions))),
×
633
                        pObj, &lino, _OVER);
UNCOV
634
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "undoActionNum", i642str(taosArrayGetSize(pObj->undoActions))),
×
635
                        pObj, &lino, _OVER);
UNCOV
636
    sdbRelease(pSdb, pObj);
×
637
  }
638

639
_OVER:
1✔
640
  if (code != 0) mError("failed to dump trans info at line:%d since %s", lino, tstrerror(code));
1!
641
}
1✔
642

643
void dumpHeader(SSdb *pSdb, SJson *json) {
1✔
644
  int32_t code = 0;
1✔
645
  int32_t lino = 0;
1✔
646
  TAOS_CHECK_GOTO(tjsonAddStringToObject(json, "sver", i642str(1)), &lino, _OVER);
1!
647
  TAOS_CHECK_GOTO(tjsonAddStringToObject(json, "applyIndex", i642str(pSdb->applyIndex)), &lino, _OVER);
1!
648
  TAOS_CHECK_GOTO(tjsonAddStringToObject(json, "applyTerm", i642str(pSdb->applyTerm)), &lino, _OVER);
1!
649
  TAOS_CHECK_GOTO(tjsonAddStringToObject(json, "applyConfig", i642str(pSdb->applyConfig)), &lino, _OVER);
1!
650

651
  SJson *maxIdsJson = tjsonCreateObject();
1✔
652
  TAOS_CHECK_GOTO(tjsonAddItemToObject(json, "maxIds", maxIdsJson), &lino, _OVER);
1!
653
  for (int32_t i = 0; i < SDB_MAX; ++i) {
31✔
654
    if(i == 5) continue;
30✔
655
    int64_t maxId = 0;
29✔
656
    if (i < SDB_MAX) {
29!
657
      maxId = pSdb->maxId[i];
29✔
658
    }
659
    TAOS_CHECK_GOTO(tjsonAddStringToObject(maxIdsJson, sdbTableName(i), i642str(maxId)), &lino, _OVER);
29!
660
  }
661

662
  SJson *tableVersJson = tjsonCreateObject();
1✔
663
  TAOS_CHECK_GOTO(tjsonAddItemToObject(json, "tableVers", tableVersJson), &lino, _OVER);
1!
664
  for (int32_t i = 0; i < SDB_MAX; ++i) {
31✔
665
    int64_t tableVer = 0;
30✔
666
    if (i < SDB_MAX) {
30!
667
      tableVer = pSdb->tableVer[i];
30✔
668
    }
669
    TAOS_CHECK_GOTO(tjsonAddStringToObject(tableVersJson, sdbTableName(i), i642str(tableVer)), &lino, _OVER);
30!
670
  }
671

672
_OVER:
1✔
673
  if (code != 0) mError("failed to dump sdb info at line:%d since %s", lino, tstrerror(code));
1!
674
}
1✔
675

676
int32_t mndDumpSdb() {
1✔
677
  mInfo("start to dump sdb info to sdb.json");
1!
678

679
  char path[PATH_MAX * 2] = {0};
1✔
680
  (void)snprintf(path, sizeof(path), "%s%smnode", tsDataDir, TD_DIRSEP);
1✔
681

682
  SMsgCb msgCb = {0};
1✔
683
  msgCb.reportStartupFp = reportStartup;
1✔
684
  msgCb.sendReqFp = sendReq;
1✔
685
  msgCb.sendSyncReqFp = sendSyncReq;
1✔
686
  msgCb.sendRspFp = sendRsp;
1✔
687
  msgCb.mgmt = (SMgmtWrapper *)(&msgCb);  // hack
1✔
688
  tmsgSetDefault(&msgCb);
1✔
689

690
  TAOS_CHECK_RETURN(walInit(NULL));
1!
691
  TAOS_CHECK_RETURN(syncInit());
1!
692

693
  SMnodeOpt opt = {.msgCb = msgCb};
1✔
694
  SMnode   *pMnode = mndOpen(path, &opt);
1✔
695
  if (pMnode == NULL) return -1;
1!
696

697
  SSdb  *pSdb = pMnode->pSdb;
1✔
698
  SJson *json = tjsonCreateObject();
1✔
699
  dumpHeader(pSdb, json);
1✔
700
  dumpFunc(pSdb, json);
1✔
701
  dumpDb(pSdb, json);
1✔
702
  dumpStb(pSdb, json);
1✔
703
  dumpSma(pSdb, json);
1✔
704
  dumpVgroup(pSdb, json);
1✔
705
  dumpTopic(pSdb, json);
1✔
706
  dumpConsumer(pSdb, json);
1✔
707
  dumpSubscribe(pSdb, json);
1✔
708
  //  dumpOffset(pSdb, json);
709
  dumpStream(pSdb, json);
1✔
710
  dumpAcct(pSdb, json);
1✔
711
  dumpAuth(pSdb, json);
1✔
712
  dumpUser(pSdb, json);
1✔
713
  dumpDnode(pSdb, json);
1✔
714
  dumpSnode(pSdb, json);
1✔
715
  dumpQnode(pSdb, json);
1✔
716
  dumpMnode(pSdb, json);
1✔
717
  dumpCluster(pSdb, json);
1✔
718
  dumpTrans(pSdb, json);
1✔
719

720
  char     *pCont = tjsonToString(json);
1✔
721
  int32_t   contLen = strlen(pCont);
1✔
722
  char      file[] = "sdb.json";
1✔
723
  TdFilePtr pFile = taosOpenFile(file, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_WRITE_THROUGH);
1✔
724
  if (pFile == NULL) {
1!
725
    mError("failed to write %s since %s", file, terrstr());
×
UNCOV
726
    return terrno;
×
727
  }
728
  TAOS_CHECK_RETURN(taosWriteFile(pFile, pCont, contLen));
1!
729
  TAOS_CHECK_RETURN(taosWriteFile(pFile, "\n", 1));
×
730
  TAOS_CHECK_RETURN(taosFsyncFile(pFile));
×
731
  TAOS_CHECK_RETURN(taosCloseFile(&pFile));
×
732
  tjsonDelete(json);
×
UNCOV
733
  taosMemoryFree(pCont);
×
734

735
  mInfo("dump sdb info success");
×
UNCOV
736
  return 0;
×
737
}
738

739
int32_t mndDeleteTrans() {
×
UNCOV
740
  mInfo("start to dump sdb info to sdb.json");
×
741

742
  char path[PATH_MAX * 2] = {0};
×
UNCOV
743
  (void)snprintf(path, sizeof(path), "%s%smnode", tsDataDir, TD_DIRSEP);
×
744

745
  SMsgCb msgCb = {0};
×
746
  msgCb.reportStartupFp = reportStartup;
×
747
  msgCb.sendReqFp = sendReq;
×
748
  msgCb.sendSyncReqFp = sendSyncReq;
×
749
  msgCb.sendRspFp = sendRsp;
×
750
  msgCb.mgmt = (SMgmtWrapper *)(&msgCb);  // hack
×
UNCOV
751
  tmsgSetDefault(&msgCb);
×
752

753
  TAOS_CHECK_RETURN(walInit(NULL));
×
UNCOV
754
  TAOS_CHECK_RETURN(syncInit());
×
755

756
  SMnodeOpt opt = {.msgCb = msgCb};
×
757
  SMnode   *pMnode = mndOpen(path, &opt);
×
UNCOV
758
  if (pMnode == NULL) return terrno;
×
759

UNCOV
760
  TAOS_CHECK_RETURN(sdbWriteFileForDump(pMnode->pSdb));
×
761

UNCOV
762
  mInfo("dump sdb info success");
×
763

UNCOV
764
  return 0;
×
765
}
766

767
#pragma GCC diagnostic pop
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