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

taosdata / TDengine / #3594

24 Jan 2025 08:57AM UTC coverage: 63.086% (-0.2%) from 63.239%
#3594

push

travis-ci

web-flow
Merge pull request #29638 from taosdata/docs/TS-5846-3.0

enh: TDengine modify taosBenchmark new query rule cases and add doc

140232 of 285630 branches covered (49.1%)

Branch coverage included in aggregate %.

218398 of 282844 relevant lines covered (77.22%)

18911829.37 hits per line

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

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

16
#include "tsdb.h"
17
#include "tsdbDataFileRAW.h"
18
#include "tsdbFS2.h"
19
#include "tsdbFSetRAW.h"
20

21
static void tsdbSnapRAWReadFileSetCloseReader(STsdbSnapRAWReader* reader);
22

23
// reader
24
typedef struct SDataFileRAWReaderIter {
25
  int32_t count;
26
  int32_t idx;
27
} SDataFileRAWReaderIter;
28

29
typedef struct STsdbSnapRAWReader {
30
  STsdb*  tsdb;
31
  int64_t ever;
32
  int8_t  type;
33

34
  TFileSetArray* fsetArr;
35

36
  // context
37
  struct {
38
    int32_t    fsetArrIdx;
39
    STFileSet* fset;
40
    bool       isDataDone;
41
  } ctx[1];
42

43
  // reader
44
  SDataFileRAWReaderArray dataReaderArr[1];
45

46
  // iter
47
  SDataFileRAWReaderIter dataIter[1];
48
} STsdbSnapRAWReader;
49

50
int32_t tsdbSnapRAWReaderOpen(STsdb* tsdb, int64_t ever, int8_t type, STsdbSnapRAWReader** reader) {
75✔
51
  int32_t code = 0;
75✔
52
  int32_t lino = 0;
75✔
53

54
  reader[0] = taosMemoryCalloc(1, sizeof(STsdbSnapRAWReader));
75!
55
  if (reader[0] == NULL) return terrno;
75!
56

57
  reader[0]->tsdb = tsdb;
75✔
58
  reader[0]->ever = ever;
75✔
59
  reader[0]->type = type;
75✔
60

61
  code = tsdbFSCreateRefSnapshot(tsdb->pFS, &reader[0]->fsetArr);
75✔
62
  TSDB_CHECK_CODE(code, lino, _exit);
75!
63

64
_exit:
75✔
65
  if (code) {
75!
66
    tsdbError("vgId:%d %s failed at line %d since %s, sver:0, ever:%" PRId64 " type:%d", TD_VID(tsdb->pVnode), __func__,
×
67
              lino, tstrerror(code), ever, type);
68
    tsdbFSDestroyRefSnapshot(&reader[0]->fsetArr);
×
69
    taosMemoryFree(reader[0]);
×
70
    reader[0] = NULL;
×
71
  } else {
72
    tsdbInfo("vgId:%d, tsdb snapshot raw reader opened. sver:0, ever:%" PRId64 " type:%d", TD_VID(tsdb->pVnode), ever,
75!
73
             type);
74
  }
75
  return code;
75✔
76
}
77

78
void tsdbSnapRAWReaderClose(STsdbSnapRAWReader** reader) {
75✔
79
  if (reader[0] == NULL) return;
75!
80

81
  int32_t code = 0;
75✔
82
  int32_t lino = 0;
75✔
83

84
  STsdb* tsdb = reader[0]->tsdb;
75✔
85

86
  TARRAY2_DESTROY(reader[0]->dataReaderArr, tsdbDataFileRAWReaderClose);
75!
87
  tsdbFSDestroyRefSnapshot(&reader[0]->fsetArr);
75✔
88
  taosMemoryFree(reader[0]);
75!
89
  reader[0] = NULL;
75✔
90
  return;
75✔
91
}
92

