Merge pull request #27484 from taosdata/fix/TD-31696

fix:[TD-31696] decimal number check error in config file because precision different in float and double
This commit is contained in:
Pan Wei 2024-08-28 18:56:23 +08:00 committed by GitHub
commit 968b90c1eb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 16 additions and 12 deletions

View File

@ -84,11 +84,11 @@ typedef struct SConfigItem {
}; };
union { union {
int64_t imin; int64_t imin;
double fmin; float fmin;
}; };
union { union {
int64_t imax; int64_t imax;
double fmax; float fmax;
}; };
SArray *array; // SDiskCfg/SLogVar SArray *array; // SDiskCfg/SLogVar
} SConfigItem; } SConfigItem;

View File

@ -55,7 +55,7 @@ void taosIpPort2String(uint32_t ip, uint16_t port, char *str);
void *tmemmem(const char *haystack, int hlen, const char *needle, int nlen); void *tmemmem(const char *haystack, int hlen, const char *needle, int nlen);
int32_t parseCfgReal(const char *str, double *out); int32_t parseCfgReal(const char *str, float *out);
static FORCE_INLINE void taosEncryptPass(uint8_t *inBuf, size_t inLen, char *target) { static FORCE_INLINE void taosEncryptPass(uint8_t *inBuf, size_t inLen, char *target) {
T_MD5_CTX context; T_MD5_CTX context;

View File

@ -696,7 +696,7 @@ static void monitorSendAllSlowLogFromTempDir(int64_t clusterId) {
continue; continue;
} }
if (taosLockFile(pFile) < 0) { if (taosLockFile(pFile) < 0) {
tscError("failed to lock file:%s since %s, maybe used by other process", filename, terrstr()); tscInfo("failed to lock file:%s since %s, maybe used by other process", filename, terrstr());
(void)taosCloseFile(&pFile); (void)taosCloseFile(&pFile);
continue; continue;
} }

View File

@ -193,15 +193,15 @@ static int32_t cfgSetInt64(SConfigItem *pItem, const char *value, ECfgSrcType st
} }
static int32_t cfgSetFloat(SConfigItem *pItem, const char *value, ECfgSrcType stype) { static int32_t cfgSetFloat(SConfigItem *pItem, const char *value, ECfgSrcType stype) {
double dval; float dval = 0;
TAOS_CHECK_RETURN(parseCfgReal(value, &dval)); TAOS_CHECK_RETURN(parseCfgReal(value, &dval));
if (dval < pItem->fmin || dval > pItem->fmax) { if (dval < pItem->fmin || dval > pItem->fmax) {
uError("cfg:%s, type:%s src:%s value:%f out of range[%f, %f]", pItem->name, cfgDtypeStr(pItem->dtype), uError("cfg:%s, type:%s src:%s value:%g out of range[%g, %g]", pItem->name, cfgDtypeStr(pItem->dtype),
cfgStypeStr(stype), dval, pItem->fmin, pItem->fmax); cfgStypeStr(stype), dval, pItem->fmin, pItem->fmax);
TAOS_RETURN(TSDB_CODE_OUT_OF_RANGE); TAOS_RETURN(TSDB_CODE_OUT_OF_RANGE);
} }
pItem->fval = (float)dval; pItem->fval = dval;
pItem->stype = stype; pItem->stype = stype;
TAOS_RETURN(TSDB_CODE_SUCCESS); TAOS_RETURN(TSDB_CODE_SUCCESS);
} }
@ -385,6 +385,10 @@ int32_t cfgSetItem(SConfig *pCfg, const char *name, const char *value, ECfgSrcTy
(void)taosThreadMutexUnlock(&pCfg->lock); (void)taosThreadMutexUnlock(&pCfg->lock);
} }
if (code != 0){
uError("cfg:%s, type:%s src:%s value:%s failed since %s", pItem->name, cfgDtypeStr(pItem->dtype),
cfgStypeStr(stype), value, tstrerror(code));
}
TAOS_RETURN(code); TAOS_RETURN(code);
} }
@ -475,14 +479,14 @@ int32_t cfgCheckRangeForDynUpdate(SConfig *pCfg, const char *name, const char *p
} break; } break;
case CFG_DTYPE_FLOAT: case CFG_DTYPE_FLOAT:
case CFG_DTYPE_DOUBLE: { case CFG_DTYPE_DOUBLE: {
double dval; float dval = 0;
int32_t code = parseCfgReal(pVal, &dval); int32_t code = parseCfgReal(pVal, &dval);
if (code != TSDB_CODE_SUCCESS) { if (code != TSDB_CODE_SUCCESS) {
cfgUnLock(pCfg); cfgUnLock(pCfg);
TAOS_RETURN(code); TAOS_RETURN(code);
} }
if (dval < pItem->fmin || dval > pItem->fmax) { if (dval < pItem->fmin || dval > pItem->fmax) {
uError("cfg:%s, type:%s value:%f out of range[%f, %f]", pItem->name, cfgDtypeStr(pItem->dtype), dval, uError("cfg:%s, type:%s value:%g out of range[%g, %g]", pItem->name, cfgDtypeStr(pItem->dtype), dval,
pItem->fmin, pItem->fmax); pItem->fmin, pItem->fmax);
cfgUnLock(pCfg); cfgUnLock(pCfg);
TAOS_RETURN(TSDB_CODE_OUT_OF_RANGE); TAOS_RETURN(TSDB_CODE_OUT_OF_RANGE);

View File

@ -505,11 +505,11 @@ size_t twcsncspn(const TdUcs4 *wcs, size_t size, const TdUcs4 *reject, size_t rs
return index; return index;
} }
int32_t parseCfgReal(const char *str, double *out) { int32_t parseCfgReal(const char *str, float *out) {
double val; float val;
char *endPtr; char *endPtr;
errno = 0; errno = 0;
val = taosStr2Double(str, &endPtr); val = taosStr2Float(str, &endPtr);
if (str == endPtr || errno == ERANGE || isnan(val)) { if (str == endPtr || errno == ERANGE || isnan(val)) {
return terrno = TSDB_CODE_INVALID_CFG_VALUE; return terrno = TSDB_CODE_INVALID_CFG_VALUE;
} }