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

taosdata / TDengine / #4905

29 Dec 2025 02:08PM UTC coverage: 65.423% (-0.3%) from 65.734%
#4905

push

travis-ci

web-flow
enh: sign connect request (#34067)

23 of 29 new or added lines in 4 files covered. (79.31%)

11614 existing lines in 186 files now uncovered.

193476 of 295730 relevant lines covered (65.42%)

115752566.53 hits per line

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

44.26
/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 "mndVgroup.h"
22
#include "sdb.h"
23
#include "tconfig.h"
24
#include "tjson.h"
25
#include "ttypes.h"
26

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

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

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

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

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

56
  while (1) {
×
57
    SFuncObj *pObj = NULL;
62✔
58
    ESdbStatus status;
×
59
    pIter = sdbFetchAll(pSdb, SDB_FUNC, pIter, (void **)&pObj, &status, false);
62✔
60
    if (pIter == NULL) break;
62✔
61

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

82
void dumpDb(SSdb *pSdb, SJson *json) {
62✔
83
  int32_t code = 0;
62✔
84
  int32_t lino = 0;
62✔
85
  void  *pIter = NULL;
62✔
86
  ESdbStatus status;
×
87
  SJson *items = tjsonCreateObject();
62✔
88
  TAOS_CHECK_GOTO(tjsonAddItemToObject(json, "dbs", items), &lino, _OVER);
62✔
89

90
  while (1) {
×
91
    SDbObj *pObj = NULL;
62✔
92
    pIter = sdbFetchAll(pSdb, SDB_DB, pIter, (void **)&pObj, &status, false);
62✔
93
    if (pIter == NULL) break;
62✔
94

95
    SJson *item = tjsonCreateObject();
×
96
    RETRIEVE_CHECK_GOTO(tjsonAddItemToObject(items, "db", item), pObj, &lino, _OVER);
×
97

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

154
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "numOfRetensions", i642str(pObj->cfg.numOfRetensions)), pObj,
×
155
                        &lino, _OVER);
156
    for (int32_t i = 0; i < pObj->cfg.numOfRetensions; ++i) {
×
157
      SJson *rentensions = tjsonAddArrayToObject(item, "rentensions");
×
158
      SJson *rentension = tjsonCreateObject();
×
159
      RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(rentensions, rentension), pObj, &lino, _OVER);
×
160

161
      SRetention *pRetension = taosArrayGet(pObj->cfg.pRetensions, i);
×
162
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "freq", i642str(pRetension->freq)), pObj, &lino, _OVER);
×
163
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "freqUnit", i642str(pRetension->freqUnit)), pObj, &lino, _OVER);
×
164
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "keep", i642str(pRetension->keep)), pObj, &lino, _OVER);
×
165
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "keepUnit", i642str(pRetension->keepUnit)), pObj, &lino, _OVER);
×
166
    }
167

168
    sdbRelease(pSdb, pObj);
×
169
  }
170
_OVER:
62✔
171
  if (code != 0) mError("failed to dump db info at line:%d since %s", lino, tstrerror(code));
62✔
172
}
62✔
173

174
void dumpStb(SSdb *pSdb, SJson *json) {
62✔
175
  int32_t code = 0;
62✔
176
  int32_t lino = 0;
62✔
177
  void  *pIter = NULL;
62✔
178
  ESdbStatus status;
×
179
  SJson *items = tjsonAddArrayToObject(json, "stbs");
62✔
180

181
  while (1) {
×
182
    SStbObj *pObj = NULL;
62✔
183
    pIter = sdbFetchAll(pSdb, SDB_STB, pIter, (void **)&pObj, &status, false);
62✔
184
    if (pIter == NULL) break;
62✔
185

186
    SJson *item = tjsonCreateObject();
×
187
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
×
188

189
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "status", i642str(status)), pObj, &lino, _OVER);
×
190
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "name", mndGetStbStr(pObj->name)), pObj, &lino, _OVER);
×
191
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "db", mndGetDbStr(pObj->db)), pObj, &lino, _OVER);
×
192
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)), pObj, &lino, _OVER);
×
193
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)), pObj, &lino, _OVER);
×
194
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "uid", i642str(pObj->uid)), pObj, &lino, _OVER);
×
195
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "dbUid", i642str(pObj->dbUid)), pObj, &lino, _OVER);
×
196
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "tagVer", i642str(pObj->tagVer)), pObj, &lino, _OVER);
×
197
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "colVer", i642str(pObj->colVer)), pObj, &lino, _OVER);
×
198
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "smaVer", i642str(pObj->smaVer)), pObj, &lino, _OVER);
×
199
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "nextColId", i642str(pObj->nextColId)), pObj, &lino, _OVER);
×
200
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "watermark1", i642str(pObj->watermark[0])), pObj, &lino, _OVER);
×
201
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "watermark2", i642str(pObj->watermark[1])), pObj, &lino, _OVER);
×
202
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "maxdelay0", i642str(pObj->maxdelay[0])), pObj, &lino, _OVER);
×
203
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "maxdelay1", i642str(pObj->maxdelay[1])), pObj, &lino, _OVER);
×
204
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "ttl", i642str(pObj->ttl)), pObj, &lino, _OVER);
×
205
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "numOfFuncs", i642str(pObj->numOfFuncs)), pObj, &lino, _OVER);
×
206
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "commentLen", i642str(pObj->commentLen)), pObj, &lino, _OVER);
×
207
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "ast1Len", i642str(pObj->ast1Len)), pObj, &lino, _OVER);
×
208
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "ast2Len", i642str(pObj->ast2Len)), pObj, &lino, _OVER);
×
209
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "virtual", i642str(pObj->virtualStb)), pObj, &lino, _OVER);
×
210

211
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "numOfColumns", i642str(pObj->numOfColumns)), pObj, &lino, _OVER);
×
212
    SJson *columns = tjsonAddArrayToObject(item, "columns");