93
static int32_t tsdbSnapRAWReadFileSetOpenReader(STsdbSnapRAWReader* reader) {
135✔
94
  int32_t code = 0;
135✔
95
  int32_t lino = 0;
135✔
96

97
  // data
98
  for (int32_t ftype = 0; ftype < TSDB_FTYPE_MAX; ftype++) {
675✔
99
    if (reader->ctx->fset->farr[ftype] == NULL) {
540✔
100
      continue;
332✔
101
    }
102
    STFileObj*               fobj = reader->ctx->fset->farr[ftype];
208✔
103
    SDataFileRAWReader*      dataReader;
104
    SDataFileRAWReaderConfig config = {
208✔
105
        .tsdb = reader->tsdb,
208✔
106
        .szPage = reader->tsdb->pVnode->config.tsdbPageSize,
208✔
107
        .file = fobj->f[0],
108
    };
109
    code = tsdbDataFileRAWReaderOpen(NULL, &config, &dataReader);
208✔
110
    TSDB_CHECK_CODE(code, lino, _exit);
208!
111

112
    code = TARRAY2_APPEND(reader->dataReaderArr, dataReader);
208✔
113
    TSDB_CHECK_CODE(code, lino, _exit);
208!
114
  }
115

116
  // stt
117
  SSttLvl* lvl;
118
  TARRAY2_FOREACH(reader->ctx->fset->lvlArr, lvl) {
264✔
119
    STFileObj* fobj;
120
    TARRAY2_FOREACH(lvl->fobjArr, fobj) {
259✔
121
      SDataFileRAWReader*      dataReader;
122
      SDataFileRAWReaderConfig config = {
130✔
123
          .tsdb = reader->tsdb,
130✔
124
          .szPage = reader->tsdb->pVnode->config.tsdbPageSize,
130✔
125
          .file = fobj->f[0],
126
      };
127
      code = tsdbDataFileRAWReaderOpen(NULL, &config, &dataReader);
130✔
128
      TSDB_CHECK_CODE(code, lino, _exit);
130!
129

130
      code = TARRAY2_APPEND(reader->dataReaderArr, dataReader);
130✔
131
      TSDB_CHECK_CODE(code, lino, _exit);
130!
132
    }
133
  }
134

135
_exit:
135✔
136
  if (code) {
135!
137
    tsdbSnapRAWReadFileSetCloseReader(reader);
×
138
    TSDB_ERROR_LOG(TD_VID(reader->tsdb->pVnode), code, lino);
×
139
  }
140
  return code;
135✔
141
}
142

143
static void tsdbSnapRAWReadFileSetCloseReader(STsdbSnapRAWReader* reader) {
135✔
144
  TARRAY2_CLEAR(reader->dataReaderArr, tsdbDataFileRAWReaderClose);
473!
145
}
135✔
146

147
static int32_t tsdbSnapRAWReadFileSetOpenIter(STsdbSnapRAWReader* reader) {
135✔
148
  reader->dataIter->count = TARRAY2_SIZE(reader->dataReaderArr);
135✔
149
  reader->dataIter->idx = 0;
135✔
150
  return 0;
135✔
151
}
152

153
static void tsdbSnapRAWReadFileSetCloseIter(STsdbSnapRAWReader* reader) {
135✔
154
  reader->dataIter->count = 0;
135✔
155
  reader->dataIter->idx = 0;
135✔
156
}
135✔
157

158
static int64_t tsdbSnapRAWReadPeek(SDataFileRAWReader* reader) {
4,195✔
159
  int64_t size = TMIN(reader->config->file.size - reader->ctx->offset, TSDB_SNAP_DATA_PAYLOAD_SIZE);
4,195✔
160
  return size;
4,195✔
161
}
162

