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

#include "os.h"
S
Shengliang Guan 已提交
17
#include "taoserror.h"
18
#include "tchecksum.h"
S
Shengliang Guan 已提交
19
#include "walInt.h"
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
20

C
Cary Xu 已提交
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
int32_t walRestoreFromSnapshot(SWal *pWal, int64_t ver) {
  taosThreadMutexLock(&pWal->mutex);

  void *pIter = NULL;
  while (1) {
    taosHashIterate(pWal->pRefHash, pIter);
    if (pIter == NULL) break;
    SWalRef *pRef = (SWalRef *)pIter;
    if (pRef->ver != -1) {
      taosHashCancelIterate(pWal->pRefHash, pIter);
      return -1;
    }
  }

  taosCloseFile(&pWal->pWriteLogTFile);
  taosCloseFile(&pWal->pWriteIdxTFile);

  if (pWal->vers.firstVer != -1) {
    int32_t fileSetSize = taosArrayGetSize(pWal->fileInfoSet);
    for (int32_t i = 0; i < fileSetSize; i++) {
      SWalFileInfo *pFileInfo = taosArrayGet(pWal->fileInfoSet, i);
      char          fnameStr[WAL_FILE_LEN];
      walBuildLogName(pWal, pFileInfo->firstVer, fnameStr);
      taosRemoveFile(fnameStr);
    }
  }
  walRemoveMeta(pWal);

  pWal->writeCur = -1;
  pWal->totSize = 0;
  pWal->lastRollSeq = -1;

  taosArrayClear(pWal->fileInfoSet);
  pWal->vers.firstVer = -1;
55 56 57 58
  pWal->vers.lastVer = ver;
  pWal->vers.commitVer = ver - 1;
  pWal->vers.snapshotVer = ver - 1;
  pWal->vers.verInSnapshotting = -1;
C
Cary Xu 已提交
59 60 61

  taosThreadMutexUnlock(&pWal->mutex);
  return 0;
62 63
}

L
Liu Jicong 已提交
64
int32_t walCommit(SWal *pWal, int64_t ver) {
L
Liu Jicong 已提交
65 66
  ASSERT(pWal->vers.commitVer >= pWal->vers.snapshotVer);
  ASSERT(pWal->vers.commitVer <= pWal->vers.lastVer);
L
Liu Jicong 已提交
67
  if (ver < pWal->vers.commitVer || ver > pWal->vers.lastVer) {
L
Liu Jicong 已提交
68
    terrno = TSDB_CODE_WAL_INVALID_VER;
L
Liu Jicong 已提交
69 70
    return -1;
  }
L
Liu Jicong 已提交
71
  pWal->vers.commitVer = ver;
L
Liu Jicong 已提交
72 73 74 75
  return 0;
}

