fix stream backend convert
This commit is contained in:
parent
7905f22aae
commit
52d7a26c10
|
@ -230,6 +230,94 @@ int32_t rebuildDirFromCheckpoint(const char* path, int64_t chkpId, char** dst) {
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
int32_t readMetaData(char* path, SArray* list) {
|
||||||
|
char buf[128] = {0};
|
||||||
|
char* metaPath = taosMemoryCalloc(1, strlen(path));
|
||||||
|
sprintf(metaPath, "%s%s%s", path, TD_DIRSEP, "META");
|
||||||
|
|
||||||
|
TdFilePtr pFile = taosOpenFile(path, TD_FILE_READ);
|
||||||
|
|
||||||
|
if (taosReadFile(pFile, buf, sizeof(buf)) <= 0) {
|
||||||
|
taosMemoryFree(metaPath);
|
||||||
|
taosCloseFile(&pFile);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
int32_t len = strlen(buf);
|
||||||
|
for (int i = 0; i < len; i++) {
|
||||||
|
if (buf[i] == '\n') {
|
||||||
|
char* item = taosMemoryCalloc(1, i + 1);
|
||||||
|
memcpy(item, buf, i);
|
||||||
|
taosArrayPush(list, &item);
|
||||||
|
|
||||||
|
item = taosMemoryCalloc(1, len - i);
|
||||||
|
memcpy(item, buf + i + 1, len - i - 1);
|
||||||
|
taosArrayPush(list, &item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
taosCloseFile(&pFile);
|
||||||
|
taosMemoryFree(metaPath);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int32_t validAndCvtMeta(char* path, SArray* list, int64_t chkpId) {
|
||||||
|
int32_t complete = 1;
|
||||||
|
int32_t len = strlen(path) + 32;
|
||||||
|
char* src = taosMemoryCalloc(1, len);
|
||||||
|
char* dst = taosMemoryCalloc(1, len);
|
||||||
|
|
||||||
|
for (int i = 0; i < taosArrayGetSize(list); i++) {
|
||||||
|
char* p = taosArrayGetP(list, i);
|
||||||
|
sprintf(src, "%s%s%s", path, TD_DIRSEP, p);
|
||||||
|
if (taosStatFile(src, NULL, NULL, NULL) != 0) {
|
||||||
|
complete = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
char temp[64] = {0};
|
||||||
|
for (int j = 0; j < strlen(p); j++) {
|
||||||
|
if (p[j] == '_') {
|
||||||
|
memcpy(temp, p, j);
|
||||||
|
}
|
||||||
|
if (taosStr2int64(p + j + 1) != chkpId) {
|
||||||
|
complete = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sprintf(dst, "%s%s%s", path, TD_DIRSEP, temp);
|
||||||
|
taosRenameFile(src, dst);
|
||||||
|
|
||||||
|
memset(src, 0, len);
|
||||||
|
memset(dst, 0, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
taosMemoryFree(src);
|
||||||
|
taosMemoryFree(dst);
|
||||||
|
return complete == 1 ? 0 : -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t rebuildFromRemote(char* key, char* chkpPath, int64_t chkpId, char* defaultPath) {
|
||||||
|
int32_t code = downloadCheckpoint(key, chkpPath);
|
||||||
|
if (code != 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
SArray* list = taosArrayInit(2, sizeof(void*));
|
||||||
|
code = readMetaData(chkpPath, list);
|
||||||
|
if (code == 0) {
|
||||||
|
code = validAndCvtMeta(chkpPath, list, chkpId);
|
||||||
|
}
|
||||||
|
taosArrayDestroyP(list, taosMemoryFree);
|
||||||
|
|
||||||
|
if (code == 0) {
|
||||||
|
if (taosIsDir(defaultPath)) {
|
||||||
|
taosRemoveDir(defaultPath);
|
||||||
|
}
|
||||||
|
taosMkDir(defaultPath);
|
||||||
|
code = copyFiles(chkpPath, defaultPath);
|
||||||
|
}
|
||||||
|
return code;
|
||||||
|
}
|
||||||
int32_t rebuildDirFromChkp2(const char* path, char* key, int64_t chkpId, char** dbPrefixPath, char** dbPath) {
|
int32_t rebuildDirFromChkp2(const char* path, char* key, int64_t chkpId, char** dbPrefixPath, char** dbPath) {
|
||||||
// impl later
|
// impl later
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
|
@ -271,11 +359,14 @@ int32_t rebuildDirFromChkp2(const char* path, char* key, int64_t chkpId, char**
|
||||||
stInfo("start to restart stream backend at checkpoint path: %s", chkpPath);
|
stInfo("start to restart stream backend at checkpoint path: %s", chkpPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else if (!taosIsDir(chkpPath)) {
|
||||||
|
code = rebuildFromRemote(key, chkpPath, chkpId, defaultPath);
|
||||||
} else {
|
} else {
|
||||||
stInfo("failed to start stream backend at %s, reason: %s, restart from default defaultPath dir:%s", chkpPath,
|
stInfo("failed to start stream backend at %s, reason: %s, restart from default defaultPath dir:%s", chkpPath,
|
||||||
tstrerror(TAOS_SYSTEM_ERROR(errno)), defaultPath);
|
tstrerror(TAOS_SYSTEM_ERROR(errno)), defaultPath);
|
||||||
taosMkDir(defaultPath);
|
taosMkDir(defaultPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
taosMemoryFree(chkpPath);
|
taosMemoryFree(chkpPath);
|
||||||
} else {
|
} else {
|
||||||
char* chkpPath = taosMemoryCalloc(1, strlen(path) + 256);
|
char* chkpPath = taosMemoryCalloc(1, strlen(path) + 256);
|
||||||
|
|
Loading…
Reference in New Issue