[td-225] refactor codes.
This commit is contained in:
parent
4a508cdf3e
commit
e47e6300e4
|
@ -103,7 +103,7 @@ void *taosHashGet(SHashObj *pHashObj, const void *key, size_t keyLen);
|
||||||
* @param key
|
* @param key
|
||||||
* @param keyLen
|
* @param keyLen
|
||||||
*/
|
*/
|
||||||
void taosHashRemove(SHashObj *pHashObj, const void *key, size_t keyLen);
|
int32_t taosHashRemove(SHashObj *pHashObj, const void *key, size_t keyLen);
|
||||||
|
|
||||||
void taosHashRemoveNode();
|
void taosHashRemoveNode();
|
||||||
|
|
||||||
|
|
|
@ -258,14 +258,14 @@ void *taosHashGet(SHashObj *pHashObj, const void *key, size_t keyLen) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void taosHashRemove(SHashObj *pHashObj, const void *key, size_t keyLen) {
|
int32_t taosHashRemove(SHashObj *pHashObj, const void *key, size_t keyLen) {
|
||||||
uint32_t hashVal = (*pHashObj->hashFp)(key, keyLen);
|
uint32_t hashVal = (*pHashObj->hashFp)(key, keyLen);
|
||||||
|
|
||||||
__wr_lock(pHashObj->lock);
|
__wr_lock(pHashObj->lock);
|
||||||
SHashNode *pNode = doGetNodeFromHashTable(pHashObj, key, keyLen, hashVal);
|
SHashNode *pNode = doGetNodeFromHashTable(pHashObj, key, keyLen, hashVal);
|
||||||
if (pNode == NULL) {
|
if (pNode == NULL) {
|
||||||
__unlock(pHashObj->lock);
|
__unlock(pHashObj->lock);
|
||||||
return;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
SHashNode *pNext = pNode->next;
|
SHashNode *pNext = pNode->next;
|
||||||
|
@ -289,6 +289,7 @@ void taosHashRemove(SHashObj *pHashObj, const void *key, size_t keyLen) {
|
||||||
pNode->prev = NULL;
|
pNode->prev = NULL;
|
||||||
|
|
||||||
tfree(pNode);
|
tfree(pNode);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void taosHashCleanup(SHashObj *pHashObj) {
|
void taosHashCleanup(SHashObj *pHashObj) {
|
||||||
|
|
|
@ -207,7 +207,7 @@ SCacheObj *taosCacheInit(int32_t keyType, int64_t refreshTimeInSeconds, bool ext
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
pCacheObj->pHashTable = taosHashInit(128, taosGetDefaultHashFunction(keyType), false);
|
pCacheObj->pHashTable = taosHashInit(128, taosGetDefaultHashFunction(keyType), true);
|
||||||
pCacheObj->name = strdup(cacheName);
|
pCacheObj->name = strdup(cacheName);
|
||||||
if (pCacheObj->pHashTable == NULL) {
|
if (pCacheObj->pHashTable == NULL) {
|
||||||
free(pCacheObj);
|
free(pCacheObj);
|
||||||
|
@ -268,7 +268,9 @@ void *taosCachePut(SCacheObj *pCacheObj, const void *key, size_t keyLen, const v
|
||||||
if (T_REF_VAL_GET(pOld) > 0) {
|
if (T_REF_VAL_GET(pOld) > 0) {
|
||||||
|
|
||||||
// todo removed by node, instead of by key
|
// todo removed by node, instead of by key
|
||||||
taosHashRemove(pCacheObj->pHashTable, pOld->key, pOld->keySize);
|
int32_t succ = taosHashRemove(pCacheObj->pHashTable, pOld->key, pOld->keySize);
|
||||||
|
assert(succ == 0);
|
||||||
|
|
||||||
addToTrashcan = true;
|
addToTrashcan = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -413,7 +415,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_remove) {
|
if (_remove) {
|
||||||
__cache_wr_lock(pCacheObj);
|
// __cache_wr_lock(pCacheObj);
|
||||||
|
|
||||||
// NOTE: once refcount is decrease, pNode may be freed by other thread immediately.
|
// NOTE: once refcount is decrease, pNode may be freed by other thread immediately.
|
||||||
int32_t ref = T_REF_DEC(pNode);
|
int32_t ref = T_REF_DEC(pNode);
|
||||||
|
@ -427,22 +429,26 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) {
|
||||||
* that tries to do the same thing.
|
* that tries to do the same thing.
|
||||||
*/
|
*/
|
||||||
if (pNode->inTrashCan) {
|
if (pNode->inTrashCan) {
|
||||||
__cache_unlock(pCacheObj);
|
// __cache_unlock(pCacheObj);
|
||||||
|
|
||||||
if (ref == 0) {
|
if (ref == 0) {
|
||||||
assert(pNode->pTNodeHeader->pData == pNode);
|
assert(pNode->pTNodeHeader->pData == pNode);
|
||||||
taosRemoveFromTrashCan(pCacheObj, pNode->pTNodeHeader);
|
taosRemoveFromTrashCan(pCacheObj, pNode->pTNodeHeader);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
taosHashRemove(pCacheObj->pHashTable, pNode->key, pNode->keySize);
|
int32_t success = taosHashRemove(pCacheObj->pHashTable, pNode->key, pNode->keySize);
|
||||||
__cache_unlock(pCacheObj);
|
|
||||||
|
|
||||||
if (ref > 0) {
|
if (ref > 0) {
|
||||||
assert(pNode->pTNodeHeader == NULL);
|
assert(pNode->pTNodeHeader == NULL);
|
||||||
|
|
||||||
// todo trashcan lock
|
// todo trashcan lock
|
||||||
taosAddToTrash(pCacheObj, pNode);
|
if (success) {
|
||||||
|
taosAddToTrash(pCacheObj, pNode);
|
||||||
|
}
|
||||||
|
// __cache_unlock(pCacheObj);
|
||||||
} else {
|
} else {
|
||||||
|
// __cache_unlock(pCacheObj);
|
||||||
|
|
||||||
// taosCacheReleaseNode(pCacheObj, pNode);
|
// taosCacheReleaseNode(pCacheObj, pNode);
|
||||||
atomic_fetch_sub_ptr(&pCacheObj->totalSize, pNode->size);
|
atomic_fetch_sub_ptr(&pCacheObj->totalSize, pNode->size);
|
||||||
uDebug("cache:%s, key:%p, %p is destroyed from cache, totalNum:%d totalSize:%" PRId64 "bytes size:%dbytes",
|
uDebug("cache:%s, key:%p, %p is destroyed from cache, totalNum:%d totalSize:%" PRId64 "bytes size:%dbytes",
|
||||||
|
|
Loading…
Reference in New Issue