diff --git a/src/dnode/inc/dnodeTier.h b/src/dnode/inc/dnodeTier.h deleted file mode 100644 index 019a4a21121eba0ded46d9730c3068c56784728d..0000000000000000000000000000000000000000 --- a/src/dnode/inc/dnodeTier.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * 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 TDENGINE_DNODE_TIER_H -#define TDENGINE_DNODE_TIER_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "hash.h" -#include "taoserror.h" - -#define DNODE_MAX_TIERS 3 -#define DNODE_MAX_DISKS_PER_TIER 16 - -typedef struct { - int level; - int did; -} SDiskID; - -typedef struct { - uint64_t size; - uint64_t free; - uint64_t nfiles; -} SDiskMeta; - -typedef struct { - char dir[TSDB_FILENAME_LEN]; - SDiskMeta dmeta; -} SDisk; - -typedef struct { - int level; - int nDisks; - SDisk disks[DNODE_MAX_DISKS_PER_TIER]; -} STier; - -typedef struct { - pthread_rwlock_t rwlock; - int nTiers; - STier tiers[DNODE_MAX_TIERS]; - SHashObj * map; -} SDnodeTier; - -#define DNODE_PRIMARY_DISK(pDnodeTier) (&(pDnodeTier)->tiers[0].disks[0]) - -static FORCE_INLINE int dnodeRLockTiers(SDnodeTier *pDnodeTier) { - int code = pthread_rwlock_rdlock(&(pDnodeTier->rwlock)); - if (code != 0) { - terrno = TAOS_SYSTEM_ERROR(code); - return -1; - } - return 0; -} - -static FORCE_INLINE int dnodeWLockTiers(SDnodeTier *pDnodeTier) { - int code = pthread_rwlock_wrlock(&(pDnodeTier->rwlock)); - if (code != 0) { - terrno = TAOS_SYSTEM_ERROR(code); - return -1; - } - return 0; -} - -static FORCE_INLINE int dnodeUnLockTiers(SDnodeTier *pDnodeTier) { - int code = pthread_rwlock_unlock(&(pDnodeTier->rwlock)); - if (code != 0) { - terrno = TAOS_SYSTEM_ERROR(code); - return -1; - } - return 0; -} - -static FORCE_INLINE SDisk *dnodeGetDisk(SDnodeTier *pDnodeTier, int level, int did) { - if (level < 0 || level >= pDnodeTier->nTiers) return NULL; - - if (did < 0 || did >= pDnodeTier->tiers[level].nDisks) return NULL; - - return &(pDnodeTier->tiers[level].disks[did]); -} - -SDnodeTier *dnodeNewTier(); -void * dnodeCloseTier(SDnodeTier *pDnodeTier); -int dnodeAddDisk(SDnodeTier *pDnodeTier, char *dir, int level); -int dnodeUpdateTiersInfo(SDnodeTier *pDnodeTier); -int dnodeCheckTiers(SDnodeTier *pDnodeTier); -SDisk * dnodeAssignDisk(SDnodeTier *pDnodeTier, int level); -SDisk * dnodeGetDiskByName(SDnodeTier *pDnodeTier, char *dirName); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/dnode/src/dnodeTier.c b/src/dnode/src/dnodeTier.c index 0bd1a38911661a7a9781662d5e971ba2ad24ce2e..8e058a313480f2a0ba9f617324439a5d593523e5 100644 --- a/src/dnode/src/dnodeTier.c +++ b/src/dnode/src/dnodeTier.c @@ -14,7 +14,7 @@ */ #include "os.h" -#include "dnodeTier.h" +#include "dnode.h" #ifndef _DNODE_PLUGINS diff --git a/src/inc/dnode.h b/src/inc/dnode.h index 83d2a4ad9c58a77510aacf076296213779327326..ec59a33d4779f08d42b8ea28efb35de2bb85883b 100644 --- a/src/inc/dnode.h +++ b/src/inc/dnode.h @@ -20,6 +20,8 @@ extern "C" { #endif +#include "hash.h" +#include "taoserror.h" #include "trpc.h" typedef struct { @@ -69,6 +71,85 @@ void dnodeDelayReprocessMnodeWriteMsg(void *pMsg); void dnodeSendStatusMsgToMnode(); +// DNODE TIER +#define DNODE_MAX_TIERS 3 +#define DNODE_MAX_DISKS_PER_TIER 16 + +typedef struct { + int level; + int did; +} SDiskID; + +typedef struct { + uint64_t size; + uint64_t free; + uint64_t nfiles; +} SDiskMeta; + +typedef struct { + char dir[TSDB_FILENAME_LEN]; + SDiskMeta dmeta; +} SDisk; + +typedef struct { + int level; + int nDisks; + SDisk disks[DNODE_MAX_DISKS_PER_TIER]; +} STier; + +typedef struct SDnodeTier { + pthread_rwlock_t rwlock; + int nTiers; + STier tiers[DNODE_MAX_TIERS]; + SHashObj * map; +} SDnodeTier; + +#define DNODE_PRIMARY_DISK(pDnodeTier) (&(pDnodeTier)->tiers[0].disks[0]) + +static FORCE_INLINE int dnodeRLockTiers(SDnodeTier *pDnodeTier) { + int code = pthread_rwlock_rdlock(&(pDnodeTier->rwlock)); + if (code != 0) { + terrno = TAOS_SYSTEM_ERROR(code); + return -1; + } + return 0; +} + +static FORCE_INLINE int dnodeWLockTiers(SDnodeTier *pDnodeTier) { + int code = pthread_rwlock_wrlock(&(pDnodeTier->rwlock)); + if (code != 0) { + terrno = TAOS_SYSTEM_ERROR(code); + return -1; + } + return 0; +} + +static FORCE_INLINE int dnodeUnLockTiers(SDnodeTier *pDnodeTier) { + int code = pthread_rwlock_unlock(&(pDnodeTier->rwlock)); + if (code != 0) { + terrno = TAOS_SYSTEM_ERROR(code); + return -1; + } + return 0; +} + +static FORCE_INLINE SDisk *dnodeGetDisk(SDnodeTier *pDnodeTier, int level, int did) { + if (level < 0 || level >= pDnodeTier->nTiers) return NULL; + + if (did < 0 || did >= pDnodeTier->tiers[level].nDisks) return NULL; + + return &(pDnodeTier->tiers[level].disks[did]); +} + +SDnodeTier *dnodeNewTier(); +void * dnodeCloseTier(SDnodeTier *pDnodeTier); +int dnodeAddDisk(SDnodeTier *pDnodeTier, char *dir, int level); +int dnodeUpdateTiersInfo(SDnodeTier *pDnodeTier); +int dnodeCheckTiers(SDnodeTier *pDnodeTier); +SDisk * dnodeAssignDisk(SDnodeTier *pDnodeTier, int level); +SDisk * dnodeGetDiskByName(SDnodeTier *pDnodeTier, char *dirName); + + #ifdef __cplusplus } #endif