×
213
    for (int32_t i = 0; i < pObj->numOfColumns; ++i) {
×
214
      SJson *column = tjsonCreateObject();
×
215
      RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(columns, column), pObj, &lino, _OVER);
×
216

217
      SSchema *pColumn = &pObj->pColumns[i];
×
218
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(column, "type", i642str(pColumn->type)), pObj, &lino, _OVER);
×
219
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(column, "typestr", tDataTypes[pColumn->type].name), pObj, &lino,
×
220
                          _OVER);
221
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(column, "flags", i642str(pColumn->flags)), pObj, &lino, _OVER);
×
222
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(column, "colId", i642str(pColumn->colId)), pObj, &lino, _OVER);
×
223
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(column, "bytes", i642str(pColumn->bytes)), pObj, &lino, _OVER);
×
224
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(column, "name", pColumn->name), pObj, &lino, _OVER);
×
225
    }
226

227
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "numOfTags", i642str(pObj->numOfTags)), pObj, &lino, _OVER);
×
228
    SJson *tags = tjsonAddArrayToObject(item, "tags");
×
229
    for (int32_t i = 0; i < pObj->numOfTags; ++i) {
×
230
      SJson *tag = tjsonCreateObject();
×
231
      RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(tags, tag), pObj, &lino, _OVER);
×
232

233
      SSchema *pTag = &pObj->pTags[i];
×
234
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(tag, "type", i642str(pTag->type)), pObj, &lino, _OVER);
×
235
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(tag, "typestr", tDataTypes[pTag->type].name), pObj, &lino, _OVER);
×
236
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(tag, "flags", i642str(pTag->flags)), pObj, &lino, _OVER);
×
237
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(tag, "colId", i642str(pTag->colId)), pObj, &lino, _OVER);
×
238
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(tag, "bytes", i642str(pTag->bytes)), pObj, &lino, _OVER);
×
239
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(tag, "name", pTag->name), pObj, &lino, _OVER);
×
240
    }
241

242
    sdbRelease(pSdb, pObj);
×
243
  }
244
_OVER:
62✔
245
  if (code != 0) mError("failed to dump stable info at line:%d since %s", lino, tstrerror(code));
62✔
246
}
62✔
247

248
void dumpSma(SSdb *pSdb, SJson *json) {
62✔
249
  int32_t code = 0;
62✔
250
  int32_t lino = 0;
62✔
251
  void  *pIter = NULL;
62✔
252
  ESdbStatus status;
×
253
  SJson *items = tjsonAddArrayToObject(json, "smas");
62✔
254

255
  while (1) {
×
256
    SSmaObj *pObj = NULL;
62✔
257
    pIter = sdbFetchAll(pSdb, SDB_SMA, pIter, (void **)&pObj, &status, false);
62✔
258
    if (pIter == NULL) break;
62✔
259

260
    SJson *item = tjsonCreateObject();
×
261
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
×
262

263
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "status", i642str(status)), pObj, &lino, _OVER);
×
264
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "name", mndGetStbStr(pObj->name)), pObj, &lino, _OVER);
×
265
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "stb", mndGetStbStr(pObj->stb)), pObj, &lino, _OVER);
×
266
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "db", mndGetDbStr(pObj->db)), pObj, &lino, _OVER);
×
267
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "dstTbName", mndGetStbStr(pObj->dstTbName)), pObj, &lino, _OVER);
×
268
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)), pObj, &lino, _OVER);
×
269
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "uid", i642str(pObj->uid)), pObj, &lino, _OVER);
×
270
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "stbUid", i642str(pObj->stbUid)), pObj, &lino, _OVER);
×
271
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "dbUid", i642str(pObj->dbUid)), pObj, &lino, _OVER);
×
272
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "dstTbUid", i642str(pObj->dstTbUid)), pObj, &lino, _OVER);
×
273
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "intervalUnit", i642str(pObj->intervalUnit)), pObj, &lino, _OVER);
×
274
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "slidingUnit", i642str(pObj->slidingUnit)), pObj, &lino, _OVER);
×
275
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "timezone", i642str(pObj->timezone)), pObj, &lino, _OVER);
×
276
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "dstVgId", i642str(pObj->dstVgId)), pObj, &lino, _OVER);
×
277
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "interval", i642str(pObj->interval)), pObj, &lino, _OVER);
×
278
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "offset", i642str(pObj->offset)), pObj, &lino, _OVER);
×
279
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "sliding", i642str(pObj->sliding)), pObj, &lino, _OVER);
×
280
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "exprLen", i642str(pObj->exprLen)), pObj, &lino, _OVER);
×
281
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "tagsFilterLen", i642str(pObj->tagsFilterLen)), pObj, &lino,
×
282
                        _OVER);
283
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "sqlLen", i642str(pObj->sqlLen)), pObj, &lino, _OVER);
×
284
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "astLen", i642str(pObj->astLen)), pObj, &lino, _OVER);
×
285
    sdbRelease(pSdb, pObj);
×
286
  }
287
_OVER:
62✔
288
  if (code != 0) mError("failed to dump sma info at line:%d since %s", lino, tstrerror(code));
62✔
289
}
62✔
290

