From 49e855251d5f3b3f23e8a47f301979ba1a7624d5 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Thu, 16 Jun 2022 21:57:28 +0800 Subject: [PATCH] add trace base func --- include/util/ttrace.h | 40 +++++++++++++++++++++++ source/util/src/thash.c | 14 ++++----- source/util/src/ttrace.c | 68 ++++++++++++++++++++++++++++++++++++++++ source/util/src/tuuid.c | 2 +- 4 files changed, 116 insertions(+), 8 deletions(-) create mode 100644 include/util/ttrace.h create mode 100644 source/util/src/ttrace.c diff --git a/include/util/ttrace.h b/include/util/ttrace.h new file mode 100644 index 0000000000..aceb287aed --- /dev/null +++ b/include/util/ttrace.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2019 TAOS Data, Inc. + * + * This program is free software: you can use, redistribute, and/or modify + * it under the terms of the GNU Affero General Public License, version 3 + * or later ("AGPL"), as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +#ifndef _TD_TRACE_H_ +#define _TD_TRACE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef int64_t STraceId; +typedef int32_t STraceSubId; + +STraceId traceInitId(STraceSubId *h, STraceSubId *l); + +void traceId2Str(STraceId *id, char *buf); + +void traceSetSubId(STraceId *id, int32_t *subId); + +STraceSubId traceGetParentId(STraceId *id); + +STraceSubId traceGenSubId(); +#ifdef __cplusplus +} +#endif + +#endif diff --git a/source/util/src/thash.c b/source/util/src/thash.c index 8bda59bba7..98762d8fb0 100644 --- a/source/util/src/thash.c +++ b/source/util/src/thash.c @@ -56,7 +56,7 @@ typedef struct SHashEntry { } SHashEntry; struct SHashObj { - SHashEntry **hashList; + SHashEntry ** hashList; size_t capacity; // number of slots int64_t size; // number of elements in hash table _hash_fn_t hashFp; // hash function @@ -65,7 +65,7 @@ struct SHashObj { SRWLatch lock; // read-write spin lock SHashLockTypeE type; // lock type bool enableUpdate; // enable update - SArray *pMemBlock; // memory block allocated for SHashEntry + SArray * pMemBlock; // memory block allocated for SHashEntry _hash_before_fn_t callbackFp; // function invoked before return the value to caller }; @@ -633,7 +633,7 @@ void taosHashTableResize(SHashObj *pHashObj) { } int64_t st = taosGetTimestampUs(); - void *pNewEntryList = taosMemoryRealloc(pHashObj->hashList, sizeof(void *) * newCapacity); + void * pNewEntryList = taosMemoryRealloc(pHashObj->hashList, sizeof(void *) * newCapacity); if (pNewEntryList == NULL) { // uDebug("cache resize failed due to out of memory, capacity remain:%zu", pHashObj->capacity); return; @@ -642,7 +642,7 @@ void taosHashTableResize(SHashObj *pHashObj) { pHashObj->hashList = pNewEntryList; size_t inc = newCapacity - pHashObj->capacity; - void *p = taosMemoryCalloc(inc, sizeof(SHashEntry)); + void * p = taosMemoryCalloc(inc, sizeof(SHashEntry)); for (int32_t i = 0; i < inc; ++i) { pHashObj->hashList[i + pHashObj->capacity] = (void *)((char *)p + i * sizeof(SHashEntry)); @@ -653,9 +653,9 @@ void taosHashTableResize(SHashObj *pHashObj) { pHashObj->capacity = newCapacity; for (int32_t idx = 0; idx < pHashObj->capacity; ++idx) { SHashEntry *pe = pHashObj->hashList[idx]; - SHashNode *pNode; - SHashNode *pNext; - SHashNode *pPrev = NULL; + SHashNode * pNode; + SHashNode * pNext; + SHashNode * pPrev = NULL; if (pe->num == 0) { assert(pe->next == NULL); diff --git a/source/util/src/ttrace.c b/source/util/src/ttrace.c new file mode 100644 index 0000000000..1bad4cf5e5 --- /dev/null +++ b/source/util/src/ttrace.c @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2019 TAOS Data, Inc. + * + * This program is free software: you can use, redistribute, and/or modify + * it under the terms of the GNU Affero General Public License, version 3 + * or later ("AGPL"), as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +#include "ttrace.h" +#include "taos.h" +#include "thash.h" +#include "tuuid.h" + +// clang-format off +static TdThreadOnce init = PTHREAD_ONCE_INIT; +static void * ids = NULL; +static TdThreadMutex mtx; + +void traceInit() { + ids = taosHashInit(4096, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), true, HASH_ENTRY_LOCK); + taosThreadMutexInit(&mtx, NULL); +} +void traceCreateEnv() { + taosThreadOnce(&init, traceInit); +} +void traceDestroyEnv() { + taosThreadMutexDestroy(&mtx); + taosHashCleanup(ids); +} + +STraceId traceInitId(STraceSubId *h, STraceSubId *l) { + STraceId id = *h; + id = ((id << 32) & 0xFFFFFFFF) | ((*l) & 0xFFFFFFFF); + return id; +} +void traceId2Str(STraceId *id, char *buf) { + int32_t f = (*id >> 32) & 0xFFFFFFFF; + int32_t s = (*id) & 0xFFFFFFFF; + sprintf(buf, "%d:%d", f, s); +} + +void traceSetSubId(STraceId *id, STraceSubId *subId) { + int32_t parent = ((*id >> 32) & 0xFFFFFFFF); + taosThreadMutexLock(&mtx); + taosHashPut(ids, subId, sizeof(*subId), &parent, sizeof(parent)); + taosThreadMutexUnlock(&mtx); +} + +STraceSubId traceGetParentId(STraceId *id) { + int32_t parent = ((*id >> 32) & 0xFFFFFFFF); + taosThreadMutexLock(&mtx); + STraceSubId *p = taosHashGet(ids, (void *)&parent, sizeof(parent)); + parent = *p; + taosThreadMutexUnlock(&mtx); + + return parent; +} + +STraceSubId traceGenSubId() { + return tGenIdPI32(); +} +// clang-format on diff --git a/source/util/src/tuuid.c b/source/util/src/tuuid.c index 1f3cbd9573..9101aec949 100644 --- a/source/util/src/tuuid.c +++ b/source/util/src/tuuid.c @@ -49,7 +49,7 @@ int64_t tGenIdPI64(void) { } int64_t id; - + while (true) { int64_t ts = taosGetTimestampMs(); uint64_t pid = taosGetPId(); -- GitLab