163
static SDataFileRAWReader* tsdbSnapRAWReaderIterNext(STsdbSnapRAWReader* reader) {
4,330✔
164
  while (reader->dataIter->idx < reader->dataIter->count) {
4,668✔
165
    SDataFileRAWReader* dataReader = TARRAY2_GET(reader->dataReaderArr, reader->dataIter->idx);
4,533✔
166
    if (dataReader->ctx->offset < dataReader->config->file.size) {
4,533✔
167
      return dataReader;
4,195✔
168
    }
169
    reader->dataIter->idx++;
338✔
170
  }
171
  return NULL;
135✔
172
}
173

174
static int32_t tsdbSnapRAWReadNext(STsdbSnapRAWReader* reader, SSnapDataHdr** ppData) {
4,330✔
175
  int32_t code = 0;
4,330✔
176
  int32_t lino = 0;
4,330✔
177
  int8_t  type = reader->type;
4,330✔
178
  ppData[0] = NULL;
4,330✔
179

180
  SDataFileRAWReader* dataReader = tsdbSnapRAWReaderIterNext(reader);
4,330✔
181
  if (dataReader == NULL) {
4,330✔
182
    return 0;
135✔
183
  }
184

185
  // prepare
186
  int64_t dataLength = tsdbSnapRAWReadPeek(dataReader);
4,195✔
187

188
  void* pBuf = taosMemoryCalloc(1, sizeof(SSnapDataHdr) + sizeof(STsdbDataRAWBlockHeader) + dataLength);
4,195!
189
  if (pBuf == NULL) {
4,195!
190
    code = terrno;
×
191
    TSDB_CHECK_CODE(code, lino, _exit);
×
192
  }
193
  SSnapDataHdr* pHdr = pBuf;
4,195✔
194
  pHdr->type = type;
4,195✔
195
  pHdr->size = sizeof(STsdbDataRAWBlockHeader) + dataLength;
4,195✔
196

197
  // read
198
  STsdbDataRAWBlockHeader* pBlock = (void*)pHdr->data;
4,195✔
199
  pBlock->offset = dataReader->ctx->offset;
4,195✔
200
  pBlock->dataLength = dataLength;
4,195✔
201

202
  code = tsdbDataFileRAWReadBlockData(dataReader, pBlock);
4,195✔
203
  TSDB_CHECK_CODE(code, lino, _exit);
4,195!
204

205
  // finish
206
  dataReader->ctx->offset += pBlock->dataLength;
4,195✔
207
  ppData[0] = pBuf;
4,195✔
208

209
_exit:
4,195✔
210
  if (code) {
4,195!
211
    taosMemoryFree(pBuf);
×
212
    pBuf = NULL;
×
213
    TSDB_ERROR_LOG(TD_VID(reader->tsdb->pVnode), code, lino);
×
214
  }
215
  return code;
4,195✔
216
}
217

218
static int32_t tsdbSnapRAWReadData(STsdbSnapRAWReader* reader, uint8_t** ppData) {
4,330✔
219
  int32_t code = 0;
4,330✔
220
  int32_t lino = 0;
4,330✔
221

222
  code = tsdbSnapRAWReadNext(reader, (SSnapDataHdr**)ppData);
4,330✔
223
  TSDB_CHECK_CODE(code, lino, _exit);
4,330!
224

225
_exit:
4,330✔
226
  if (code) {
4,330!
227
    TSDB_ERROR_LOG(TD_VID(reader->tsdb->pVnode), code, lino);
×
228
  }
229
  return code;
4,330✔
230
}
231

232
static int32_t tsdbSnapRAWReadBegin(STsdbSnapRAWReader* reader) {
210✔
233
  int32_t code = 0;
210✔
234
  int32_t lino = 0;
210✔
235

236
  if (reader->ctx->fsetArrIdx < TARRAY2_SIZE(reader->fsetArr)) {
210✔
237
    reader->ctx->fset = TARRAY2_GET(reader->fsetArr, reader->ctx->fsetArrIdx++);
135✔
238
    reader->ctx->isDataDone = false;
135✔
239

240
    code = tsdbSnapRAWReadFileSetOpenReader(reader);
135✔
241
    TSDB_CHECK_CODE(code, lino, _exit);
135!
242

243
    code = tsdbSnapRAWReadFileSetOpenIter(reader);
135✔
244
    TSDB_CHECK_CODE(code, lino, _exit);
135!
245
  }
246

247
_exit:
210✔
248
  if (code) {
210!
249
    TSDB_ERROR_LOG(TD_VID(reader->tsdb->pVnode), code, lino);
×
250
  }
251
  return code;
210✔
252
}
253