291
void dumpVgroup(SSdb *pSdb, SJson *json) {
62✔
292
  int32_t code = 0;
62✔
293
  int32_t lino = 0;
62✔
294
  void  *pIter = NULL;
62✔
295
  ESdbStatus status;
×
296
  SJson *items = tjsonAddArrayToObject(json, "vgroups");
62✔
297

298
  while (1) {
×
299
    SVgObj *pObj = NULL;
62✔
300
    pIter = sdbFetchAll(pSdb, SDB_VGROUP, pIter, (void **)&pObj, &status, false);
62✔
301
    if (pIter == NULL) break;
62✔
302

303
    SJson *item = tjsonCreateObject();
×
304
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
×
305

306
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "status", i642str(status)), pObj, &lino, _OVER);
×
307
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "vgId", i642str(pObj->vgId)), pObj, &lino, _OVER);
×
308
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)), pObj, &lino, _OVER);
×
309
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)), pObj, &lino, _OVER);
×
310
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "version", i642str(pObj->version)), pObj, &lino, _OVER);
×
311
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "hashBegin", i642str(pObj->hashBegin)), pObj, &lino, _OVER);
×
312
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "hashEnd", i642str(pObj->hashEnd)), pObj, &lino, _OVER);
×
313
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "db", pObj->dbName), pObj, &lino, _OVER);
×
314
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "dbUid", i642str(pObj->dbUid)), pObj, &lino, _OVER);
×
315
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "isTsma", i642str(pObj->isTsma)), pObj, &lino, _OVER);
×
316
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "replica", i642str(pObj->replica)), pObj, &lino, _OVER);
×
317
    SJson *replicas = tjsonAddArrayToObject(item, "replicas");
×
318
    for (int32_t i = 0; i < pObj->replica; ++i) {
×
319
      SJson *replica = tjsonCreateObject();
×
320
      RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(replicas, replica), pObj, &lino, _OVER);
×
321
      RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(replica, "dnodeId", i642str(pObj->vnodeGid[i].dnodeId)), pObj, &lino,
×
322
                          _OVER);
323
    }
324
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "syncConfChangeVer", i642str(pObj->syncConfChangeVer)), pObj,
×
325
                        &lino, _OVER);
326
    sdbRelease(pSdb, pObj);
×
327
  }
328
_OVER:
62✔
329
  if (code != 0) mError("failed to dump vgroup info at line:%d since %s", lino, tstrerror(code));
62✔
330
}
62✔
331

332
void dumpTopic(SSdb *pSdb, SJson *json) {
62✔
333
  int32_t code = 0;
62✔
334
  int32_t lino = 0;
62✔
335
  void  *pIter = NULL;
62✔
336
  ESdbStatus status;
×
337
  SJson *items = tjsonAddArrayToObject(json, "topics");
62✔
338

339
  while (1) {
×
340
    SMqTopicObj *pObj = NULL;
62✔
341
    pIter = sdbFetchAll(pSdb, SDB_TOPIC, pIter, (void **)&pObj, &status, false);
62✔
342
    if (pIter == NULL) break;
62✔
343

344
    SJson *item = tjsonCreateObject();
×
345
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
×
346

347
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "status", i642str(status)), pObj, &lino, _OVER);
×
348
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "name", mndGetDbStr(pObj->name)), pObj, &lino, _OVER);
×
349
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "name", mndGetDbStr(pObj->db)), pObj, &lino, _OVER);
×
350
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createTime", i642str(pObj->createTime)), pObj, &lino, _OVER);
×
351
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)), pObj, &lino, _OVER);
×
352
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "uid", i642str(pObj->uid)), pObj, &lino, _OVER);
×
353
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "dbUid", i642str(pObj->dbUid)), pObj, &lino, _OVER);
×
354
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "version", i642str(pObj->version)), pObj, &lino, _OVER);
×
355
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "subType", i642str(pObj->subType)), pObj, &lino, _OVER);
×
356
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "withMeta", i642str(pObj->withMeta)), pObj, &lino, _OVER);
×
357
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "stbUid", i642str(pObj->stbUid)), pObj, &lino, _OVER);
×
358
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "stbName", mndGetStableStr(pObj->stbName)), pObj, &lino, _OVER);
×
359
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "sqlLen", i642str(pObj->sqlLen)), pObj, &lino, _OVER);
×
360
    sdbRelease(pSdb, pObj);
×
361
  }
362
_OVER:
62✔
363
  if (code != 0) mError("failed to dump topic info at line:%d since %s", lino, tstrerror(code));
62✔
364
}
62✔
365

366
void dumpConsumer(SSdb *pSdb, SJson *json) {
62✔
367
  int32_t code = 0;
62✔
368
  int32_t lino = 0;
62✔
369
  void  *pIter = NULL;
62✔
370
  ESdbStatus status;
×
371
  SJson *items = tjsonAddArrayToObject(json, "consumers");
62✔
372

373
  while (1) {
×
374
    SMqConsumerObj *pObj = NULL;
62✔
375
    pIter = sdbFetchAll(pSdb, SDB_CONSUMER, pIter, (void **)&pObj, &status, false);
62✔
376
    if (pIter == NULL) break;
62✔
377

378
    SJson *item = tjsonCreateObject();
×
379
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
×
380

381
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "status", i642str(status)), pObj, &lino, _OVER);
×
382
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "consumerId", i642str(pObj->consumerId)), pObj, &lino, _OVER);
×
383
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "cgroup", pObj->cgroup), pObj, &lino, _OVER);
×
384
    sdbRelease(pSdb, pObj);
×
385
  }
386
_OVER:
62✔
387
  if (code != 0) mError("failed to dump consumer info at line:%d since %s", lino, tstrerror(code));
62✔
388
}
62✔
389

390
void dumpSubscribe(SSdb *pSdb, SJson *json) {
62✔
391
  int32_t code = 0;
62✔
392
  int32_t lino = 0;
62✔
393
  void  *pIter = NULL;
62✔
394
  ESdbStatus status;
×
395
  SJson *items = tjsonAddArrayToObject(json, "subscribes");
62✔
396

397
  while (1) {
×
398
    SMqSubscribeObj *pObj = NULL;
62✔
399
    pIter = sdbFetchAll(pSdb, SDB_SUBSCRIBE, pIter, (void **)&pObj, &status, false);
62✔
400
    if (pIter == NULL) break;
62✔
401

402
    SJson *item = tjsonCreateObject();
×
403
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
×
404

405
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "status", i642str(status)), pObj, &lino, _OVER);
×
406
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "key", pObj->key), pObj, &lino, _OVER);
×
407
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "dbUid", i642str(pObj->dbUid)), pObj, &lino, _OVER);
×
408
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "stbUid", i642str(pObj->stbUid)), pObj, &lino, _OVER);
×
409
    sdbRelease(pSdb, pObj);
×
410
  }
411
_OVER:
62✔
412
  if (code != 0) mError("failed to dump subscribe info at line:%d since %s", lino, tstrerror(code));
62✔
413
}
62✔
414

415
void dumpStream(SSdb *pSdb, SJson *json) {
62✔
416
  int32_t code = 0;
62✔
417
  int32_t lino = 0;
62✔
418
  void   *pIter = NULL;
62✔
419
  ESdbStatus status;
×
420
  SJson *items = tjsonAddArrayToObject(json, "streams");
62✔
421

422
  while (1) {
×
423
    SStreamObj *pObj = NULL;
62✔
424
    pIter = sdbFetchAll(pSdb, SDB_STREAM, pIter, (void **)&pObj, &status, false);
62✔
425
    if (pIter == NULL) break;
62✔
426

427
    SJson *item = tjsonCreateObject();
×
428
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
×
429
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "mainSnodeId", i642str(pObj->mainSnodeId)), pObj, &lino, _OVER);
×
430
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "userStopped", i642str(pObj->userStopped)), pObj, &lino, _OVER);
×
431

432
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createTime", i642str(pObj->createTime)), pObj, &lino, _OVER);
×
433
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)), pObj, &lino, _OVER);
×
434

435
    //STREAMTODO
436

437
    sdbRelease(pSdb, pObj);
×
438
  }
439
  
440
_OVER:
62✔
441
  if (code != 0) mError("failed to dump stream info at line:%d since %s", lino, tstrerror(code));
62✔
442
}
62✔
443

444
void dumpAcct(SSdb *pSdb, SJson *json) {
62✔
445
  int32_t code = 0;
62✔
446
  int32_t lino = 0;
62✔
447
  void  *pIter = NULL;
62✔
448
  ESdbStatus status;
×
449
  SJson *items = tjsonAddArrayToObject(json, "accts");
62✔
450

451
  while (1) {
46✔
452
    SAcctObj *pObj = NULL;
108✔
453
    pIter = sdbFetchAll(pSdb, SDB_ACCT, pIter, (void **)&pObj, &status, false);
108✔
454
    if (pIter == NULL) break;
108✔
455

456
    SJson *item = tjsonCreateObject();
46✔
457
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
46✔
458

459
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "status", i642str(status)), pObj, &lino, _OVER);
46✔
460
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "acct", pObj->acct), pObj, &lino, _OVER);
46✔
461
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)), pObj, &lino, _OVER);
46✔
462
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)), pObj, &lino, _OVER);
46✔
463
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "acctId", i642str(pObj->acctId)), pObj, &lino, _OVER);
46✔
464
    sdbRelease(pSdb, pObj);
46✔
465
  }
466
_OVER:
62✔
467
  if (code != 0) mError("failed to dump acct info at line:%d since %s", lino, tstrerror(code));
62✔
468
}
62✔
469

470
void dumpAuth(SSdb *pSdb, SJson *json) {
62✔
471
  // todo
472
}
62✔
473

474
void dumpUser(SSdb *pSdb, SJson *json) {
62✔
475
  int32_t code = 0;
62✔
476
  int32_t lino = 0;
62✔
477
  void  *pIter = NULL;
62✔
478
  ESdbStatus status;
×
479
  SJson *items = tjsonAddArrayToObject(json, "users");
62✔
480

481
  while (1) {
46✔
482
    SUserObj *pObj = NULL;
108✔
483
    pIter = sdbFetchAll(pSdb, SDB_USER, pIter, (void **)&pObj, &status, false);
108✔
484
    if (pIter == NULL) break;
108✔
485

486
    SJson *item = tjsonCreateObject();
46✔
487
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
46✔
488

489
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "status", i642str(status)), pObj, &lino, _OVER);
46✔
490
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "name", pObj->user), pObj, &lino, _OVER);
46✔
491
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "acct", pObj->acct), pObj, &lino, _OVER);
46✔
492
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)), pObj, &lino, _OVER);
46✔
493
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)), pObj, &lino, _OVER);
46✔
494
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "superUser", i642str(pObj->superUser)), pObj, &lino, _OVER);
46✔
495
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "authVersion", i642str(pObj->authVersion)), pObj, &lino, _OVER);
46✔
496
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "passVersion", i642str(pObj->passVersion)), pObj, &lino, _OVER);
46✔
497
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "numOfReadDbs", "0"), pObj, &lino, _OVER);
46✔
498
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "numOfWriteDbs", "0"), pObj, &lino, _OVER);
46✔
499
    sdbRelease(pSdb, pObj);
46✔
500
  }
501
_OVER:
62✔
502
  if (code != 0) mError("failed to dump user info at line:%d since %s", lino, tstrerror(code));
62✔
503
}
62✔
504

505
void dumpDnode(SSdb *pSdb, SJson *json) {
62✔
506
  int32_t code = 0;
62✔
507
  int32_t lino = 0;
62✔
508
  void  *pIter = NULL;
62✔
UNCOV
509
  ESdbStatus status;
×
510
  SJson *items = tjsonAddArrayToObject(json, "dnodes");
62✔
511

512
  while (1) {
46✔
513
    SDnodeObj *pObj = NULL;
108✔
514
    pIter = sdbFetchAll(pSdb, SDB_DNODE, pIter, (void **)&pObj, &status, false);
108✔
515
    if (pIter == NULL) break;
108✔
516

517
    SJson *item = tjsonCreateObject();
46✔
518
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
46✔
519

520
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "status", i642str(status)), pObj, &lino, _OVER);
46✔
521
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "id", i642str(pObj->id)), pObj, &lino, _OVER);
46✔
522
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)), pObj, &lino, _OVER);
46✔
523
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)), pObj, &lino, _OVER);
46✔
524
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "port", i642str(pObj->port)), pObj, &lino, _OVER);
46✔
525
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "fqdn", pObj->fqdn), pObj, &lino, _OVER);
46✔
526
    sdbRelease(pSdb, pObj);
46✔
527
  }
528
_OVER:
62✔
529
  if (code != 0) mError("failed to dump dnode info at line:%d since %s", lino, tstrerror(code));
62✔
530
}
62✔
531

532
void dumpSnode(SSdb *pSdb, SJson *json) {
62✔
533
  int32_t code = 0;
62✔
534
  int32_t lino = 0;
62✔
535
  void  *pIter = NULL;
62✔
UNCOV
536
  ESdbStatus status;
×
537
  SJson *items = tjsonAddArrayToObject(json, "snodes");
62✔
538

UNCOV
539
  while (1) {
×
540
    SSnodeObj *pObj = NULL;
62✔
541
    pIter = sdbFetchAll(pSdb, SDB_QNODE, pIter, (void **)&pObj, &status, false);
62✔
542
    if (pIter == NULL) break;
62✔
543

UNCOV
544
    SJson *item = tjsonCreateObject();
×
UNCOV
545
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
×
546

547
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "status", i642str(status)), pObj, &lino, _OVER);
×
UNCOV
548
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "id", i642str(pObj->id)), pObj, &lino, _OVER);
×
549
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "replicaId", i642str(pObj->replicaId)), pObj, &lino, _OVER);
×
550
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "leaderId0", i642str(pObj->leadersId[0])), pObj, &lino, _OVER);
×
551
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "leaderId1", i642str(pObj->leadersId[1])), 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);
×
554
    sdbRelease(pSdb, pObj);
×
555
  }
556
_OVER:
62✔
557
  if (code != 0) mError("failed to dump snode info at line:%d since %s", lino, tstrerror(code));
62✔
558
}
62✔
559

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

UNCOV
566
  while (1) {
×
567
    SBnodeObj *pObj = NULL;
62✔
568
    pIter = sdbFetch(pSdb, SDB_BNODE, pIter, (void **)&pObj);
62✔
569
    if (pIter == NULL) break;
62✔
570

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

582
void dumpQnode(SSdb *pSdb, SJson *json) {
62✔
583
  int32_t code = 0;
62✔
584
  int32_t lino = 0;
62✔
585
  void  *pIter = NULL;
62✔
UNCOV
586
  ESdbStatus status;
×
587
  SJson *items = tjsonAddArrayToObject(json, "qnodes");
62✔
588

UNCOV
589
  while (1) {
×
590
    SQnodeObj *pObj = NULL;
62✔
591
    pIter = sdbFetchAll(pSdb, SDB_QNODE, pIter, (void **)&pObj, &status, false);
62✔
592
    if (pIter == NULL) break;
62✔
593

UNCOV
594
    SJson *item = tjsonCreateObject();
×
UNCOV
595
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
×
596

597
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "status", i642str(status)), pObj, &lino, _OVER);
×
UNCOV
598
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "id", i642str(pObj->id)), pObj, &lino, _OVER);
×
599
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)), pObj, &lino, _OVER);
×
600
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)), pObj, &lino, _OVER);
×
601
    sdbRelease(pSdb, pObj);
×
602
  }
603
_OVER:
62✔
604
  if (code != 0) mError("failed to dump qnode info at line:%d since %s", lino, tstrerror(code));
62✔
605
}
62✔
606

607
void dumpMnode(SSdb *pSdb, SJson *json) {
62✔
608
  int32_t code = 0;
62✔
609
  int32_t lino = 0;
62✔
610
  void  *pIter = NULL;
62✔
UNCOV
611
  ESdbStatus status;
×
612
  SJson *items = tjsonAddArrayToObject(json, "mnodes");
62✔
613

614
  while (1) {
46✔
615
    SMnodeObj *pObj = NULL;
108✔
616
    pIter = sdbFetchAll(pSdb, SDB_MNODE, pIter, (void **)&pObj, &status, false);
108✔
617
    if (pIter == NULL) break;
108✔
618

619
    SJson *item = tjsonCreateObject();
46✔
620
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
46✔
621

622
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "status", i642str(status)), pObj, &lino, _OVER);
46✔
623
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "id", i642str(pObj->id)), pObj, &lino, _OVER);
46✔
624
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)), pObj, &lino, _OVER);
46✔
625
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)), pObj, &lino, _OVER);
46✔
626
    sdbRelease(pSdb, pObj);
46✔
627
  }
628
_OVER:
62✔
629
  if (code != 0) mError("failed to dump mnode info at line:%d since %s", lino, tstrerror(code));
62✔
630
}
62✔
631

632
void dumpCluster(SSdb *pSdb, SJson *json) {
62✔
633
  int32_t code = 0;
62✔
634
  int32_t lino = 0;
62✔
635

636
  void  *pIter = NULL;
62✔
UNCOV
637
  ESdbStatus status;
×
638
  SJson *items = tjsonAddArrayToObject(json, "clusters");
62✔
639

640
  while (1) {
46✔
641
    SClusterObj *pObj = NULL;
108✔
642
    pIter = sdbFetchAll(pSdb, SDB_CLUSTER, pIter, (void **)&pObj, &status, false);
108✔
643
    if (pIter == NULL) break;
108✔
644

645
    SJson *item = tjsonCreateObject();
46✔
646
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
46✔
647

648
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "status", i642str(status)), pObj, &lino, _OVER);
46✔
649
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "id", i642str(pObj->id)), pObj, &lino, _OVER);
46✔
650
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)), pObj, &lino, _OVER);
46✔
651
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)), pObj, &lino, _OVER);
46✔
652
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "name", pObj->name), pObj, &lino, _OVER);
46✔
653
    sdbRelease(pSdb, pObj);
