waltest.c 3.5 KB
Newer Older
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/*
 * 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
#include <stdint.h>
#include "tlog.h"
#include "twal.h"

int64_t  ver = 0;
void    *pWal = NULL;

J
Jeff Tao 已提交
24
int writeToQueue(void *pVnode, void *data, int type) {
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
25
  // do nothing
J
Jeff Tao 已提交
26 27
  SWalHead *pHead = data;

陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
28 29 30 31 32
  if (pHead->version > ver)
    ver = pHead->version;

  walWrite(pWal, pHead);
  
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
33
  free(pHead);
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78

  return 0;
}

int main(int argc, char *argv[]) {
  char path[128] = "/home/jhtao/test/wal";
  int  max = 3;
  int  level = 2;
  int  total = 5;
  int  rows = 10000;
  int  size = 128;

  for (int i=1; i<argc; ++i) {
    if (strcmp(argv[i], "-p")==0 && i < argc-1) {
      strcpy(path, argv[++i]);
    } else if (strcmp(argv[i], "-m")==0 && i < argc-1) {
      max = atoi(argv[++i]);
    } 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]);
    } 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) {
      ddebugFlag = atoi(argv[++i]);
    } else {
      printf("\nusage: %s [options] \n", argv[0]);
      printf("  [-p path]: wal file path default is:%s\n", path);
      printf("  [-m max]: max wal files, default is:%d\n", max);
      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);
      printf("  [-v version]: initial version, default is:%ld\n", ver);
      printf("  [-d debugFlag]: debug flag, default:%d\n", ddebugFlag);
      printf("  [-h help]: print out this help\n\n");
      exit(0);
    }
  } 

  taosInitLog("wal.log", 100000, 10);

J
Jeff Tao 已提交
79 80 81 82 83
  SWalCfg walCfg;
  walCfg.commitLog = level;
  walCfg.wals = max;

  pWal = walOpen(path, &walCfg);
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
  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);
  }

  printf("version starts from:%ld\n", ver);
  
  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;
103
      pHead->len = size;
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
104 105 106 107 108 109 110 111
      walWrite(pWal, pHead);
    }
       
    printf("renew a wal, i:%d\n", i);
    walRenew(pWal);
  }

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

陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
113
  uint32_t index = 0;
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
  char     name[256];

  while (1) {
    int code = walGetWalFile(pWal, name, &index);
    if (code == -1) {
      printf("failed to get wal file, index:%d\n", index);
      break;
    }

    printf("index:%d wal:%s\n", index, name);
    if (code == 0) break;

    index++;
  }

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

  walClose(pWal);

  return 0;
}