int32_t walRollback(SWal *pWal, int64_t ver) {
L
Liu Jicong 已提交
76 77
  int64_t code;
  char    fnameStr[WAL_FILE_LEN];
L
Liu Jicong 已提交
78
  if (ver > pWal->vers.lastVer || ver < pWal->vers.commitVer) {
L
Liu Jicong 已提交
79
    terrno = TSDB_CODE_WAL_INVALID_VER;
L
Liu Jicong 已提交
80 81
    return -1;
  }
wafwerar's avatar
wafwerar 已提交
82
  taosThreadMutexLock(&pWal->mutex);
L
Liu Jicong 已提交
83

L
Liu Jicong 已提交
84 85
  // find correct file
  if (ver < walGetLastFileFirstVer(pWal)) {
L
Liu Jicong 已提交
86 87 88
    // change current files
    code = walChangeWrite(pWal, ver);
    if (code < 0) {
L
Liu Jicong 已提交
89 90 91
      return -1;
    }

L
Liu Jicong 已提交
92
    // delete files
L
Liu Jicong 已提交
93
    int fileSetSize = taosArrayGetSize(pWal->fileInfoSet);
L
Liu Jicong 已提交
94
    for (int i = pWal->writeCur; i < fileSetSize; i++) {
L
Liu Jicong 已提交
95
      walBuildLogName(pWal, ((SWalFileInfo *)taosArrayGet(pWal->fileInfoSet, i))->firstVer, fnameStr);
96
      taosRemoveFile(fnameStr);
L
Liu Jicong 已提交
97
      walBuildIdxName(pWal, ((SWalFileInfo *)taosArrayGet(pWal->fileInfoSet, i))->firstVer, fnameStr);
98
      taosRemoveFile(fnameStr);
L
Liu Jicong 已提交
99
    }
L
Liu Jicong 已提交
100
    // pop from fileInfoSet
L
Liu Jicong 已提交
101 102 103 104
    taosArraySetSize(pWal->fileInfoSet, pWal->writeCur + 1);
  }

  walBuildIdxName(pWal, walGetCurFileFirstVer(pWal), fnameStr);
105
  TdFilePtr pIdxTFile = taosOpenFile(fnameStr, TD_FILE_WRITE | TD_FILE_READ);
L
Liu Jicong 已提交
106

107
  if (pIdxTFile == NULL) {
wafwerar's avatar
wafwerar 已提交
108
    taosThreadMutexUnlock(&pWal->mutex);
L
Liu Jicong 已提交
109 110
    return -1;
  }
L
Liu Jicong 已提交
111
  int64_t idxOff = walGetVerIdxOffset(pWal, ver);
112
  code = taosLSeekFile(pIdxTFile, idxOff, SEEK_SET);
L
Liu Jicong 已提交
113
  if (code < 0) {
wafwerar's avatar
wafwerar 已提交
114
    taosThreadMutexUnlock(&pWal->mutex);
L
Liu Jicong 已提交
115 116
    return -1;
  }
L
Liu Jicong 已提交
117
  // read idx file and get log file pos
L
Liu Jicong 已提交
118
  SWalIdxEntry entry;
119
  if (taosReadFile(pIdxTFile, &entry, sizeof(SWalIdxEntry)) != sizeof(SWalIdxEntry)) {
wafwerar's avatar
wafwerar 已提交
120
    taosThreadMutexUnlock(&pWal->mutex);
L
Liu Jicong 已提交
121 122 123 124 125
    return -1;
  }
  ASSERT(entry.ver == ver);

  walBuildLogName(pWal, walGetCurFileFirstVer(pWal), fnameStr);
126
  TdFilePtr pLogTFile = taosOpenFile(fnameStr, TD_FILE_WRITE | TD_FILE_READ);
127
  if (pLogTFile == NULL) {
L
Liu Jicong 已提交
128
    // TODO
wafwerar's avatar
wafwerar 已提交
129
    taosThreadMutexUnlock(&pWal->mutex);
L
Liu Jicong 已提交
130 131
    return -1;
  }
132
  code = taosLSeekFile(pLogTFile, entry.offset, SEEK_SET);
L
Liu Jicong 已提交
133 134
  if (code < 0) {
    // TODO
wafwerar's avatar
wafwerar 已提交
135
    taosThreadMutexUnlock(&pWal->mutex);
L
Liu Jicong 已提交
136 137
    return -1;
  }
L
Liu Jicong 已提交
138
  // validate offset
L
Liu Jicong 已提交
139
  SWalHead head;
140 141
  ASSERT(taosValidFile(pLogTFile));
  int size = taosReadFile(pLogTFile, &head, sizeof(SWalHead));
L
Liu Jicong 已提交
142
  if (size != sizeof(SWalHead)) {
L
Liu Jicong 已提交
143 144 145 146 147
    return -1;
  }
  code = walValidHeadCksum(&head);

  ASSERT(code == 0);
L
Liu Jicong 已提交
148
  if (code != 0) {
L
Liu Jicong 已提交
149 150
    return -1;
  }
L
Liu Jicong 已提交
151 152
  if (head.head.version != ver) {
    // TODO
L
Liu Jicong 已提交
153 154
    return -1;
  }
L
Liu Jicong 已提交
155
  // truncate old files
156
  code = taosFtruncateFile(pLogTFile, entry.offset);
L
Liu Jicong 已提交
157
  if (code < 0) {
L
Liu Jicong 已提交
158 159
    return -1;
  }
160
  code = taosFtruncateFile(pIdxTFile, idxOff);
L
Liu Jicong 已提交
161
  if (code < 0) {
L
Liu Jicong 已提交
162 163
    return -1;
  }
L
Liu Jicong 已提交
164
  pWal->vers.lastVer = ver - 1;
L
Liu Jicong 已提交
165 166
  ((SWalFileInfo *)taosArrayGetLast(pWal->fileInfoSet))->lastVer = ver - 1;
  ((SWalFileInfo *)taosArrayGetLast(pWal->fileInfoSet))->fileSize = entry.offset;
167 168
  taosCloseFile(&pIdxTFile);
  taosCloseFile(&pLogTFile);
L
Liu Jicong 已提交
169

L
Liu Jicong 已提交
170
  // unlock
wafwerar's avatar
wafwerar 已提交
171
  taosThreadMutexUnlock(&pWal->mutex);
L
Liu Jicong 已提交
172 173
  return 0;
}
L
Liu Jicong 已提交
174