254
static int32_t tsdbSnapRAWReadEnd(STsdbSnapRAWReader* reader) {
135✔
255
  tsdbSnapRAWReadFileSetCloseIter(reader);
135✔
256
  tsdbSnapRAWReadFileSetCloseReader(reader);
135✔
257
  reader->ctx->fset = NULL;
135✔
258
  return 0;
135✔
259
}
260

261
int32_t tsdbSnapRAWRead(STsdbSnapRAWReader* reader, uint8_t** data) {
4,270✔
262
  int32_t code = 0;
4,270✔
263
  int32_t lino = 0;
4,270✔
264

265
  data[0] = NULL;
4,270✔
266

267
  for (;;) {
268
    if (reader->ctx->fset == NULL) {
4,405✔
269
      code = tsdbSnapRAWReadBegin(reader);
210✔
270
      TSDB_CHECK_CODE(code, lino, _exit);
210!
271

272
      if (reader->ctx->fset == NULL) {
210✔
273
        break;
75✔
274
      }
275
    }
276

277
    if (!reader->ctx->isDataDone) {
4,330!
278
      code = tsdbSnapRAWReadData(reader, data);
4,330✔
279
      TSDB_CHECK_CODE(code, lino, _exit);
4,330!
280
      if (data[0]) {
4,330✔
281
        goto _exit;
4,195✔
282
      } else {
283
        reader->ctx->isDataDone = true;
135✔
284
      }
285
    }
286

287
    code = tsdbSnapRAWReadEnd(reader);
135✔
288
    TSDB_CHECK_CODE(code, lino, _exit);
135!
289
  }
290

291
_exit:
4,270✔
292
  if (code) {
4,270!
293
    TSDB_ERROR_LOG(TD_VID(reader->tsdb->pVnode), code, lino);
×
294
  } else {
295
    tsdbDebug("vgId:%d %s done", TD_VID(reader->tsdb->pVnode), __func__);
4,270!
296
  }
297
  return code;
4,270✔
298
}
299

300
// writer
301
struct STsdbSnapRAWWriter {
302
  STsdb*  tsdb;
303
  int64_t sver;
304
  int64_t ever;
305
  int32_t minutes;
306
  int8_t  precision;
307
  int32_t minRow;
308
  int32_t maxRow;
309
  int8_t  cmprAlg;
310
  int64_t commitID;
311
  int32_t szPage;
312
  int64_t compactVersion;
313
  int64_t now;
314

315
  TFileSetArray* fsetArr;
316
  TFileOpArray   fopArr[1];
317

318
  struct {
319
    bool       fsetWriteBegin;
320
    int32_t    fid;
321
    STFileSet* fset;
322
    SDiskID    did;
323
    int64_t    cid;
324
    int64_t    level;
325

326
    // writer
327
    SFSetRAWWriter* fsetWriter;
328
  } ctx[1];
329
};
330

331
int32_t tsdbSnapRAWWriterOpen(STsdb* pTsdb, int64_t ever, STsdbSnapRAWWriter** writer) {
69✔
332
  int32_t code = 0;
69✔
333
  int32_t lino = 0;
69✔
334

335
  // start to write
336
  writer[0] = taosMemoryCalloc(1, sizeof(*writer[0]));
69!
337
  if (writer[0] == NULL) return terrno;
69!
338

339
  writer[0]->tsdb = pTsdb;
69✔
340
  writer[0]->ever = ever;
69✔
341
  writer[0]->minutes = pTsdb->keepCfg.days;
69✔
342
  writer[0]->precision = pTsdb->keepCfg.precision;
69✔
343
  writer[0]->minRow = pTsdb->pVnode->config.tsdbCfg.minRows;
69✔
344
  writer[0]->maxRow = pTsdb->pVnode->config.tsdbCfg.maxRows;
69✔
345
  writer[0]->cmprAlg = pTsdb->pVnode->config.tsdbCfg.compression;
69✔
346
  writer[0]->commitID = tsdbFSAllocEid(pTsdb->pFS);
69✔
347
  writer[0]->szPage = pTsdb->pVnode->config.tsdbPageSize;
69✔
348
  writer[0]->compactVersion = INT64_MAX;
69✔
349
  writer[0]->now = taosGetTimestampMs();
69✔
350

351
  code = tsdbFSCreateCopySnapshot(pTsdb->pFS, &writer[0]->fsetArr);
69✔
352
  TSDB_CHECK_CODE(code, lino, _exit);
69!
353

354
_exit:
69✔
355
  if (code) {
69!
356
    tsdbError("vgId:%d %s failed at line %d since %s", TD_VID(pTsdb->pVnode), __func__, lino, tstrerror(code));
×
357
  } else {
358
    tsdbInfo("vgId:%d %s done, sver:0, ever:%" PRId64, TD_VID(pTsdb->pVnode), __func__, ever);
69!
359
  }
360
  return code;
69✔
361
}
362

363
static int32_t tsdbSnapRAWWriteFileSetCloseIter(STsdbSnapRAWWriter* writer) { return 0; }
×
364

365
static int32_t tsdbSnapRAWWriteFileSetOpenWriter(STsdbSnapRAWWriter* writer) {
111✔
366
  int32_t code = 0;
111✔
367
  int32_t lino = 0;
111✔
368

369
  SFSetRAWWriterConfig config = {
111✔
370
      .tsdb = writer->tsdb,
111✔
371
      .szPage = writer->szPage,
111✔
372
      .fid = writer->ctx->fid,
111✔
373
      .cid = writer->commitID,
111✔
374
      .did = writer->ctx->did,
375
      .level = writer->ctx->level,
111✔
376
  };
377

378
  code = tsdbFSetRAWWriterOpen(&config, &writer->ctx->fsetWriter);
111✔
379
  TSDB_CHECK_CODE(code, lino, _exit);
111!
380

381
_exit:
111✔
382
  if (code) {
111!
383
    TSDB_ERROR_LOG(TD_VID(writer->tsdb->pVnode), lino, code);
×
384
  }
385
  return code;
111✔
386
}
387

388
static int32_t tsdbSnapRAWWriteFileSetCloseWriter(STsdbSnapRAWWriter* writer) {
111✔
389
  return tsdbFSetRAWWriterClose(&writer->ctx->fsetWriter, 0, writer->fopArr);
111✔
390
}
391

392
static int32_t tsdbSnapRAWWriteFileSetBegin(STsdbSnapRAWWriter* writer, int32_t fid) {
111✔
393
  int32_t code = 0;
111✔
394
  int32_t lino = 0;
111✔
395

396
  STFileSet* fset = &(STFileSet){.fid = fid};
111✔
397

398
  writer->ctx->fid = fid;
111✔
399
  STFileSet** fsetPtr = TARRAY2_SEARCH(writer->fsetArr, &fset, tsdbTFileSetCmprFn, TD_EQ);
111✔
400
  writer->ctx->fset = (fsetPtr == NULL) ? NULL : *fsetPtr;
111!
401

402
  int32_t level = tsdbFidLevel(fid, &writer->tsdb->keepCfg, taosGetTimestampSec());
111✔
403
  code = tfsAllocDisk(writer->tsdb->pVnode->pTfs, level, &writer->ctx->did);
111✔
404
  TSDB_CHECK_CODE(code, lino, _exit);
111!
405

406
  code = tfsMkdirRecurAt(writer->tsdb->pVnode->pTfs, writer->tsdb->path, writer->ctx->did);
111✔
407
  TSDB_CHECK_CODE(code, lino, _exit);
111!
408

409
  code = tsdbSnapRAWWriteFileSetOpenWriter(writer);
111✔
410
  TSDB_CHECK_CODE(code, lino, _exit);
111!
411

412
  writer->ctx->level = level;
111✔
413
  writer->ctx->fsetWriteBegin = true;
111✔
414

415
_exit:
111✔
416
  if (code) {
111!
417
    TSDB_ERROR_LOG(TD_VID(writer->tsdb->pVnode), lino, code);
×
418
  }
419
  return code;
111✔
420
}
421

