Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
f3d39e08
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1187
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
f3d39e08
编写于
3月 09, 2022
作者:
wafwerar
提交者:
GitHub
3月 09, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #10646 from taosdata/fix/ZhiqiangWang/TD-13761-redefine-dir-api
[TD-13761]<fix>: redefine dir api.
上级
1e7cbee2
bd3451a8
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
169 addition
and
95 deletion
+169
-95
include/os/osDir.h
include/os/osDir.h
+22
-0
source/dnode/vnode/src/tsdb/tsdbFile.c
source/dnode/vnode/src/tsdb/tsdbFile.c
+1
-1
source/libs/index/src/index_tfile.c
source/libs/index/src/index_tfile.c
+6
-6
source/libs/tfs/inc/tfsInt.h
source/libs/tfs/inc/tfsInt.h
+1
-1
source/libs/tfs/src/tfs.c
source/libs/tfs/src/tfs.c
+34
-33
source/libs/wal/src/walMeta.c
source/libs/wal/src/walMeta.c
+12
-12
source/os/src/osDir.c
source/os/src/osDir.c
+48
-0
source/os/src/osSemaphore.c
source/os/src/osSemaphore.c
+28
-28
source/os/src/osSocket.c
source/os/src/osSocket.c
+4
-2
source/os/src/osTimer.c
source/os/src/osTimer.c
+4
-4
tests/test/c/tmqDemo.c
tests/test/c/tmqDemo.c
+9
-8
未找到文件。
include/os/osDir.h
浏览文件 @
f3d39e08
...
...
@@ -16,10 +16,24 @@
#ifndef _TD_OS_DIR_H_
#define _TD_OS_DIR_H_
// If the error is in a third-party library, place this header file under the third-party library header file.
#ifndef ALLOW_FORBID_FUNC
#define opendir OPENDIR_FUNC_TAOS_FORBID
#define readdir READDIR_FUNC_TAOS_FORBID
#define closedir CLOSEDIR_FUNC_TAOS_FORBID
#define dirname DIRNAME_FUNC_TAOS_FORBID
#undef basename
#define basename BASENAME_FUNC_TAOS_FORBID
#endif
#ifdef __cplusplus
extern
"C"
{
#endif
typedef
struct
TdDir
*
TdDirPtr
;
typedef
struct
TdDirEntry
*
TdDirEntryPtr
;
void
taosRemoveDir
(
const
char
*
dirname
);
bool
taosDirExist
(
char
*
dirname
);
int32_t
taosMkDir
(
const
char
*
dirname
);
...
...
@@ -27,6 +41,14 @@ void taosRemoveOldFiles(const char *dirname, int32_t keepDays);
int32_t
taosExpandDir
(
const
char
*
dirname
,
char
*
outname
,
int32_t
maxlen
);
int32_t
taosRealPath
(
char
*
dirname
,
int32_t
maxlen
);
bool
taosIsDir
(
const
char
*
dirname
);
char
*
taosDirName
(
char
*
dirname
);
char
*
taosDirEntryBaseName
(
char
*
dirname
);
TdDirPtr
taosOpenDir
(
const
char
*
dirname
);
TdDirEntryPtr
taosReadDir
(
TdDirPtr
pDir
);
bool
taosDirEntryIsDir
(
TdDirEntryPtr
pDirEntry
);
char
*
taosGetDirEntryName
(
TdDirEntryPtr
pDirEntry
);
int32_t
taosCloseDir
(
TdDirPtr
pDir
);
#ifdef __cplusplus
}
...
...
source/dnode/vnode/src/tsdb/tsdbFile.c
浏览文件 @
f3d39e08
...
...
@@ -365,7 +365,7 @@ int tsdbCreateDFile(STsdb *pRepo, SDFile *pDFile, bool updateHeader, TSDB_FILE_T
if
(
errno
==
ENOENT
)
{
// Try to create directory recursively
char
*
s
=
strdup
(
TSDB_FILE_REL_NAME
(
pDFile
));
if
(
tfsMkdirRecurAt
(
pRepo
->
pTfs
,
dirn
ame
(
s
),
TSDB_FILE_DID
(
pDFile
))
<
0
)
{
if
(
tfsMkdirRecurAt
(
pRepo
->
pTfs
,
taosDirN
ame
(
s
),
TSDB_FILE_DID
(
pDFile
))
<
0
)
{
tfree
(
s
);
return
-
1
;
}
...
...
source/libs/index/src/index_tfile.c
浏览文件 @
f3d39e08
...
...
@@ -722,13 +722,13 @@ static SArray* tfileGetFileList(const char* path) {
uint32_t
version
;
SArray
*
files
=
taosArrayInit
(
4
,
sizeof
(
void
*
));
DIR
*
dir
=
opend
ir
(
path
);
if
(
NULL
==
d
ir
)
{
TdDirPtr
pDir
=
taosOpenD
ir
(
path
);
if
(
NULL
==
pD
ir
)
{
return
NULL
;
}
struct
dirent
*
e
ntry
;
while
((
entry
=
readdir
(
d
ir
))
!=
NULL
)
{
char
*
file
=
entry
->
d_name
;
TdDirEntryPtr
pDirE
ntry
;
while
((
pDirEntry
=
taosReadDir
(
pD
ir
))
!=
NULL
)
{
char
*
file
=
taosGetDirEntryName
(
pDirEntry
)
;
if
(
0
!=
tfileParseFileName
(
file
,
&
suid
,
buf
,
&
version
))
{
continue
;
}
...
...
@@ -738,7 +738,7 @@ static SArray* tfileGetFileList(const char* path) {
sprintf
(
buf
,
"%s/%s"
,
path
,
file
);
taosArrayPush
(
files
,
&
buf
);
}
closedir
(
d
ir
);
taosCloseDir
(
pD
ir
);
taosArraySort
(
files
,
tfileCompare
);
tfileRmExpireFile
(
files
);
...
...
source/libs/tfs/inc/tfsInt.h
浏览文件 @
f3d39e08
...
...
@@ -59,7 +59,7 @@ typedef struct STfsDir {
SDiskID
did
;
char
dirname
[
TSDB_FILENAME_LEN
];
STfsFile
tfile
;
DIR
*
d
ir
;
TdDirPtr
pD
ir
;
STfs
*
pTfs
;
}
STfsDir
;
...
...
source/libs/tfs/src/tfs.c
浏览文件 @
f3d39e08
...
...
@@ -192,14 +192,14 @@ void tfsBasename(const STfsFile *pFile, char *dest) {
char
tname
[
TSDB_FILENAME_LEN
]
=
"
\0
"
;
tstrncpy
(
tname
,
pFile
->
aname
,
TSDB_FILENAME_LEN
);
tstrncpy
(
dest
,
basen
ame
(
tname
),
TSDB_FILENAME_LEN
);
tstrncpy
(
dest
,
taosDirEntryBaseN
ame
(
tname
),
TSDB_FILENAME_LEN
);
}
void
tfsDirname
(
const
STfsFile
*
pFile
,
char
*
dest
)
{
char
tname
[
TSDB_FILENAME_LEN
]
=
"
\0
"
;
tstrncpy
(
tname
,
pFile
->
aname
,
TSDB_FILENAME_LEN
);
tstrncpy
(
dest
,
dirn
ame
(
tname
),
TSDB_FILENAME_LEN
);
tstrncpy
(
dest
,
taosDirN
ame
(
tname
),
TSDB_FILENAME_LEN
);
}
int32_t
tfsRemoveFile
(
const
STfsFile
*
pFile
)
{
return
taosRemoveFile
(
pFile
->
aname
);
}
...
...
@@ -233,7 +233,7 @@ int32_t tfsMkdirRecurAt(STfs *pTfs, const char *rname, SDiskID diskId) {
// the pointer directly in this recursion.
// See
// https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/dirname.3.html
char
*
dir
=
strdup
(
dirn
ame
(
s
));
char
*
dir
=
strdup
(
taosDirN
ame
(
s
));
if
(
tfsMkdirRecurAt
(
pTfs
,
dir
,
diskId
)
<
0
)
{
free
(
s
);
...
...
@@ -324,45 +324,46 @@ STfsDir *tfsOpendir(STfs *pTfs, const char *rname) {
return
pDir
;
}
const
STfsFile
*
tfsReaddir
(
STfsDir
*
pDir
)
{
if
(
p
Dir
==
NULL
||
pDir
->
d
ir
==
NULL
)
return
NULL
;
const
STfsFile
*
tfsReaddir
(
STfsDir
*
p
Tfs
Dir
)
{
if
(
p
TfsDir
==
NULL
||
pTfsDir
->
pD
ir
==
NULL
)
return
NULL
;
char
bname
[
TMPNAME_LEN
*
2
]
=
"
\0
"
;
while
(
true
)
{
struct
dirent
*
dp
=
NULL
;
dp
=
readdir
(
pDir
->
d
ir
);
if
(
dp
!=
NULL
)
{
TdDirEntryPtr
pDirEntry
=
NULL
;
pDirEntry
=
taosReadDir
(
pTfsDir
->
pD
ir
);
if
(
pDirEntry
!=
NULL
)
{
// Skip . and ..
if
(
strcmp
(
dp
->
d_name
,
"."
)
==
0
||
strcmp
(
dp
->
d_name
,
".."
)
==
0
)
continue
;
char
*
name
=
taosGetDirEntryName
(
pDirEntry
);
if
(
strcmp
(
name
,
"."
)
==
0
||
strcmp
(
name
,
".."
)
==
0
)
continue
;
if
(
p
Dir
->
dirname
==
NULL
||
p
Dir
->
dirname
[
0
]
==
0
)
{
snprintf
(
bname
,
TMPNAME_LEN
*
2
,
"%s"
,
dp
->
d_
name
);
if
(
p
TfsDir
->
dirname
==
NULL
||
pTfs
Dir
->
dirname
[
0
]
==
0
)
{
snprintf
(
bname
,
TMPNAME_LEN
*
2
,
"%s"
,
name
);
}
else
{
snprintf
(
bname
,
TMPNAME_LEN
*
2
,
"%s%s%s"
,
p
Dir
->
dirname
,
TD_DIRSEP
,
dp
->
d_
name
);
snprintf
(
bname
,
TMPNAME_LEN
*
2
,
"%s%s%s"
,
p
TfsDir
->
dirname
,
TD_DIRSEP
,
name
);
}
tfsInitFile
(
p
Dir
->
pTfs
,
&
pDir
->
tfile
,
p
Dir
->
did
,
bname
);
return
&
pDir
->
tfile
;
tfsInitFile
(
p
TfsDir
->
pTfs
,
&
pTfsDir
->
tfile
,
pTfs
Dir
->
did
,
bname
);
return
&
p
Tfs
Dir
->
tfile
;
}
if
(
tfsOpendirImpl
(
p
Dir
->
pTfs
,
p
Dir
)
<
0
)
{
if
(
tfsOpendirImpl
(
p
TfsDir
->
pTfs
,
pTfs
Dir
)
<
0
)
{
return
NULL
;
}
if
(
p
Dir
->
d
ir
==
NULL
)
{
if
(
p
TfsDir
->
pD
ir
==
NULL
)
{
terrno
=
TSDB_CODE_SUCCESS
;
return
NULL
;
}
}
}
void
tfsClosedir
(
STfsDir
*
pDir
)
{
if
(
pDir
)
{
if
(
p
Dir
->
d
ir
!=
NULL
)
{
closedir
(
pDir
->
d
ir
);
p
Dir
->
d
ir
=
NULL
;
void
tfsClosedir
(
STfsDir
*
p
Tfs
Dir
)
{
if
(
p
Tfs
Dir
)
{
if
(
p
TfsDir
->
pD
ir
!=
NULL
)
{
taosCloseDir
(
pTfsDir
->
pD
ir
);
p
TfsDir
->
pD
ir
=
NULL
;
}
free
(
pDir
);
free
(
p
Tfs
Dir
);
}
}
...
...
@@ -487,29 +488,29 @@ static STfsDisk *tfsGetDiskByName(STfs *pTfs, const char *dir) {
return
pDisk
;
}
static
int32_t
tfsOpendirImpl
(
STfs
*
pTfs
,
STfsDir
*
pDir
)
{
static
int32_t
tfsOpendirImpl
(
STfs
*
pTfs
,
STfsDir
*
p
Tfs
Dir
)
{
STfsDisk
*
pDisk
=
NULL
;
char
adir
[
TMPNAME_LEN
*
2
]
=
"
\0
"
;
if
(
p
Dir
->
d
ir
!=
NULL
)
{
closedir
(
pDir
->
d
ir
);
p
Dir
->
d
ir
=
NULL
;
if
(
p
TfsDir
->
pD
ir
!=
NULL
)
{
taosCloseDir
(
pTfsDir
->
pD
ir
);
p
TfsDir
->
pD
ir
=
NULL
;
}
while
(
true
)
{
pDisk
=
tfsNextDisk
(
pTfs
,
&
pDir
->
iter
);
pDisk
=
tfsNextDisk
(
pTfs
,
&
p
Tfs
Dir
->
iter
);
if
(
pDisk
==
NULL
)
return
0
;
pDir
->
did
.
level
=
pDisk
->
level
;
pDir
->
did
.
id
=
pDisk
->
id
;
p
Tfs
Dir
->
did
.
level
=
pDisk
->
level
;
p
Tfs
Dir
->
did
.
id
=
pDisk
->
id
;
if
(
pDisk
->
path
==
NULL
||
pDisk
->
path
[
0
]
==
0
)
{
snprintf
(
adir
,
TMPNAME_LEN
*
2
,
"%s"
,
pDir
->
dirname
);
snprintf
(
adir
,
TMPNAME_LEN
*
2
,
"%s"
,
p
Tfs
Dir
->
dirname
);
}
else
{
snprintf
(
adir
,
TMPNAME_LEN
*
2
,
"%s%s%s"
,
pDisk
->
path
,
TD_DIRSEP
,
pDir
->
dirname
);
snprintf
(
adir
,
TMPNAME_LEN
*
2
,
"%s%s%s"
,
pDisk
->
path
,
TD_DIRSEP
,
p
Tfs
Dir
->
dirname
);
}
p
Dir
->
dir
=
opend
ir
(
adir
);
if
(
p
Dir
->
d
ir
!=
NULL
)
break
;
p
TfsDir
->
pDir
=
taosOpenD
ir
(
adir
);
if
(
p
TfsDir
->
pD
ir
!=
NULL
)
break
;
}
return
0
;
...
...
source/libs/wal/src/walMeta.c
浏览文件 @
f3d39e08
...
...
@@ -130,16 +130,16 @@ int walCheckAndRepairMeta(SWal* pWal) {
regcomp
(
&
logRegPattern
,
logPattern
,
REG_EXTENDED
);
regcomp
(
&
idxRegPattern
,
idxPattern
,
REG_EXTENDED
);
DIR
*
dir
=
opend
ir
(
pWal
->
path
);
if
(
d
ir
==
NULL
)
{
TdDirPtr
pDir
=
taosOpenD
ir
(
pWal
->
path
);
if
(
pD
ir
==
NULL
)
{
wError
(
"vgId:%d, path:%s, failed to open since %s"
,
pWal
->
cfg
.
vgId
,
pWal
->
path
,
strerror
(
errno
));
return
-
1
;
}
// scan log files and build new meta
struct
dirent
*
ent
;
while
((
ent
=
readdir
(
d
ir
))
!=
NULL
)
{
char
*
name
=
basename
(
ent
->
d_name
);
TdDirEntryPtr
pDirEntry
;
while
((
pDirEntry
=
taosReadDir
(
pD
ir
))
!=
NULL
)
{
char
*
name
=
taosDirEntryBaseName
(
taosGetDirEntryName
(
pDirEntry
)
);
int
code
=
regexec
(
&
logRegPattern
,
name
,
0
,
NULL
,
0
);
if
(
code
==
0
)
{
SWalFileInfo
fileInfo
;
...
...
@@ -149,7 +149,7 @@ int walCheckAndRepairMeta(SWal* pWal) {
}
}
closedir
(
d
ir
);
taosCloseDir
(
pD
ir
);
regfree
(
&
logRegPattern
);
regfree
(
&
idxRegPattern
);
...
...
@@ -337,25 +337,25 @@ static int walFindCurMetaVer(SWal* pWal) {
regex_t
walMetaRegexPattern
;
regcomp
(
&
walMetaRegexPattern
,
pattern
,
REG_EXTENDED
);
DIR
*
dir
=
opend
ir
(
pWal
->
path
);
if
(
d
ir
==
NULL
)
{
TdDirPtr
pDir
=
taosOpenD
ir
(
pWal
->
path
);
if
(
pD
ir
==
NULL
)
{
wError
(
"vgId:%d, path:%s, failed to open since %s"
,
pWal
->
cfg
.
vgId
,
pWal
->
path
,
strerror
(
errno
));
return
-
1
;
}
struct
dirent
*
ent
;
TdDirEntryPtr
pDirEntry
;
// find existing meta-ver[x].json
int
metaVer
=
-
1
;
while
((
ent
=
readdir
(
d
ir
))
!=
NULL
)
{
char
*
name
=
basename
(
ent
->
d_name
);
while
((
pDirEntry
=
taosReadDir
(
pD
ir
))
!=
NULL
)
{
char
*
name
=
taosDirEntryBaseName
(
taosGetDirEntryName
(
pDirEntry
)
);
int
code
=
regexec
(
&
walMetaRegexPattern
,
name
,
0
,
NULL
,
0
);
if
(
code
==
0
)
{
sscanf
(
name
,
"meta-ver%d"
,
&
metaVer
);
break
;
}
}
closedir
(
d
ir
);
taosCloseDir
(
pD
ir
);
regfree
(
&
walMetaRegexPattern
);
return
metaVer
;
}
...
...
source/os/src/osDir.c
浏览文件 @
f3d39e08
...
...
@@ -14,6 +14,7 @@
*/
#define _DEFAULT_SOURCE
#define ALLOW_FORBID_FUNC
#include "os.h"
#include "osString.h"
...
...
@@ -36,6 +37,10 @@
#include <unistd.h>
#include <wordexp.h>
typedef
struct
dirent
dirent
;
typedef
struct
DIR
TdDir
;
typedef
struct
dirent
TdDirent
;
void
taosRemoveDir
(
const
char
*
dirname
)
{
DIR
*
dir
=
opendir
(
dirname
);
if
(
dir
==
NULL
)
return
;
...
...
@@ -149,4 +154,47 @@ bool taosIsDir(const char *dirname) {
return
false
;
}
char
*
taosDirName
(
char
*
name
)
{
return
dirname
(
name
);
}
char
*
taosDirEntryBaseName
(
char
*
name
)
{
return
basename
(
name
);
}
TdDirPtr
taosOpenDir
(
const
char
*
dirname
)
{
if
(
dirname
==
NULL
)
{
return
NULL
;
}
return
(
TdDirPtr
)
opendir
(
dirname
);
}
TdDirEntryPtr
taosReadDir
(
TdDirPtr
pDir
)
{
if
(
pDir
==
NULL
)
{
return
NULL
;
}
return
(
TdDirEntryPtr
)
readdir
((
DIR
*
)
pDir
);
}
bool
taosDirEntryIsDir
(
TdDirEntryPtr
pDirEntry
)
{
if
(
pDirEntry
==
NULL
)
{
return
false
;
}
return
(((
dirent
*
)
pDirEntry
)
->
d_type
&
DT_DIR
)
!=
0
;
}
char
*
taosGetDirEntryName
(
TdDirEntryPtr
pDirEntry
)
{
if
(
pDirEntry
==
NULL
)
{
return
NULL
;
}
return
((
dirent
*
)
pDirEntry
)
->
d_name
;
}
int32_t
taosCloseDir
(
TdDirPtr
pDir
)
{
if
(
pDir
==
NULL
)
{
return
-
1
;
}
return
closedir
((
DIR
*
)
pDir
);
}
#endif
source/os/src/osSemaphore.c
浏览文件 @
f3d39e08
...
...
@@ -99,7 +99,7 @@ static void *sem_thread_routine(void *arg) {
sem_port
=
mach_task_self
();
kern_return_t
ret
=
semaphore_create
(
sem_port
,
&
sem_exit
,
SYNC_POLICY_FIFO
,
0
);
if
(
ret
!=
KERN_SUCCESS
)
{
fprintf
(
stderr
,
"==%s[%d]%s()==failed to create sem_exit
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
);
fprintf
(
stderr
,
"==%s[%d]%s()==failed to create sem_exit
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
);
sem_inited
=
-
1
;
return
NULL
;
}
...
...
@@ -112,7 +112,7 @@ static void once_init(void) {
int
r
=
0
;
r
=
pthread_create
(
&
sem_thread
,
NULL
,
sem_thread_routine
,
NULL
);
if
(
r
)
{
fprintf
(
stderr
,
"==%s[%d]%s()==failed to create thread
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
);
fprintf
(
stderr
,
"==%s[%d]%s()==failed to create thread
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
);
return
;
}
while
(
sem_inited
==
0
)
{
...
...
@@ -139,14 +139,14 @@ struct tsem_s {
};
int
tsem_init
(
tsem_t
*
sem
,
int
pshared
,
unsigned
int
value
)
{
// fprintf(stderr, "==%s[%d]%s():[%p]==creating\n",
basen
ame(__FILE__), __LINE__, __func__, sem);
// fprintf(stderr, "==%s[%d]%s():[%p]==creating\n",
taosDirEntryBaseN
ame(__FILE__), __LINE__, __func__, sem);
if
(
*
sem
)
{
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==already initialized
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==already initialized
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
abort
();
}
struct
tsem_s
*
p
=
(
struct
tsem_s
*
)
calloc
(
1
,
sizeof
(
*
p
));
if
(
!
p
)
{
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==out of memory
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==out of memory
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
abort
();
}
...
...
@@ -162,7 +162,7 @@ int tsem_init(tsem_t *sem, int pshared, unsigned int value) {
p
->
val
=
value
;
}
while
(
0
);
if
(
r
)
{
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==not created
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==not created
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
abort
();
}
#elif defined(SEM_USE_POSIX)
...
...
@@ -181,27 +181,27 @@ int tsem_init(tsem_t *sem, int pshared, unsigned int value) {
int
e
=
errno
;
if
(
e
==
EEXIST
)
continue
;
if
(
e
==
EINTR
)
continue
;
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==not created[%d]%s
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
,
e
,
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==not created[%d]%s
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
,
e
,
strerror
(
e
));
abort
();
}
while
(
p
->
sem
==
SEM_FAILED
);
#elif defined(SEM_USE_SEM)
pthread_once
(
&
sem_once
,
once_init
);
if
(
sem_inited
!=
1
)
{
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==internal resource init failed
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==internal resource init failed
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
errno
=
ENOMEM
;
return
-
1
;
}
kern_return_t
ret
=
semaphore_create
(
sem_port
,
&
p
->
sem
,
SYNC_POLICY_FIFO
,
value
);
if
(
ret
!=
KERN_SUCCESS
)
{
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==semophore_create failed
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==semophore_create failed
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
// we fail-fast here, because we have less-doc about semaphore_create for the moment
abort
();
}
#else // SEM_USE_PTHREAD
p
->
sem
=
dispatch_semaphore_create
(
value
);
if
(
p
->
sem
==
NULL
)
{
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==not created
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==not created
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
abort
();
}
#endif // SEM_USE_PTHREAD
...
...
@@ -215,28 +215,28 @@ int tsem_init(tsem_t *sem, int pshared, unsigned int value) {
int
tsem_wait
(
tsem_t
*
sem
)
{
if
(
!*
sem
)
{
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==not initialized
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==not initialized
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
abort
();
}
struct
tsem_s
*
p
=
*
sem
;
if
(
!
p
->
valid
)
{
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==already destroyed
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==already destroyed
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
abort
();
}
#ifdef SEM_USE_PTHREAD
if
(
pthread_mutex_lock
(
&
p
->
lock
))
{
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==internal logic error
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==internal logic error
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
abort
();
}
p
->
val
-=
1
;
if
(
p
->
val
<
0
)
{
if
(
pthread_cond_wait
(
&
p
->
cond
,
&
p
->
lock
))
{
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==internal logic error
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==internal logic error
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
abort
();
}
}
if
(
pthread_mutex_unlock
(
&
p
->
lock
))
{
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==internal logic error
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==internal logic error
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
abort
();
}
return
0
;
...
...
@@ -251,28 +251,28 @@ int tsem_wait(tsem_t *sem) {
int
tsem_post
(
tsem_t
*
sem
)
{
if
(
!*
sem
)
{
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==not initialized
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==not initialized
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
abort
();
}
struct
tsem_s
*
p
=
*
sem
;
if
(
!
p
->
valid
)
{
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==already destroyed
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==already destroyed
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
abort
();
}
#ifdef SEM_USE_PTHREAD
if
(
pthread_mutex_lock
(
&
p
->
lock
))
{
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==internal logic error
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==internal logic error
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
abort
();
}
p
->
val
+=
1
;
if
(
p
->
val
<=
0
)
{
if
(
pthread_cond_signal
(
&
p
->
cond
))
{
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==internal logic error
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==internal logic error
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
abort
();
}
}
if
(
pthread_mutex_unlock
(
&
p
->
lock
))
{
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==internal logic error
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==internal logic error
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
abort
();
}
return
0
;
...
...
@@ -286,34 +286,34 @@ int tsem_post(tsem_t *sem) {
}
int
tsem_destroy
(
tsem_t
*
sem
)
{
// fprintf(stderr, "==%s[%d]%s():[%p]==destroying\n",
basen
ame(__FILE__), __LINE__, __func__, sem);
// fprintf(stderr, "==%s[%d]%s():[%p]==destroying\n",
taosDirEntryBaseN
ame(__FILE__), __LINE__, __func__, sem);
if
(
!*
sem
)
{
// fprintf(stderr, "==%s[%d]%s():[%p]==not initialized\n",
basen
ame(__FILE__), __LINE__, __func__, sem);
// fprintf(stderr, "==%s[%d]%s():[%p]==not initialized\n",
taosDirEntryBaseN
ame(__FILE__), __LINE__, __func__, sem);
// abort();
return
0
;
}
struct
tsem_s
*
p
=
*
sem
;
if
(
!
p
->
valid
)
{
// fprintf(stderr, "==%s[%d]%s():[%p]==already destroyed\n",
basen
ame(__FILE__), __LINE__, __func__, sem);
// fprintf(stderr, "==%s[%d]%s():[%p]==already destroyed\n",
taosDirEntryBaseN
ame(__FILE__), __LINE__, __func__, sem);
// abort();
return
0
;
}
#ifdef SEM_USE_PTHREAD
if
(
pthread_mutex_lock
(
&
p
->
lock
))
{
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==internal logic error
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==internal logic error
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
abort
();
}
p
->
valid
=
0
;
if
(
pthread_cond_destroy
(
&
p
->
cond
))
{
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==internal logic error
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==internal logic error
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
abort
();
}
if
(
pthread_mutex_unlock
(
&
p
->
lock
))
{
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==internal logic error
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==internal logic error
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
abort
();
}
if
(
pthread_mutex_destroy
(
&
p
->
lock
))
{
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==internal logic error
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==internal logic error
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
);
abort
();
}
#elif defined(SEM_USE_POSIX)
...
...
@@ -322,7 +322,7 @@ int tsem_destroy(tsem_t *sem) {
int
r
=
sem_unlink
(
name
);
if
(
r
)
{
int
e
=
errno
;
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==unlink failed[%d]%s
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
,
e
,
fprintf
(
stderr
,
"==%s[%d]%s():[%p]==unlink failed[%d]%s
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
,
sem
,
e
,
strerror
(
e
));
abort
();
}
...
...
source/os/src/osSocket.c
浏览文件 @
f3d39e08
...
...
@@ -809,7 +809,8 @@ int32_t taosGetFqdn(char *fqdn) {
char
hostname
[
1024
];
hostname
[
1023
]
=
'\0'
;
if
(
gethostname
(
hostname
,
1023
)
==
-
1
)
{
// printf("failed to get hostname, reason:%s", strerror(errno));
printf
(
"failed to get hostname, reason:%s"
,
strerror
(
errno
));
assert
(
0
);
return
-
1
;
}
...
...
@@ -826,7 +827,8 @@ int32_t taosGetFqdn(char *fqdn) {
#endif // __APPLE__
int32_t
ret
=
getaddrinfo
(
hostname
,
NULL
,
&
hints
,
&
result
);
if
(
!
result
)
{
// printf("failed to get fqdn, code:%d, reason:%s", ret, gai_strerror(ret));
printf
(
"failed to get fqdn, code:%d, reason:%s"
,
ret
,
gai_strerror
(
ret
));
assert
(
0
);
return
-
1
;
}
...
...
source/os/src/osTimer.c
浏览文件 @
f3d39e08
...
...
@@ -79,7 +79,7 @@ static void* timer_routine(void* arg) {
struct
kevent64_s
kev
[
10
]
=
{
0
};
r
=
kevent64
(
timer_kq
,
NULL
,
0
,
kev
,
sizeof
(
kev
)
/
sizeof
(
kev
[
0
]),
0
,
&
to
);
if
(
r
!=
0
)
{
fprintf
(
stderr
,
"==%s[%d]%s()==kevent64 failed
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
);
fprintf
(
stderr
,
"==%s[%d]%s()==kevent64 failed
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
);
abort
();
}
timer_callback
(
SIGALRM
);
// just mock
...
...
@@ -97,14 +97,14 @@ int taosInitTimer(void (*callback)(int), int ms) {
timer_kq
=
kqueue
();
if
(
timer_kq
==
-
1
)
{
fprintf
(
stderr
,
"==%s[%d]%s()==failed to create timer kq
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
);
fprintf
(
stderr
,
"==%s[%d]%s()==failed to create timer kq
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
);
// since no caller of this func checks the return value for the moment
abort
();
}
r
=
pthread_create
(
&
timer_thread
,
NULL
,
timer_routine
,
NULL
);
if
(
r
)
{
fprintf
(
stderr
,
"==%s[%d]%s()==failed to create timer thread
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
);
fprintf
(
stderr
,
"==%s[%d]%s()==failed to create timer thread
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
);
// since no caller of this func checks the return value for the moment
abort
();
}
...
...
@@ -116,7 +116,7 @@ void taosUninitTimer() {
timer_stop
=
1
;
r
=
pthread_join
(
timer_thread
,
NULL
);
if
(
r
)
{
fprintf
(
stderr
,
"==%s[%d]%s()==failed to join timer thread
\n
"
,
basen
ame
(
__FILE__
),
__LINE__
,
__func__
);
fprintf
(
stderr
,
"==%s[%d]%s()==failed to join timer thread
\n
"
,
taosDirEntryBaseN
ame
(
__FILE__
),
__LINE__
,
__func__
);
// since no caller of this func checks the return value for the moment
abort
();
}
...
...
tests/test/c/tmqDemo.c
浏览文件 @
f3d39e08
...
...
@@ -192,11 +192,11 @@ static void msg_process(tmq_message_t* message) { tmqShowMsg(message); }
// calc dir size (not include itself 4096Byte)
int64_t
getDirectorySize
(
char
*
dir
)
{
DIR
*
dp
;
struct
dirent
*
e
ntry
;
TdDirPtr
pDir
;
TdDirEntryPtr
pDirE
ntry
;
int64_t
totalSize
=
0
;
if
((
dp
=
opend
ir
(
dir
))
==
NULL
)
{
if
((
pDir
=
taosOpenD
ir
(
dir
))
==
NULL
)
{
fprintf
(
stderr
,
"Cannot open dir: %s
\n
"
,
dir
);
return
-
1
;
}
...
...
@@ -204,26 +204,27 @@ int64_t getDirectorySize(char *dir)
//lstat(dir, &statbuf);
//totalSize+=statbuf.st_size;
while
((
entry
=
readdir
(
dp
))
!=
NULL
)
{
while
((
pDirEntry
=
taosReadDir
(
pDir
))
!=
NULL
)
{
char
subdir
[
1024
];
sprintf
(
subdir
,
"%s/%s"
,
dir
,
entry
->
d_name
);
char
*
fileName
=
taosGetDirEntryName
(
pDirEntry
);
sprintf
(
subdir
,
"%s/%s"
,
dir
,
fileName
);
//printf("===d_name: %s\n", entry->d_name);
if
(
taosIsDir
(
subdir
))
{
if
(
strcmp
(
"."
,
entry
->
d_name
)
==
0
||
strcmp
(
".."
,
entry
->
d_n
ame
)
==
0
)
{
if
(
strcmp
(
"."
,
fileName
)
==
0
||
strcmp
(
".."
,
fileN
ame
)
==
0
)
{
continue
;
}
int64_t
subDirSize
=
getDirectorySize
(
subdir
);
totalSize
+=
subDirSize
;
}
else
if
(
0
==
strcmp
(
strchr
(
entry
->
d_n
ame
,
'.'
),
".log"
))
{
// only calc .log file size, and not include .idx file
}
else
if
(
0
==
strcmp
(
strchr
(
fileN
ame
,
'.'
),
".log"
))
{
// only calc .log file size, and not include .idx file
int64_t
file_size
=
0
;
taosStatFile
(
subdir
,
&
file_size
,
NULL
);
totalSize
+=
file_size
;
}
}
closedir
(
dp
);
taosCloseDir
(
pDir
);
return
totalSize
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录