L
Liu Jicong 已提交
175
int32_t walBeginSnapshot(SWal *pWal, int64_t ver) {
L
Liu Jicong 已提交
176
  pWal->vers.verInSnapshotting = ver;
L
Liu Jicong 已提交
177 178
  // check file rolling
  if (pWal->cfg.retentionPeriod == 0) {
L
Liu Jicong 已提交
179 180 181 182 183 184
    walRoll(pWal);
  }

  return 0;
}

L
Liu Jicong 已提交
185
int32_t walEndSnapshot(SWal *pWal) {
L
Liu Jicong 已提交
186
  int64_t ver = pWal->vers.verInSnapshotting;
S
Shengliang Guan 已提交
187
  if (ver == -1) return 0;
L
Liu Jicong 已提交
188

L
Liu Jicong 已提交
189
  pWal->vers.snapshotVer = ver;
L
Liu Jicong 已提交
190 191
  int ts = taosGetTimestampSec();

L
Liu Jicong 已提交
192 193 194
  int          deleteCnt = 0;
  int64_t      newTotSize = pWal->totSize;
  SWalFileInfo tmp;
L
Liu Jicong 已提交
195
  tmp.firstVer = ver;
L
Liu Jicong 已提交
196
  // find files safe to delete
L
Liu Jicong 已提交
197
  SWalFileInfo *pInfo = taosArraySearch(pWal->fileInfoSet, &tmp, compareWalFileInfo, TD_LE);
L
Liu Jicong 已提交
198
  if (ver >= pInfo->lastVer) {
L
Liu Jicong 已提交
199 200
    pInfo++;
  }
L
Liu Jicong 已提交
201
  // iterate files, until the searched result
L
Liu Jicong 已提交
202
  for (SWalFileInfo *iter = pWal->fileInfoSet->pData; iter < pInfo; iter++) {
L
fix  
Liu Jicong 已提交
203 204
    if ((pWal->cfg.retentionSize != -1 && pWal->totSize > pWal->cfg.retentionSize) ||
        (pWal->cfg.retentionPeriod != -1 && iter->closeTs + pWal->cfg.retentionPeriod > ts)) {
L
Liu Jicong 已提交
205
      // delete according to file size or close time
L
Liu Jicong 已提交
206 207 208 209 210
      deleteCnt++;
      newTotSize -= iter->fileSize;
    }
  }
  char fnameStr[WAL_FILE_LEN];
L
Liu Jicong 已提交
211 212
  // remove file
  for (int i = 0; i < deleteCnt; i++) {
L
Liu Jicong 已提交
213
    pInfo = taosArrayGet(pWal->fileInfoSet, i);
L
Liu Jicong 已提交
214
    walBuildLogName(pWal, pInfo->firstVer, fnameStr);
215
    taosRemoveFile(fnameStr);
L
Liu Jicong 已提交
216
    walBuildIdxName(pWal, pInfo->firstVer, fnameStr);
217
    taosRemoveFile(fnameStr);
L
Liu Jicong 已提交
218 219
  }

L
Liu Jicong 已提交
220 221 222
  // make new array, remove files
  taosArrayPopFrontBatch(pWal->fileInfoSet, deleteCnt);
  if (taosArrayGetSize(pWal->fileInfoSet) == 0) {
L
Liu Jicong 已提交
223
    pWal->writeCur = -1;
L
Liu Jicong 已提交
224
    pWal->vers.firstVer = -1;
L
Liu Jicong 已提交
225
  } else {
L
Liu Jicong 已提交
226
    pWal->vers.firstVer = ((SWalFileInfo *)taosArrayGet(pWal->fileInfoSet, 0))->firstVer;
L
Liu Jicong 已提交
227
  }
L
Liu Jicong 已提交
228
  pWal->writeCur = taosArrayGetSize(pWal->fileInfoSet) - 1;
L
Liu Jicong 已提交
229
  pWal->totSize = newTotSize;
L
Liu Jicong 已提交
230
  pWal->vers.verInSnapshotting = -1;
L
Liu Jicong 已提交
231

L
Liu Jicong 已提交
232
  // save snapshot ver, commit ver
L
Liu Jicong 已提交
233
  int code = walSaveMeta(pWal);
L
Liu Jicong 已提交
234
  if (code < 0) {
L
Liu Jicong 已提交
235 236 237 238 239 240
    return -1;
  }

  return 0;
}

