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

taosdata / TDengine / #3653

14 Mar 2025 08:10AM UTC coverage: 22.565% (-41.0%) from 63.596%
#3653

push

travis-ci

web-flow
feat(keep): support keep on super table level. (#30097)

* Feat: support use keep while create super table.

* Test(keep): add test for create super table with keep option.

* Feat(keep): Add tmsg for create keep.

* Feat(keep): support alter table option keep.

* Fix(keep): Add baisc test for alter table option.

* Fix(keep): memory leek.

* Feat(keep): add keep to metaEntry&metaCache and fix earliestTs with stn keep.

* Test(keep): add some cases for select with stb keep.

* Fix: fix ci core while alter stb.

* Feat(keep): delete expired data in super table level.

* Feat: remove get stb keep while query.

* Fix : build error.

* Revert "Fix : build error."

This reverts commit 0ed66e4e8.

* Revert "Feat(keep): delete expired data in super table level."

This reverts commit 36330f6b4.

* Fix : build errors.

* Feat : support restart taosd.

* Fix : alter table comment problems.

* Test : add tests for super table keep.

* Fix: change sdb stb reserve size.

* Test: add more tests.

* Feat: Disable normal tables and sub tables from setting the keep parameter

* Fix: add more checks to avoid unknown address.

* Docs: Add docs for stable keep.

* Fix: some review changes.

* Fix: review errors.

49248 of 302527 branches covered (16.28%)

Branch coverage included in aggregate %.

53 of 99 new or added lines in 12 files covered. (53.54%)

155872 existing lines in 443 files now uncovered.

87359 of 302857 relevant lines covered (28.84%)

570004.22 hits per line

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

14.36
/source/dnode/mgmt/node_mgmt/src/dmMonitor.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 "dmNodes.h"
19
#include "audit.h"
20

UNCOV
21
static void dmGetMonitorBasicInfo(SDnode *pDnode, SMonBasicInfo *pInfo) {
×
UNCOV
22
  pInfo->protocol = 1;
×
UNCOV
23
  pInfo->dnode_id = pDnode->data.dnodeId;
×
UNCOV
24
  pInfo->cluster_id = pDnode->data.clusterId;
×
UNCOV
25
  tstrncpy(pInfo->dnode_ep, tsLocalEp, TSDB_EP_LEN);
×
UNCOV
26
}
×
27

28
static void dmGetMonitorBasicInfoBasic(SDnode *pDnode, SMonBasicInfo *pInfo) {
×
29
  pInfo->protocol = 2;
×
30
  pInfo->dnode_id = pDnode->data.dnodeId;
×
31
  pInfo->cluster_id = pDnode->data.clusterId;
×
32
  tstrncpy(pInfo->dnode_ep, tsLocalEp, TSDB_EP_LEN);
×
33
}
×
34

UNCOV
35
static void dmGetMonitorDnodeInfo(SDnode *pDnode, SMonDnodeInfo *pInfo) {
×
36
  // pInfo->uptime = (taosGetTimestampMs() - pDnode->data.rebootTime) / (86400000.0f);
UNCOV
37
  pInfo->uptime = (taosGetTimestampMs() - pDnode->data.rebootTime) / 1000.0f;
×
UNCOV
38
  pInfo->has_mnode = pDnode->wrappers[MNODE].required;
×
UNCOV
39
  pInfo->has_qnode = pDnode->wrappers[QNODE].required;
×
UNCOV
40
  pInfo->has_snode = pDnode->wrappers[SNODE].required;
×
UNCOV
41
  tstrncpy(pInfo->logdir.name, tsLogDir, sizeof(pInfo->logdir.name));
×
UNCOV
42
  pInfo->logdir.size = tsLogSpace.size;
×
UNCOV
43
  tstrncpy(pInfo->tempdir.name, tsTempDir, sizeof(pInfo->tempdir.name));
×
UNCOV
44
  pInfo->tempdir.size = tsTempSpace.size;
×
UNCOV
45
}
×
46

UNCOV
47
static void dmGetDmMonitorInfo(SDnode *pDnode) {
×
UNCOV
48
  SMonDmInfo dmInfo = {0};
×
UNCOV
49
  dmGetMonitorBasicInfo(pDnode, &dmInfo.basic);
×
UNCOV
50
  dmGetMonitorDnodeInfo(pDnode, &dmInfo.dnode);
×
UNCOV
51
  dmGetMonitorSystemInfo(&dmInfo.sys);
×
UNCOV
52
  monSetDmInfo(&dmInfo);
×
UNCOV
53
}
×
54

UNCOV
55
void dmCleanExpriedSamples(SDnode *pDnode) {
×
UNCOV
56
  SMgmtWrapper *pWrapper = &pDnode->wrappers[VNODE];
×
UNCOV
57
  if (dmMarkWrapper(pWrapper) == 0) {
×
UNCOV
58
    if (pWrapper->pMgmt != NULL) {
×
UNCOV
59
      vmCleanExpriedSamples(pWrapper->pMgmt);
×
60
    }
61
  }
UNCOV
62
  dmReleaseWrapper(pWrapper);
×
UNCOV
63
  return;
×
64
}
65

66
static void dmGetDmMonitorInfoBasic(SDnode *pDnode) {
×
67
  SMonDmInfo dmInfo = {0};
×
68
  dmGetMonitorBasicInfoBasic(pDnode, &dmInfo.basic);
×
69
  monSetDmInfo(&dmInfo);
×
70
}
×
71

UNCOV
72
static void dmGetMmMonitorInfo(SDnode *pDnode) {
×
UNCOV
73
  SMgmtWrapper *pWrapper = &pDnode->wrappers[MNODE];
×
UNCOV
74
  if (dmMarkWrapper(pWrapper) == 0) {
×
UNCOV
75
    SMonMmInfo mmInfo = {0};
×
UNCOV
76
    if (pWrapper->pMgmt != NULL) {
×
UNCOV
77
      mmGetMonitorInfo(pWrapper->pMgmt, &mmInfo);
×
78
    }
UNCOV
79
    dmReleaseWrapper(pWrapper);
×
UNCOV
80
    monSetMmInfo(&mmInfo);
×
UNCOV
81
    tFreeSMonMmInfo(&mmInfo);
×
82
  }
UNCOV
83
}
×
84

UNCOV
85
static void dmGetVmMonitorInfo(SDnode *pDnode) {
×
UNCOV
86
  SMgmtWrapper *pWrapper = &pDnode->wrappers[VNODE];
×
UNCOV
87
  if (dmMarkWrapper(pWrapper) == 0) {
×
UNCOV
88
    SMonVmInfo vmInfo = {0};
×
UNCOV
89
    if (pWrapper->pMgmt != NULL) {
×
UNCOV
90
      vmGetMonitorInfo(pWrapper->pMgmt, &vmInfo);
×
91
    }
UNCOV
92
    dmReleaseWrapper(pWrapper);
×
UNCOV
93
    monSetVmInfo(&vmInfo);
×
UNCOV
94
    tFreeSMonVmInfo(&vmInfo);
×
95
  }
UNCOV
96
}
×
97

UNCOV
98
static void dmGetQmMonitorInfo(SDnode *pDnode) {
×
UNCOV
99
  SMgmtWrapper *pWrapper = &pDnode->wrappers[QNODE];
×
UNCOV
100
  if (dmMarkWrapper(pWrapper) == 0) {
×
UNCOV
101
    SMonQmInfo qmInfo = {0};
×
UNCOV
102
    if (pWrapper->pMgmt != NULL) {
×
UNCOV
103
      qmGetMonitorInfo(pWrapper->pMgmt, &qmInfo);
×
104
    }
UNCOV
105
    dmReleaseWrapper(pWrapper);
×
UNCOV
106
    monSetQmInfo(&qmInfo);
×
UNCOV
107
    tFreeSMonQmInfo(&qmInfo);
×
108
  }
UNCOV
109
}
×
110

UNCOV
111
static void dmGetSmMonitorInfo(SDnode *pDnode) {
×
UNCOV
112
  SMgmtWrapper *pWrapper = &pDnode->wrappers[SNODE];
×
UNCOV
113
  if (dmMarkWrapper(pWrapper) == 0) {
×
114
    SMonSmInfo smInfo = {0};
×
115
    if (pWrapper->pMgmt != NULL) {
×
116
      smGetMonitorInfo(pWrapper->pMgmt, &smInfo);
×
117
    }
118
    dmReleaseWrapper(pWrapper);
×
119
    monSetSmInfo(&smInfo);
×
120
    tFreeSMonSmInfo(&smInfo);
×
121
  }
UNCOV
122
}
×
123

UNCOV
124
void dmSendMonitorReport() {
×
UNCOV
125
  if (!tsEnableMonitor || tsMonitorFqdn[0] == 0 || tsMonitorPort == 0) return;
×
UNCOV
126
  dTrace("send monitor report to %s:%u", tsMonitorFqdn, tsMonitorPort);
×
127

UNCOV
128
  SDnode *pDnode = dmInstance();
×
UNCOV
129
  dmGetDmMonitorInfo(pDnode);
×
UNCOV
130
  dmGetMmMonitorInfo(pDnode);
×
UNCOV
131
  dmGetVmMonitorInfo(pDnode);
×
UNCOV
132
  dmGetQmMonitorInfo(pDnode);
×
UNCOV
133
  dmGetSmMonitorInfo(pDnode);
×
UNCOV
134
  monGenAndSendReport();
×
135
}
136

UNCOV
137
void dmMonitorCleanExpiredSamples() {
×
UNCOV
138
  if (!tsEnableMonitor || tsMonitorFqdn[0] == 0 || tsMonitorPort == 0) return;
×
UNCOV
139
  dTrace("clean monitor expired samples");
×
140

UNCOV
141
  SDnode *pDnode = dmInstance();
×
UNCOV
142
  (void)dmCleanExpriedSamples(pDnode);
×
143
}
144

145
// Todo: put this in seperate file in the future
146
void dmSendAuditRecords() { auditSendRecordsInBatch(); }
×
147

148
void dmGetVnodeLoads(SMonVloadInfo *pInfo) {
20✔
149
  SDnode       *pDnode = dmInstance();
20✔
150
  SMgmtWrapper *pWrapper = &pDnode->wrappers[VNODE];
20✔
151
  if (dmMarkWrapper(pWrapper) == 0) {
20!
152
    if (pWrapper->pMgmt != NULL) {
20!
153
      vmGetVnodeLoads(pWrapper->pMgmt, pInfo, false);
20✔
154
    }
155
    dmReleaseWrapper(pWrapper);
20✔
156
  }
157
}
20✔
158

159
void dmGetVnodeLoadsLite(SMonVloadInfo *pInfo) {
×
160
  SDnode       *pDnode = dmInstance();
×
161
  SMgmtWrapper *pWrapper = &pDnode->wrappers[VNODE];
×
162
  if (dmMarkWrapper(pWrapper) == 0) {
×
163
    if (pWrapper->pMgmt != NULL) {
×
164
      vmGetVnodeLoadsLite(pWrapper->pMgmt, pInfo);
×
165
    }
166
    dmReleaseWrapper(pWrapper);
×
167
  }
168
}
×
169

170
void dmGetMnodeLoads(SMonMloadInfo *pInfo) {
20✔
171
  SDnode       *pDnode = dmInstance();
20✔
172
  SMgmtWrapper *pWrapper = &pDnode->wrappers[MNODE];
20✔
173
  if (dmMarkWrapper(pWrapper) == 0) {
20!
174
    if (pWrapper->pMgmt != NULL) {
20!
175
      mmGetMnodeLoads(pWrapper->pMgmt, pInfo);
20✔
176
    }
177
    dmReleaseWrapper(pWrapper);
20✔
178
  }
179
}
20✔
180

181
void dmGetQnodeLoads(SQnodeLoad *pInfo) {
20✔
182
  SDnode       *pDnode = dmInstance();
20✔
183
  SMgmtWrapper *pWrapper = &pDnode->wrappers[QNODE];
20✔
184
  if (dmMarkWrapper(pWrapper) == 0) {
20!
UNCOV
185
    if (pWrapper->pMgmt != NULL) {
×
UNCOV
186
      qmGetQnodeLoads(pWrapper->pMgmt, pInfo);
×
187
    }
UNCOV
188
    dmReleaseWrapper(pWrapper);
×
189
  }
190
}
20✔
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