Merge pull request #25871 from taosdata/fix/TD-29772-2-3.0
fix/TD-29772
This commit is contained in:
commit
57fdb40006
|
@ -257,8 +257,10 @@ extern bool tsExperimental;
|
|||
|
||||
int32_t taosCreateLog(const char *logname, int32_t logFileNum, const char *cfgDir, const char **envCmd,
|
||||
const char *envFile, char *apolloUrl, SArray *pArgs, bool tsc);
|
||||
int32_t taosReadDataFolder(const char *cfgDir, const char **envCmd,
|
||||
const char *envFile, char *apolloUrl, SArray *pArgs);
|
||||
int32_t taosInitCfg(const char *cfgDir, const char **envCmd, const char *envFile, char *apolloUrl, SArray *pArgs,
|
||||
bool tsc, bool isDumpCfg);
|
||||
bool tsc);
|
||||
void taosCleanupCfg();
|
||||
|
||||
int32_t taosCfgDynamicOptions(SConfig *pCfg, const char *name, bool forServer);
|
||||
|
|
|
@ -725,7 +725,7 @@ void taos_init_imp(void) {
|
|||
return;
|
||||
}
|
||||
|
||||
if (taosInitCfg(configDir, NULL, NULL, NULL, NULL, 1, true) != 0) {
|
||||
if (taosInitCfg(configDir, NULL, NULL, NULL, NULL, 1) != 0) {
|
||||
tscInitRes = -1;
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -1377,6 +1377,35 @@ int32_t taosCreateLog(const char *logname, int32_t logFileNum, const char *cfgDi
|
|||
return 0;
|
||||
}
|
||||
|
||||
int32_t taosReadDataFolder(const char *cfgDir, const char **envCmd,
|
||||
const char *envFile, char *apolloUrl, SArray *pArgs) {
|
||||
if (tsCfg == NULL) osDefaultInit();
|
||||
|
||||
SConfig *pCfg = cfgInit();
|
||||
if (pCfg == NULL) return -1;
|
||||
|
||||
if (cfgAddDir(pCfg, "dataDir", tsDataDir, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1;
|
||||
if (cfgAddInt32(pCfg, "dDebugFlag", dDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1;
|
||||
|
||||
if (taosLoadCfg(pCfg, envCmd, cfgDir, envFile, apolloUrl) != 0) {
|
||||
printf("failed to load cfg since %s", terrstr());
|
||||
cfgCleanup(pCfg);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (cfgLoadFromArray(pCfg, pArgs) != 0) {
|
||||
printf("failed to load cfg from array since %s", terrstr());
|
||||
cfgCleanup(pCfg);
|
||||
return -1;
|
||||
}
|
||||
|
||||
tstrncpy(tsDataDir, cfgGetItem(pCfg, "dataDir")->str, PATH_MAX);
|
||||
dDebugFlag = cfgGetItem(pCfg, "dDebugFlag")->i32;
|
||||
|
||||
cfgCleanup(pCfg);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int32_t taosCheckGlobalCfg() {
|
||||
uint32_t ipv4 = taosGetIpv4FromFqdn(tsLocalFqdn);
|
||||
if (ipv4 == 0xffffffff) {
|
||||
|
@ -1394,7 +1423,7 @@ static int32_t taosCheckGlobalCfg() {
|
|||
}
|
||||
|
||||
int32_t taosInitCfg(const char *cfgDir, const char **envCmd, const char *envFile, char *apolloUrl, SArray *pArgs,
|
||||
bool tsc, bool isDumpCfg) {
|
||||
bool tsc) {
|
||||
if (tsCfg != NULL) return 0;
|
||||
tsCfg = cfgInit();
|
||||
|
||||
|
@ -1441,7 +1470,7 @@ int32_t taosInitCfg(const char *cfgDir, const char **envCmd, const char *envFile
|
|||
|
||||
taosSetAllDebugFlag(tsCfg, cfgGetItem(tsCfg, "debugFlag")->i32);
|
||||
|
||||
if(isDumpCfg) cfgDumpCfg(tsCfg, tsc, false);
|
||||
cfgDumpCfg(tsCfg, tsc, false);
|
||||
|
||||
if (taosCheckGlobalCfg() != 0) {
|
||||
return -1;
|
||||
|
|
|
@ -205,11 +205,11 @@ static int32_t dmParseArgs(int32_t argc, char const *argv[]) {
|
|||
if(i < argc - 1) {
|
||||
int32_t len = strlen(argv[++i]);
|
||||
if (len < ENCRYPT_KEY_LEN_MIN) {
|
||||
printf("Error: Encrypt key should be at least %d characters\n", ENCRYPT_KEY_LEN_MIN);
|
||||
printf("ERROR: Encrypt key should be at least %d characters\n", ENCRYPT_KEY_LEN_MIN);
|
||||
return -1;
|
||||
}
|
||||
if (len > ENCRYPT_KEY_LEN) {
|
||||
printf("Error: Encrypt key overflow, it should be at most %d characters\n", ENCRYPT_KEY_LEN);
|
||||
printf("ERROR: Encrypt key overflow, it should be at most %d characters\n", ENCRYPT_KEY_LEN);
|
||||
return -1;
|
||||
}
|
||||
tstrncpy(global.encryptKey, argv[i], ENCRYPT_KEY_LEN);
|
||||
|
@ -371,6 +371,22 @@ int mainWindows(int argc, char **argv) {
|
|||
printf("memory dbg enabled\n");
|
||||
}
|
||||
#endif
|
||||
if(global.generateCode) {
|
||||
bool toLogFile = false;
|
||||
if(taosReadDataFolder(configDir, global.envCmd, global.envFile, global.apolloUrl, global.pArgs) != 0){
|
||||
encryptError("failed to generate encrypt code since taosd is running, please stop it first");
|
||||
return -1;
|
||||
};
|
||||
|
||||
if(dmCheckRunning(tsDataDir) == NULL) {
|
||||
encryptError("failed to generate encrypt code since taosd is running, please stop it first");
|
||||
return -1;
|
||||
}
|
||||
int ret = dmUpdateEncryptKey(global.encryptKey, toLogFile);
|
||||
taosCloseLog();
|
||||
taosCleanupArgs();
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (dmInitLog() != 0) {
|
||||
printf("failed to start since init log error\n");
|
||||
|
@ -380,28 +396,13 @@ int mainWindows(int argc, char **argv) {
|
|||
|
||||
dmPrintArgs(argc, argv);
|
||||
|
||||
bool isDumpCfg = true;
|
||||
if(global.generateCode) {
|
||||
isDumpCfg = false;
|
||||
}
|
||||
if (taosInitCfg(configDir, global.envCmd, global.envFile, global.apolloUrl, global.pArgs, 0, isDumpCfg) != 0) {
|
||||
if (taosInitCfg(configDir, global.envCmd, global.envFile, global.apolloUrl, global.pArgs, 0) != 0) {
|
||||
dError("failed to start since read config error");
|
||||
taosCloseLog();
|
||||
taosCleanupArgs();
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(global.generateCode) {
|
||||
if(dmCheckRunning(tsDataDir) == NULL) {
|
||||
dError("failed to generate encrypt code since taosd is running, please stop it first");
|
||||
return -1;
|
||||
}
|
||||
int ret = dmUpdateEncryptKey(global.encryptKey);
|
||||
taosCloseLog();
|
||||
taosCleanupArgs();
|
||||
return ret;
|
||||
}
|
||||
|
||||
if(dmGetEncryptKey() != 0){
|
||||
dError("failed to start since failed to get encrypt key");
|
||||
taosCloseLog();
|
||||
|
|
|
@ -220,7 +220,7 @@ int32_t dmProcessCreateEncryptKeyReq(SDnodeMgmt *pMgmt, SRpcMsg *pMsg) {
|
|||
goto _exit;
|
||||
}
|
||||
|
||||
code = dmUpdateEncryptKey(cfgReq.value);
|
||||
code = dmUpdateEncryptKey(cfgReq.value, true);
|
||||
if (code == 0) {
|
||||
tsEncryptionKeyChksum = taosCalcChecksum(0, cfgReq.value, strlen(cfgReq.value));
|
||||
tsEncryptionKeyStat = ENCRYPT_KEY_STAT_LOADED;
|
||||
|
|
|
@ -53,6 +53,36 @@ extern "C" {
|
|||
#define dDebug(...) { if (dDebugFlag & DEBUG_DEBUG) { taosPrintLog("DND ", DEBUG_DEBUG, dDebugFlag, __VA_ARGS__); }}
|
||||
#define dTrace(...) { if (dDebugFlag & DEBUG_TRACE) { taosPrintLog("DND ", DEBUG_TRACE, dDebugFlag, __VA_ARGS__); }}
|
||||
|
||||
#define encryptDebug(...) { \
|
||||
if (toLogFile) { \
|
||||
if (dDebugFlag & DEBUG_DEBUG) {taosPrintLog("DND ", DEBUG_DEBUG, dDebugFlag, __VA_ARGS__);} \
|
||||
} else { \
|
||||
/*if (dDebugFlag & DEBUG_DEBUG) {taosPrintLog("DND ", DEBUG_SCREEN, dDebugFlag, __VA_ARGS__);}*/ \
|
||||
if (dDebugFlag & DEBUG_DEBUG) {printf(__VA_ARGS__); printf("\n");} \
|
||||
} \
|
||||
}
|
||||
|
||||
#define encryptInfo(...) { \
|
||||
if (toLogFile) { \
|
||||
taosPrintLog("DND ", DEBUG_INFO, 255, __VA_ARGS__); \
|
||||
} else { \
|
||||
/*if (dDebugFlag & DEBUG_DEBUG) {taosPrintLog("DND ", DEBUG_SCREEN, dDebugFlag, __VA_ARGS__);}*/ \
|
||||
printf(__VA_ARGS__); \
|
||||
printf("\n"); \
|
||||
} \
|
||||
}
|
||||
|
||||
#define encryptError(...) { \
|
||||
if (toLogFile) { \
|
||||
taosPrintLog("DND ERROR ", DEBUG_ERROR, 255, __VA_ARGS__); \
|
||||
}\
|
||||
else{ \
|
||||
/*taosPrintLog("DND ", DEBUG_SCREEN, 255, __VA_ARGS__); */\
|
||||
printf("ERROR: " __VA_ARGS__); \
|
||||
printf("\n"); \
|
||||
}\
|
||||
}
|
||||
|
||||
#define dGFatal(param, ...) {if (dDebugFlag & DEBUG_FATAL) { char buf[40] = {0}; TRACE_TO_STR(trace, buf); dFatal(param ", gtid:%s", __VA_ARGS__, buf);}}
|
||||
#define dGError(param, ...) {if (dDebugFlag & DEBUG_ERROR) { char buf[40] = {0}; TRACE_TO_STR(trace, buf); dError(param ", gtid:%s", __VA_ARGS__, buf);}}
|
||||
#define dGWarn(param, ...) {if (dDebugFlag & DEBUG_WARN) { char buf[40] = {0}; TRACE_TO_STR(trace, buf); dWarn(param ", gtid:%s", __VA_ARGS__, buf);}}
|
||||
|
@ -194,7 +224,7 @@ void dmSetMnodeEpSet(SDnodeData *pData, SEpSet *pEpSet);
|
|||
bool dmUpdateDnodeInfo(void *pData, int32_t *dnodeId, int64_t *clusterId, char *fqdn, uint16_t *port);
|
||||
void dmRemoveDnodePairs(SDnodeData *pData);
|
||||
void dmGetDnodeEp(void *pData, int32_t dnodeId, char *pEp, char *pFqdn, uint16_t *pPort);
|
||||
int32_t dmUpdateEncryptKey(char *key);
|
||||
int32_t dmUpdateEncryptKey(char *key, bool toLogFile);
|
||||
int32_t dmGetEncryptKey();
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -186,7 +186,7 @@ TdFilePtr dmCheckRunning(const char *dataDir) {
|
|||
|
||||
extern int32_t generateEncryptCode(const char *key, const char *machineId, char **encryptCode);
|
||||
|
||||
static int32_t dmWriteCheckCodeFile(char* file, char* realfile, char* key){
|
||||
static int32_t dmWriteCheckCodeFile(char* file, char* realfile, char* key, bool toLogFile){
|
||||
TdFilePtr pFile = NULL;
|
||||
char *result = NULL;
|
||||
int32_t code = -1;
|
||||
|
@ -211,7 +211,8 @@ static int32_t dmWriteCheckCodeFile(char* file, char* realfile, char* key){
|
|||
taosCloseFile(&pFile);
|
||||
if (taosRenameFile(file, realfile) != 0) goto _OVER;
|
||||
|
||||
dInfo("succeed to write checkCode file:%s", realfile);
|
||||
encryptDebug("succeed to write checkCode file:%s", realfile);
|
||||
|
||||
code = 0;
|
||||
_OVER:
|
||||
if(pFile != NULL) taosCloseFile(&pFile);
|
||||
|
@ -220,7 +221,7 @@ _OVER:
|
|||
return code;
|
||||
}
|
||||
|
||||
static int32_t dmWriteEncryptCodeFile(char* file, char* realfile, char* encryptCode){
|
||||
static int32_t dmWriteEncryptCodeFile(char* file, char* realfile, char* encryptCode, bool toLogFile){
|
||||
TdFilePtr pFile = NULL;
|
||||
int32_t code = -1;
|
||||
|
||||
|
@ -234,7 +235,7 @@ static int32_t dmWriteEncryptCodeFile(char* file, char* realfile, char* encryptC
|
|||
taosCloseFile(&pFile);
|
||||
if (taosRenameFile(file, realfile) != 0) goto _OVER;
|
||||
|
||||
dInfo("succeed to write encryptCode file:%s", realfile);
|
||||
encryptDebug("succeed to write encryptCode file:%s", realfile);
|
||||
|
||||
code = 0;
|
||||
_OVER:
|
||||
|
@ -243,7 +244,7 @@ _OVER:
|
|||
return code;
|
||||
}
|
||||
|
||||
static int32_t dmCompareEncryptKey(char* file, char* key){
|
||||
static int32_t dmCompareEncryptKey(char* file, char* key, bool toLogFile){
|
||||
char *content = NULL;
|
||||
int64_t size = 0;
|
||||
TdFilePtr pFile = NULL;
|
||||
|
@ -253,13 +254,13 @@ static int32_t dmCompareEncryptKey(char* file, char* key){
|
|||
pFile = taosOpenFile(file, TD_FILE_READ);
|
||||
if (pFile == NULL) {
|
||||
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||
dError("failed to open dnode file:%s since %s", file, terrstr());
|
||||
encryptError("failed to open dnode file:%s since %s", file, terrstr());
|
||||
goto _OVER;
|
||||
}
|
||||
|
||||
if (taosFStatFile(pFile, &size, NULL) < 0) {
|
||||
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||
dError("failed to fstat dnode file:%s since %s", file, terrstr());
|
||||
encryptError("failed to fstat dnode file:%s since %s", file, terrstr());
|
||||
goto _OVER;
|
||||
}
|
||||
|
||||
|
@ -271,11 +272,11 @@ static int32_t dmCompareEncryptKey(char* file, char* key){
|
|||
|
||||
if (taosReadFile(pFile, content, size) != size) {
|
||||
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||
dError("failed to read dnode file:%s since %s", file, terrstr());
|
||||
encryptError("failed to read dnode file:%s since %s", file, terrstr());
|
||||
goto _OVER;
|
||||
}
|
||||
|
||||
dInfo("succeed to read checkCode file:%s", file);
|
||||
encryptDebug("succeed to read checkCode file:%s", file);
|
||||
|
||||
int len = ENCRYPTED_LEN(size);
|
||||
result = taosMemoryMalloc(len);
|
||||
|
@ -290,11 +291,11 @@ static int32_t dmCompareEncryptKey(char* file, char* key){
|
|||
|
||||
if(strcmp(opts.result, DM_KEY_INDICATOR) != 0) {
|
||||
terrno = TSDB_CODE_DNODE_ENCRYPTKEY_CHANGED;
|
||||
dError("failed to compare decrypted result");
|
||||
encryptError("failed to compare decrypted result");
|
||||
goto _OVER;
|
||||
}
|
||||
|
||||
dInfo("succeed to compare checkCode file:%s", file);
|
||||
encryptDebug("succeed to compare checkCode file:%s", file);
|
||||
code = 0;
|
||||
_OVER:
|
||||
if(result != NULL) taosMemoryFree(result);
|
||||
|
@ -304,7 +305,7 @@ _OVER:
|
|||
return code;
|
||||
}
|
||||
|
||||
int32_t dmUpdateEncryptKey(char *key) {
|
||||
int32_t dmUpdateEncryptKey(char *key, bool toLogFile) {
|
||||
#ifdef TD_ENTERPRISE
|
||||
int32_t code = -1;
|
||||
char *machineId = NULL;
|
||||
|
@ -328,12 +329,12 @@ int32_t dmUpdateEncryptKey(char *key) {
|
|||
|
||||
if (taosMkDir(folder) != 0) {
|
||||
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||
dError("failed to create dir:%s since %s", folder, terrstr());
|
||||
encryptError("failed to create dir:%s since %s", folder, terrstr());
|
||||
goto _OVER;
|
||||
}
|
||||
|
||||
if(taosCheckExistFile(realCheckFile)){
|
||||
if(dmCompareEncryptKey(realCheckFile, key) != 0){
|
||||
if(dmCompareEncryptKey(realCheckFile, key, toLogFile) != 0){
|
||||
goto _OVER;
|
||||
}
|
||||
}
|
||||
|
@ -347,21 +348,23 @@ int32_t dmUpdateEncryptKey(char *key) {
|
|||
goto _OVER;
|
||||
}
|
||||
|
||||
if(dmWriteEncryptCodeFile(encryptFile, realEncryptFile, encryptCode) != 0){
|
||||
if(dmWriteEncryptCodeFile(encryptFile, realEncryptFile, encryptCode, toLogFile) != 0){
|
||||
goto _OVER;
|
||||
}
|
||||
|
||||
if(dmWriteCheckCodeFile(checkFile, realCheckFile, key) != 0){
|
||||
if(dmWriteCheckCodeFile(checkFile, realCheckFile, key, toLogFile) != 0){
|
||||
goto _OVER;
|
||||
}
|
||||
|
||||
encryptInfo("Succeed to update encrypt key\n");
|
||||
|
||||
code = 0;
|
||||
_OVER:
|
||||
taosMemoryFree(encryptCode);
|
||||
taosMemoryFree(machineId);
|
||||
if (code != 0) {
|
||||
if (terrno == 0) terrno = TAOS_SYSTEM_ERROR(errno);
|
||||
dError("failed to update encrypt key since %s", terrstr());
|
||||
encryptError("failed to update encrypt key since %s", terrstr());
|
||||
}
|
||||
return code;
|
||||
#else
|
||||
|
@ -453,7 +456,7 @@ int32_t dmGetEncryptKey(){
|
|||
goto _OVER;
|
||||
}
|
||||
|
||||
if(dmCompareEncryptKey(checkFile, encryptKey) != 0){
|
||||
if(dmCompareEncryptKey(checkFile, encryptKey, true) != 0){
|
||||
goto _OVER;
|
||||
}
|
||||
|
||||
|
|
|
@ -1424,7 +1424,7 @@ int main(int argc, char *argv[]) {
|
|||
printf("failed to start since init log error\n");
|
||||
}
|
||||
|
||||
if (taosInitCfg(configDir, NULL, NULL, NULL, NULL, 0, true) != 0) {
|
||||
if (taosInitCfg(configDir, NULL, NULL, NULL, NULL, 0) != 0) {
|
||||
fnError("failed to start since read config error");
|
||||
return -2;
|
||||
}
|
||||
|
|
|
@ -127,7 +127,7 @@ int aggregateFuncTest() {
|
|||
int main(int argc, char *argv[]) {
|
||||
parseArgs(argc, argv);
|
||||
initLog();
|
||||
if (taosInitCfg(configDir, NULL, NULL, NULL, NULL, 0, true) != 0) {
|
||||
if (taosInitCfg(configDir, NULL, NULL, NULL, NULL, 0) != 0) {
|
||||
fnError("failed to start since read config error");
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ extern bool simExecSuccess;
|
|||
|
||||
int32_t simInitCfg() {
|
||||
taosCreateLog("simlog", 1, configDir, NULL, NULL, NULL, NULL, 1);
|
||||
taosInitCfg(configDir, NULL, NULL, NULL, NULL, 1, true);
|
||||
taosInitCfg(configDir, NULL, NULL, NULL, NULL, 1);
|
||||
|
||||
SConfig *pCfg = taosGetCfg();
|
||||
tstrncpy(simScriptDir, cfgGetItem(pCfg, "scriptDir")->str, PATH_MAX);
|
||||
|
|
Loading…
Reference in New Issue