waltest.c 3.7 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/>.
 */

//#define _DEFAULT_SOURCE
S
slguan 已提交
17
#include "os.h"
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
18
#include "tutil.h"
S
slguan 已提交
19
#include "tglobal.h"
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
20 21
#include "tlog.h"
#include "twal.h"
J
Jun Li 已提交
22
#include "tfile.h"
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
23 24 25 26

int64_t  ver = 0;
void    *pWal = NULL;

S
TD-1918  
Shengliang Guan 已提交
27
int writeToQueue(void *pVnode, void *data, int type, void *pMsg) {
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
28
  // do nothing
J
Jeff Tao 已提交
29 30
  SWalHead *pHead = data;

陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
31 32 33 34 35 36 37 38 39
  if (pHead->version > ver)
    ver = pHead->version;

  walWrite(pWal, pHead);

  return 0;
}

int main(int argc, char *argv[]) {
J
Jun Li 已提交
40
  char path[128] = {0};
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
41 42 43 44
  int  level = 2;
  int  total = 5;
  int  rows = 10000;
  int  size = 128;
J
Jeff Tao 已提交
45
  int  keep = 0;
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
46 47 48

  for (int i=1; i<argc; ++i) {
    if (strcmp(argv[i], "-p")==0 && i < argc-1) {
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
49
      tstrncpy(path, argv[++i], sizeof(path));
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
50 51 52 53
    } else if (strcmp(argv[i], "-l")==0 && i < argc-1) {
      level = atoi(argv[++i]);
    } else if (strcmp(argv[i], "-r")==0 && i < argc-1) {
      rows = atoi(argv[++i]);
J
Jeff Tao 已提交
54 55
    } else if (strcmp(argv[i], "-k")==0 && i < argc-1) {
      keep = atoi(argv[++i]);
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
56 57 58 59 60 61 62
    } else if (strcmp(argv[i], "-t")==0 && i < argc-1) {
      total = atoi(argv[++i]);
    } else if (strcmp(argv[i], "-s")==0 && i < argc-1) {
      size = atoi(argv[++i]);
    } else if (strcmp(argv[i], "-v")==0 && i < argc-1) {
      ver = atoll(argv[++i]);
    } else if (strcmp(argv[i], "-d")==0 && i < argc-1) {
63
      dDebugFlag = atoi(argv[++i]);
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
64 65 66 67 68 69
    } else {
      printf("\nusage: %s [options] \n", argv[0]);
      printf("  [-p path]: wal file path default is:%s\n", path);
      printf("  [-l level]: log level, default is:%d\n", level);
      printf("  [-t total]: total wal files, default is:%d\n", total);
      printf("  [-r rows]: rows of records per wal file, default is:%d\n", rows);
J
Jeff Tao 已提交
70
      printf("  [-k keep]: keep the wal after closing, default is:%d\n", keep);
S
TD-1530  
Shengliang Guan 已提交
71
      printf("  [-v version]: initial version, default is:%" PRId64 "\n", ver);
72
      printf("  [-d debugFlag]: debug flag, default:%d\n", dDebugFlag);
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
73 74 75
      printf("  [-h help]: print out this help\n\n");
      exit(0);
    }
J
Jun Li 已提交
76
  }
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
77 78

  taosInitLog("wal.log", 100000, 10);
J
Jun Li 已提交
79 80
  tfInit();
  walInit();
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
81

M
Minglei Jin 已提交
82
  SWalCfg walCfg = {0};
H
hjxilinx 已提交
83
  walCfg.walLevel = level;
J
Jeff Tao 已提交
84
  walCfg.keep = keep;
J
Jeff Tao 已提交
85 86

  pWal = walOpen(path, &walCfg);
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
87 88 89 90 91 92 93 94 95 96 97
  if (pWal == NULL) {
    printf("failed to open wal\n");
    exit(-1);
  }

  int ret = walRestore(pWal, NULL, writeToQueue);
  if (ret <0) {
    printf("failed to restore wal\n");
    exit(-1);
  }

S
TD-1530  
Shengliang Guan 已提交
98
  printf("version starts from:%" PRId64 "\n", ver);
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
99 100 101 102 103 104 105
  
  int contLen = sizeof(SWalHead) + size;
  SWalHead *pHead = (SWalHead *) malloc(contLen);

  for (int i=0; i<total; ++i) {
    for (int k=0; k<rows; ++k) {
      pHead->version = ++ver;
106
      pHead->len = size;
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
107 108 109 110 111 112 113 114
      walWrite(pWal, pHead);
    }
       
    printf("renew a wal, i:%d\n", i);
    walRenew(pWal);
  }

  printf("%d wal files are written\n", total);
115

S
TD-1846  
Shengliang Guan 已提交
116
  int64_t index = 0;
S
TD-1856  
Shengliang Guan 已提交
117
  char    name[256];
118 119 120 121

  while (1) {
    int code = walGetWalFile(pWal, name, &index);
    if (code == -1) {
S
TD-1846  
Shengliang Guan 已提交
122
      printf("failed to get wal file, index:%" PRId64 "\n", index);
123 124 125
      break;
    }

S
TD-1846  
Shengliang Guan 已提交
126
    printf("index:%" PRId64 " wal:%s\n", index, name);
127 128 129
    if (code == 0) break;
  }

陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
130 131 132
  getchar();

  walClose(pWal);
J
Jun Li 已提交
133 134
  walCleanUp();
  tfCleanup();
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
135 136 137

  return 0;
}