Merge pull request #6732 from junli1026/jun/hash
Make taosHashGetSize thread-safe and rename function
This commit is contained in:
commit
68e41b7e32
|
@ -920,7 +920,7 @@ int tscProcessLocalCmd(SSqlObj *pSql) {
|
||||||
} else if (pCmd->command == TSDB_SQL_SHOW_CREATE_DATABASE) {
|
} else if (pCmd->command == TSDB_SQL_SHOW_CREATE_DATABASE) {
|
||||||
pRes->code = tscProcessShowCreateDatabase(pSql);
|
pRes->code = tscProcessShowCreateDatabase(pSql);
|
||||||
} else if (pCmd->command == TSDB_SQL_RESET_CACHE) {
|
} else if (pCmd->command == TSDB_SQL_RESET_CACHE) {
|
||||||
taosHashEmpty(tscTableMetaInfo);
|
taosHashClear(tscTableMetaInfo);
|
||||||
pRes->code = TSDB_CODE_SUCCESS;
|
pRes->code = TSDB_CODE_SUCCESS;
|
||||||
} else if (pCmd->command == TSDB_SQL_SERV_VERSION) {
|
} else if (pCmd->command == TSDB_SQL_SERV_VERSION) {
|
||||||
pRes->code = tscProcessServerVer(pSql);
|
pRes->code = tscProcessServerVer(pSql);
|
||||||
|
|
|
@ -1163,7 +1163,7 @@ static void insertBatchClean(STscStmt* pStmt) {
|
||||||
pCmd->insertParam.pDataBlocks = tscDestroyBlockArrayList(pCmd->insertParam.pDataBlocks);
|
pCmd->insertParam.pDataBlocks = tscDestroyBlockArrayList(pCmd->insertParam.pDataBlocks);
|
||||||
pCmd->insertParam.numOfTables = 0;
|
pCmd->insertParam.numOfTables = 0;
|
||||||
|
|
||||||
taosHashEmpty(pCmd->insertParam.pTableBlockHashList);
|
taosHashClear(pCmd->insertParam.pTableBlockHashList);
|
||||||
tscFreeSqlResult(pSql);
|
tscFreeSqlResult(pSql);
|
||||||
tscFreeSubobj(pSql);
|
tscFreeSubobj(pSql);
|
||||||
tfree(pSql->pSubs);
|
tfree(pSql->pSubs);
|
||||||
|
|
|
@ -2309,7 +2309,7 @@ int tscProcessDropDbRsp(SSqlObj *pSql) {
|
||||||
//TODO LOCK DB WHEN MODIFY IT
|
//TODO LOCK DB WHEN MODIFY IT
|
||||||
//pSql->pTscObj->db[0] = 0;
|
//pSql->pTscObj->db[0] = 0;
|
||||||
|
|
||||||
taosHashEmpty(tscTableMetaInfo);
|
taosHashClear(tscTableMetaInfo);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2340,7 +2340,7 @@ int tscProcessAlterTableMsgRsp(SSqlObj *pSql) {
|
||||||
tfree(pTableMetaInfo->pTableMeta);
|
tfree(pTableMetaInfo->pTableMeta);
|
||||||
|
|
||||||
if (isSuperTable) { // if it is a super table, iterate the hashTable and remove all the childTableMeta
|
if (isSuperTable) { // if it is a super table, iterate the hashTable and remove all the childTableMeta
|
||||||
taosHashEmpty(tscTableMetaInfo);
|
taosHashClear(tscTableMetaInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -771,7 +771,7 @@ int tsdbLoadMetaCache(STsdbRepo *pRepo, bool recoverMeta) {
|
||||||
int64_t maxBufSize = 0;
|
int64_t maxBufSize = 0;
|
||||||
SMFInfo minfo;
|
SMFInfo minfo;
|
||||||
|
|
||||||
taosHashEmpty(pfs->metaCache);
|
taosHashClear(pfs->metaCache);
|
||||||
|
|
||||||
// No meta file, just return
|
// No meta file, just return
|
||||||
if (pfs->cstatus->pmf == NULL) return 0;
|
if (pfs->cstatus->pmf == NULL) return 0;
|
||||||
|
|
|
@ -140,7 +140,7 @@ int32_t taosHashRemoveWithData(SHashObj *pHashObj, const void *key, size_t keyLe
|
||||||
|
|
||||||
int32_t taosHashCondTraverse(SHashObj *pHashObj, bool (*fp)(void *, void *), void *param);
|
int32_t taosHashCondTraverse(SHashObj *pHashObj, bool (*fp)(void *, void *), void *param);
|
||||||
|
|
||||||
void taosHashEmpty(SHashObj *pHashObj);
|
void taosHashClear(SHashObj *pHashObj);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clean up hash table
|
* clean up hash table
|
||||||
|
|
|
@ -144,6 +144,14 @@ static FORCE_INLINE SHashNode *doUpdateHashNode(SHashObj *pHashObj, SHashEntry*
|
||||||
*/
|
*/
|
||||||
static void pushfrontNodeInEntryList(SHashEntry *pEntry, SHashNode *pNode);
|
static void pushfrontNodeInEntryList(SHashEntry *pEntry, SHashNode *pNode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether the hash table is empty or not.
|
||||||
|
*
|
||||||
|
* @param pHashObj the hash table object
|
||||||
|
* @return if the hash table is empty or not
|
||||||
|
*/
|
||||||
|
static FORCE_INLINE bool taosHashTableEmpty(const SHashObj *pHashObj);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the next element in hash table for iterator
|
* Get the next element in hash table for iterator
|
||||||
* @param pIter
|
* @param pIter
|
||||||
|
@ -195,7 +203,16 @@ void taosHashSetEqualFp(SHashObj *pHashObj, _equal_fn_t fp) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t taosHashGetSize(const SHashObj *pHashObj) { return (int32_t)((pHashObj == NULL) ? 0 : pHashObj->size); }
|
int32_t taosHashGetSize(const SHashObj *pHashObj) {
|
||||||
|
if (!pHashObj) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return (int32_t)atomic_load_64(&pHashObj->size);
|
||||||
|
}
|
||||||
|
|
||||||
|
static FORCE_INLINE bool taosHashTableEmpty(const SHashObj *pHashObj) {
|
||||||
|
return taosHashGetSize(pHashObj) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
int32_t taosHashPut(SHashObj *pHashObj, const void *key, size_t keyLen, void *data, size_t size) {
|
int32_t taosHashPut(SHashObj *pHashObj, const void *key, size_t keyLen, void *data, size_t size) {
|
||||||
uint32_t hashVal = (*pHashObj->hashFp)(key, (uint32_t)keyLen);
|
uint32_t hashVal = (*pHashObj->hashFp)(key, (uint32_t)keyLen);
|
||||||
|
@ -281,7 +298,7 @@ void *taosHashGet(SHashObj *pHashObj, const void *key, size_t keyLen) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void* taosHashGetClone(SHashObj *pHashObj, const void *key, size_t keyLen, void (*fp)(void *), void* d, size_t dsize) {
|
void* taosHashGetClone(SHashObj *pHashObj, const void *key, size_t keyLen, void (*fp)(void *), void* d, size_t dsize) {
|
||||||
if (pHashObj->size <= 0 || keyLen == 0 || key == NULL) {
|
if (taosHashTableEmpty(pHashObj) || keyLen == 0 || key == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -338,7 +355,7 @@ int32_t taosHashRemove(SHashObj *pHashObj, const void *key, size_t keyLen) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t taosHashRemoveWithData(SHashObj *pHashObj, const void *key, size_t keyLen, void *data, size_t dsize) {
|
int32_t taosHashRemoveWithData(SHashObj *pHashObj, const void *key, size_t keyLen, void *data, size_t dsize) {
|
||||||
if (pHashObj == NULL || pHashObj->size <= 0) {
|
if (pHashObj == NULL || taosHashTableEmpty(pHashObj)) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -405,7 +422,7 @@ int32_t taosHashRemoveWithData(SHashObj *pHashObj, const void *key, size_t keyLe
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t taosHashCondTraverse(SHashObj *pHashObj, bool (*fp)(void *, void *), void *param) {
|
int32_t taosHashCondTraverse(SHashObj *pHashObj, bool (*fp)(void *, void *), void *param) {
|
||||||
if (pHashObj == NULL || pHashObj->size == 0) {
|
if (pHashObj == NULL || taosHashTableEmpty(pHashObj)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -478,7 +495,7 @@ int32_t taosHashCondTraverse(SHashObj *pHashObj, bool (*fp)(void *, void *), voi
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void taosHashEmpty(SHashObj *pHashObj) {
|
void taosHashClear(SHashObj *pHashObj) {
|
||||||
if (pHashObj == NULL) {
|
if (pHashObj == NULL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -517,7 +534,7 @@ void taosHashCleanup(SHashObj *pHashObj) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
taosHashEmpty(pHashObj);
|
taosHashClear(pHashObj);
|
||||||
tfree(pHashObj->hashList);
|
tfree(pHashObj->hashList);
|
||||||
|
|
||||||
// destroy mem block
|
// destroy mem block
|
||||||
|
@ -535,7 +552,7 @@ void taosHashCleanup(SHashObj *pHashObj) {
|
||||||
|
|
||||||
// for profile only
|
// for profile only
|
||||||
int32_t taosHashGetMaxOverflowLinkLength(const SHashObj *pHashObj) {
|
int32_t taosHashGetMaxOverflowLinkLength(const SHashObj *pHashObj) {
|
||||||
if (pHashObj == NULL || pHashObj->size == 0) {
|
if (pHashObj == NULL || taosHashTableEmpty(pHashObj)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue