Merge pull request #4260 from taosdata/feature/wal
[TD-2051]<fix>: taosd will crash if there a hostame not exist #4249
This commit is contained in:
commit
04832fde1a
|
@ -201,7 +201,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_VND_NO_SUCH_FILE_OR_DIR, 0, 0x0507, "Missing da
|
|||
TAOS_DEFINE_ERROR(TSDB_CODE_VND_OUT_OF_MEMORY, 0, 0x0508, "Out of memory")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_VND_APP_ERROR, 0, 0x0509, "Unexpected generic error in vnode")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_VND_INVALID_VRESION_FILE, 0, 0x050A, "Invalid version file")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_VND_IS_FULL, 0, 0x050B, "Vnode memory is full for commit is failed")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_VND_IS_FULL, 0, 0x050B, "Vnode memory is full because commit failed")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_VND_NOT_SYNCED, 0, 0x0511, "Database suspended")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_VND_NO_WRITE_AUTH, 0, 0x0512, "Write operation denied")
|
||||
|
||||
|
|
|
@ -36,6 +36,7 @@ extern "C" {
|
|||
#define TAOS_SMSG_STATUS 7
|
||||
|
||||
#define SYNC_MAX_SIZE (TSDB_MAX_WAL_SIZE + sizeof(SWalHead) + sizeof(SSyncHead) + 16)
|
||||
#define SYNC_RECV_BUFFER_SIZE (5*1024*1024)
|
||||
|
||||
#define nodeRole pNode->peerInfo[pNode->selfIndex]->role
|
||||
#define nodeVersion pNode->peerInfo[pNode->selfIndex]->version
|
||||
|
|
|
@ -179,6 +179,13 @@ int64_t syncStart(const SSyncInfo *pInfo) {
|
|||
for (int32_t i = 0; i < pCfg->replica; ++i) {
|
||||
const SNodeInfo *pNodeInfo = pCfg->nodeInfo + i;
|
||||
pNode->peerInfo[i] = syncAddPeer(pNode, pNodeInfo);
|
||||
if (pNode->peerInfo[i] == NULL) {
|
||||
sError("vgId:%d, node:%d fqdn:%s port:%u is not configured, stop taosd", pNode->vgId, pNodeInfo->nodeId, pNodeInfo->nodeFqdn,
|
||||
pNodeInfo->nodePort);
|
||||
syncStop(pNode->rid);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ((strcmp(pNodeInfo->nodeFqdn, tsNodeFqdn) == 0) && (pNodeInfo->nodePort == tsSyncPort)) {
|
||||
pNode->selfIndex = i;
|
||||
}
|
||||
|
@ -476,7 +483,11 @@ static void syncRemovePeer(SSyncPeer *pPeer) {
|
|||
|
||||
static SSyncPeer *syncAddPeer(SSyncNode *pNode, const SNodeInfo *pInfo) {
|
||||
uint32_t ip = taosGetIpFromFqdn(pInfo->nodeFqdn);
|
||||
if (ip == -1) return NULL;
|
||||
if (ip == 0xFFFFFFFF) {
|
||||
sError("failed to add peer, can resolve fqdn:%s since %s", pInfo->nodeFqdn, strerror(errno));
|
||||
terrno = TSDB_CODE_RPC_FQDN_ERROR;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
SSyncPeer *pPeer = calloc(1, sizeof(SSyncPeer));
|
||||
if (pPeer == NULL) return NULL;
|
||||
|
|
|
@ -136,7 +136,7 @@ static int32_t syncRestoreWal(SSyncPeer *pPeer) {
|
|||
SSyncNode *pNode = pPeer->pSyncNode;
|
||||
int32_t ret, code = -1;
|
||||
|
||||
void *buffer = calloc(1024000, 1); // size for one record
|
||||
void *buffer = calloc(SYNC_MAX_SIZE, 1); // size for one record
|
||||
if (buffer == NULL) return -1;
|
||||
|
||||
SWalHead *pHead = (SWalHead *)buffer;
|
||||
|
@ -237,7 +237,7 @@ static int32_t syncOpenRecvBuffer(SSyncNode *pNode) {
|
|||
SRecvBuffer *pRecv = calloc(sizeof(SRecvBuffer), 1);
|
||||
if (pRecv == NULL) return -1;
|
||||
|
||||
pRecv->bufferSize = 5000000;
|
||||
pRecv->bufferSize = SYNC_RECV_BUFFER_SIZE;
|
||||
pRecv->buffer = malloc(pRecv->bufferSize);
|
||||
if (pRecv->buffer == NULL) {
|
||||
free(pRecv);
|
||||
|
|
|
@ -58,13 +58,13 @@ uint32_t taosGetIpFromFqdn(const char *fqdn) {
|
|||
} else {
|
||||
#ifdef EAI_SYSTEM
|
||||
if (ret == EAI_SYSTEM) {
|
||||
uError("failed to get the ip address, fqdn:%s, code:%d, reason:%s", fqdn, ret, strerror(errno));
|
||||
uError("failed to get the ip address, fqdn:%s, since:%s", fqdn, strerror(errno));
|
||||
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||
} else {
|
||||
uError("failed to get the ip address, fqdn:%s, code:%d, reason:%s", fqdn, ret, gai_strerror(ret));
|
||||
uError("failed to get the ip address, fqdn:%s, since:%s", fqdn, gai_strerror(ret));
|
||||
}
|
||||
#else
|
||||
uError("failed to get the ip address, fqdn:%s, code:%d, reason:%s", fqdn, ret, gai_strerror(ret));
|
||||
uError("failed to get the ip address, fqdn:%s, since:%s", fqdn, gai_strerror(ret));
|
||||
#endif
|
||||
return 0xFFFFFFFF;
|
||||
}
|
||||
|
|
|
@ -419,7 +419,11 @@ void vnodeRelease(void *pVnodeRaw) {
|
|||
}
|
||||
|
||||
if (pVnode->wal) {
|
||||
if (code == 0) walRemoveAllOldFiles(pVnode->wal);
|
||||
if (code != 0) {
|
||||
vError("vgId:%d, failed to commit while close tsdb repo, keep wal", pVnode->vgId);
|
||||
} else {
|
||||
walRemoveAllOldFiles(pVnode->wal);
|
||||
}
|
||||
walClose(pVnode->wal);
|
||||
pVnode->wal = NULL;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue