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

taosdata / TDengine / #3621

22 Feb 2025 11:44AM UTC coverage: 2.037% (-61.5%) from 63.573%
#3621

push

travis-ci

web-flow
Merge pull request #29874 from taosdata/merge/mainto3.0

merge: from main to 3.0 branch

4357 of 287032 branches covered (1.52%)

Branch coverage included in aggregate %.

0 of 174 new or added lines in 18 files covered. (0.0%)

213359 existing lines in 469 files now uncovered.

7260 of 283369 relevant lines covered (2.56%)

23737.72 hits per line

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

0.0
/source/dnode/mgmt/node_mgmt/src/dmNodes.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 "dmMgmt.h"
18
#include "dmUtil.h"
19
#include "monitor.h"
20
#include "audit.h"
21

UNCOV
22
int32_t dmOpenNode(SMgmtWrapper *pWrapper) {
×
UNCOV
23
  int32_t code = 0;
×
UNCOV
24
  SDnode *pDnode = pWrapper->pDnode;
×
25

UNCOV
26
  if (taosMkDir(pWrapper->path) != 0) {
×
27
    code = terrno;
×
28
    dError("node:%s, failed to create dir:%s since %s", pWrapper->name, pWrapper->path, tstrerror(code));
×
29
    return code;
×
30
  }
31

UNCOV
32
  SMgmtOutputOpt output = {0};
×
UNCOV
33
  SMgmtInputOpt  input = dmBuildMgmtInputOpt(pWrapper);
×
34

UNCOV
35
  dInfo("node:%s, start to open", pWrapper->name);
×
UNCOV
36
  tmsgSetDefault(&input.msgCb);
×
UNCOV
37
  if ((code = (*pWrapper->func.openFp)(&input, &output)) != 0) {
×
38
    dError("node:%s, failed to open since %s", pWrapper->name, tstrerror(code));
×
39
    return code;
×
40
  }
UNCOV
41
  dInfo("node:%s, has been opened", pWrapper->name);
×
UNCOV
42
  pWrapper->deployed = true;
×
43

UNCOV
44
  if (output.pMgmt != NULL) {
×
UNCOV
45
    pWrapper->pMgmt = output.pMgmt;
×
46
  }
47

UNCOV
48
  dmReportStartup(pWrapper->name, "opened");
×
UNCOV
49
  return 0;
×
50
}
51

UNCOV
52
int32_t dmStartNode(SMgmtWrapper *pWrapper) {
×
UNCOV
53
  int32_t code = 0;
×
UNCOV
54
  if (pWrapper->func.startFp != NULL) {
×
UNCOV
55
    dDebug("node:%s, start to start", pWrapper->name);
×
UNCOV
56
    if ((code = (*pWrapper->func.startFp)(pWrapper->pMgmt)) != 0) {
×
57
      dError("node:%s, failed to start since %s", pWrapper->name, tstrerror(code));
×
58
      return code;
×
59
    }
UNCOV
60
    dDebug("node:%s, has been started", pWrapper->name);
×
61
  }
62

UNCOV
63
  dmReportStartup(pWrapper->name, "started");
×
UNCOV
64
  return 0;
×
65
}
66

UNCOV
67
void dmStopNode(SMgmtWrapper *pWrapper) {
×
UNCOV
68
  if (pWrapper->func.stopFp != NULL && pWrapper->pMgmt != NULL) {
×
UNCOV
69
    dDebug("node:%s, start to stop", pWrapper->name);
×
UNCOV
70
    (*pWrapper->func.stopFp)(pWrapper->pMgmt);
×
UNCOV
71
    dDebug("node:%s, has been stopped", pWrapper->name);
×
72
  }
UNCOV
73
}
×
74

UNCOV
75
void dmCloseNode(SMgmtWrapper *pWrapper) {
×
UNCOV
76
  dInfo("node:%s, start to close", pWrapper->name);
×
UNCOV
77
  pWrapper->deployed = false;
×
78

UNCOV
79
  while (pWrapper->refCount > 0) {
×
80
    taosMsleep(10);
×
81
  }
82

UNCOV
83
  (void)taosThreadRwlockWrlock(&pWrapper->lock);
×
UNCOV
84
  if (pWrapper->pMgmt != NULL) {
×
UNCOV
85
    (*pWrapper->func.closeFp)(pWrapper->pMgmt);
×
UNCOV
86
    pWrapper->pMgmt = NULL;
×
87
  }
UNCOV
88
  (void)taosThreadRwlockUnlock(&pWrapper->lock);
×
89

UNCOV
90
  dInfo("node:%s, has been closed", pWrapper->name);
×
UNCOV
91
}
×
92

UNCOV
93
static int32_t dmOpenNodes(SDnode *pDnode) {
×
UNCOV
94
  int32_t code = 0;
×
UNCOV
95
  for (EDndNodeType ntype = DNODE; ntype < NODE_END; ++ntype) {
×
UNCOV
96
    SMgmtWrapper *pWrapper = &pDnode->wrappers[ntype];
×
UNCOV
97
    if (!pWrapper->required) continue;
×
UNCOV
98
    if ((code = dmOpenNode(pWrapper)) != 0) {
×
99
      dError("node:%s, failed to open since %s", pWrapper->name, tstrerror(code));
×
100
      return code;
×
101
    }
102
  }
103

UNCOV
104
  auditSetDnodeId(dmGetDnodeId(&pDnode->data));
×
UNCOV
105
  monSetDnodeId(dmGetDnodeId(&pDnode->data));
×
106

UNCOV
107
  dmSetStatus(pDnode, DND_STAT_RUNNING);
×
UNCOV
108
  return 0;
×
109
}
110

UNCOV
111
static int32_t dmStartNodes(SDnode *pDnode) {
×
UNCOV
112
  int32_t code = 0;
×
UNCOV
113
  for (EDndNodeType ntype = DNODE; ntype < NODE_END; ++ntype) {
×
UNCOV
114
    SMgmtWrapper *pWrapper = &pDnode->wrappers[ntype];
×
UNCOV
115
    if (!pWrapper->required) continue;
×
UNCOV
116
    if ((code = dmStartNode(pWrapper)) != 0) {
×
117
      dError("node:%s, failed to start since %s", pWrapper->name, tstrerror(code));
×
118
      return code;
×
119
    }
120
  }
121

UNCOV
122
  dInfo("The daemon initialized successfully");
×
UNCOV
123
  dmReportStartup("The daemon", "initialized successfully");
×
UNCOV
124
  return 0;
×
125
}
126

UNCOV
127
static void dmStopNodes(SDnode *pDnode) {
×
UNCOV
128
  for (EDndNodeType n = DNODE; n < NODE_END; ++n) {
×
UNCOV
129
    SMgmtWrapper *pWrapper = &pDnode->wrappers[n];
×
UNCOV
130
    dmStopNode(pWrapper);
×
131
  }
UNCOV
132
}
×
133

UNCOV
134
static void dmCloseNodes(SDnode *pDnode) {
×
UNCOV
135
  for (EDndNodeType n = DNODE; n < NODE_END; ++n) {
×
UNCOV
136
    SMgmtWrapper *pWrapper = &pDnode->wrappers[n];
×
UNCOV
137
    dmCloseNode(pWrapper);
×
138
  }
UNCOV
139
}
×
140

UNCOV
141
int32_t dmRunDnode(SDnode *pDnode) {
×
UNCOV
142
  int32_t code = 0;
×
UNCOV
143
  int32_t count = 0;
×
UNCOV
144
  if ((code = dmOpenNodes(pDnode)) != 0) {
×
145
    dError("failed to open nodes since %s", tstrerror(code));
×
146
    dmCloseNodes(pDnode);
×
147
    return code;
×
148
  }
149

UNCOV
150
  if ((code = dmStartNodes(pDnode)) != 0) {
×
151
    dError("failed to start nodes since %s", tstrerror(code));
×
152
    dmSetStatus(pDnode, DND_STAT_STOPPED);
×
153
    dmStopNodes(pDnode);
×
154
    dmCloseNodes(pDnode);
×
155
    return code;
×
156
  }
157

158
  while (1) {
UNCOV
159
    if (pDnode->stop) {
×
UNCOV
160
      dInfo("The daemon is about to stop");
×
UNCOV
161
      dmSetStatus(pDnode, DND_STAT_STOPPED);
×
UNCOV
162
      dmStopNodes(pDnode);
×
UNCOV
163
      dmCloseNodes(pDnode);
×
UNCOV
164
      return 0;
×
165
    }
166

UNCOV
167
    if (count == 10) {
×
UNCOV
168
      if(osUpdate() != 0) {
×
169
        dError("failed to update os info");
×
170
      }
UNCOV
171
      count = 0;
×
172
    } else {
UNCOV
173
      count++;
×
174
    }
175

UNCOV
176
    taosMsleep(100);
×
177
  }
178
}
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