diff --git a/include/libs/catalog/catalog.h b/include/libs/catalog/catalog.h index de37807cf6..395116b3bc 100644 --- a/include/libs/catalog/catalog.h +++ b/include/libs/catalog/catalog.h @@ -20,6 +20,96 @@ extern "C" { #endif +#include "os.h" +#include "thash.h" +#include "tarray.h" +#include "taosdef.h" +#include "transport.h" + +struct SCatalog; + +typedef struct SMetaReq { + char clusterId[TSDB_CLUSTER_ID_LEN]; + SArray *pTableName; // table full name + SArray *pVgroup; // vgroup id + SArray *pUdf; // udf name + bool qNodeEpset; // valid qnode +} SMetaReq; + +typedef struct SMetaData { + SArray *pTableMeta; // tableMeta + SArray *pVgroupInfo; // vgroupInfo list + SArray *pUdfList; // udf info list + SEpSet *pEpSet; // qnode epset list +} SMetaData; + +typedef struct STableComInfo { + uint8_t numOfTags; // the number of tags in schema + uint8_t precision; // the number of precision + int16_t numOfColumns; // the number of columns + int32_t rowSize; // row size of the schema +} STableComInfo; + +/* + * ASSERT(sizeof(SCTableMeta) == 24) + * ASSERT(tableType == TSDB_CHILD_TABLE) + * The cached child table meta info. For each child table, 24 bytes are required to keep the essential table info. + */ +typedef struct SCTableMeta { + int32_t vgId:24; + int8_t tableType; + uint32_t tid; + uint64_t uid; + uint64_t suid; +} SCTableMeta; + +typedef struct SSchema { + uint8_t type; + char name[TSDB_COL_NAME_LEN]; + int16_t colId; + int16_t bytes; +} SSchema; + +/* + * Note that the first 24 bytes of STableMeta are identical to SCTableMeta, it is safe to cast a STableMeta to be a SCTableMeta. + */ +typedef struct STableMeta { + int32_t vgId:24; + int8_t tableType; + uint32_t tid; + uint64_t uid; + uint64_t suid; + // if the table is TSDB_CHILD_TABLE, the following information is acquired from the corresponding super table meta info + int16_t sversion; + int16_t tversion; + STableComInfo tableInfo; + SSchema schema[]; +} STableMeta; + +/** + * Catalog service object, which is utilized to hold tableMeta (meta/vgroupInfo/udfInfo) at the client-side. + * There is ONLY one SCatalog object for one process space, and this function returns a singleton. + * @param pMgmtEps + * @return + */ +struct SCatalog* getCatalogHandle(const SEpSet* pMgmtEps); + +/** + * Get the required meta data from mnode. + * Note that this is a synchronized API and is also thread-safety. + * @param pCatalog + * @param pMetaReq + * @param pMetaData + * @return + */ +int32_t catalogGetMetaData(struct SCatalog* pCatalog, const SMetaReq* pMetaReq, SMetaData* pMetaData); + +/** + * Destroy catalog service handle + * @param pCatalog + */ +void destroyCatalog(struct SCatalog* pCatalog); + #ifdef __cplusplus } #endif diff --git a/source/libs/catalog/inc/catalogInt.h b/source/libs/catalog/inc/catalogInt.h index f6f8a61faf..5b50bbff4c 100644 --- a/source/libs/catalog/inc/catalogInt.h +++ b/source/libs/catalog/inc/catalogInt.h @@ -20,6 +20,13 @@ extern "C" { #endif +#include "catalog.h" + +typedef struct SCatalog { + void *pMsgSender; // used to send messsage to mnode to fetch necessary metadata + SHashObj *pData; // items cached for each cluster, the hash key is the cluster-id, returned by mgmt node +} SCatalog; + #ifdef __cplusplus } #endif diff --git a/source/libs/catalog/src/catalog.c b/source/libs/catalog/src/catalog.c index 6dea4a4e57..c553e1bfbf 100644 --- a/source/libs/catalog/src/catalog.c +++ b/source/libs/catalog/src/catalog.c @@ -11,4 +11,6 @@ * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . - */ \ No newline at end of file + */ + +#include "catalogInt.h"