syncLogStoreTest.cpp 4.1 KB
Newer Older
M
Minghao Li 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
#include <gtest/gtest.h>
#include <stdio.h>
#include "syncEnv.h"
#include "syncIO.h"
#include "syncInt.h"
#include "syncRaftLog.h"
#include "syncRaftStore.h"
#include "syncUtil.h"

void logTest() {
  sTrace("--- sync log test: trace");
  sDebug("--- sync log test: debug");
  sInfo("--- sync log test: info");
  sWarn("--- sync log test: warn");
  sError("--- sync log test: error");
  sFatal("--- sync log test: fatal");
}

uint16_t ports[] = {7010, 7110, 7210, 7310, 7410};
int32_t  replicaNum = 1;
int32_t  myIndex = 0;

SRaftId    ids[TSDB_MAX_REPLICA];
SSyncInfo  syncInfo;
SSyncFSM*  pFsm;
SWal*      pWal;
SSyncNode* pSyncNode;

SSyncNode* syncNodeInit() {
  syncInfo.vgId = 1234;
  syncInfo.rpcClient = gSyncIO->clientRpc;
  syncInfo.FpSendMsg = syncIOSendMsg;
  syncInfo.queue = gSyncIO->pMsgQ;
  syncInfo.FpEqMsg = syncIOEqMsg;
  syncInfo.pFsm = pFsm;
  snprintf(syncInfo.path, sizeof(syncInfo.path), "%s", "./");

M
Minghao Li 已提交
38 39
  int code = walInit();
  assert(code == 0);
M
Minghao Li 已提交
40 41 42 43 44 45
  SWalCfg walCfg;
  memset(&walCfg, 0, sizeof(SWalCfg));
  walCfg.vgId = syncInfo.vgId;
  walCfg.fsyncPeriod = 1000;
  walCfg.retentionPeriod = 1000;
  walCfg.rollPeriod = 1000;
M
Minghao Li 已提交
46 47 48
  walCfg.retentionSize = 1000;
  walCfg.segSize = 1000;
  walCfg.level = TAOS_WAL_FSYNC;
M
Minghao Li 已提交
49
  pWal = walOpen("./wal_test", &walCfg);
M
Minghao Li 已提交
50
  assert(pWal != NULL);
M
Minghao Li 已提交
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 79 80 81 82 83

  syncInfo.pWal = pWal;

  SSyncCfg* pCfg = &syncInfo.syncCfg;
  pCfg->myIndex = myIndex;
  pCfg->replicaNum = replicaNum;

  for (int i = 0; i < replicaNum; ++i) {
    pCfg->nodeInfo[i].nodePort = ports[i];
    snprintf(pCfg->nodeInfo[i].nodeFqdn, sizeof(pCfg->nodeInfo[i].nodeFqdn), "%s", "127.0.0.1");
    // taosGetFqdn(pCfg->nodeInfo[0].nodeFqdn);
  }

  pSyncNode = syncNodeOpen(&syncInfo);
  assert(pSyncNode != NULL);

  gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
  gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
  gSyncIO->FpOnSyncRequestVote = pSyncNode->FpOnRequestVote;
  gSyncIO->FpOnSyncRequestVoteReply = pSyncNode->FpOnRequestVoteReply;
  gSyncIO->FpOnSyncAppendEntries = pSyncNode->FpOnAppendEntries;
  gSyncIO->FpOnSyncAppendEntriesReply = pSyncNode->FpOnAppendEntriesReply;
  gSyncIO->FpOnSyncPing = pSyncNode->FpOnPing;
  gSyncIO->FpOnSyncPingReply = pSyncNode->FpOnPingReply;
  gSyncIO->FpOnSyncTimeout = pSyncNode->FpOnTimeout;
  gSyncIO->pSyncNode = pSyncNode;

  return pSyncNode;
}

SSyncNode* syncInitTest() { return syncNodeInit(); }

void logStoreTest() {
M
Minghao Li 已提交
84
  logStorePrint2((char*)"logStoreTest", pSyncNode->pLogStore);
M
Minghao Li 已提交
85 86 87

  assert(pSyncNode->pLogStore->getLastIndex(pSyncNode->pLogStore) == SYNC_INDEX_INVALID);

M
Minghao Li 已提交
88
  for (int i = 0; i < 5; ++i) {
M
Minghao Li 已提交
89
    int32_t         dataLen = 10;
M
Minghao Li 已提交
90 91 92 93 94 95 96 97 98 99
    SSyncRaftEntry* pEntry = syncEntryBuild(dataLen);
    assert(pEntry != NULL);
    pEntry->msgType = 1;
    pEntry->originalRpcType = 2;
    pEntry->seqNum = 3;
    pEntry->isWeak = true;
    pEntry->term = 100;
    pEntry->index = pSyncNode->pLogStore->getLastIndex(pSyncNode->pLogStore) + 1;
    snprintf(pEntry->data, dataLen, "value%d", i);

M
Minghao Li 已提交
100
    // syncEntryPrint2((char*)"write entry:", pEntry);
M
Minghao Li 已提交
101
    pSyncNode->pLogStore->appendEntry(pSyncNode->pLogStore, pEntry);
M
Minghao Li 已提交
102
    syncEntryDestory(pEntry);
M
Minghao Li 已提交
103 104 105 106

    if (i == 0) {
      assert(pSyncNode->pLogStore->getLastIndex(pSyncNode->pLogStore) == SYNC_INDEX_BEGIN);
    }
M
Minghao Li 已提交
107
  }
M
Minghao Li 已提交
108
  logStorePrint2((char*)"after appendEntry", pSyncNode->pLogStore);
M
Minghao Li 已提交
109 110

  pSyncNode->pLogStore->truncate(pSyncNode->pLogStore, 3);
M
Minghao Li 已提交
111
  logStorePrint2((char*)"after truncate 3", pSyncNode->pLogStore);
M
Minghao Li 已提交
112 113 114 115 116 117 118
}

void initRaftId(SSyncNode* pSyncNode) {
  for (int i = 0; i < replicaNum; ++i) {
    ids[i] = pSyncNode->replicasId[i];
    char* s = syncUtilRaftId2Str(&ids[i]);
    printf("raftId[%d] : %s\n", i, s);
wafwerar's avatar
wafwerar 已提交
119
    taosMemoryFree(s);
M
Minghao Li 已提交
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
  }
}

int main(int argc, char** argv) {
  // taosInitLog((char *)"syncTest.log", 100000, 10);
  tsAsyncLog = 0;
  sDebugFlag = 143 + 64;

  myIndex = 0;
  if (argc >= 2) {
    myIndex = atoi(argv[1]);
  }

  int32_t ret = syncIOStart((char*)"127.0.0.1", ports[myIndex]);
  assert(ret == 0);

  ret = syncEnvStart();
  assert(ret == 0);

M
Minghao Li 已提交
139 140
  taosRemoveDir("./wal_test");

M
Minghao Li 已提交
141 142 143
  pSyncNode = syncInitTest();
  assert(pSyncNode != NULL);

M
Minghao Li 已提交
144 145
  // syncNodePrint((char*)"syncLogStoreTest", pSyncNode);
  // initRaftId(pSyncNode);
M
Minghao Li 已提交
146 147 148 149 150

  logStoreTest();

  return 0;
}