422
static int32_t tsdbSnapRAWWriteFileSetEnd(STsdbSnapRAWWriter* writer) {
180✔
423
  if (!writer->ctx->fsetWriteBegin) return 0;
180✔
424

425
  int32_t code = 0;
111✔
426
  int32_t lino = 0;
111✔
427

428
  // close write
429
  code = tsdbSnapRAWWriteFileSetCloseWriter(writer);
111✔
430
  TSDB_CHECK_CODE(code, lino, _exit);
111!
431

432
  writer->ctx->fsetWriteBegin = false;
111✔
433

434
_exit:
111✔
435
  if (code) {
111!
436
    TSDB_ERROR_LOG(TD_VID(writer->tsdb->pVnode), lino, code);
×
437
  }
438
  return code;
111✔
439
}
440

441
int32_t tsdbSnapRAWWriterPrepareClose(STsdbSnapRAWWriter* writer) {
69✔
442
  int32_t code = 0;
69✔
443
  int32_t lino = 0;
69✔
444

445
  code = tsdbSnapRAWWriteFileSetEnd(writer);
69✔
446
  TSDB_CHECK_CODE(code, lino, _exit);
69!
447

448
  code = tsdbFSEditBegin(writer->tsdb->pFS, writer->fopArr, TSDB_FEDIT_COMMIT);
69✔
449
  TSDB_CHECK_CODE(code, lino, _exit);
69!
450

451
_exit:
69✔
452
  if (code) {
69!
453
    TSDB_ERROR_LOG(TD_VID(writer->tsdb->pVnode), lino, code);
×
454
  } else {
455
    tsdbDebug("vgId:%d %s done", TD_VID(writer->tsdb->pVnode), __func__);
69!
456
  }
457
  return code;
69✔
458
}
459

460
int32_t tsdbSnapRAWWriterClose(STsdbSnapRAWWriter** writer, int8_t rollback) {
69✔
461
  if (writer[0] == NULL) return 0;
69!
462

463
  int32_t code = 0;
69✔
464
  int32_t lino = 0;
69✔
465

466
  STsdb* tsdb = writer[0]->tsdb;
69✔
467

468
  if (rollback) {
69!
469
    code = tsdbFSEditAbort(writer[0]->tsdb->pFS);
×
470
    TSDB_CHECK_CODE(code, lino, _exit);
×
471
  } else {
472
    (void)taosThreadMutexLock(&writer[0]->tsdb->mutex);
69✔
473

474
    code = tsdbFSEditCommit(writer[0]->tsdb->pFS);
69✔
475
    if (code) {
69!
476
      (void)taosThreadMutexUnlock(&writer[0]->tsdb->mutex);
×
477
      TSDB_CHECK_CODE(code, lino, _exit);
×
478
    }
479

480
    writer[0]->tsdb->pFS->fsstate = TSDB_FS_STATE_NORMAL;
69✔
481

482
    (void)taosThreadMutexUnlock(&writer[0]->tsdb->mutex);
69✔
483
  }
484

485
  TARRAY2_DESTROY(writer[0]->fopArr, NULL);
69!
486
  tsdbFSDestroyCopySnapshot(&writer[0]->fsetArr);
69✔
487

488
  taosMemoryFree(writer[0]);
69!
489
  writer[0] = NULL;
69✔
490

491
_exit:
69✔
492
  if (code) {
69!
493
    TSDB_ERROR_LOG(TD_VID(tsdb->pVnode), lino, code);
×
494
  } else {
495
    tsdbInfo("vgId:%d %s done", TD_VID(tsdb->pVnode), __func__);
69!
496
  }
497
  return code;
69✔
498
}
499