L
Liu Jicong 已提交
241
int walRoll(SWal *pWal) {
L
Liu Jicong 已提交
242
  int code = 0;
243 244
  if (pWal->pWriteIdxTFile != NULL) {
    code = taosCloseFile(&pWal->pWriteIdxTFile);
L
Liu Jicong 已提交
245
    if (code != 0) {
L
Liu Jicong 已提交
246
      terrno = TAOS_SYSTEM_ERROR(errno);
L
Liu Jicong 已提交
247 248
      return -1;
    }
L
Liu Jicong 已提交
249
  }
250 251
  if (pWal->pWriteLogTFile != NULL) {
    code = taosCloseFile(&pWal->pWriteLogTFile);
L
Liu Jicong 已提交
252
    if (code != 0) {
L
Liu Jicong 已提交
253
      terrno = TAOS_SYSTEM_ERROR(errno);
L
Liu Jicong 已提交
254 255
      return -1;
    }
L
Liu Jicong 已提交
256
  }
257
  TdFilePtr pIdxTFile, pLogTFile;
L
Liu Jicong 已提交
258
  // create new file
L
Liu Jicong 已提交
259
  int64_t newFileFirstVersion = pWal->vers.lastVer + 1;
L
Liu Jicong 已提交
260
  char    fnameStr[WAL_FILE_LEN];
L
Liu Jicong 已提交
261
  walBuildIdxName(pWal, newFileFirstVersion, fnameStr);
262
  pIdxTFile = taosOpenFile(fnameStr, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_APPEND);
263
  if (pIdxTFile == NULL) {
L
Liu Jicong 已提交
264
    terrno = TAOS_SYSTEM_ERROR(errno);
L
Liu Jicong 已提交
265 266 267
    return -1;
  }
  walBuildLogName(pWal, newFileFirstVersion, fnameStr);
268
  pLogTFile = taosOpenFile(fnameStr, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_APPEND);
269
  if (pLogTFile == NULL) {
L
Liu Jicong 已提交
270
    terrno = TAOS_SYSTEM_ERROR(errno);
L
Liu Jicong 已提交
271 272
    return -1;
  }
L
Liu Jicong 已提交
273
  // terrno set inner
L
Liu Jicong 已提交
274
  code = walRollFileInfo(pWal);
L
Liu Jicong 已提交
275
  if (code != 0) {
L
Liu Jicong 已提交
276 277
    return -1;
  }
L
Liu Jicong 已提交
278

L
Liu Jicong 已提交
279
  // switch file
280 281
  pWal->pWriteIdxTFile = pIdxTFile;
  pWal->pWriteLogTFile = pLogTFile;
L
Liu Jicong 已提交
282
  pWal->writeCur = taosArrayGetSize(pWal->fileInfoSet) - 1;
L
fix  
Liu Jicong 已提交
283
  ASSERT(pWal->writeCur >= 0);
L
Liu Jicong 已提交
284 285 286 287 288

  pWal->lastRollSeq = walGetSeq();
  return 0;
}

L
Liu Jicong 已提交
289
static int walWriteIndex(SWal *pWal, int64_t ver, int64_t offset) {
L
Liu Jicong 已提交
290
  SWalIdxEntry entry = {.ver = ver, .offset = offset};
291 292 293
  /*int64_t      idxOffset = taosLSeekFile(pWal->pWriteIdxTFile, 0, SEEK_CUR);*/
  /*wDebug("write index: ver: %ld, offset: %ld, at %ld", ver, offset, idxOffset);*/
  int size = taosWriteFile(pWal->pWriteIdxTFile, &entry, sizeof(SWalIdxEntry));
L
Liu Jicong 已提交
294
  if (size != sizeof(SWalIdxEntry)) {
L
Liu Jicong 已提交
295
    terrno = TAOS_SYSTEM_ERROR(errno);
L
Liu Jicong 已提交
296
    // TODO truncate
L
Liu Jicong 已提交
297
    return -1;
L
Liu Jicong 已提交
298 299 300 301
  }
  return 0;
}

