enh: getsystemuuid

This commit is contained in:
xsren 2024-10-11 13:41:53 +08:00
parent e81e999fc1
commit 47a6f3e6bc
4 changed files with 43 additions and 24 deletions

View File

@ -48,3 +48,6 @@ int64_t tGenIdPI64(void);
* @return * @return
*/ */
int64_t tGenQid64(int8_t dnodeId); int64_t tGenQid64(int8_t dnodeId);
int32_t taosGetSystemUUID32(uint32_t *uuid);
int32_t taosGetSystemUUID64(uint64_t *uuid);

View File

@ -1094,18 +1094,14 @@ int taos_options_imp(TSDB_OPTION option, const char *str) {
* @return * @return
*/ */
uint64_t generateRequestId() { uint64_t generateRequestId() {
static uint64_t hashId = 0; static uint32_t hashId = 0;
static uint32_t requestSerialId = 0; static int32_t requestSerialId = 0;
if (hashId == 0) { if (hashId == 0) {
char uid[64] = {0}; int32_t code = taosGetSystemUUID32(&hashId);
int32_t code = taosGetSystemUUID(uid, tListLen(uid));
if (code != TSDB_CODE_SUCCESS) { if (code != TSDB_CODE_SUCCESS) {
tscError("Failed to get the system uid to generated request id, reason:%s. use ip address instead", tscError("Failed to get the system uid to generated request id, reason:%s. use ip address instead",
tstrerror(TAOS_SYSTEM_ERROR(errno))); tstrerror(code));
} else {
hashId = MurmurHash3_32(uid, strlen(uid));
} }
} }
@ -1117,7 +1113,7 @@ uint64_t generateRequestId() {
uint32_t val = atomic_add_fetch_32(&requestSerialId, 1); uint32_t val = atomic_add_fetch_32(&requestSerialId, 1);
if (val >= 0xFFFF) atomic_store_32(&requestSerialId, 0); if (val >= 0xFFFF) atomic_store_32(&requestSerialId, 0);
id = ((hashId & 0x0FFF) << 52) | ((pid & 0x0FFF) << 40) | ((ts & 0xFFFFFF) << 16) | (val & 0xFFFF); id = (((uint64_t)(hashId & 0x0FFF)) << 52) | ((pid & 0x0FFF) << 40) | ((ts & 0xFFFFFF) << 16) | (val & 0xFFFF);
if (id) { if (id) {
break; break;
} }

View File

@ -56,7 +56,7 @@ int32_t schedulerInit() {
SCH_ERR_RET(TSDB_CODE_OUT_OF_MEMORY); SCH_ERR_RET(TSDB_CODE_OUT_OF_MEMORY);
} }
if (taosGetSystemUUID((char *)&schMgmt.sId, sizeof(schMgmt.sId))) { if (taosGetSystemUUID64(&schMgmt.sId)) {
qError("generate schedulerId failed, errno:%d", errno); qError("generate schedulerId failed, errno:%d", errno);
SCH_ERR_RET(TSDB_CODE_QRY_SYS_ERROR); SCH_ERR_RET(TSDB_CODE_QRY_SYS_ERROR);
} }

View File

@ -15,19 +15,42 @@
#include "tuuid.h" #include "tuuid.h"
static int64_t tUUIDHashId = 0; static uint32_t tUUIDHashId = 0;
static int32_t tUUIDSerialNo = 0; static int32_t tUUIDSerialNo = 0;
int32_t taosGetSystemUUID32(uint32_t *uuid) {
if (uuid == NULL) return TSDB_CODE_APP_ERROR;
char uid[65] = {0};
int32_t code = taosGetSystemUUID(uid, sizeof(uid));
uid[64] = 0;
if (code != TSDB_CODE_SUCCESS) {
return code;
} else {
*uuid = MurmurHash3_32(uid, strlen(uid));
}
return TSDB_CODE_SUCCESS;
}
int32_t taosGetSystemUUID64(uint64_t *uuid) {
if (uuid == NULL) return TSDB_CODE_APP_ERROR;
char uid[65] = {0};
int32_t code = taosGetSystemUUID(uid, sizeof(uid));
uid[64] = 0;
if (code != TSDB_CODE_SUCCESS) {
return code;
} else {
*uuid = MurmurHash3_64(uid, strlen(uid));
}
return TSDB_CODE_SUCCESS;
}
int32_t tGenIdPI32(void) { int32_t tGenIdPI32(void) {
if (tUUIDHashId == 0) { if (tUUIDHashId == 0) {
char uid[65] = {0}; int32_t code = taosGetSystemUUID32(&tUUIDHashId);
int32_t code = taosGetSystemUUID(uid, sizeof(uid));
uid[64] = 0;
if (code != TSDB_CODE_SUCCESS) { if (code != TSDB_CODE_SUCCESS) {
terrno = TAOS_SYSTEM_ERROR(errno); terrno = code;
} else {
tUUIDHashId = MurmurHash3_32(uid, strlen(uid));
} }
} }
@ -41,12 +64,9 @@ int32_t tGenIdPI32(void) {
int64_t tGenIdPI64(void) { int64_t tGenIdPI64(void) {
if (tUUIDHashId == 0) { if (tUUIDHashId == 0) {
char uid[65] = {0}; int32_t code = taosGetSystemUUID32(&tUUIDHashId);
int32_t code = taosGetSystemUUID(uid, 64);
if (code != TSDB_CODE_SUCCESS) { if (code != TSDB_CODE_SUCCESS) {
terrno = TAOS_SYSTEM_ERROR(errno); terrno = code;
} else {
tUUIDHashId = MurmurHash3_32(uid, strlen(uid));
} }
} }
@ -57,7 +77,7 @@ int64_t tGenIdPI64(void) {
uint64_t pid = taosGetPId(); uint64_t pid = taosGetPId();
int32_t val = atomic_add_fetch_32(&tUUIDSerialNo, 1); int32_t val = atomic_add_fetch_32(&tUUIDSerialNo, 1);
id = ((tUUIDHashId & 0x07FF) << 52) | ((pid & 0x0F) << 48) | ((ts & 0x3FFFFFF) << 20) | (val & 0xFFFFF); id = (((uint64_t)(tUUIDHashId & 0x07FF)) << 52) | ((pid & 0x0F) << 48) | ((ts & 0x3FFFFFF) << 20) | (val & 0xFFFFF);
if (id) { if (id) {
break; break;
} }