46✔
654
  }
655

656
_OVER:
62✔
657
  if (code != 0) mError("failed to dump cluster info at line:%d since %s", lino, tstrerror(code));
62✔
658
}
62✔
659

660
void dumpTrans(SSdb *pSdb, SJson *json) {
62✔
661
  int32_t code = 0;
62✔
662
  int32_t lino = 0;
62✔
663
  void  *pIter = NULL;
62✔
UNCOV
664
  ESdbStatus status;
×
665
  SJson *items = tjsonAddArrayToObject(json, "transactions");
62✔
666

UNCOV
667
  while (1) {
×
668
    STrans *pObj = NULL;
62✔
669
    pIter = sdbFetchAll(pSdb, SDB_TRANS, pIter, (void **)&pObj, &status, false);
62✔
670
    if (pIter == NULL) break;
62✔
671

UNCOV
672
    SJson *item = tjsonCreateObject();
×
UNCOV
673
    RETRIEVE_CHECK_GOTO(tjsonAddItemToArray(items, item), pObj, &lino, _OVER);
×
674

675
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "status", i642str(status)), pObj, &lino, _OVER);
×
UNCOV
676
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "id", i642str(pObj->id)), pObj, &lino, _OVER);
×
677
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "stage", i642str(pObj->stage)), pObj, &lino, _OVER);
×
678
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "policy", i642str(pObj->policy)), pObj, &lino, _OVER);
×
679
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "conflict", i642str(pObj->conflict)), pObj, &lino, _OVER);
×
680
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "exec", i642str(pObj->exec)), pObj, &lino, _OVER);
×
681
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "oper", i642str(pObj->oper)), pObj, &lino, _OVER);
×
682
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)), pObj, &lino, _OVER);
×
683
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "dbname", pObj->dbname), pObj, &lino, _OVER);
×
684
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "stbname", pObj->stbname), pObj, &lino, _OVER);
×
685
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "opername", pObj->opername), pObj, &lino, _OVER);
×
686
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "commitLogNum", i642str(taosArrayGetSize(pObj->commitActions))),
×
687
                        pObj, &lino, _OVER);
688
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "redoActionNum", i642str(taosArrayGetSize(pObj->redoActions))),
×
689
                        pObj, &lino, _OVER);
690
    RETRIEVE_CHECK_GOTO(tjsonAddStringToObject(item, "undoActionNum", i642str(taosArrayGetSize(pObj->undoActions))),
×
691
                        pObj, &lino, _OVER);
692
    sdbRelease(pSdb, pObj);
×
693
  }
694

695
_OVER:
62✔
696
  if (code != 0) mError("failed to dump trans info at line:%d since %s", lino, tstrerror(code));
62✔
697
}
62✔
698

699
void dumpHeader(SSdb *pSdb, SJson *json) {
62✔
700
  int32_t code = 0;
62✔
701
  int32_t lino = 0;
62✔
702
  TAOS_CHECK_GOTO(tjsonAddStringToObject(json, "sver", i642str(1)), &lino, _OVER);
62✔
703
  TAOS_CHECK_GOTO(tjsonAddStringToObject(json, "applyIndex", i642str(pSdb->applyIndex)), &lino, _OVER);
62✔
704
  TAOS_CHECK_GOTO(tjsonAddStringToObject(json, "applyTerm", i642str(pSdb->applyTerm)), &lino, _OVER);
62✔
705
  TAOS_CHECK_GOTO(tjsonAddStringToObject(json, "applyConfig", i642str(pSdb->applyConfig)), &lino, _OVER);
62✔
706

707
  SJson *maxIdsJson = tjsonCreateObject();
62✔
708
  TAOS_CHECK_GOTO(tjsonAddItemToObject(json, "maxIds", maxIdsJson), &lino, _OVER);
62✔
709
  for (int32_t i = 0; i < SDB_MAX; ++i) {
2,666✔
710
    if (i == 5) continue;
2,604✔
711
    int64_t maxId = 0;
2,542✔
712
    if (i < SDB_MAX) {
2,542✔
713
      maxId = pSdb->maxId[i];
2,542✔
714
    }
715
    TAOS_CHECK_GOTO(tjsonAddStringToObject(maxIdsJson, sdbTableName(i), i642str(maxId)), &lino, _OVER);
2,542✔
716
  }
717

718
  SJson *tableVersJson = tjsonCreateObject();
62✔
719
  TAOS_CHECK_GOTO(tjsonAddItemToObject(json, "tableVers", tableVersJson), &lino, _OVER);
62✔
720
  for (int32_t i = 0; i < SDB_MAX; ++i) {
2,666✔
721
    int64_t tableVer = 0;
2,604✔
722
    if (i < SDB_MAX) {
2,604✔
723
      tableVer = pSdb->tableVer[i];
2,604✔
724
    }
725
    TAOS_CHECK_GOTO(tjsonAddStringToObject(tableVersJson, sdbTableName(i), i642str(tableVer)), &lino, _OVER);
2,604✔
726
  }
727

728
_OVER:
62✔
729
  if (code != 0) mError("failed to dump sdb info at line:%d since %s", lino, tstrerror(code));
62✔
730
}
62✔
731

