integrate TFS
This commit is contained in:
parent
961b4d82fa
commit
9e3e40ad6e
|
@ -0,0 +1,103 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
||||||
|
*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TD_TFS_H
|
||||||
|
#define TD_TFS_H
|
||||||
|
|
||||||
|
#include "tglobal.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int level;
|
||||||
|
int id;
|
||||||
|
} SDiskID;
|
||||||
|
|
||||||
|
#define TFS_UNDECIDED_LEVEL -1
|
||||||
|
#define TFS_UNDECIDED_ID -1
|
||||||
|
#define TFS_PRIMARY_LEVEL 0
|
||||||
|
#define TFS_PRIMARY_ID 0
|
||||||
|
#define TFS_MIN_LEVEL 0
|
||||||
|
#define TFS_MAX_LEVEL (TSDB_MAX_TIERS - 1)
|
||||||
|
|
||||||
|
// FS APIs ====================================
|
||||||
|
typedef struct {
|
||||||
|
int64_t tsize;
|
||||||
|
int64_t used;
|
||||||
|
int64_t avail;
|
||||||
|
} SFSMeta;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int64_t size;
|
||||||
|
int64_t used;
|
||||||
|
int64_t free;
|
||||||
|
int16_t nAvailDisks; // # of Available disks
|
||||||
|
} STierMeta;
|
||||||
|
|
||||||
|
int tfsInit(SDiskCfg *pDiskCfg, int ndisk);
|
||||||
|
void tfsDestroy();
|
||||||
|
void tfsUpdateInfo(SFSMeta *pFSMeta, STierMeta *tierMetas, int8_t numLevels);
|
||||||
|
void tfsGetMeta(SFSMeta *pMeta);
|
||||||
|
void tfsAllocDisk(int expLevel, int *level, int *id);
|
||||||
|
|
||||||
|
const char *TFS_PRIMARY_PATH();
|
||||||
|
const char *TFS_DISK_PATH(int level, int id);
|
||||||
|
|
||||||
|
// TFILE APIs ====================================
|
||||||
|
typedef struct {
|
||||||
|
int level;
|
||||||
|
int id;
|
||||||
|
char rname[TSDB_FILENAME_LEN]; // REL name
|
||||||
|
char aname[TSDB_FILENAME_LEN]; // ABS name
|
||||||
|
} TFILE;
|
||||||
|
|
||||||
|
#define TFILE_LEVEL(pf) ((pf)->level)
|
||||||
|
#define TFILE_ID(pf) ((pf)->id)
|
||||||
|
#define TFILE_NAME(pf) ((pf)->aname)
|
||||||
|
#define TFILE_REL_NAME(pf) ((pf)->rname)
|
||||||
|
|
||||||
|
#define tfsopen(pf, flags) open(TFILE_NAME(pf), flags)
|
||||||
|
#define tfsclose(fd) close(fd)
|
||||||
|
#define tfsremove(pf) remove(TFILE_NAME(pf))
|
||||||
|
#define tfscopy(sf, df) taosCopy(TFILE_NAME(sf), TFILE_NAME(df))
|
||||||
|
#define tfsrename(sf, df) taosRename(TFILE_NAME(sf), TFILE_NAME(df))
|
||||||
|
|
||||||
|
void tfsInitFile(TFILE *pf, int level, int id, const char *bname);
|
||||||
|
bool tfsIsSameFile(const TFILE *pf1, const TFILE *pf2);
|
||||||
|
int tfsEncodeFile(void **buf, TFILE *pf);
|
||||||
|
void *tfsDecodeFile(void *buf, TFILE *pf);
|
||||||
|
void tfsbasename(const TFILE *pf, char *dest);
|
||||||
|
void tfsdirname(const TFILE *pf, char *dest);
|
||||||
|
|
||||||
|
// DIR APIs ====================================
|
||||||
|
int tfsMkdirAt(const char *rname, int level, int id);
|
||||||
|
int tfsMkdirRecurAt(const char *rname, int level, int id);
|
||||||
|
int tfsMkdir(const char *rname);
|
||||||
|
int tfsRmdir(const char *rname);
|
||||||
|
int tfsRename(char *orname, char *nrname);
|
||||||
|
|
||||||
|
typedef struct TDIR TDIR;
|
||||||
|
|
||||||
|
TDIR * tfsOpendir(const char *rname);
|
||||||
|
const TFILE *tfsReaddir(TDIR *tdir);
|
||||||
|
void tfsClosedir(TDIR *tdir);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -44,6 +44,8 @@ extern "C" {
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
#include <wctype.h>
|
#include <wctype.h>
|
||||||
|
#include <regex.h>
|
||||||
|
#include <wordexp.h>
|
||||||
|
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
|
|
||||||
|
|
|
@ -12,3 +12,4 @@ add_subdirectory(planner)
|
||||||
add_subdirectory(function)
|
add_subdirectory(function)
|
||||||
add_subdirectory(qcom)
|
add_subdirectory(qcom)
|
||||||
add_subdirectory(qworker)
|
add_subdirectory(qworker)
|
||||||
|
add_subdirectory(tfs)
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
aux_source_directory(src TFS_SRC)
|
||||||
|
add_library(tfs STATIC ${TFS_SRC})
|
||||||
|
target_include_directories(
|
||||||
|
tfs
|
||||||
|
PUBLIC "${CMAKE_SOURCE_DIR}/include/libs/tfs"
|
||||||
|
PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/inc"
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(tfs os util common)
|
|
@ -15,11 +15,11 @@
|
||||||
|
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
|
|
||||||
#include "hash.h"
|
|
||||||
#include "taosdef.h"
|
#include "taosdef.h"
|
||||||
#include "taoserror.h"
|
#include "taoserror.h"
|
||||||
#include "tfs.h"
|
#include "tfs.h"
|
||||||
#include "tfsint.h"
|
#include "tfsint.h"
|
||||||
|
#include "thash.h"
|
||||||
|
|
||||||
#define TMPNAME_LEN (TSDB_FILENAME_LEN * 2 + 32)
|
#define TMPNAME_LEN (TSDB_FILENAME_LEN * 2 + 32)
|
||||||
|
|
||||||
|
@ -270,7 +270,8 @@ int tfsMkdirRecurAt(const char *rname, int level, int id) {
|
||||||
// Some platform may modify the contents of the string passed into dirname(). Others may return a pointer to
|
// Some platform may modify the contents of the string passed into dirname(). Others may return a pointer to
|
||||||
// internal static storage space that will be overwritten by next call. For case like that, we should not use
|
// internal static storage space that will be overwritten by next call. For case like that, we should not use
|
||||||
// the pointer directly in this recursion.
|
// the pointer directly in this recursion.
|
||||||
// See https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/dirname.3.html
|
// See
|
||||||
|
// https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/dirname.3.html
|
||||||
char *dir = strdup(dirname(s));
|
char *dir = strdup(dirname(s));
|
||||||
|
|
||||||
if (tfsMkdirRecurAt(dir, level, id) < 0) {
|
if (tfsMkdirRecurAt(dir, level, id) < 0) {
|
||||||
|
@ -504,7 +505,6 @@ static int tfsFormatDir(char *idir, char *odir) {
|
||||||
|
|
||||||
wordfree(&wep);
|
wordfree(&wep);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tfsCheck() {
|
static int tfsCheck() {
|
||||||
|
@ -599,12 +599,10 @@ void taosGetDisk() {
|
||||||
SysDiskSize diskSize;
|
SysDiskSize diskSize;
|
||||||
SFSMeta fsMeta;
|
SFSMeta fsMeta;
|
||||||
|
|
||||||
if (tscEmbedded) {
|
tfsUpdateInfo(&fsMeta, NULL, 0);
|
||||||
tfsUpdateInfo(&fsMeta, NULL, 0);
|
tsTotalDataDirGB = (float)(fsMeta.tsize / unit);
|
||||||
tsTotalDataDirGB = (float)(fsMeta.tsize / unit);
|
tsUsedDataDirGB = (float)(fsMeta.used / unit);
|
||||||
tsUsedDataDirGB = (float)(fsMeta.used / unit);
|
tsAvailDataDirGB = (float)(fsMeta.avail / unit);
|
||||||
tsAvailDataDirGB = (float)(fsMeta.avail / unit);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (taosGetDiskSize(tsLogDir, &diskSize) == 0) {
|
if (taosGetDiskSize(tsLogDir, &diskSize) == 0) {
|
||||||
tsTotalLogDirGB = (float)(diskSize.tsize / unit);
|
tsTotalLogDirGB = (float)(diskSize.tsize / unit);
|
|
@ -1,12 +0,0 @@
|
||||||
CMAKE_MINIMUM_REQUIRED(VERSION 2.8...3.20)
|
|
||||||
PROJECT(TDengine)
|
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES(inc)
|
|
||||||
AUX_SOURCE_DIRECTORY(src SRC)
|
|
||||||
ADD_LIBRARY(tfs ${SRC})
|
|
||||||
TARGET_LINK_LIBRARIES(tfs tutil)
|
|
||||||
|
|
||||||
IF (TD_LINUX)
|
|
||||||
# Someone has no gtest directory, so comment it
|
|
||||||
# ADD_SUBDIRECTORY(tests)
|
|
||||||
ENDIF ()
|
|
Loading…
Reference in New Issue