L
Liu Jicong 已提交
302
int64_t walWriteWithSyncInfo(SWal *pWal, int64_t index, tmsg_t msgType, SSyncLogMeta syncMeta, const void *body,
L
Liu Jicong 已提交
303
                             int32_t bodyLen) {
L
Liu Jicong 已提交
304
  int code = 0;
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
305

S
TD-1652  
Shengliang Guan 已提交
306
  // no wal
L
Liu Jicong 已提交
307
  if (pWal->cfg.level == TAOS_WAL_NOLOG) return 0;
L
Liu Jicong 已提交
308
  if (bodyLen > TSDB_MAX_WAL_SIZE) {
L
Liu Jicong 已提交
309 310 311
    terrno = TSDB_CODE_WAL_SIZE_LIMIT;
    return -1;
  }
L
Liu Jicong 已提交
312

L
Liu Jicong 已提交
313
  if (index == pWal->vers.lastVer + 1) {
L
Liu Jicong 已提交
314
    if (taosArrayGetSize(pWal->fileInfoSet) == 0) {
L
Liu Jicong 已提交
315
      pWal->vers.firstVer = index;
L
Liu Jicong 已提交
316 317 318
      if (walRoll(pWal) < 0) {
        return -1;
      }
L
Liu Jicong 已提交
319
    } else {
L
Liu Jicong 已提交
320
      int64_t passed = walGetSeq() - pWal->lastRollSeq;
L
Liu Jicong 已提交
321
      if (pWal->cfg.rollPeriod != -1 && pWal->cfg.rollPeriod != 0 && passed > pWal->cfg.rollPeriod) {
L
Liu Jicong 已提交
322 323 324
        if (walRoll(pWal) < 0) {
          return -1;
        }
L
Liu Jicong 已提交
325
      } else if (pWal->cfg.segSize != -1 && pWal->cfg.segSize != 0 && walGetLastFileSize(pWal) > pWal->cfg.segSize) {
L
Liu Jicong 已提交
326 327 328
        if (walRoll(pWal) < 0) {
          return -1;
        }
L
Liu Jicong 已提交
329
      }
L
Liu Jicong 已提交
330 331
    }
  } else {
L
Liu Jicong 已提交
332 333
    // reject skip log or rewrite log
    // must truncate explicitly first
L
fix  
Liu Jicong 已提交
334
    terrno = TSDB_CODE_WAL_INVALID_VER;
L
Liu Jicong 已提交
335 336
    return -1;
  }
337
  /*if (!tfValid(pWal->pWriteLogTFile)) return -1;*/
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
338

L
Liu Jicong 已提交
339 340
  ASSERT(pWal->writeCur >= 0);

wafwerar's avatar
wafwerar 已提交
341
  taosThreadMutexLock(&pWal->mutex);
L
Liu Jicong 已提交
342

343
  if (pWal->pWriteIdxTFile == NULL || pWal->pWriteLogTFile == NULL) {
L
Liu Jicong 已提交
344
    walSetWrite(pWal);
345 346
    taosLSeekFile(pWal->pWriteLogTFile, 0, SEEK_END);
    taosLSeekFile(pWal->pWriteIdxTFile, 0, SEEK_END);
L
Liu Jicong 已提交
347 348
  }

L
Liu Jicong 已提交
349
  pWal->writeHead.head.version = index;
L
Liu Jicong 已提交
350

L
Liu Jicong 已提交
351
  int64_t offset = walGetCurFileOffset(pWal);
L
Liu Jicong 已提交
352
  pWal->writeHead.head.bodyLen = bodyLen;
L
Liu Jicong 已提交
353
  pWal->writeHead.head.msgType = msgType;
L
Liu Jicong 已提交
354

355
  // sync info for sync module
L
Liu Jicong 已提交
356
  pWal->writeHead.head.syncMeta = syncMeta;
L
Liu Jicong 已提交
357

L
Liu Jicong 已提交
358 359
  pWal->writeHead.cksumHead = walCalcHeadCksum(&pWal->writeHead);
  pWal->writeHead.cksumBody = walCalcBodyCksum(body, bodyLen);
360

361
  if (taosWriteFile(pWal->pWriteLogTFile, &pWal->writeHead, sizeof(SWalHead)) != sizeof(SWalHead)) {
362
    // TODO ftruncate
L
fix  
Liu Jicong 已提交
363
    terrno = TAOS_SYSTEM_ERROR(errno);
L
Liu Jicong 已提交
364 365
    wError("vgId:%d, file:%" PRId64 ".log, failed to write since %s", pWal->cfg.vgId, walGetLastFileFirstVer(pWal),
           strerror(errno));
L
fix  
Liu Jicong 已提交
366
    return -1;
J
Jeff Tao 已提交
367
  }
S
TD-1846  
Shengliang Guan 已提交
368

369
  if (taosWriteFile(pWal->pWriteLogTFile, (char *)body, bodyLen) != bodyLen) {
370
    // TODO ftruncate
L
fix  
Liu Jicong 已提交
371
    terrno = TAOS_SYSTEM_ERROR(errno);
L
Liu Jicong 已提交
372 373
    wError("vgId:%d, file:%" PRId64 ".log, failed to write since %s", pWal->cfg.vgId, walGetLastFileFirstVer(pWal),
           strerror(errno));
L
fix  
Liu Jicong 已提交
374
    return -1;
L
Liu Jicong 已提交
375
  }
L
Liu Jicong 已提交
376

L
Liu Jicong 已提交
377
  code = walWriteIndex(pWal, index, offset);
L
Liu Jicong 已提交
378 379
  if (code != 0) {
    // TODO
L
Liu Jicong 已提交
380
    return -1;
L
Liu Jicong 已提交
381
  }
382

L
Liu Jicong 已提交
383
  // set status
L
Liu Jicong 已提交
384
  pWal->vers.lastVer = index;
L
Liu Jicong 已提交
385
  pWal->totSize += sizeof(SWalHead) + bodyLen;
L
Liu Jicong 已提交
386 387
  walGetCurFileInfo(pWal)->lastVer = index;
  walGetCurFileInfo(pWal)->fileSize += sizeof(SWalHead) + bodyLen;
L
Liu Jicong 已提交
388

wafwerar's avatar
wafwerar 已提交
389
  taosThreadMutexUnlock(&pWal->mutex);
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
390

L
fix  
Liu Jicong 已提交
391
  return 0;
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
392 393
}

