rm duplicate para

This commit is contained in:
yihaoDeng 2023-08-09 08:58:49 +00:00
parent 92b247aae8
commit a619b8f5be
1 changed files with 47 additions and 21 deletions

View File

@ -264,47 +264,73 @@ int32_t backendManagerGetDelta(SBackendManager* bm, int64_t chkpId, SArray* list
return 0; return 0;
} }
int32_t backendManagerDumpTo(SBackendManager* bm, char* name) { int32_t backendManagerDumpTo(SBackendManager* bm, char* dname) {
int32_t code = 0; int32_t code = 0;
int32_t len = bm->len + 64; int32_t len = bm->len + 128;
char* buf = taosMemoryCalloc(1, len);
sprintf(buf, "%s%s%s", bm->path, TD_DIRSEP, name);
code = taosMkDir(buf); char* dstBuf = taosMemoryCalloc(1, len);
char* srcBuf = taosMemoryCalloc(1, len);
char* srcDir = taosMemoryCalloc(1, len);
char* dstDir = taosMemoryCalloc(1, len);
sprintf(srcDir, "%s%s%s%" PRId64 "", bm->path, TD_DIRSEP, "checkpoint", bm->curChkpId);
sprintf(dstDir, "%s%s%s", bm->path, TD_DIRSEP, dname);
code = taosMkDir(dstDir);
if (code != 0) { if (code != 0) {
return code; return code;
} }
// clear current file // clear current file
memset(buf, 0, len); memset(dstBuf, 0, len);
sprintf(buf, "%s%s%s%s%s", bm->path, TD_DIRSEP, name, TD_DIRSEP, bm->pCurrent); sprintf(dstBuf, "%s%s%s", dstDir, TD_DIRSEP, bm->pCurrent);
taosRemoveFile(buf); taosRemoveFile(dstBuf);
memset(buf, 0, len); memset(dstBuf, 0, len);
sprintf(buf, "%s%s%s%s%s", bm->path, TD_DIRSEP, name, TD_DIRSEP, bm->pManifest); sprintf(dstBuf, "%s%s%s", dstDir, TD_DIRSEP, bm->pManifest);
taosRemoveFile(buf); taosRemoveFile(dstBuf);
// add file to $name dir
for (int i = 0; i < taosArrayGetSize(bm->pAdd); i++) { for (int i = 0; i < taosArrayGetSize(bm->pAdd); i++) {
memset(buf, 0, len); memset(dstBuf, 0, len);
char* filename = taosArrayGetP(bm->pAdd, i); char* filename = taosArrayGetP(bm->pAdd, i);
sprintf(buf, "%s%s%s%s%s", bm->path, TD_DIRSEP, name, TD_DIRSEP, filename); sprintf(srcBuf, "%s%s%s", srcDir, TD_DIRSEP, filename);
sprintf(dstBuf, "%s%s%s", dstDir, TD_DIRSEP, filename);
char* src = taosMemoryCalloc(1, len); taosCopyFile(srcBuf, dstBuf);
sprintf(src, "%s%s%s%" PRId64 "%s%s", bm->path, TD_DIRSEP, "checkpoint", bm->curChkpId, TD_DIRSEP, filename);
taosCopyFile(src, buf);
} }
// del file in $name
for (int i = 0; i < taosArrayGetSize(bm->pDel); i++) { for (int i = 0; i < taosArrayGetSize(bm->pDel); i++) {
memset(buf, 0, len); memset(dstBuf, 0, len);
char* filename = taosArrayGetP(bm->pDel, i); char* filename = taosArrayGetP(bm->pDel, i);
sprintf(buf, "%s%s%s%s%s", bm->path, TD_DIRSEP, name, TD_DIRSEP, filename); sprintf(dstBuf, "%s%s%s", dstDir, TD_DIRSEP, filename);
taosRemoveFile(buf); taosRemoveFile(dstBuf);
} }
// copy current file to dst dir
memset(srcBuf, 0, len);
memset(dstBuf, 0, len);
sprintf(srcBuf, "%s%s%s", srcDir, TD_DIRSEP, bm->pCurrent);
sprintf(dstBuf, "%s%s%s", dstDir, TD_DIRSEP, bm->pCurrent);
taosCopyFile(srcBuf, dstBuf);
// copy manifest file to dst dir
memset(srcBuf, 0, len);
memset(dstBuf, 0, len);
sprintf(srcBuf, "%s%s%s", srcDir, TD_DIRSEP, bm->pManifest);
sprintf(dstBuf, "%s%s%s", dstDir, TD_DIRSEP, bm->pManifest);
taosCopyFile(srcBuf, dstBuf);
// clear delta data // clear delta data
taosArrayClearP(bm->pAdd, taosMemoryFree); taosArrayClearP(bm->pAdd, taosMemoryFree);
taosArrayClearP(bm->pDel, taosMemoryFree); taosArrayClearP(bm->pDel, taosMemoryFree);
taosMemoryFree(srcBuf);
taosMemoryFree(dstBuf);
taosMemoryFree(srcDir);
taosMemoryFree(dstDir);
return code; return code;
} }