500
static int32_t tsdbSnapRAWWriteTimeSeriesData(STsdbSnapRAWWriter* writer, STsdbDataRAWBlockHeader* bHdr) {
4,149✔
501
  int32_t code = 0;
4,149✔
502
  int32_t lino = 0;
4,149✔
503

504
  int32_t encryptAlgorithm = writer->tsdb->pVnode->config.tsdbCfg.encryptAlgorithm;
4,149✔
505
  char*   encryptKey = writer->tsdb->pVnode->config.tsdbCfg.encryptKey;
4,149✔
506

507
  code = tsdbFSetRAWWriteBlockData(writer->ctx->fsetWriter, bHdr, encryptAlgorithm, encryptKey);
4,149✔
508
  TSDB_CHECK_CODE(code, lino, _exit);
4,149!
509

510
_exit:
4,149✔
511
  if (code) {
4,149!
512
    TSDB_ERROR_LOG(TD_VID(writer->tsdb->pVnode), lino, code);
×
513
  }
514
  return code;
4,149✔
515
}
516

517
static int32_t tsdbSnapRAWWriteData(STsdbSnapRAWWriter* writer, SSnapDataHdr* hdr) {
4,149✔
518
  int32_t code = 0;
4,149✔
519
  int32_t lino = 0;
4,149✔
520

521
  STsdbDataRAWBlockHeader* bHdr = (void*)hdr->data;
4,149✔
522
  int32_t                  fid = bHdr->file.fid;
4,149✔
523
  if (!writer->ctx->fsetWriteBegin || fid != writer->ctx->fid) {
4,149✔
524
    code = tsdbSnapRAWWriteFileSetEnd(writer);
111✔
525
    TSDB_CHECK_CODE(code, lino, _exit);
111!
526

527
    code = tsdbSnapRAWWriteFileSetBegin(writer, fid);
111✔
528
    TSDB_CHECK_CODE(code, lino, _exit);
111!
529
  }
530

531
  code = tsdbSnapRAWWriteTimeSeriesData(writer, bHdr);
4,149✔
532
  TSDB_CHECK_CODE(code, lino, _exit);
4,149!
533

534
_exit:
4,149✔
535
  if (code) {
4,149!
536
    TSDB_ERROR_LOG(TD_VID(writer->tsdb->pVnode), lino, code);
×
537
  }
538
  return code;
4,149✔
539
}
540

541
int32_t tsdbSnapRAWWrite(STsdbSnapRAWWriter* writer, SSnapDataHdr* hdr) {
4,149✔
542
  int32_t code = 0;
4,149✔
543
  int32_t lino = 0;
4,149✔
544

545
  code = tsdbSnapRAWWriteData(writer, hdr);
4,149✔
546
  TSDB_CHECK_CODE(code, lino, _exit);
4,149!
547

548
_exit:
4,149✔
549
  if (code) {
4,149!
550
    tsdbError("vgId:%d %s failed at line %d since %s, type:%d index:%" PRId64 " size:%" PRId64,
×
551
              TD_VID(writer->tsdb->pVnode), __func__, lino, tstrerror(code), hdr->type, hdr->index, hdr->size);
552
  } else {
553
    tsdbDebug("vgId:%d %s done, type:%d index:%" PRId64 " size:%" PRId64, TD_VID(writer->tsdb->pVnode), __func__,
4,149!
554
              hdr->type, hdr->index, hdr->size);
555
  }
556
  return code;
4,149✔
557
}
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