732
int32_t mndDumpSdb() {
62✔
733
  mInfo("start to dump sdb info to sdb.json");
62✔
734

735
  char path[PATH_MAX * 2] = {0};
62✔
736
  (void)snprintf(path, sizeof(path), "%s%smnode", tsDataDir, TD_DIRSEP);
62✔
737

738
  SMsgCb msgCb = {0};
62✔
739
  msgCb.reportStartupFp = reportStartup;
62✔
740
  msgCb.sendReqFp = sendReq;
62✔
741
  msgCb.sendSyncReqFp = sendSyncReq;
62✔
742
  msgCb.sendRspFp = sendRsp;
62✔
743
  msgCb.mgmt = (SMgmtWrapper *)(&msgCb);  // hack
62✔
744
  tmsgSetDefault(&msgCb);
62✔
745

746
  TAOS_CHECK_RETURN(walInit(NULL));
62✔
747
  TAOS_CHECK_RETURN(syncInit());
62✔
748

749
  SMnodeOpt opt = {.msgCb = msgCb};
62✔
750
  SMnode   *pMnode = mndOpen(path, &opt);
62✔
751
  if (pMnode == NULL) return -1;
62✔
752

753
  SSdb  *pSdb = pMnode->pSdb;
62✔
754
  SJson *json = tjsonCreateObject();
62✔
755
  dumpHeader(pSdb, json);
62✔
756
  dumpFunc(pSdb, json);
62✔
757
  dumpDb(pSdb, json);
62✔
758
  dumpStb(pSdb, json);
62✔
759
  dumpSma(pSdb, json);
62✔
760
  dumpVgroup(pSdb, json);
62✔
761
  dumpTopic(pSdb, json);
62✔
762
  dumpConsumer(pSdb, json);
62✔
763
  dumpSubscribe(pSdb, json);
62✔
764
  //  dumpOffset(pSdb, json);
765
  dumpStream(pSdb, json);
62✔
766
  dumpAcct(pSdb, json);
62✔
767
  dumpAuth(pSdb, json);
62✔
768
  dumpUser(pSdb, json);
62✔
769
  dumpDnode(pSdb, json);
62✔
770
  dumpSnode(pSdb, json);
62✔
771
  dumpBnode(pSdb, json);
62✔
772
  dumpQnode(pSdb, json);
62✔
773
  dumpMnode(pSdb, json);
62✔
774
  dumpCluster(pSdb, json);
62✔
775
  dumpTrans(pSdb, json);
62✔
776

777
  char     *pCont = tjsonToString(json);
62✔
778
  int32_t   contLen = strlen(pCont);
62✔
779
  char      file[] = "sdb.json";
62✔
780
  TdFilePtr pFile = taosOpenFile(file, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_WRITE_THROUGH);
62✔
781
  if (pFile == NULL) {
62✔
UNCOV
782
    mError("failed to write %s since %s", file, terrstr());
×
UNCOV
783
    return terrno;
×
784
  }
785
  TAOS_CHECK_RETURN(taosWriteFile(pFile, pCont, contLen));
62✔
UNCOV
786
  TAOS_CHECK_RETURN(taosWriteFile(pFile, "\n", 1));
×
UNCOV
787
  TAOS_CHECK_RETURN(taosFsyncFile(pFile));
×
788
  TAOS_CHECK_RETURN(taosCloseFile(&pFile));
×
789
  tjsonDelete(json);
×
790
  taosMemoryFree(pCont);
×
791

792
  mInfo("dump sdb info success");
×
UNCOV
793
  return 0;
×
794
}
795

UNCOV
796
static SMnode *mndPrepareMnode() {
×
UNCOV
797
  int32_t code = 0;
×
798
  char    path[PATH_MAX * 2] = {0};
×
799
  (void)snprintf(path, sizeof(path), "%s%smnode", tsDataDir, TD_DIRSEP);
×
800

801
  SMsgCb msgCb = {0};
×
UNCOV
802
  msgCb.reportStartupFp = reportStartup;
×
803
  msgCb.sendReqFp = sendReq;
×
804
  msgCb.sendSyncReqFp = sendSyncReq;
×
805
  msgCb.sendRspFp = sendRsp;
×
806
  msgCb.mgmt = (SMgmtWrapper *)(&msgCb);  // hack
×
807
  tmsgSetDefault(&msgCb);
×
808

809
  if ((code = walInit(NULL)) != 0) {
×
UNCOV
810
    terrno = code;
×
811
    return NULL;
×
812
  }
813
  if ((code = syncInit()) != 0) {
×
UNCOV
814
    terrno = code;
×
815
    return NULL;
×
816
  }
817

UNCOV
818
  SMnodeOpt opt = {.msgCb = msgCb};
×
UNCOV
819
  SMnode   *pMnode = mndOpen(path, &opt);
×
820

821
  return pMnode;
×
822
}
823

UNCOV
824
int32_t mndDeleteTrans() {
×
UNCOV
825
  mInfo("start to dump sdb info to sdb.json");
×
826

827
  SMnode *pMnode = mndPrepareMnode();
×
UNCOV
828
  if (pMnode == NULL) return terrno;
×
829

830
  TAOS_CHECK_RETURN(sdbWriteFileForDump(pMnode->pSdb, 0));
×
831

832
  mInfo("dump sdb info success");
×
833

834
  return 0;
×
835
}
836

UNCOV
837
static SJson *mndLoadSdbJson(char *path) {
×
UNCOV
838
  int32_t   code = 0;
×
839
  TdFilePtr pFile = NULL;
×
840
  char     *pData = NULL;
×
841
  SJson    *pJson = NULL;
×
842

843
  mInfo("start to load sdb info from sdb.json");
×
UNCOV
844
  pFile = taosOpenFile(path, TD_FILE_READ);
×
845
  if (pFile == NULL) {
×
846
    code = terrno;
×
847
    mError("failed to open file:%s since %s", path, tstrerror(code));
×
848
    goto _OVER;
×
849
  }
850

UNCOV
851
  int64_t size = 0;
×
UNCOV
852
  code = taosFStatFile(pFile, &size, NULL);
×
853
  if (code != 0) {
×
854
    mError("failed to fstat file:%s since %s", path, tstrerror(code));
×
855
    goto _OVER;
×
856
  }
857

UNCOV
858
  pData = taosMemoryMalloc(size + 1);
×
UNCOV
859
  if (pData == NULL) {
×
860
    code = terrno;
×
861
    goto _OVER;
×
862
  }
863

UNCOV
864
  if (taosReadFile(pFile, pData, size) != size) {
×
UNCOV
865
    code = terrno;
×
866
    mError("failed to read file:%s since %s", path, tstrerror(code));
×
867
    goto _OVER;
×
868
  }
869

UNCOV
870
  pData[size] = '\0';
×
871

872
  pJson = tjsonParse(pData);
×
UNCOV
873
  if (pJson == NULL) {
×
874
    code = TSDB_CODE_INVALID_JSON_FORMAT;
×
875
    goto _OVER;
×
876
  }
877

UNCOV
878
  terrno = code;
×
UNCOV
879
  return pJson;
×
880

881
_OVER:
×
UNCOV
882
  if (pFile != NULL) taosCloseFile(&pFile);
×
883
  if (pData != NULL) taosMemoryFree(pData);
×
884
  mError("failed to load sdb json, since %s", tstrerror(code));
×
885
  terrno = code;
×
886
  return NULL;
×
887
}
888