L
Liu Jicong 已提交
394
int64_t walWrite(SWal *pWal, int64_t index, tmsg_t msgType, const void *body, int32_t bodyLen) {
L
Liu Jicong 已提交
395
  SSyncLogMeta syncMeta = {
L
Liu Jicong 已提交
396 397 398 399
      .isWeek = -1,
      .seqNum = UINT64_MAX,
      .term = UINT64_MAX,
  };
L
Liu Jicong 已提交
400
  return walWriteWithSyncInfo(pWal, index, msgType, syncMeta, body, bodyLen);
L
Liu Jicong 已提交
401 402
}

L
Liu Jicong 已提交
403
void walFsync(SWal *pWal, bool forceFsync) {
L
Liu Jicong 已提交
404
  if (forceFsync || (pWal->cfg.level == TAOS_WAL_FSYNC && pWal->cfg.fsyncPeriod == 0)) {
L
Liu Jicong 已提交
405
    wTrace("vgId:%d, fileId:%" PRId64 ".log, do fsync", pWal->cfg.vgId, walGetCurFileFirstVer(pWal));
406
    if (taosFsyncFile(pWal->pWriteLogTFile) < 0) {
L
Liu Jicong 已提交
407 408
      wError("vgId:%d, file:%" PRId64 ".log, fsync failed since %s", pWal->cfg.vgId, walGetCurFileFirstVer(pWal),
             strerror(errno));
409 410
    }
  }
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
411 412
}

L
Liu Jicong 已提交
413
/*static int walValidateOffset(SWal* pWal, int64_t ver) {*/
L
Liu Jicong 已提交
414 415 416 417 418 419 420
/*int code = 0;*/
/*SWalHead *pHead = NULL;*/
/*code = (int)walRead(pWal, &pHead, ver);*/
/*if(pHead->head.version != ver) {*/
/*return -1;*/
/*}*/
/*return 0;*/
L
Liu Jicong 已提交
421
/*}*/
L
Liu Jicong 已提交
422

L
Liu Jicong 已提交
423
/*static int64_t walGetOffset(SWal* pWal, int64_t ver) {*/
L
Liu Jicong 已提交
424 425 426 427
/*int code = walSeekVer(pWal, ver);*/
/*if(code != 0) {*/
/*return -1;*/
/*}*/
L
Liu Jicong 已提交
428

L
Liu Jicong 已提交
429 430 431 432
/*code = walValidateOffset(pWal, ver);*/
/*if(code != 0) {*/
/*return -1;*/
/*}*/
L
Liu Jicong 已提交
433

L
Liu Jicong 已提交
434
/*return 0;*/
L
Liu Jicong 已提交
435
/*}*/