UNCOV
889
static int32_t mndGenerateVgroup(SMnode *pMnode, SJson *pJson) {
×
UNCOV
890
  int32_t code = 0;
×
891

892
  mInfo("start to generate vgroup from sdb.json");
×
893

894
  SJson *pVgroups = tjsonGetObjectItem(pJson, "vgroups");
×
895

896
  int32_t nVgroups = tjsonGetArraySize(pVgroups);
×
897

898
  for (int32_t i = 0; i < nVgroups; ++i) {
×
UNCOV
899
    SVgObj group = {0};
×
900
    SJson *pNodeVgroup = tjsonGetArrayItem(pVgroups, i);
×
901

902
    tjsonGetNumberValue(pNodeVgroup, "vgId", group.vgId, code);
×
UNCOV
903
    if (code) return code;
×
904
    tjsonGetNumberValue(pNodeVgroup, "createdTime", group.createdTime, code);
×
905
    if (code) return code;
×
906
    tjsonGetNumberValue(pNodeVgroup, "updateTime", group.updateTime, code);
×
907
    if (code) return code;
×
908
    tjsonGetNumberValue(pNodeVgroup, "version", group.version, code);
×
909
    if (code) return code;
×
910
    tjsonGetNumberValue(pNodeVgroup, "hashBegin", group.hashBegin, code);
×
911
    if (code) return code;
×
912
    tjsonGetNumberValue(pNodeVgroup, "hashEnd", group.hashEnd, code);
×
913
    if (code) return code;
×
914
    code = tjsonGetStringValue(pNodeVgroup, "db", group.dbName);
×
915
    if (code) return code;
×
916
    mInfo("group.dbname %s", group.dbName);
×
917
    tjsonGetNumberValue(pNodeVgroup, "dbUid", group.dbUid, code);
×
918
    if (code) return code;
×
919
    tjsonGetNumberValue(pNodeVgroup, "isTsma", group.isTsma, code);
×
920
    if (code) return code;
×
921
    tjsonGetNumberValue(pNodeVgroup, "replica", group.replica, code);
×
922
    if (code) return code;
×
923
    tjsonGetNumberValue(pNodeVgroup, "syncConfChangeVer", group.syncConfChangeVer, code);
×
924
    if (code) return code;
×
925

926
    SJson *pReplicas = tjsonGetObjectItem(pNodeVgroup, "replicas");
×
UNCOV
927
    for (int8_t j = 0; j < group.replica; ++j) {
×
928
      SVnodeGid *pVgid = &group.vnodeGid[j];
×
929

930
      SJson *pVnodeGid = tjsonGetArrayItem(pReplicas, j);
×
UNCOV
931
      tjsonGetNumberValue(pVnodeGid, "dnodeId", pVgid->dnodeId, code);
×
932
      if (code) return code;
×
933
      mInfo("SVnodeGid %d", pVgid->dnodeId);
×
934
    }
935

UNCOV
936
    mInfo("group.dbname %s", group.dbName);
×
UNCOV
937
    SSdbRaw *pRaw = mndVgroupActionEncode(&group);
×
938
    if (pRaw == NULL) {
×
939
      mError("failed to encode while finish trans since %s", terrstr());
×
940
      return terrno;
×
941
    }
942
    TAOS_CHECK_RETURN(sdbSetRawStatus(pRaw, SDB_STATUS_READY));
×
943

944
    mInfo("sdbWrite vgroup raw obj");
×
UNCOV
945
    code = sdbWrite(pMnode->pSdb, pRaw);
×
946
    if (code != 0) {
×
947
      mError("failed to write sdb since %s", terrstr());
×
948
    }
949
  }
950

UNCOV
951
  return 0;
×
952
}
953

UNCOV
954
int32_t mndModifySdb(char *path) {
×
UNCOV
955
  int32_t code = 0;
×
956
  SJson  *pJson = NULL;
×
957

958
  mInfo("start to modify sdb info from sdb.json");
×
959

960
  SMnode *pMnode = mndPrepareMnode();
×
UNCOV
961
  if (pMnode == NULL) return terrno;
×
962

963
  pJson = mndLoadSdbJson(path);
×
UNCOV
964
  if (pJson == NULL) return terrno;
×
965

966
  TAOS_CHECK_RETURN(mndGenerateVgroup(pMnode, pJson));
×
967

968
  mInfo("write back to sdb file");
×
UNCOV
969
  TAOS_CHECK_RETURN(sdbWriteFileForDump(pMnode->pSdb, -1));
×
970

971
  return 0;
×
972
_OVER:
973
  if (pJson != NULL) cJSON_Delete(pJson);
974

975
  if (code != 0) {
976
    mError("failed to modify sdb, file:%s since %s", path, tstrerror(code));
977
  }
978

979
  TAOS_RETURN(code);
980
}
981

982
#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