Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
oceanbase
miniob
提交
e976988d
M
miniob
项目概览
oceanbase
/
miniob
大约 2 年 前同步成功
通知
76
Star
1521
Fork
537
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
分析
仓库
DevOps
项目成员
Pages
M
miniob
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Pages
分析
分析
仓库分析
DevOps
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
提交
提交
e976988d
编写于
2月 13, 2022
作者:
L
longdafeng
提交者:
Longda
2月 13, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Format all code by the OceanBase Clang-Format file.
上级
06fa8cf7
变更
173
展开全部
隐藏空白更改
内联
并排
Showing
173 changed file
with
4482 addition
and
3849 deletion
+4482
-3849
deps/common/conf/ini.h
deps/common/conf/ini.h
+12
-17
deps/common/defs.h
deps/common/defs.h
+14
-13
deps/common/io/io.cpp
deps/common/io/io.cpp
+37
-53
deps/common/io/io.h
deps/common/io/io.h
+6
-9
deps/common/io/roll_select_dir.cpp
deps/common/io/roll_select_dir.cpp
+5
-3
deps/common/io/roll_select_dir.h
deps/common/io/roll_select_dir.h
+9
-3
deps/common/io/select_dir.h
deps/common/io/select_dir.h
+5
-2
deps/common/lang/bitmap.cpp
deps/common/lang/bitmap.cpp
+18
-12
deps/common/lang/bitmap.h
deps/common/lang/bitmap.h
+7
-8
deps/common/lang/mutex.cpp
deps/common/lang/mutex.cpp
+64
-52
deps/common/lang/mutex.h
deps/common/lang/mutex.h
+120
-129
deps/common/lang/serializable.h
deps/common/lang/serializable.h
+2
-6
deps/common/lang/string.cpp
deps/common/lang/string.cpp
+31
-24
deps/common/lang/string.h
deps/common/lang/string.h
+19
-23
deps/common/log/log.cpp
deps/common/log/log.cpp
+54
-32
deps/common/log/log.h
deps/common/log/log.h
+94
-86
deps/common/math/md5.cpp
deps/common/math/md5.cpp
+124
-54
deps/common/math/md5.h
deps/common/math/md5.h
+2
-2
deps/common/math/random_generator.cpp
deps/common/math/random_generator.cpp
+9
-10
deps/common/math/random_generator.h
deps/common/math/random_generator.h
+9
-11
deps/common/math/regex.cpp
deps/common/math/regex.cpp
+3
-2
deps/common/math/regex.h
deps/common/math/regex.h
+1
-1
deps/common/metrics/console_reporter.cpp
deps/common/metrics/console_reporter.cpp
+5
-3
deps/common/metrics/console_reporter.h
deps/common/metrics/console_reporter.h
+3
-4
deps/common/metrics/histogram_snapshot.cpp
deps/common/metrics/histogram_snapshot.cpp
+65
-81
deps/common/metrics/histogram_snapshot.h
deps/common/metrics/histogram_snapshot.h
+2
-1
deps/common/metrics/log_reporter.cpp
deps/common/metrics/log_reporter.cpp
+7
-6
deps/common/metrics/log_reporter.h
deps/common/metrics/log_reporter.h
+3
-4
deps/common/metrics/metric.h
deps/common/metrics/metric.h
+6
-3
deps/common/metrics/metrics.cpp
deps/common/metrics/metrics.cpp
+55
-34
deps/common/metrics/metrics.h
deps/common/metrics/metrics.h
+11
-6
deps/common/metrics/metrics_registry.cpp
deps/common/metrics/metrics_registry.cpp
+16
-15
deps/common/metrics/metrics_registry.h
deps/common/metrics/metrics_registry.h
+6
-8
deps/common/metrics/reporter.h
deps/common/metrics/reporter.h
+2
-3
deps/common/metrics/reservoir.cpp
deps/common/metrics/reservoir.cpp
+4
-8
deps/common/metrics/reservoir.h
deps/common/metrics/reservoir.h
+1
-3
deps/common/metrics/sampler.cpp
deps/common/metrics/sampler.cpp
+15
-8
deps/common/metrics/sampler.h
deps/common/metrics/sampler.h
+2
-3
deps/common/metrics/snapshot.h
deps/common/metrics/snapshot.h
+25
-17
deps/common/metrics/timer_snapshot.cpp
deps/common/metrics/timer_snapshot.cpp
+15
-6
deps/common/metrics/timer_snapshot.h
deps/common/metrics/timer_snapshot.h
+3
-2
deps/common/metrics/uniform_reservoir.cpp
deps/common/metrics/uniform_reservoir.cpp
+19
-12
deps/common/metrics/uniform_reservoir.h
deps/common/metrics/uniform_reservoir.h
+4
-4
deps/common/mm/debug_new.cpp.skip
deps/common/mm/debug_new.cpp.skip
+42
-20
deps/common/mm/debug_new.h
deps/common/mm/debug_new.h
+8
-8
deps/common/mm/mem.cpp.skip
deps/common/mm/mem.cpp.skip
+59
-38
deps/common/mm/mem.h
deps/common/mm/mem.h
+7
-8
deps/common/os/os.cpp
deps/common/os/os.cpp
+6
-6
deps/common/os/os.h
deps/common/os/os.h
+1
-1
deps/common/os/path.h
deps/common/os/path.h
+3
-4
deps/common/os/pidfile.cpp
deps/common/os/pidfile.cpp
+11
-12
deps/common/os/pidfile.h
deps/common/os/pidfile.h
+3
-4
deps/common/os/process.cpp
deps/common/os/process.cpp
+19
-18
deps/common/os/process.h
deps/common/os/process.h
+2
-3
deps/common/os/process_param.cpp
deps/common/os/process_param.cpp
+5
-6
deps/common/os/process_param.h
deps/common/os/process_param.h
+69
-31
deps/common/os/signal.cpp
deps/common/os/signal.cpp
+15
-11
deps/common/os/signal.h
deps/common/os/signal.h
+1
-2
deps/common/seda/callback.cpp
deps/common/seda/callback.cpp
+15
-9
deps/common/seda/callback.h
deps/common/seda/callback.h
+21
-15
deps/common/seda/class_factory.h
deps/common/seda/class_factory.h
+19
-17
deps/common/seda/event_dispatcher.cpp
deps/common/seda/event_dispatcher.cpp
+14
-10
deps/common/seda/event_dispatcher.h
deps/common/seda/event_dispatcher.h
+16
-13
deps/common/seda/example_stage.cpp
deps/common/seda/example_stage.cpp
+16
-8
deps/common/seda/example_stage.h
deps/common/seda/example_stage.h
+2
-3
deps/common/seda/init.cpp
deps/common/seda/init.cpp
+9
-12
deps/common/seda/init.h
deps/common/seda/init.h
+2
-2
deps/common/seda/kill_thread.cpp
deps/common/seda/kill_thread.cpp
+7
-5
deps/common/seda/kill_thread.h
deps/common/seda/kill_thread.h
+12
-6
deps/common/seda/metrics_report_event.h
deps/common/seda/metrics_report_event.h
+2
-2
deps/common/seda/metrics_stage.cpp
deps/common/seda/metrics_stage.cpp
+20
-13
deps/common/seda/metrics_stage.h
deps/common/seda/metrics_stage.h
+4
-4
deps/common/seda/seda_config.cpp
deps/common/seda/seda_config.cpp
+69
-62
deps/common/seda/seda_config.h
deps/common/seda/seda_config.h
+12
-11
deps/common/seda/seda_defs.h
deps/common/seda/seda_defs.h
+2
-2
deps/common/seda/stage.cpp
deps/common/seda/stage.cpp
+19
-12
deps/common/seda/stage.h
deps/common/seda/stage.h
+51
-32
deps/common/seda/stage_event.cpp
deps/common/seda/stage_event.cpp
+33
-18
deps/common/seda/stage_event.h
deps/common/seda/stage_event.h
+27
-16
deps/common/seda/stage_factory.h
deps/common/seda/stage_factory.h
+2
-3
deps/common/seda/thread_pool.cpp
deps/common/seda/thread_pool.cpp
+44
-24
deps/common/seda/thread_pool.h
deps/common/seda/thread_pool.h
+15
-16
deps/common/seda/timer_stage.cpp
deps/common/seda/timer_stage.cpp
+127
-77
deps/common/seda/timer_stage.h
deps/common/seda/timer_stage.h
+24
-20
deps/common/time/datetime.cpp
deps/common/time/datetime.cpp
+70
-36
deps/common/time/datetime.h
deps/common/time/datetime.h
+124
-71
deps/common/time/timeout_info.cpp
deps/common/time/timeout_info.cpp
+11
-7
deps/common/time/timeout_info.h
deps/common/time/timeout_info.h
+9
-9
deps/common/version.h
deps/common/version.h
+4
-6
src/obclient/client.cpp
src/obclient/client.cpp
+26
-24
src/observer/event/execution_plan_event.cpp
src/observer/event/execution_plan_event.cpp
+4
-4
src/observer/event/execution_plan_event.h
src/observer/event/execution_plan_event.h
+8
-5
src/observer/event/session_event.cpp
src/observer/event/session_event.cpp
+28
-13
src/observer/event/session_event.h
src/observer/event/session_event.h
+1
-1
src/observer/event/sql_event.cpp
src/observer/event/sql_event.cpp
+4
-4
src/observer/event/sql_event.h
src/observer/event/sql_event.h
+7
-4
src/observer/event/storage_event.cpp
src/observer/event/storage_event.cpp
+4
-3
src/observer/event/storage_event.h
src/observer/event/storage_event.h
+4
-2
src/observer/handler/handler.h
src/observer/handler/handler.h
+52
-52
src/observer/ini_setting.h
src/observer/ini_setting.h
+1
-1
src/observer/init.cpp
src/observer/init.cpp
+34
-35
src/observer/init.h
src/observer/init.h
+1
-1
src/observer/main.cpp
src/observer/main.cpp
+35
-31
src/observer/net/connection_context.h
src/observer/net/connection_context.h
+1
-1
src/observer/net/server.cpp
src/observer/net/server.cpp
+42
-38
src/observer/net/server.h
src/observer/net/server.h
+1
-1
src/observer/net/server_param.h
src/observer/net/server_param.h
+1
-1
src/observer/rc.cpp
src/observer/rc.cpp
+5
-2
src/observer/rc.h
src/observer/rc.h
+36
-42
src/observer/session/session.cpp
src/observer/session/session.cpp
+16
-9
src/observer/session/session.h
src/observer/session/session.h
+7
-7
src/observer/session/session_stage.cpp
src/observer/session/session_stage.cpp
+24
-16
src/observer/session/session_stage.h
src/observer/session/session_stage.h
+2
-5
src/observer/sql/executor/execute_stage.cpp
src/observer/sql/executor/execute_stage.cpp
+64
-53
src/observer/sql/executor/execute_stage.h
src/observer/sql/executor/execute_stage.h
+3
-3
src/observer/sql/executor/execution_node.cpp
src/observer/sql/executor/execution_node.cpp
+13
-9
src/observer/sql/executor/execution_node.h
src/observer/sql/executor/execution_node.h
+7
-5
src/observer/sql/executor/tuple.cpp
src/observer/sql/executor/tuple.cpp
+70
-51
src/observer/sql/executor/tuple.h
src/observer/sql/executor/tuple.h
+41
-24
src/observer/sql/executor/value.h
src/observer/sql/executor/value.h
+28
-20
src/observer/sql/optimizer/optimize_stage.cpp
src/observer/sql/optimizer/optimize_stage.cpp
+16
-8
src/observer/sql/optimizer/optimize_stage.h
src/observer/sql/optimizer/optimize_stage.h
+2
-3
src/observer/sql/parser/lex.yy.c
src/observer/sql/parser/lex.yy.c
+1286
-1360
src/observer/sql/parser/lex.yy.h
src/observer/sql/parser/lex.yy.h
+99
-104
src/observer/sql/parser/parse.cpp
src/observer/sql/parser/parse.cpp
+108
-76
src/observer/sql/parser/parse.h
src/observer/sql/parser/parse.h
+2
-3
src/observer/sql/parser/parse_defs.h
src/observer/sql/parser/parse_defs.h
+7
-7
src/observer/sql/parser/parse_stage.cpp
src/observer/sql/parser/parse_stage.cpp
+19
-10
src/observer/sql/parser/parse_stage.h
src/observer/sql/parser/parse_stage.h
+3
-3
src/observer/sql/parser/resolve_stage.cpp
src/observer/sql/parser/resolve_stage.cpp
+16
-8
src/observer/sql/parser/resolve_stage.h
src/observer/sql/parser/resolve_stage.h
+2
-3
src/observer/sql/parser/yacc_sql.tab.h
src/observer/sql/parser/yacc_sql.tab.h
+64
-69
src/observer/sql/plan_cache/plan_cache_stage.cpp
src/observer/sql/plan_cache/plan_cache_stage.cpp
+16
-9
src/observer/sql/plan_cache/plan_cache_stage.h
src/observer/sql/plan_cache/plan_cache_stage.h
+2
-3
src/observer/sql/query_cache/query_cache_stage.cpp
src/observer/sql/query_cache/query_cache_stage.cpp
+16
-9
src/observer/sql/query_cache/query_cache_stage.h
src/observer/sql/query_cache/query_cache_stage.h
+2
-3
src/observer/storage/common/bplus_tree.cpp
src/observer/storage/common/bplus_tree.cpp
+7
-5
src/observer/storage/common/bplus_tree.h
src/observer/storage/common/bplus_tree.h
+4
-1
src/observer/storage/common/bplus_tree_index.cpp
src/observer/storage/common/bplus_tree_index.cpp
+1
-1
src/observer/storage/common/bplus_tree_index.h
src/observer/storage/common/bplus_tree_index.h
+4
-3
src/observer/storage/common/condition_filter.cpp
src/observer/storage/common/condition_filter.cpp
+1
-1
src/observer/storage/common/condition_filter.h
src/observer/storage/common/condition_filter.h
+23
-17
src/observer/storage/common/db.cpp
src/observer/storage/common/db.cpp
+1
-1
src/observer/storage/common/db.h
src/observer/storage/common/db.h
+6
-5
src/observer/storage/common/field_meta.cpp
src/observer/storage/common/field_meta.cpp
+1
-1
src/observer/storage/common/field_meta.h
src/observer/storage/common/field_meta.h
+1
-1
src/observer/storage/common/index.cpp
src/observer/storage/common/index.cpp
+3
-2
src/observer/storage/common/index.h
src/observer/storage/common/index.h
+5
-4
src/observer/storage/common/index_meta.cpp
src/observer/storage/common/index_meta.cpp
+1
-1
src/observer/storage/common/index_meta.h
src/observer/storage/common/index_meta.h
+1
-1
src/observer/storage/common/meta_util.cpp
src/observer/storage/common/meta_util.cpp
+1
-1
src/observer/storage/common/meta_util.h
src/observer/storage/common/meta_util.h
+1
-1
src/observer/storage/common/record_manager.cpp
src/observer/storage/common/record_manager.cpp
+1
-1
src/observer/storage/common/record_manager.h
src/observer/storage/common/record_manager.h
+1
-1
src/observer/storage/common/table.cpp
src/observer/storage/common/table.cpp
+1
-1
src/observer/storage/common/table.h
src/observer/storage/common/table.h
+19
-14
src/observer/storage/common/table_meta.cpp
src/observer/storage/common/table_meta.cpp
+1
-1
src/observer/storage/common/table_meta.h
src/observer/storage/common/table_meta.h
+1
-1
src/observer/storage/default/default_handler.cpp
src/observer/storage/default/default_handler.cpp
+50
-29
src/observer/storage/default/default_handler.h
src/observer/storage/default/default_handler.h
+14
-12
src/observer/storage/default/default_storage_stage.cpp
src/observer/storage/default/default_storage_stage.cpp
+1
-1
src/observer/storage/default/default_storage_stage.h
src/observer/storage/default/default_storage_stage.h
+4
-5
src/observer/storage/default/disk_buffer_pool.cpp
src/observer/storage/default/disk_buffer_pool.cpp
+1
-1
src/observer/storage/default/disk_buffer_pool.h
src/observer/storage/default/disk_buffer_pool.h
+2
-3
src/observer/storage/mem/mem_storage_stage.cpp
src/observer/storage/mem/mem_storage_stage.cpp
+16
-9
src/observer/storage/mem/mem_storage_stage.h
src/observer/storage/mem/mem_storage_stage.h
+3
-3
src/observer/storage/trx/trx.cpp
src/observer/storage/trx/trx.cpp
+68
-55
src/observer/storage/trx/trx.h
src/observer/storage/trx/trx.h
+20
-15
unitest/bitmap_test.cpp
unitest/bitmap_test.cpp
+4
-2
unitest/md5_test.cpp
unitest/md5_test.cpp
+8
-4
unitest/path_test.cpp
unitest/path_test.cpp
+4
-1
unitest/pidfile_test.cpp
unitest/pidfile_test.cpp
+2
-1
unitest/rc_test.cpp
unitest/rc_test.cpp
+3
-2
未找到文件。
deps/common/conf/ini.h
浏览文件 @
e976988d
...
@@ -31,7 +31,7 @@ namespace common {
...
@@ -31,7 +31,7 @@ namespace common {
// VARNAME=VALUE
// VARNAME=VALUE
class
Ini
{
class
Ini
{
public:
public:
/**
/**
* To simplify the logic, no lock's when loading configuration
* To simplify the logic, no lock's when loading configuration
* So don't modify the data parallel
* So don't modify the data parallel
...
@@ -50,24 +50,22 @@ class Ini {
...
@@ -50,24 +50,22 @@ class Ini {
* get the map of the section
* get the map of the section
* if the section doesn't exist, return one empty section
* if the section doesn't exist, return one empty section
*/
*/
const
std
::
map
<
std
::
string
,
std
::
string
>
&
const
std
::
map
<
std
::
string
,
std
::
string
>
&
get
(
const
std
::
string
&
section
=
DEFAULT_SECTION
);
get
(
const
std
::
string
&
section
=
DEFAULT_SECTION
);
/**
/**
* get the value of the key in the section,
* get the value of the key in the section,
* if the key-value doesn't exist,
* if the key-value doesn't exist,
* use the input default_value
* use the input default_value
*/
*/
std
::
string
get
(
const
std
::
string
&
key
,
const
std
::
string
&
default_value
,
std
::
string
get
(
const
std
::
string
&
section
=
DEFAULT_SECTION
);
const
std
::
string
&
key
,
const
std
::
string
&
default_value
,
const
std
::
string
&
section
=
DEFAULT_SECTION
);
/**
/**
* put the key-value pair to the section
* put the key-value pair to the section
* if the key-value already exist, just replace it
* if the key-value already exist, just replace it
* if the section doesn't exist, it will create this section
* if the section doesn't exist, it will create this section
*/
*/
int
put
(
const
std
::
string
&
key
,
const
std
::
string
&
value
,
int
put
(
const
std
::
string
&
key
,
const
std
::
string
&
value
,
const
std
::
string
&
section
=
DEFAULT_SECTION
);
const
std
::
string
&
section
=
DEFAULT_SECTION
);
/**
/**
* output all configuration to one string
* output all configuration to one string
...
@@ -92,7 +90,7 @@ class Ini {
...
@@ -92,7 +90,7 @@ class Ini {
static
const
char
CFG_SESSION_START_TAG
=
'['
;
static
const
char
CFG_SESSION_START_TAG
=
'['
;
static
const
char
CFG_SESSION_END_TAG
=
']'
;
static
const
char
CFG_SESSION_END_TAG
=
']'
;
protected:
protected:
/**
/**
* insert one empty session to sections_
* insert one empty session to sections_
*/
*/
...
@@ -102,21 +100,18 @@ class Ini {
...
@@ -102,21 +100,18 @@ class Ini {
* switch session according to the session_name
* switch session according to the session_name
* if the section doesn't exist, it will create one
* if the section doesn't exist, it will create one
*/
*/
std
::
map
<
std
::
string
,
std
::
string
>
*
std
::
map
<
std
::
string
,
std
::
string
>
*
switch_session
(
const
std
::
string
&
session_name
);
switch_session
(
const
std
::
string
&
session_name
);
/**
/**
* insert one entry to session_map
* insert one entry to session_map
* line's format is "key=value"
* line's format is "key=value"
*
*
*/
*/
int
insert_entry
(
std
::
map
<
std
::
string
,
std
::
string
>
*
session_map
,
int
insert_entry
(
std
::
map
<
std
::
string
,
std
::
string
>
*
session_map
,
const
std
::
string
&
line
);
const
std
::
string
&
line
);
typedef
std
::
map
<
std
::
string
,
std
::
map
<
std
::
string
,
std
::
string
>>
typedef
std
::
map
<
std
::
string
,
std
::
map
<
std
::
string
,
std
::
string
>>
SessionsMap
;
SessionsMap
;
private:
private:
static
const
std
::
map
<
std
::
string
,
std
::
string
>
empty_map_
;
static
const
std
::
map
<
std
::
string
,
std
::
string
>
empty_map_
;
std
::
set
<
std
::
string
>
file_names_
;
std
::
set
<
std
::
string
>
file_names_
;
...
@@ -129,5 +124,5 @@ class Ini {
...
@@ -129,5 +124,5 @@ class Ini {
Ini
*&
get_properties
();
Ini
*&
get_properties
();
//********************************************************************
//********************************************************************
}
// namespace common
}
// namespace common
#endif //__COMMON_CONF_INI_H__
#endif
//__COMMON_CONF_INI_H__
deps/common/defs.h
浏览文件 @
e976988d
...
@@ -36,7 +36,8 @@ namespace common {
...
@@ -36,7 +36,8 @@ namespace common {
#endif
#endif
inline
const
std
::
string
&
theSwVersion
()
{
inline
const
std
::
string
&
theSwVersion
()
{
static
const
std
::
string
swVersion
(
VERSION_STR
);
static
const
std
::
string
swVersion
(
VERSION_STR
);
return
swVersion
;
return
swVersion
;
...
@@ -44,24 +45,24 @@ inline const std::string &theSwVersion() {
...
@@ -44,24 +45,24 @@ inline const std::string &theSwVersion() {
enum
{
enum
{
// General Error Codes
// General Error Codes
STATUS_SUCCESS
=
0
,
//!< Success status should be zero,
STATUS_SUCCESS
=
0
,
//!< Success status should be zero,
STATUS_INVALID_PARAM
,
//!< Invalid parameter
STATUS_INVALID_PARAM
,
//!< Invalid parameter
STATUS_FAILED_INIT
,
//!< Failed to init program
STATUS_FAILED_INIT
,
//!< Failed to init program
STATUS_PROPERTY_ERR
,
//!< Property error
STATUS_PROPERTY_ERR
,
//!< Property error
STATUS_INIT_LOG
,
//!< log error
STATUS_INIT_LOG
,
//!< log error
STATUS_INIT_THREAD
,
//!< failed to init thread
STATUS_INIT_THREAD
,
//!< failed to init thread
STATUS_FAILED_JOB
,
//!< Failed to do job
STATUS_FAILED_JOB
,
//!< Failed to do job
STATUS_FAILED_NETWORK
,
//!< Network failure
STATUS_FAILED_NETWORK
,
//!< Network failure
STATUS_UNKNOW_ERROR
,
STATUS_UNKNOW_ERROR
,
STATUS_LAST_ERR
//!< last error code
STATUS_LAST_ERR
//!< last error code
};
};
const
unsigned
int
ONE_KILO
=
1024
;
const
unsigned
int
ONE_KILO
=
1024
;
const
unsigned
int
ONE_MILLION
=
ONE_KILO
*
ONE_KILO
;
const
unsigned
int
ONE_MILLION
=
ONE_KILO
*
ONE_KILO
;
const
unsigned
int
ONE_GIGA
=
ONE_MILLION
*
ONE_KILO
;
const
unsigned
int
ONE_GIGA
=
ONE_MILLION
*
ONE_KILO
;
const
unsigned
int
FILENAME_LENGTH_MAX
=
256
;
// the max filename length
const
unsigned
int
FILENAME_LENGTH_MAX
=
256
;
// the max filename length
static
const
char
FILE_PATH_SPLIT
=
'/'
;
static
const
char
FILE_PATH_SPLIT
=
'/'
;
static
const
char
FILE_PATH_SPLIT_STR
[]
=
"/"
;
static
const
char
FILE_PATH_SPLIT_STR
[]
=
"/"
;
...
@@ -82,5 +83,5 @@ typedef long long s64_t;
...
@@ -82,5 +83,5 @@ typedef long long s64_t;
#define LOCAL_HOST "localhost"
#define LOCAL_HOST "localhost"
}
// namespace common
}
// namespace common
#endif //__COMMON_DEFS_H__
#endif
//__COMMON_DEFS_H__
deps/common/io/io.cpp
浏览文件 @
e976988d
...
@@ -27,13 +27,11 @@ See the Mulan PSL v2 for more details. */
...
@@ -27,13 +27,11 @@ See the Mulan PSL v2 for more details. */
namespace
common
{
namespace
common
{
int
readFromFile
(
const
std
::
string
&
fileName
,
char
*&
outputData
,
size_t
&
fileSize
)
int
readFromFile
(
const
std
::
string
&
fileName
,
char
*&
outputData
,
{
size_t
&
fileSize
)
{
FILE
*
file
=
fopen
(
fileName
.
c_str
(),
"rb"
);
FILE
*
file
=
fopen
(
fileName
.
c_str
(),
"rb"
);
if
(
file
==
NULL
)
{
if
(
file
==
NULL
)
{
std
::
cerr
<<
"Failed to open file "
<<
fileName
<<
SYS_OUTPUT_FILE_POS
std
::
cerr
<<
"Failed to open file "
<<
fileName
<<
SYS_OUTPUT_FILE_POS
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
return
-
1
;
return
-
1
;
}
}
...
@@ -50,8 +48,7 @@ int readFromFile(const std::string &fileName, char *&outputData,
...
@@ -50,8 +48,7 @@ int readFromFile(const std::string &fileName, char *&outputData,
memset
(
buffer
,
0
,
sizeof
(
buffer
));
memset
(
buffer
,
0
,
sizeof
(
buffer
));
oneRead
=
fread
(
buffer
,
1
,
sizeof
(
buffer
),
file
);
oneRead
=
fread
(
buffer
,
1
,
sizeof
(
buffer
),
file
);
if
(
ferror
(
file
))
{
if
(
ferror
(
file
))
{
std
::
cerr
<<
"Failed to read data"
<<
fileName
<<
SYS_OUTPUT_FILE_POS
std
::
cerr
<<
"Failed to read data"
<<
fileName
<<
SYS_OUTPUT_FILE_POS
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
fclose
(
file
);
fclose
(
file
);
if
(
data
!=
NULL
)
{
if
(
data
!=
NULL
)
{
lfree
(
data
);
lfree
(
data
);
...
@@ -62,8 +59,7 @@ int readFromFile(const std::string &fileName, char *&outputData,
...
@@ -62,8 +59,7 @@ int readFromFile(const std::string &fileName, char *&outputData,
data
=
(
char
*
)
lrealloc
(
data
,
readSize
+
oneRead
);
data
=
(
char
*
)
lrealloc
(
data
,
readSize
+
oneRead
);
if
(
data
==
NULL
)
{
if
(
data
==
NULL
)
{
std
::
cerr
<<
"Failed to alloc memory for "
<<
fileName
std
::
cerr
<<
"Failed to alloc memory for "
<<
fileName
<<
SYS_OUTPUT_FILE_POS
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
<<
SYS_OUTPUT_FILE_POS
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
lfree
(
data
);
lfree
(
data
);
fclose
(
file
);
fclose
(
file
);
return
-
1
;
return
-
1
;
...
@@ -81,12 +77,11 @@ int readFromFile(const std::string &fileName, char *&outputData,
...
@@ -81,12 +77,11 @@ int readFromFile(const std::string &fileName, char *&outputData,
return
0
;
return
0
;
}
}
int
writeToFile
(
const
std
::
string
&
fileName
,
const
char
*
data
,
u32_t
dataSize
,
int
writeToFile
(
const
std
::
string
&
fileName
,
const
char
*
data
,
u32_t
dataSize
,
const
char
*
openMode
)
const
char
*
openMode
)
{
{
FILE
*
file
=
fopen
(
fileName
.
c_str
(),
openMode
);
FILE
*
file
=
fopen
(
fileName
.
c_str
(),
openMode
);
if
(
file
==
NULL
)
{
if
(
file
==
NULL
)
{
std
::
cerr
<<
"Failed to open file "
<<
fileName
<<
SYS_OUTPUT_FILE_POS
std
::
cerr
<<
"Failed to open file "
<<
fileName
<<
SYS_OUTPUT_FILE_POS
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
return
-
1
;
return
-
1
;
}
}
...
@@ -95,8 +90,7 @@ int writeToFile(const std::string &fileName, const char *data, u32_t dataSize,
...
@@ -95,8 +90,7 @@ int writeToFile(const std::string &fileName, const char *data, u32_t dataSize,
while
(
leftSize
>
0
)
{
while
(
leftSize
>
0
)
{
int
writeCount
=
fwrite
(
buffer
,
1
,
leftSize
,
file
);
int
writeCount
=
fwrite
(
buffer
,
1
,
leftSize
,
file
);
if
(
writeCount
<=
0
)
{
if
(
writeCount
<=
0
)
{
std
::
cerr
<<
"Failed to open file "
<<
fileName
<<
SYS_OUTPUT_FILE_POS
std
::
cerr
<<
"Failed to open file "
<<
fileName
<<
SYS_OUTPUT_FILE_POS
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
fclose
(
file
);
fclose
(
file
);
return
-
1
;
return
-
1
;
}
else
{
}
else
{
...
@@ -110,7 +104,8 @@ int writeToFile(const std::string &fileName, const char *data, u32_t dataSize,
...
@@ -110,7 +104,8 @@ int writeToFile(const std::string &fileName, const char *data, u32_t dataSize,
return
0
;
return
0
;
}
}
int
getFileLines
(
const
std
::
string
&
fileName
,
u64_t
&
lineNum
)
{
int
getFileLines
(
const
std
::
string
&
fileName
,
u64_t
&
lineNum
)
{
lineNum
=
0
;
lineNum
=
0
;
char
line
[
4
*
ONE_KILO
]
=
{
0
};
char
line
[
4
*
ONE_KILO
]
=
{
0
};
...
@@ -133,14 +128,13 @@ int getFileLines(const std::string &fileName, u64_t &lineNum) {
...
@@ -133,14 +128,13 @@ int getFileLines(const std::string &fileName, u64_t &lineNum) {
return
0
;
return
0
;
}
}
int
getFileNum
(
u64_t
&
fileNum
,
const
std
::
string
&
path
,
int
getFileNum
(
u64_t
&
fileNum
,
const
std
::
string
&
path
,
const
std
::
string
&
pattern
,
bool
recursive
)
const
std
::
string
&
pattern
,
bool
recursive
)
{
{
try
{
try
{
DIR
*
dirp
=
NULL
;
DIR
*
dirp
=
NULL
;
dirp
=
opendir
(
path
.
c_str
());
dirp
=
opendir
(
path
.
c_str
());
if
(
dirp
==
NULL
)
{
if
(
dirp
==
NULL
)
{
std
::
cerr
<<
"Failed to opendir "
<<
path
<<
SYS_OUTPUT_FILE_POS
std
::
cerr
<<
"Failed to opendir "
<<
path
<<
SYS_OUTPUT_FILE_POS
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
return
-
1
;
return
-
1
;
}
}
...
@@ -160,8 +154,7 @@ int getFileNum(u64_t &fileNum, const std::string &path,
...
@@ -160,8 +154,7 @@ int getFileNum(u64_t &fileNum, const std::string &path,
fullPath
+=
entry
->
d_name
;
fullPath
+=
entry
->
d_name
;
memset
(
&
fs
,
0
,
sizeof
(
fs
));
memset
(
&
fs
,
0
,
sizeof
(
fs
));
if
(
stat
(
fullPath
.
c_str
(),
&
fs
)
<
0
)
{
if
(
stat
(
fullPath
.
c_str
(),
&
fs
)
<
0
)
{
std
::
cout
<<
"Failed to stat "
<<
fullPath
<<
SYS_OUTPUT_FILE_POS
std
::
cout
<<
"Failed to stat "
<<
fullPath
<<
SYS_OUTPUT_FILE_POS
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
continue
;
continue
;
}
}
...
@@ -181,8 +174,7 @@ int getFileNum(u64_t &fileNum, const std::string &path,
...
@@ -181,8 +174,7 @@ int getFileNum(u64_t &fileNum, const std::string &path,
continue
;
continue
;
}
}
if
(
pattern
.
empty
()
==
false
&&
if
(
pattern
.
empty
()
==
false
&&
regex_match
(
entry
->
d_name
,
pattern
.
c_str
()))
{
regex_match
(
entry
->
d_name
,
pattern
.
c_str
()))
{
// Don't match
// Don't match
continue
;
continue
;
}
}
...
@@ -194,20 +186,18 @@ int getFileNum(u64_t &fileNum, const std::string &path,
...
@@ -194,20 +186,18 @@ int getFileNum(u64_t &fileNum, const std::string &path,
return
0
;
return
0
;
}
catch
(...)
{
}
catch
(...)
{
std
::
cerr
<<
"Failed to get file num "
<<
path
<<
SYS_OUTPUT_FILE_POS
std
::
cerr
<<
"Failed to get file num "
<<
path
<<
SYS_OUTPUT_FILE_POS
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
}
}
return
-
1
;
return
-
1
;
}
}
int
getFileList
(
std
::
vector
<
std
::
string
>
&
fileList
,
const
std
::
string
&
path
,
int
getFileList
(
std
::
vector
<
std
::
string
>
&
fileList
,
const
std
::
string
&
path
,
const
std
::
string
&
pattern
,
bool
recursive
)
const
std
::
string
&
pattern
,
bool
recursive
)
{
{
try
{
try
{
DIR
*
dirp
=
NULL
;
DIR
*
dirp
=
NULL
;
dirp
=
opendir
(
path
.
c_str
());
dirp
=
opendir
(
path
.
c_str
());
if
(
dirp
==
NULL
)
{
if
(
dirp
==
NULL
)
{
std
::
cerr
<<
"Failed to opendir "
<<
path
<<
SYS_OUTPUT_FILE_POS
std
::
cerr
<<
"Failed to opendir "
<<
path
<<
SYS_OUTPUT_FILE_POS
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
return
-
1
;
return
-
1
;
}
}
...
@@ -227,8 +217,7 @@ int getFileList(std::vector<std::string> &fileList, const std::string &path,
...
@@ -227,8 +217,7 @@ int getFileList(std::vector<std::string> &fileList, const std::string &path,
fullPath
+=
entry
->
d_name
;
fullPath
+=
entry
->
d_name
;
memset
(
&
fs
,
0
,
sizeof
(
fs
));
memset
(
&
fs
,
0
,
sizeof
(
fs
));
if
(
stat
(
fullPath
.
c_str
(),
&
fs
)
<
0
)
{
if
(
stat
(
fullPath
.
c_str
(),
&
fs
)
<
0
)
{
std
::
cout
<<
"Failed to stat "
<<
fullPath
<<
SYS_OUTPUT_FILE_POS
std
::
cout
<<
"Failed to stat "
<<
fullPath
<<
SYS_OUTPUT_FILE_POS
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
continue
;
continue
;
}
}
...
@@ -248,8 +237,7 @@ int getFileList(std::vector<std::string> &fileList, const std::string &path,
...
@@ -248,8 +237,7 @@ int getFileList(std::vector<std::string> &fileList, const std::string &path,
continue
;
continue
;
}
}
if
(
pattern
.
empty
()
==
false
&&
if
(
pattern
.
empty
()
==
false
&&
regex_match
(
entry
->
d_name
,
pattern
.
c_str
()))
{
regex_match
(
entry
->
d_name
,
pattern
.
c_str
()))
{
// Don't match
// Don't match
continue
;
continue
;
}
}
...
@@ -260,20 +248,18 @@ int getFileList(std::vector<std::string> &fileList, const std::string &path,
...
@@ -260,20 +248,18 @@ int getFileList(std::vector<std::string> &fileList, const std::string &path,
closedir
(
dirp
);
closedir
(
dirp
);
return
0
;
return
0
;
}
catch
(...)
{
}
catch
(...)
{
std
::
cerr
<<
"Failed to get file list "
<<
path
<<
SYS_OUTPUT_FILE_POS
std
::
cerr
<<
"Failed to get file list "
<<
path
<<
SYS_OUTPUT_FILE_POS
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
}
}
return
-
1
;
return
-
1
;
}
}
int
getDirList
(
std
::
vector
<
std
::
string
>
&
dirList
,
const
std
::
string
&
path
,
int
getDirList
(
std
::
vector
<
std
::
string
>
&
dirList
,
const
std
::
string
&
path
,
const
std
::
string
&
pattern
)
const
std
::
string
&
pattern
)
{
{
try
{
try
{
DIR
*
dirp
=
NULL
;
DIR
*
dirp
=
NULL
;
dirp
=
opendir
(
path
.
c_str
());
dirp
=
opendir
(
path
.
c_str
());
if
(
dirp
==
NULL
)
{
if
(
dirp
==
NULL
)
{
std
::
cerr
<<
"Failed to opendir "
<<
path
<<
SYS_OUTPUT_FILE_POS
std
::
cerr
<<
"Failed to opendir "
<<
path
<<
SYS_OUTPUT_FILE_POS
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
return
-
1
;
return
-
1
;
}
}
...
@@ -293,8 +279,7 @@ int getDirList(std::vector<std::string> &dirList, const std::string &path,
...
@@ -293,8 +279,7 @@ int getDirList(std::vector<std::string> &dirList, const std::string &path,
fullPath
+=
entry
->
d_name
;
fullPath
+=
entry
->
d_name
;
memset
(
&
fs
,
0
,
sizeof
(
fs
));
memset
(
&
fs
,
0
,
sizeof
(
fs
));
if
(
stat
(
fullPath
.
c_str
(),
&
fs
)
<
0
)
{
if
(
stat
(
fullPath
.
c_str
(),
&
fs
)
<
0
)
{
std
::
cout
<<
"Failed to stat "
<<
fullPath
<<
SYS_OUTPUT_FILE_POS
std
::
cout
<<
"Failed to stat "
<<
fullPath
<<
SYS_OUTPUT_FILE_POS
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
continue
;
continue
;
}
}
...
@@ -302,8 +287,7 @@ int getDirList(std::vector<std::string> &dirList, const std::string &path,
...
@@ -302,8 +287,7 @@ int getDirList(std::vector<std::string> &dirList, const std::string &path,
continue
;
continue
;
}
}
if
(
pattern
.
empty
()
==
false
&&
if
(
pattern
.
empty
()
==
false
&&
regex_match
(
entry
->
d_name
,
pattern
.
c_str
()))
{
regex_match
(
entry
->
d_name
,
pattern
.
c_str
()))
{
// Don't match
// Don't match
continue
;
continue
;
}
}
...
@@ -314,15 +298,15 @@ int getDirList(std::vector<std::string> &dirList, const std::string &path,
...
@@ -314,15 +298,15 @@ int getDirList(std::vector<std::string> &dirList, const std::string &path,
closedir
(
dirp
);
closedir
(
dirp
);
return
0
;
return
0
;
}
catch
(...)
{
}
catch
(...)
{
std
::
cerr
<<
"Failed to get file list "
<<
path
<<
SYS_OUTPUT_FILE_POS
std
::
cerr
<<
"Failed to get file list "
<<
path
<<
SYS_OUTPUT_FILE_POS
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
}
}
return
-
1
;
return
-
1
;
}
}
int
touch
(
const
std
::
string
&
path
)
{
int
touch
(
const
std
::
string
&
path
)
// CWE367: A check occurs on a file's attributes before
{
// the file is used in a privileged operation, but things
// CWE367: A check occurs on a file's attributes before
// the file is used in a privileged operation, but things
// may have changed
// may have changed
// struct stat fs;
// struct stat fs;
...
@@ -341,7 +325,8 @@ int touch(const std::string &path) {
...
@@ -341,7 +325,8 @@ int touch(const std::string &path) {
return
0
;
return
0
;
}
}
int
getFileSize
(
const
char
*
filePath
,
u64_t
&
fileLen
)
{
int
getFileSize
(
const
char
*
filePath
,
u64_t
&
fileLen
)
{
if
(
filePath
==
NULL
||
*
filePath
==
'\0'
)
{
if
(
filePath
==
NULL
||
*
filePath
==
'\0'
)
{
std
::
cerr
<<
"invalid filepath"
<<
std
::
endl
;
std
::
cerr
<<
"invalid filepath"
<<
std
::
endl
;
return
-
EINVAL
;
return
-
EINVAL
;
...
@@ -351,8 +336,7 @@ int getFileSize(const char *filePath, u64_t &fileLen) {
...
@@ -351,8 +336,7 @@ int getFileSize(const char *filePath, u64_t &fileLen) {
int
rc
=
stat
(
filePath
,
&
statBuf
);
int
rc
=
stat
(
filePath
,
&
statBuf
);
if
(
rc
)
{
if
(
rc
)
{
std
::
cerr
<<
"Failed to get stat of "
<<
filePath
<<
","
<<
errno
<<
":"
std
::
cerr
<<
"Failed to get stat of "
<<
filePath
<<
","
<<
errno
<<
":"
<<
strerror
(
errno
)
<<
std
::
endl
;
<<
strerror
(
errno
)
<<
std
::
endl
;
return
rc
;
return
rc
;
}
}
...
@@ -365,4 +349,4 @@ int getFileSize(const char *filePath, u64_t &fileLen) {
...
@@ -365,4 +349,4 @@ int getFileSize(const char *filePath, u64_t &fileLen) {
return
0
;
return
0
;
}
}
}
//namespace common
}
// namespace common
\ No newline at end of file
\ No newline at end of file
deps/common/io/io.h
浏览文件 @
e976988d
...
@@ -29,8 +29,7 @@ namespace common {
...
@@ -29,8 +29,7 @@ namespace common {
*/
*/
int
readFromFile
(
const
std
::
string
&
fileName
,
char
*&
data
,
size_t
&
fileSize
);
int
readFromFile
(
const
std
::
string
&
fileName
,
char
*&
data
,
size_t
&
fileSize
);
int
writeToFile
(
const
std
::
string
&
fileName
,
const
char
*
data
,
u32_t
dataSize
,
int
writeToFile
(
const
std
::
string
&
fileName
,
const
char
*
data
,
u32_t
dataSize
,
const
char
*
openMode
);
const
char
*
openMode
);
/**
/**
* return the line number which line.strip() isn't empty
* return the line number which line.strip() isn't empty
...
@@ -47,12 +46,10 @@ int getFileLines(const std::string &fileName, u64_t &lineNum);
...
@@ -47,12 +46,10 @@ int getFileLines(const std::string &fileName, u64_t &lineNum);
* @param[in] resursion if this has been set, it will search subdirs
* @param[in] resursion if this has been set, it will search subdirs
* @return 0 if success, error code otherwise
* @return 0 if success, error code otherwise
*/
*/
int
getFileList
(
std
::
vector
<
std
::
string
>
&
fileList
,
const
std
::
string
&
path
,
int
getFileList
(
const
std
::
string
&
pattern
,
bool
recursive
);
std
::
vector
<
std
::
string
>
&
fileList
,
const
std
::
string
&
path
,
const
std
::
string
&
pattern
,
bool
recursive
);
int
getFileNum
(
u64_t
&
fileNum
,
const
std
::
string
&
path
,
int
getFileNum
(
u64_t
&
fileNum
,
const
std
::
string
&
path
,
const
std
::
string
&
pattern
,
bool
recursive
);
const
std
::
string
&
pattern
,
bool
recursive
);
int
getDirList
(
std
::
vector
<
std
::
string
>
&
dirList
,
const
std
::
string
&
path
,
const
std
::
string
&
pattern
);
int
getDirList
(
std
::
vector
<
std
::
string
>
&
dirList
,
const
std
::
string
&
path
,
const
std
::
string
&
pattern
);
int
touch
(
const
std
::
string
&
fileName
);
int
touch
(
const
std
::
string
&
fileName
);
...
@@ -61,5 +58,5 @@ int touch(const std::string &fileName);
...
@@ -61,5 +58,5 @@ int touch(const std::string &fileName);
*/
*/
int
getFileSize
(
const
char
*
filePath
,
u64_t
&
fileLen
);
int
getFileSize
(
const
char
*
filePath
,
u64_t
&
fileLen
);
}
//
namespace common
}
//
namespace common
#endif
/* __COMMON_IO_IO_H__ */
#endif
/* __COMMON_IO_IO_H__ */
deps/common/io/roll_select_dir.cpp
浏览文件 @
e976988d
...
@@ -17,7 +17,8 @@ See the Mulan PSL v2 for more details. */
...
@@ -17,7 +17,8 @@ See the Mulan PSL v2 for more details. */
#include "common/log/log.h"
#include "common/log/log.h"
namespace
common
{
namespace
common
{
void
RollSelectDir
::
setBaseDir
(
std
::
string
baseDir
)
{
void
RollSelectDir
::
setBaseDir
(
std
::
string
baseDir
)
{
mBaseDir
=
baseDir
;
mBaseDir
=
baseDir
;
std
::
vector
<
std
::
string
>
dirList
;
std
::
vector
<
std
::
string
>
dirList
;
...
@@ -44,7 +45,8 @@ void RollSelectDir::setBaseDir(std::string baseDir) {
...
@@ -44,7 +45,8 @@ void RollSelectDir::setBaseDir(std::string baseDir) {
return
;
return
;
}
}
std
::
string
RollSelectDir
::
select
()
{
std
::
string
RollSelectDir
::
select
()
{
std
::
string
ret
;
std
::
string
ret
;
MUTEX_LOCK
(
&
mMutex
);
MUTEX_LOCK
(
&
mMutex
);
...
@@ -55,4 +57,4 @@ std::string RollSelectDir::select() {
...
@@ -55,4 +57,4 @@ std::string RollSelectDir::select() {
return
ret
;
return
ret
;
}
}
}
//namespace common
}
// namespace common
\ No newline at end of file
\ No newline at end of file
deps/common/io/roll_select_dir.h
浏览文件 @
e976988d
...
@@ -26,8 +26,14 @@ namespace common {
...
@@ -26,8 +26,14 @@ namespace common {
class
RollSelectDir
:
public
SelectDir
{
class
RollSelectDir
:
public
SelectDir
{
public:
public:
RollSelectDir
()
{
MUTEX_INIT
(
&
mMutex
,
NULL
);
}
RollSelectDir
()
~
RollSelectDir
()
{
MUTEX_DESTROY
(
&
mMutex
);
}
{
MUTEX_INIT
(
&
mMutex
,
NULL
);
}
~
RollSelectDir
()
{
MUTEX_DESTROY
(
&
mMutex
);
}
public:
public:
/**
/**
...
@@ -43,5 +49,5 @@ public:
...
@@ -43,5 +49,5 @@ public:
u32_t
mPos
;
u32_t
mPos
;
};
};
}
//
namespace common
}
//
namespace common
#endif
/* __COMMON_IO_ROLL_SELECT_DIR__ */
#endif
/* __COMMON_IO_ROLL_SELECT_DIR__ */
deps/common/io/select_dir.h
浏览文件 @
e976988d
...
@@ -20,9 +20,12 @@ namespace common {
...
@@ -20,9 +20,12 @@ namespace common {
class
SelectDir
{
class
SelectDir
{
public:
public:
virtual
std
::
string
select
()
{
return
std
::
string
(
""
);
};
virtual
std
::
string
select
()
{
return
std
::
string
(
""
);
};
virtual
void
setBaseDir
(
std
::
string
baseDir
){};
virtual
void
setBaseDir
(
std
::
string
baseDir
){};
};
};
}
//
namespace common
}
//
namespace common
#endif
/* __COMMON_IO_SELECT_DIR_H__ */
#endif
/* __COMMON_IO_SELECT_DIR_H__ */
deps/common/lang/bitmap.cpp
浏览文件 @
e976988d
...
@@ -14,10 +14,10 @@ See the Mulan PSL v2 for more details. */
...
@@ -14,10 +14,10 @@ See the Mulan PSL v2 for more details. */
#include "common/lang/bitmap.h"
#include "common/lang/bitmap.h"
namespace
common
namespace
common
{
{
int
find_first_zero
(
char
byte
,
int
start
)
{
int
find_first_zero
(
char
byte
,
int
start
)
{
for
(
int
i
=
start
;
i
<
8
;
i
++
)
{
for
(
int
i
=
start
;
i
<
8
;
i
++
)
{
if
((
byte
&
(
1
<<
i
))
==
0
)
{
if
((
byte
&
(
1
<<
i
))
==
0
)
{
return
i
;
return
i
;
...
@@ -26,7 +26,8 @@ int find_first_zero(char byte, int start) {
...
@@ -26,7 +26,8 @@ int find_first_zero(char byte, int start) {
return
-
1
;
return
-
1
;
}
}
int
find_first_setted
(
char
byte
,
int
start
)
{
int
find_first_setted
(
char
byte
,
int
start
)
{
for
(
int
i
=
start
;
i
<
8
;
i
++
)
{
for
(
int
i
=
start
;
i
<
8
;
i
++
)
{
if
((
byte
&
(
1
<<
i
))
!=
0
)
{
if
((
byte
&
(
1
<<
i
))
!=
0
)
{
return
i
;
return
i
;
...
@@ -35,25 +36,29 @@ int find_first_setted(char byte, int start) {
...
@@ -35,25 +36,29 @@ int find_first_setted(char byte, int start) {
return
-
1
;
return
-
1
;
}
}
Bitmap
::
Bitmap
(
char
*
bitmap
,
int
size
)
:
bitmap_
(
bitmap
),
size_
(
size
)
{
Bitmap
::
Bitmap
(
char
*
bitmap
,
int
size
)
:
bitmap_
(
bitmap
),
size_
(
size
)
}
{
}
bool
Bitmap
::
get_bit
(
int
index
)
{
bool
Bitmap
::
get_bit
(
int
index
)
{
char
bits
=
bitmap_
[
index
/
8
];
char
bits
=
bitmap_
[
index
/
8
];
return
(
bits
&
(
1
<<
(
index
%
8
)))
!=
0
;
return
(
bits
&
(
1
<<
(
index
%
8
)))
!=
0
;
}
}
void
Bitmap
::
set_bit
(
int
index
)
{
void
Bitmap
::
set_bit
(
int
index
)
{
char
&
bits
=
bitmap_
[
index
/
8
];
char
&
bits
=
bitmap_
[
index
/
8
];
bits
|=
(
1
<<
(
index
%
8
));
bits
|=
(
1
<<
(
index
%
8
));
}
}
void
Bitmap
::
clear_bit
(
int
index
)
{
void
Bitmap
::
clear_bit
(
int
index
)
{
char
&
bits
=
bitmap_
[
index
/
8
];
char
&
bits
=
bitmap_
[
index
/
8
];
bits
&=
~
(
1
<<
(
index
%
8
));
bits
&=
~
(
1
<<
(
index
%
8
));
}
}
int
Bitmap
::
next_unsetted_bit
(
int
start
)
{
int
Bitmap
::
next_unsetted_bit
(
int
start
)
{
int
ret
=
-
1
;
int
ret
=
-
1
;
int
start_in_byte
=
start
%
8
;
int
start_in_byte
=
start
%
8
;
for
(
int
iter
=
start
/
8
,
end
=
(
size_
%
8
==
0
?
size_
/
8
:
size_
/
8
+
1
);
iter
<=
end
;
iter
++
)
{
for
(
int
iter
=
start
/
8
,
end
=
(
size_
%
8
==
0
?
size_
/
8
:
size_
/
8
+
1
);
iter
<=
end
;
iter
++
)
{
...
@@ -75,7 +80,8 @@ int Bitmap::next_unsetted_bit(int start) {
...
@@ -75,7 +80,8 @@ int Bitmap::next_unsetted_bit(int start) {
return
ret
;
return
ret
;
}
}
int
Bitmap
::
next_setted_bit
(
int
start
)
{
int
Bitmap
::
next_setted_bit
(
int
start
)
{
int
ret
=
-
1
;
int
ret
=
-
1
;
int
start_in_byte
=
start
%
8
;
int
start_in_byte
=
start
%
8
;
for
(
int
iter
=
start
/
8
,
end
=
(
size_
%
8
==
0
?
size_
/
8
:
size_
/
8
+
1
);
iter
<=
end
;
iter
++
)
{
for
(
int
iter
=
start
/
8
,
end
=
(
size_
%
8
==
0
?
size_
/
8
:
size_
/
8
+
1
);
iter
<=
end
;
iter
++
)
{
...
@@ -97,4 +103,4 @@ int Bitmap::next_setted_bit(int start) {
...
@@ -97,4 +103,4 @@ int Bitmap::next_setted_bit(int start) {
return
ret
;
return
ret
;
}
}
}
// namespace common
}
// namespace common
\ No newline at end of file
\ No newline at end of file
deps/common/lang/bitmap.h
浏览文件 @
e976988d
...
@@ -15,8 +15,7 @@ See the Mulan PSL v2 for more details. */
...
@@ -15,8 +15,7 @@ See the Mulan PSL v2 for more details. */
#ifndef __COMMON_LANG_BITMAP_H__
#ifndef __COMMON_LANG_BITMAP_H__
#define __COMMON_LANG_BITMAP_H__
#define __COMMON_LANG_BITMAP_H__
namespace
common
namespace
common
{
{
class
Bitmap
{
class
Bitmap
{
public:
public:
...
@@ -26,14 +25,14 @@ public:
...
@@ -26,14 +25,14 @@ public:
void
set_bit
(
int
index
);
void
set_bit
(
int
index
);
void
clear_bit
(
int
index
);
void
clear_bit
(
int
index
);
int
next_unsetted_bit
(
int
start
);
int
next_unsetted_bit
(
int
start
);
int
next_setted_bit
(
int
start
);
int
next_setted_bit
(
int
start
);
private:
private:
char
*
bitmap_
;
char
*
bitmap_
;
int
size_
;
int
size_
;
};
};
}
// namespace common
}
// namespace common
#endif // __COMMON_LANG_BITMAP_H__
#endif // __COMMON_LANG_BITMAP_H__
\ No newline at end of file
\ No newline at end of file
deps/common/lang/mutex.cpp
浏览文件 @
e976988d
...
@@ -27,37 +27,48 @@ int LockTrace::mMaxBlockTids = 8;
...
@@ -27,37 +27,48 @@ int LockTrace::mMaxBlockTids = 8;
#define CHECK_UNLOCK 0
#define CHECK_UNLOCK 0
void
LockTrace
::
foundDeadLock
(
LockID
&
current
,
LockTrace
::
LockID
&
other
,
void
LockTrace
::
foundDeadLock
(
LockID
&
current
,
LockTrace
::
LockID
&
other
,
pthread_mutex_t
*
otherWaitMutex
)
pthread_mutex_t
*
otherWaitMutex
)
{
{
std
::
map
<
pthread_mutex_t
*
,
LockTrace
::
LockID
>::
iterator
itLocks
=
std
::
map
<
pthread_mutex_t
*
,
LockTrace
::
LockID
>::
iterator
itLocks
=
mLocks
.
find
(
otherWaitMutex
);
mLocks
.
find
(
otherWaitMutex
);
if
(
itLocks
==
mLocks
.
end
())
{
if
(
itLocks
==
mLocks
.
end
())
{
LOG_ERROR
(
"Thread %ld own mutex %p and try to get mutex %s:%d, "
LOG_ERROR
(
"Thread %ld own mutex %p and try to get mutex %s:%d, "
"other thread %ld own mutex %s:%d and try to get %p"
,
"other thread %ld own mutex %s:%d and try to get %p"
,
current
.
mThreadId
,
otherWaitMutex
,
current
.
mFile
.
c_str
(),
current
.
mThreadId
,
current
.
mLine
,
other
.
mThreadId
,
current
.
mFile
.
c_str
(),
otherWaitMutex
,
current
.
mLine
,
otherWaitMutex
);
current
.
mFile
.
c_str
(),
current
.
mLine
,
other
.
mThreadId
,
current
.
mFile
.
c_str
(),
current
.
mLine
,
otherWaitMutex
);
}
else
{
}
else
{
LockTrace
::
LockID
&
otherRecusive
=
itLocks
->
second
;
LockTrace
::
LockID
&
otherRecusive
=
itLocks
->
second
;
LOG_ERROR
(
"Thread %ld own mutex %p:%s:%d and try to get mutex %s:%d, "
LOG_ERROR
(
"Thread %ld own mutex %p:%s:%d and try to get mutex %s:%d, "
"other thread %ld own mutex %s:%d and try to get %p:%s:%d"
,
"other thread %ld own mutex %s:%d and try to get %p:%s:%d"
,
current
.
mThreadId
,
otherWaitMutex
,
otherRecusive
.
mFile
.
c_str
(),
current
.
mThreadId
,
otherRecusive
.
mLine
,
current
.
mFile
.
c_str
(),
current
.
mLine
,
otherWaitMutex
,
other
.
mThreadId
,
current
.
mFile
.
c_str
(),
current
.
mLine
,
otherRecusive
.
mFile
.
c_str
(),
otherWaitMutex
,
otherRecusive
.
mFile
.
c_str
(),
otherRecusive
.
mLine
);
otherRecusive
.
mLine
,
current
.
mFile
.
c_str
(),
current
.
mLine
,
other
.
mThreadId
,
current
.
mFile
.
c_str
(),
current
.
mLine
,
otherWaitMutex
,
otherRecusive
.
mFile
.
c_str
(),
otherRecusive
.
mLine
);
}
}
}
}
bool
LockTrace
::
deadlockCheck
(
LockID
&
current
,
bool
LockTrace
::
deadlockCheck
(
std
::
set
<
pthread_mutex_t
*>
&
ownMutexs
,
LockID
&
current
,
std
::
set
<
pthread_mutex_t
*>
&
ownMutexs
,
LockTrace
::
LockID
&
other
,
int
recusiveNum
)
LockTrace
::
LockID
&
other
,
int
recusiveNum
)
{
{
if
(
recusiveNum
>=
mMaxBlockTids
)
{
if
(
recusiveNum
>=
mMaxBlockTids
)
{
return
false
;
return
false
;
}
}
std
::
map
<
long
long
,
pthread_mutex_t
*>::
iterator
otherIt
=
std
::
map
<
long
long
,
pthread_mutex_t
*>::
iterator
otherIt
=
mWaitLocks
.
find
(
other
.
mThreadId
);
mWaitLocks
.
find
(
other
.
mThreadId
);
if
(
otherIt
==
mWaitLocks
.
end
())
{
if
(
otherIt
==
mWaitLocks
.
end
())
{
return
false
;
return
false
;
}
}
...
@@ -69,8 +80,7 @@ bool LockTrace::deadlockCheck(LockID ¤t,
...
@@ -69,8 +80,7 @@ bool LockTrace::deadlockCheck(LockID ¤t,
return
true
;
return
true
;
}
}
std
::
map
<
pthread_mutex_t
*
,
LockTrace
::
LockID
>::
iterator
itLocks
=
std
::
map
<
pthread_mutex_t
*
,
LockTrace
::
LockID
>::
iterator
itLocks
=
mLocks
.
find
(
otherWaitMutex
);
mLocks
.
find
(
otherWaitMutex
);
if
(
itLocks
==
mLocks
.
end
())
{
if
(
itLocks
==
mLocks
.
end
())
{
return
false
;
return
false
;
}
}
...
@@ -79,12 +89,11 @@ bool LockTrace::deadlockCheck(LockID ¤t,
...
@@ -79,12 +89,11 @@ bool LockTrace::deadlockCheck(LockID ¤t,
return
deadlockCheck
(
current
,
ownMutexs
,
otherRecusive
,
recusiveNum
+
1
);
return
deadlockCheck
(
current
,
ownMutexs
,
otherRecusive
,
recusiveNum
+
1
);
}
}
bool
LockTrace
::
deadlockCheck
(
pthread_mutex_t
*
mutex
,
const
long
long
threadId
,
bool
LockTrace
::
deadlockCheck
(
pthread_mutex_t
*
mutex
,
const
long
long
threadId
,
const
char
*
file
,
const
int
line
)
const
char
*
file
,
const
int
line
)
{
{
mWaitLocks
[
threadId
]
=
mutex
;
mWaitLocks
[
threadId
]
=
mutex
;
std
::
map
<
pthread_mutex_t
*
,
LockTrace
::
LockID
>::
iterator
itLocks
=
std
::
map
<
pthread_mutex_t
*
,
LockTrace
::
LockID
>::
iterator
itLocks
=
mLocks
.
find
(
mutex
);
mLocks
.
find
(
mutex
);
if
(
itLocks
==
mLocks
.
end
())
{
if
(
itLocks
==
mLocks
.
end
())
{
return
false
;
return
false
;
}
}
...
@@ -101,8 +110,7 @@ bool LockTrace::deadlockCheck(pthread_mutex_t *mutex, const long long threadId,
...
@@ -101,8 +110,7 @@ bool LockTrace::deadlockCheck(pthread_mutex_t *mutex, const long long threadId,
}
}
}
}
std
::
map
<
long
long
,
std
::
set
<
pthread_mutex_t
*>>::
iterator
it
=
std
::
map
<
long
long
,
std
::
set
<
pthread_mutex_t
*>>::
iterator
it
=
mOwnLocks
.
find
(
threadId
);
mOwnLocks
.
find
(
threadId
);
if
(
it
==
mOwnLocks
.
end
())
{
if
(
it
==
mOwnLocks
.
end
())
{
return
false
;
return
false
;
}
}
...
@@ -115,8 +123,8 @@ bool LockTrace::deadlockCheck(pthread_mutex_t *mutex, const long long threadId,
...
@@ -115,8 +123,8 @@ bool LockTrace::deadlockCheck(pthread_mutex_t *mutex, const long long threadId,
return
deadlockCheck
(
current
,
ownMutexs
,
other
,
1
);
return
deadlockCheck
(
current
,
ownMutexs
,
other
,
1
);
}
}
bool
LockTrace
::
checkLockTimes
(
pthread_mutex_t
*
mutex
,
const
char
*
file
,
bool
LockTrace
::
checkLockTimes
(
pthread_mutex_t
*
mutex
,
const
char
*
file
,
const
int
line
)
const
int
line
)
{
{
std
::
map
<
pthread_mutex_t
*
,
int
>::
iterator
it
=
mWaitTimes
.
find
(
mutex
);
std
::
map
<
pthread_mutex_t
*
,
int
>::
iterator
it
=
mWaitTimes
.
find
(
mutex
);
if
(
it
==
mWaitTimes
.
end
())
{
if
(
it
==
mWaitTimes
.
end
())
{
mWaitTimes
.
insert
(
std
::
pair
<
pthread_mutex_t
*
,
int
>
(
mutex
,
1
));
mWaitTimes
.
insert
(
std
::
pair
<
pthread_mutex_t
*
,
int
>
(
mutex
,
1
));
...
@@ -132,8 +140,13 @@ bool LockTrace::checkLockTimes(pthread_mutex_t *mutex, const char *file,
...
@@ -132,8 +140,13 @@ bool LockTrace::checkLockTimes(pthread_mutex_t *mutex, const char *file,
LockTrace
::
LockID
&
lockId
=
mLocks
[
mutex
];
LockTrace
::
LockID
&
lockId
=
mLocks
[
mutex
];
LOG_WARN
(
"mutex %p has been already lock %d times, this time %s:%d, first "
LOG_WARN
(
"mutex %p has been already lock %d times, this time %s:%d, first "
"time:%ld:%s:%d"
,
"time:%ld:%s:%d"
,
mutex
,
lockTimes
,
file
,
line
,
lockId
.
mThreadId
,
mutex
,
lockId
.
mFile
.
c_str
(),
lockId
.
mLine
);
lockTimes
,
file
,
line
,
lockId
.
mThreadId
,
lockId
.
mFile
.
c_str
(),
lockId
.
mLine
);
return
true
;
return
true
;
}
else
{
}
else
{
...
@@ -141,8 +154,8 @@ bool LockTrace::checkLockTimes(pthread_mutex_t *mutex, const char *file,
...
@@ -141,8 +154,8 @@ bool LockTrace::checkLockTimes(pthread_mutex_t *mutex, const char *file,
}
}
}
}
void
LockTrace
::
check
(
pthread_mutex_t
*
mutex
,
const
long
long
threadId
,
void
LockTrace
::
check
(
pthread_mutex_t
*
mutex
,
const
long
long
threadId
,
const
char
*
file
,
const
int
line
)
const
char
*
file
,
const
int
line
)
{
{
MUTEX_LOG
(
"Lock mutex %p, %s:%d"
,
mutex
,
file
,
line
);
MUTEX_LOG
(
"Lock mutex %p, %s:%d"
,
mutex
,
file
,
line
);
pthread_rwlock_rdlock
(
&
mMapMutex
);
pthread_rwlock_rdlock
(
&
mMapMutex
);
...
@@ -153,8 +166,8 @@ void LockTrace::check(pthread_mutex_t *mutex, const long long threadId,
...
@@ -153,8 +166,8 @@ void LockTrace::check(pthread_mutex_t *mutex, const long long threadId,
pthread_rwlock_unlock
(
&
mMapMutex
);
pthread_rwlock_unlock
(
&
mMapMutex
);
}
}
void
LockTrace
::
insertLock
(
pthread_mutex_t
*
mutex
,
const
long
long
threadId
,
void
LockTrace
::
insertLock
(
pthread_mutex_t
*
mutex
,
const
long
long
threadId
,
const
char
*
file
,
const
int
line
)
const
char
*
file
,
const
int
line
)
{
{
LockID
lockID
(
threadId
,
file
,
line
);
LockID
lockID
(
threadId
,
file
,
line
);
mLocks
.
insert
(
std
::
pair
<
pthread_mutex_t
*
,
LockID
>
(
mutex
,
lockID
));
mLocks
.
insert
(
std
::
pair
<
pthread_mutex_t
*
,
LockID
>
(
mutex
,
lockID
));
...
@@ -174,16 +187,16 @@ void LockTrace::insertLock(pthread_mutex_t *mutex, const long long threadId,
...
@@ -174,16 +187,16 @@ void LockTrace::insertLock(pthread_mutex_t *mutex, const long long threadId,
}
}
}
}
void
LockTrace
::
lock
(
pthread_mutex_t
*
mutex
,
const
long
long
threadId
,
void
LockTrace
::
lock
(
pthread_mutex_t
*
mutex
,
const
long
long
threadId
,
const
char
*
file
,
const
int
line
)
const
char
*
file
,
const
int
line
)
{
{
pthread_rwlock_wrlock
(
&
mMapMutex
);
pthread_rwlock_wrlock
(
&
mMapMutex
);
insertLock
(
mutex
,
threadId
,
file
,
line
);
insertLock
(
mutex
,
threadId
,
file
,
line
);
pthread_rwlock_unlock
(
&
mMapMutex
);
pthread_rwlock_unlock
(
&
mMapMutex
);
}
}
void
LockTrace
::
tryLock
(
pthread_mutex_t
*
mutex
,
const
long
long
threadId
,
void
LockTrace
::
tryLock
(
pthread_mutex_t
*
mutex
,
const
long
long
threadId
,
const
char
*
file
,
const
int
line
)
const
char
*
file
,
const
int
line
)
{
{
pthread_rwlock_wrlock
(
&
mMapMutex
);
pthread_rwlock_wrlock
(
&
mMapMutex
);
if
(
mLocks
.
find
(
mutex
)
!=
mLocks
.
end
())
{
if
(
mLocks
.
find
(
mutex
)
!=
mLocks
.
end
())
{
pthread_rwlock_unlock
(
&
mMapMutex
);
pthread_rwlock_unlock
(
&
mMapMutex
);
...
@@ -194,8 +207,8 @@ void LockTrace::tryLock(pthread_mutex_t *mutex, const long long threadId,
...
@@ -194,8 +207,8 @@ void LockTrace::tryLock(pthread_mutex_t *mutex, const long long threadId,
pthread_rwlock_unlock
(
&
mMapMutex
);
pthread_rwlock_unlock
(
&
mMapMutex
);
}
}
void
LockTrace
::
unlock
(
pthread_mutex_t
*
mutex
,
long
long
threadId
,
void
LockTrace
::
unlock
(
pthread_mutex_t
*
mutex
,
long
long
threadId
,
const
char
*
file
,
int
line
)
const
char
*
file
,
int
line
)
{
{
pthread_rwlock_wrlock
(
&
mMapMutex
);
pthread_rwlock_wrlock
(
&
mMapMutex
);
mLocks
.
erase
(
mutex
);
mLocks
.
erase
(
mutex
);
...
@@ -206,13 +219,13 @@ void LockTrace::unlock(pthread_mutex_t *mutex, long long threadId,
...
@@ -206,13 +219,13 @@ void LockTrace::unlock(pthread_mutex_t *mutex, long long threadId,
pthread_rwlock_unlock
(
&
mMapMutex
);
pthread_rwlock_unlock
(
&
mMapMutex
);
}
}
void
LockTrace
::
toString
(
std
::
string
&
result
)
{
void
LockTrace
::
toString
(
std
::
string
&
result
)
{
const
int
TEMP_PAIR_LEN
=
24
;
const
int
TEMP_PAIR_LEN
=
24
;
// pthread_mutex_lock(&mMapMutex);
// pthread_mutex_lock(&mMapMutex);
result
=
" mLocks:
\n
"
;
result
=
" mLocks:
\n
"
;
for
(
std
::
map
<
pthread_mutex_t
*
,
LockID
>::
iterator
it
=
mLocks
.
begin
();
for
(
std
::
map
<
pthread_mutex_t
*
,
LockID
>::
iterator
it
=
mLocks
.
begin
();
it
!=
mLocks
.
end
();
it
++
)
{
it
!=
mLocks
.
end
();
it
++
)
{
result
+=
it
->
second
.
toString
();
result
+=
it
->
second
.
toString
();
char
pointerBuf
[
TEMP_PAIR_LEN
]
=
{
0
};
char
pointerBuf
[
TEMP_PAIR_LEN
]
=
{
0
};
...
@@ -222,22 +235,21 @@ void LockTrace::toString(std::string &result) {
...
@@ -222,22 +235,21 @@ void LockTrace::toString(std::string &result) {
}
}
result
+=
"mWaitTimes:
\n
"
;
result
+=
"mWaitTimes:
\n
"
;
for
(
std
::
map
<
pthread_mutex_t
*
,
int
>::
iterator
it
=
mWaitTimes
.
begin
();
for
(
std
::
map
<
pthread_mutex_t
*
,
int
>::
iterator
it
=
mWaitTimes
.
begin
();
it
!=
mWaitTimes
.
end
();
it
++
)
{
it
!=
mWaitTimes
.
end
();
it
++
)
{
char
pointerBuf
[
TEMP_PAIR_LEN
]
=
{
0
};
char
pointerBuf
[
TEMP_PAIR_LEN
]
=
{
0
};
snprintf
(
pointerBuf
,
TEMP_PAIR_LEN
,
",mutex:%p, times:%d
\n
"
,
it
->
first
,
snprintf
(
pointerBuf
,
TEMP_PAIR_LEN
,
",mutex:%p, times:%d
\n
"
,
it
->
first
,
it
->
second
);
it
->
second
);
result
+=
pointerBuf
;
result
+=
pointerBuf
;
}
}
result
+=
"mWaitLocks:
\n
"
;
result
+=
"mWaitLocks:
\n
"
;
for
(
std
::
map
<
long
long
,
pthread_mutex_t
*>::
iterator
it
=
mWaitLocks
.
begin
();
for
(
std
::
map
<
long
long
,
pthread_mutex_t
*>::
iterator
it
=
mWaitLocks
.
begin
();
it
!=
mWaitLocks
.
end
();
it
++
)
{
it
!=
mWaitLocks
.
end
();
it
++
)
{
char
pointerBuf
[
TEMP_PAIR_LEN
]
=
{
0
};
char
pointerBuf
[
TEMP_PAIR_LEN
]
=
{
0
};
snprintf
(
pointerBuf
,
TEMP_PAIR_LEN
,
snprintf
(
pointerBuf
,
"threadID: %llx"
TEMP_PAIR_LEN
,
", mutex:%p
\n
"
,
"threadID: %llx"
it
->
first
,
it
->
second
);
", mutex:%p
\n
"
,
it
->
first
,
it
->
second
);
result
+=
pointerBuf
;
result
+=
pointerBuf
;
}
}
// pthread_mutex_unlock(&mMapMutex);
// pthread_mutex_unlock(&mMapMutex);
...
@@ -246,4 +258,4 @@ void LockTrace::toString(std::string &result) {
...
@@ -246,4 +258,4 @@ void LockTrace::toString(std::string &result) {
return
;
return
;
}
}
}
//namespace common
}
// namespace common
\ No newline at end of file
\ No newline at end of file
deps/common/lang/mutex.h
浏览文件 @
e976988d
...
@@ -31,61 +31,55 @@ namespace common {
...
@@ -31,61 +31,55 @@ namespace common {
#define MUTEX_LOG LOG_DEBUG
#define MUTEX_LOG LOG_DEBUG
class
LockTrace
{
class
LockTrace
{
public:
public:
static
void
check
(
pthread_mutex_t
*
mutex
,
const
long
long
threadId
,
static
void
check
(
pthread_mutex_t
*
mutex
,
const
long
long
threadId
,
const
char
*
file
,
const
int
line
);
const
char
*
file
,
const
int
line
);
static
void
lock
(
pthread_mutex_t
*
mutex
,
const
long
long
threadId
,
const
char
*
file
,
const
int
line
);
static
void
lock
(
pthread_mutex_t
*
mutex
,
const
long
long
threadId
,
static
void
tryLock
(
pthread_mutex_t
*
mutex
,
const
long
long
threadId
,
const
char
*
file
,
const
int
line
);
const
char
*
file
,
const
int
line
);
static
void
unlock
(
pthread_mutex_t
*
mutex
,
const
long
long
threadId
,
const
char
*
file
,
const
int
line
);
static
void
tryLock
(
pthread_mutex_t
*
mutex
,
const
long
long
threadId
,
const
char
*
file
,
const
int
line
);
static
void
unlock
(
pthread_mutex_t
*
mutex
,
const
long
long
threadId
,
const
char
*
file
,
const
int
line
);
static
void
toString
(
std
::
string
&
result
);
static
void
toString
(
std
::
string
&
result
);
class
LockID
{
class
LockID
{
public:
public:
LockID
(
const
long
long
threadId
,
const
char
*
file
,
const
int
line
)
LockID
(
const
long
long
threadId
,
const
char
*
file
,
const
int
line
)
:
mFile
(
file
),
mThreadId
(
threadId
),
mLine
(
line
)
:
mFile
(
file
),
mThreadId
(
threadId
),
mLine
(
line
)
{}
{}
LockID
()
:
mFile
(),
mThreadId
(
0
),
mLine
(
0
)
{}
LockID
()
:
mFile
(),
mThreadId
(
0
),
mLine
(
0
)
{}
std
::
string
toString
()
{
std
::
string
toString
()
{
std
::
ostringstream
oss
;
std
::
ostringstream
oss
;
oss
<<
"threaId:"
<<
mThreadId
<<
",file name:"
<<
mFile
oss
<<
"threaId:"
<<
mThreadId
<<
",file name:"
<<
mFile
<<
",line:"
<<
mLine
;
<<
",line:"
<<
mLine
;
return
oss
.
str
();
return
oss
.
str
();
}
}
public:
public:
std
::
string
mFile
;
std
::
string
mFile
;
const
long
long
mThreadId
;
const
long
long
mThreadId
;
int
mLine
;
int
mLine
;
};
};
static
void
foundDeadLock
(
LockID
&
current
,
LockID
&
other
,
static
void
foundDeadLock
(
LockID
&
current
,
LockID
&
other
,
pthread_mutex_t
*
otherWaitMutex
);
pthread_mutex_t
*
otherWaitMutex
);
static
bool
deadlockCheck
(
LockID
&
current
,
static
bool
deadlockCheck
(
LockID
&
current
,
std
::
set
<
pthread_mutex_t
*>
&
ownMutexs
,
LockID
&
other
,
int
recusiveNum
);
std
::
set
<
pthread_mutex_t
*>
&
ownMutexs
,
LockID
&
other
,
int
recusiveNum
);
static
bool
deadlockCheck
(
pthread_mutex_t
*
mutex
,
const
long
long
threadId
,
static
bool
deadlockCheck
(
pthread_mutex_t
*
mutex
,
const
long
long
threadId
,
const
char
*
file
,
const
int
line
);
const
char
*
file
,
const
int
line
);
static
bool
checkLockTimes
(
pthread_mutex_t
*
mutex
,
const
char
*
file
,
static
bool
checkLockTimes
(
pthread_mutex_t
*
mutex
,
const
char
*
file
,
const
int
line
);
const
int
line
);
static
void
insertLock
(
pthread_mutex_t
*
mutex
,
const
long
long
threadId
,
static
void
insertLock
(
pthread_mutex_t
*
mutex
,
const
long
long
threadId
,
const
char
*
file
,
const
int
line
);
const
char
*
file
,
const
int
line
);
static
void
setMaxBlockThreads
(
int
blockNum
)
{
mMaxBlockTids
=
blockNum
;
}
static
void
setMaxBlockThreads
(
int
blockNum
)
{
mMaxBlockTids
=
blockNum
;
}
public:
public:
static
std
::
set
<
pthread_mutex_t
*>
mEnableRecurisives
;
static
std
::
set
<
pthread_mutex_t
*>
mEnableRecurisives
;
protected:
protected:
static
std
::
map
<
pthread_mutex_t
*
,
LockID
>
mLocks
;
static
std
::
map
<
pthread_mutex_t
*
,
LockID
>
mLocks
;
static
std
::
map
<
pthread_mutex_t
*
,
int
>
mWaitTimes
;
static
std
::
map
<
pthread_mutex_t
*
,
int
>
mWaitTimes
;
static
std
::
map
<
long
long
,
pthread_mutex_t
*>
mWaitLocks
;
static
std
::
map
<
long
long
,
pthread_mutex_t
*>
mWaitLocks
;
...
@@ -108,57 +102,55 @@ class LockTrace {
...
@@ -108,57 +102,55 @@ class LockTrace {
#define COND_INIT(cond, attr) pthread_cond_init(cond, attr)
#define COND_INIT(cond, attr) pthread_cond_init(cond, attr)
#define COND_DESTROY(cond) pthread_cond_destroy(cond)
#define COND_DESTROY(cond) pthread_cond_destroy(cond)
#define COND_WAIT(cond, mutex) pthread_cond_wait(cond, mutex)
#define COND_WAIT(cond, mutex) pthread_cond_wait(cond, mutex)
#define COND_WAIT_TIMEOUT(cond, mutex, time, ret) \
#define COND_WAIT_TIMEOUT(cond, mutex, time, ret) ret = pthread_cond_timedwait(cond, mutex, time)
ret = pthread_cond_timedwait(cond, mutex, time)
#define COND_SIGNAL(cond) pthread_cond_signal(cond)
#define COND_SIGNAL(cond) pthread_cond_signal(cond)
#define COND_BRAODCAST(cond) pthread_cond_broadcast(cond)
#define COND_BRAODCAST(cond) pthread_cond_broadcast(cond)
#else // DEBUG_LOCK
#else // DEBUG_LOCK
#define MUTEX_STATIC_INIT()
\
#define MUTEX_STATIC_INIT() \
PTHREAD_MUTEX_INITIALIZER;
\
PTHREAD_MUTEX_INITIALIZER; \
LOG_INFO("PTHREAD_MUTEX_INITIALIZER");
LOG_INFO("PTHREAD_MUTEX_INITIALIZER");
#if defined(__MACH__)
#if defined(__MACH__)
#define MUTEX_INIT(lock, attr)
\
#define MUTEX_INIT(lock, attr) \
({
\
({ \
LOG_INFO("pthread_mutex_init %p", lock);
\
LOG_INFO("pthread_mutex_init %p", lock); \
if (attr != NULL) {
\
if (attr != NULL) { \
int type;
\
int type; \
pthread_mutexattr_gettype(attr, &type);
\
pthread_mutexattr_gettype(attr, &type); \
if (type == PTHREAD_MUTEX_RECURSIVE) {
\
if (type == PTHREAD_MUTEX_RECURSIVE) { \
LockTrace::mEnableRecurisives.insert(lock);
\
LockTrace::mEnableRecurisives.insert(lock); \
}
\
} \
}
\
} \
int result = pthread_mutex_init(lock, attr);
\
int result = pthread_mutex_init(lock, attr); \
result;
\
result; \
})
})
#else
#else
#define MUTEX_INIT(lock, attr)
\
#define MUTEX_INIT(lock, attr) \
({
\
({ \
LOG_INFO("pthread_mutex_init %p", lock);
\
LOG_INFO("pthread_mutex_init %p", lock); \
if (attr != NULL) {
\
if (attr != NULL) { \
int type;
\
int type; \
pthread_mutexattr_gettype(attr, &type);
\
pthread_mutexattr_gettype(attr, &type); \
if (type == PTHREAD_MUTEX_RECURSIVE_NP) {
\
if (type == PTHREAD_MUTEX_RECURSIVE_NP) { \
LockTrace::mEnableRecurisives.insert(lock);
\
LockTrace::mEnableRecurisives.insert(lock); \
}
\
} \
}
\
} \
int result = pthread_mutex_init(lock, attr);
\
int result = pthread_mutex_init(lock, attr); \
result;
\
result; \
})
})
#endif
#endif
#define MUTEX_DESTROY(lock)
\
#define MUTEX_DESTROY(lock) \
({
\
({ \
LockTrace::mEnableRecurisives.erase(lock);
\
LockTrace::mEnableRecurisives.erase(lock); \
int result = pthread_mutex_destroy(lock);
\
int result = pthread_mutex_destroy(lock); \
LOG_INFO("pthread_mutex_destroy %p", lock);
\
LOG_INFO("pthread_mutex_destroy %p", lock); \
result;
\
result; \
})
})
#define MUTEX_LOCK(mutex) \
#define MUTEX_LOCK(mutex) \
...
@@ -172,81 +164,80 @@ class LockTrace {
...
@@ -172,81 +164,80 @@ class LockTrace {
result; \
result; \
})
})
#define MUTEX_TRYLOCK(mutex)
\
#define MUTEX_TRYLOCK(mutex) \
({
\
({ \
LockTrace::check(mutex, gettid(), __FILE__, __LINE__);
\
LockTrace::check(mutex, gettid(), __FILE__, __LINE__); \
int result = pthread_mutex_trylock(mutex);
\
int result = pthread_mutex_trylock(mutex); \
if (result == 0) {
\
if (result == 0) { \
LockTrace::lock(mutex, gettid(), __FILE__, __LINE__);
\
LockTrace::lock(mutex, gettid(), __FILE__, __LINE__); \
}
\
} \
result;
\
result; \
})
})
#define MUTEX_UNLOCK(lock) \
#define MUTEX_UNLOCK(lock) \
({ \
({ \
int result = pthread_mutex_unlock(lock); \
int result = pthread_mutex_unlock(lock); \
LockTrace::unlock(lock, gettid(), __FILE__, __LINE__); \
LockTrace::unlock(lock, gettid(), __FILE__, __LINE__); \
MUTEX_LOG("mutex:%p has been ulocked", lock); \
MUTEX_LOG("mutex:%p has been ulocked", lock); \
if (result) { \
if (result) { \
LOG_ERROR("Failed to unlock %p, rc %d:%s", lock, errno, \
LOG_ERROR("Failed to unlock %p, rc %d:%s", lock, errno, strerror(errno)); \
strerror(errno)); \
} \
} \
result; \
result; \
})
})
#define COND_INIT(cond, attr)
\
#define COND_INIT(cond, attr) \
({
\
({ \
LOG_INFO("pthread_cond_init");
\
LOG_INFO("pthread_cond_init"); \
int result = pthread_cond_init(cond, attr);
\
int result = pthread_cond_init(cond, attr); \
result;
\
result; \
})
})
#define COND_DESTROY(cond)
\
#define COND_DESTROY(cond) \
({
\
({ \
int result = pthread_cond_destroy(cond);
\
int result = pthread_cond_destroy(cond); \
LOG_INFO("pthread_cond_destroy");
\
LOG_INFO("pthread_cond_destroy"); \
result;
\
result; \
})
})
#define COND_WAIT(cond, mutex)
\
#define COND_WAIT(cond, mutex) \
({
\
({ \
MUTEX_LOG("pthread_cond_wait, cond:%p, mutex:%p", cond, mutex);
\
MUTEX_LOG("pthread_cond_wait, cond:%p, mutex:%p", cond, mutex); \
LockTrace::unlock(mutex, gettid(), __FILE__, __LINE__);
\
LockTrace::unlock(mutex, gettid(), __FILE__, __LINE__); \
int result = pthread_cond_wait(cond, mutex);
\
int result = pthread_cond_wait(cond, mutex); \
LockTrace::check(mutex, gettid(), __FILE__, __LINE__);
\
LockTrace::check(mutex, gettid(), __FILE__, __LINE__); \
LockTrace::lock(mutex, gettid(), __FILE__, __LINE__);
\
LockTrace::lock(mutex, gettid(), __FILE__, __LINE__); \
MUTEX_LOG("Lock %p under pthread_cond_wait", mutex);
\
MUTEX_LOG("Lock %p under pthread_cond_wait", mutex); \
result;
\
result; \
})
})
#define COND_WAIT_TIMEOUT(cond, mutex, time, ret)
\
#define COND_WAIT_TIMEOUT(cond, mutex, time, ret) \
({
\
({ \
MUTEX_LOG("pthread_cond_timedwait, cond:%p, mutex:%p", cond, mutex);
\
MUTEX_LOG("pthread_cond_timedwait, cond:%p, mutex:%p", cond, mutex); \
LockTrace::unlock(mutex, gettid(), __FILE__, __LINE__);
\
LockTrace::unlock(mutex, gettid(), __FILE__, __LINE__); \
int result = pthread_cond_timedwait(cond, mutex, time);
\
int result = pthread_cond_timedwait(cond, mutex, time); \
if (result == 0) {
\
if (result == 0) { \
LockTrace::check(mutex, gettid(), __FILE__, __LINE__);
\
LockTrace::check(mutex, gettid(), __FILE__, __LINE__); \
LockTrace::lock(mutex, gettid(), __FILE__, __LINE__);
\
LockTrace::lock(mutex, gettid(), __FILE__, __LINE__); \
MUTEX_LOG("Lock %p under pthread_cond_wait", mutex);
\
MUTEX_LOG("Lock %p under pthread_cond_wait", mutex); \
}
\
} \
result;
\
result; \
})
})
#define COND_SIGNAL(cond)
\
#define COND_SIGNAL(cond) \
({
\
({ \
int result = pthread_cond_signal(cond);
\
int result = pthread_cond_signal(cond); \
MUTEX_LOG("pthread_cond_signal, cond:%p", cond);
\
MUTEX_LOG("pthread_cond_signal, cond:%p", cond); \
result;
\
result; \
})
})
#define COND_BRAODCAST(cond)
\
#define COND_BRAODCAST(cond) \
({
\
({ \
int result = pthread_cond_broadcast(cond);
\
int result = pthread_cond_broadcast(cond); \
MUTEX_LOG("pthread_cond_broadcast, cond:%p", cond);
\
MUTEX_LOG("pthread_cond_broadcast, cond:%p", cond); \
result;
\
result; \
})
})
#endif // DEBUG_LOCK
#endif
// DEBUG_LOCK
}
//
namespace common
}
//
namespace common
#endif // __COMMON_LANG_MUTEX_H__
#endif
// __COMMON_LANG_MUTEX_H__
deps/common/lang/serializable.h
浏览文件 @
e976988d
...
@@ -21,11 +21,7 @@ namespace common {
...
@@ -21,11 +21,7 @@ namespace common {
/**
/**
* Through this type to determine object type
* Through this type to determine object type
*/
*/
enum
{
enum
{
MESSAGE_BASIC
=
100
,
MESSAGE_BASIC_REQUEST
=
1000
,
MESSAGE_BASIC_RESPONSE
=
-
1000
};
MESSAGE_BASIC
=
100
,
MESSAGE_BASIC_REQUEST
=
1000
,
MESSAGE_BASIC_RESPONSE
=
-
1000
};
class
Deserializable
{
class
Deserializable
{
public:
public:
...
@@ -68,5 +64,5 @@ public:
...
@@ -68,5 +64,5 @@ public:
virtual
void
to_string
(
std
::
string
&
output
)
const
=
0
;
virtual
void
to_string
(
std
::
string
&
output
)
const
=
0
;
};
};
}
//
namespace common
}
//
namespace common
#endif
/* __COMMON_LANG_SERIALIZABLE_H__ */
#endif
/* __COMMON_LANG_SERIALIZABLE_H__ */
deps/common/lang/string.cpp
浏览文件 @
e976988d
...
@@ -28,8 +28,9 @@ See the Mulan PSL v2 for more details. */
...
@@ -28,8 +28,9 @@ See the Mulan PSL v2 for more details. */
#include "common/log/log.h"
#include "common/log/log.h"
namespace
common
{
namespace
common
{
char
*
strip
(
char
*
str_
)
{
char
*
strip
(
char
*
str_
)
if
(
str_
==
NULL
||
*
str_
==
0
){
{
if
(
str_
==
NULL
||
*
str_
==
0
)
{
LOG_ERROR
(
"The augument is invalid!"
);
LOG_ERROR
(
"The augument is invalid!"
);
return
str_
;
return
str_
;
}
}
...
@@ -45,7 +46,8 @@ char *strip(char *str_) {
...
@@ -45,7 +46,8 @@ char *strip(char *str_) {
return
head
;
return
head
;
}
}
void
strip
(
std
::
string
&
str
)
{
void
strip
(
std
::
string
&
str
)
{
size_t
head
=
0
;
size_t
head
=
0
;
while
(
isspace
(
str
[
head
]))
{
while
(
isspace
(
str
[
head
]))
{
...
@@ -61,24 +63,27 @@ void strip(std::string &str) {
...
@@ -61,24 +63,27 @@ void strip(std::string &str) {
}
}
// Translation functions with templates are defined in the header file
// Translation functions with templates are defined in the header file
std
::
string
size_to_pad_str
(
int
size
,
int
pad
)
{
std
::
string
size_to_pad_str
(
int
size
,
int
pad
)
{
std
::
ostringstream
ss
;
std
::
ostringstream
ss
;
ss
<<
std
::
setw
(
pad
)
<<
std
::
setfill
(
'0'
)
<<
size
;
ss
<<
std
::
setw
(
pad
)
<<
std
::
setfill
(
'0'
)
<<
size
;
return
ss
.
str
();
return
ss
.
str
();
}
}
std
::
string
&
str_to_upper
(
std
::
string
&
s
)
{
std
::
string
&
str_to_upper
(
std
::
string
&
s
)
{
std
::
transform
(
s
.
begin
(),
s
.
end
(),
s
.
begin
(),
(
int
(
*
)(
int
))
&
std
::
toupper
);
std
::
transform
(
s
.
begin
(),
s
.
end
(),
s
.
begin
(),
(
int
(
*
)(
int
))
&
std
::
toupper
);
return
s
;
return
s
;
}
}
std
::
string
&
str_to_lower
(
std
::
string
&
s
)
{
std
::
string
&
str_to_lower
(
std
::
string
&
s
)
{
std
::
transform
(
s
.
begin
(),
s
.
end
(),
s
.
begin
(),
(
int
(
*
)(
int
))
&
std
::
tolower
);
std
::
transform
(
s
.
begin
(),
s
.
end
(),
s
.
begin
(),
(
int
(
*
)(
int
))
&
std
::
tolower
);
return
s
;
return
s
;
}
}
void
split_string
(
const
std
::
string
&
str
,
std
::
string
delim
,
void
split_string
(
const
std
::
string
&
str
,
std
::
string
delim
,
std
::
set
<
std
::
string
>
&
results
)
std
::
set
<
std
::
string
>
&
results
)
{
{
int
cut_at
;
int
cut_at
;
std
::
string
tmp_str
(
str
);
std
::
string
tmp_str
(
str
);
while
((
cut_at
=
tmp_str
.
find_first_of
(
delim
))
!=
(
signed
)
tmp_str
.
npos
)
{
while
((
cut_at
=
tmp_str
.
find_first_of
(
delim
))
!=
(
signed
)
tmp_str
.
npos
)
{
...
@@ -93,8 +98,8 @@ void split_string(const std::string &str, std::string delim,
...
@@ -93,8 +98,8 @@ void split_string(const std::string &str, std::string delim,
}
}
}
}
void
split_string
(
const
std
::
string
&
str
,
std
::
string
delim
,
void
split_string
(
const
std
::
string
&
str
,
std
::
string
delim
,
std
::
vector
<
std
::
string
>
&
results
)
std
::
vector
<
std
::
string
>
&
results
)
{
{
int
cut_at
;
int
cut_at
;
std
::
string
tmp_str
(
str
);
std
::
string
tmp_str
(
str
);
while
((
cut_at
=
tmp_str
.
find_first_of
(
delim
))
!=
(
signed
)
tmp_str
.
npos
)
{
while
((
cut_at
=
tmp_str
.
find_first_of
(
delim
))
!=
(
signed
)
tmp_str
.
npos
)
{
...
@@ -109,8 +114,8 @@ void split_string(const std::string &str, std::string delim,
...
@@ -109,8 +114,8 @@ void split_string(const std::string &str, std::string delim,
}
}
}
}
void
split_string
(
char
*
str
,
char
dim
,
std
::
vector
<
char
*>
&
results
,
void
split_string
(
char
*
str
,
char
dim
,
std
::
vector
<
char
*>
&
results
,
bool
keep_null
)
bool
keep_null
)
{
{
char
*
p
=
str
;
char
*
p
=
str
;
char
*
l
=
p
;
char
*
l
=
p
;
while
(
*
p
)
{
while
(
*
p
)
{
...
@@ -127,11 +132,11 @@ void split_string(char *str, char dim, std::vector<char *> &results,
...
@@ -127,11 +132,11 @@ void split_string(char *str, char dim, std::vector<char *> &results,
return
;
return
;
}
}
void
merge_string
(
std
::
string
&
str
,
std
::
string
delim
,
void
merge_string
(
std
::
string
&
str
,
std
::
string
delim
,
std
::
vector
<
std
::
string
>
&
source
,
size_t
result_len
)
std
::
vector
<
std
::
string
>
&
source
,
size_t
result_len
)
{
{
std
::
ostringstream
ss
;
std
::
ostringstream
ss
;
if
(
source
.
empty
()
)
{
if
(
source
.
empty
())
{
str
=
ss
.
str
();
str
=
ss
.
str
();
return
;
return
;
}
}
...
@@ -143,18 +148,17 @@ void merge_string(std::string &str, std::string delim,
...
@@ -143,18 +148,17 @@ void merge_string(std::string &str, std::string delim,
for
(
unsigned
int
i
=
0
;
i
<
result_len
;
i
++
)
{
for
(
unsigned
int
i
=
0
;
i
<
result_len
;
i
++
)
{
if
(
i
==
0
)
{
if
(
i
==
0
)
{
ss
<<
source
[
i
];
ss
<<
source
[
i
];
}
else
{
}
else
{
ss
<<
delim
<<
source
[
i
];
ss
<<
delim
<<
source
[
i
];
}
}
}
}
str
=
ss
.
str
();
str
=
ss
.
str
();
return
;
return
;
}
}
void
replace
(
std
::
string
&
str
,
const
std
::
string
&
old
,
void
replace
(
std
::
string
&
str
,
const
std
::
string
&
old
,
const
std
::
string
&
new_str
)
const
std
::
string
&
new_str
)
{
{
if
(
old
.
compare
(
new_str
)
==
0
)
{
if
(
old
.
compare
(
new_str
)
==
0
)
{
return
;
return
;
}
}
...
@@ -185,7 +189,8 @@ void replace(std::string &str, const std::string &old,
...
@@ -185,7 +189,8 @@ void replace(std::string &str, const std::string &old,
return
;
return
;
}
}
char
*
bin_to_hex
(
const
char
*
s
,
const
int
len
,
char
*
hex_buff
)
{
char
*
bin_to_hex
(
const
char
*
s
,
const
int
len
,
char
*
hex_buff
)
{
int
new_len
=
0
;
int
new_len
=
0
;
unsigned
char
*
end
=
(
unsigned
char
*
)
s
+
len
;
unsigned
char
*
end
=
(
unsigned
char
*
)
s
+
len
;
for
(
unsigned
char
*
p
=
(
unsigned
char
*
)
s
;
p
<
end
;
p
++
)
{
for
(
unsigned
char
*
p
=
(
unsigned
char
*
)
s
;
p
<
end
;
p
++
)
{
...
@@ -196,7 +201,8 @@ char *bin_to_hex(const char *s, const int len, char *hex_buff) {
...
@@ -196,7 +201,8 @@ char *bin_to_hex(const char *s, const int len, char *hex_buff) {
return
hex_buff
;
return
hex_buff
;
}
}
char
*
hex_to_bin
(
const
char
*
s
,
char
*
bin_buff
,
int
*
dest_len
)
{
char
*
hex_to_bin
(
const
char
*
s
,
char
*
bin_buff
,
int
*
dest_len
)
{
char
buff
[
3
];
char
buff
[
3
];
char
*
src
;
char
*
src
;
int
src_len
;
int
src_len
;
...
@@ -225,7 +231,8 @@ char *hex_to_bin(const char *s, char *bin_buff, int *dest_len) {
...
@@ -225,7 +231,8 @@ char *hex_to_bin(const char *s, char *bin_buff, int *dest_len) {
return
bin_buff
;
return
bin_buff
;
}
}
bool
is_blank
(
const
char
*
s
)
{
bool
is_blank
(
const
char
*
s
)
{
if
(
s
==
nullptr
)
{
if
(
s
==
nullptr
)
{
return
true
;
return
true
;
}
}
...
@@ -238,4 +245,4 @@ bool is_blank(const char *s) {
...
@@ -238,4 +245,4 @@ bool is_blank(const char *s) {
return
true
;
return
true
;
}
}
}
//
namespace common
}
//
namespace common
deps/common/lang/string.h
浏览文件 @
e976988d
...
@@ -65,20 +65,15 @@ std::string &str_to_lower(std::string &s);
...
@@ -65,20 +65,15 @@ std::string &str_to_lower(std::string &s);
* @param[in] delims elimiter characters
* @param[in] delims elimiter characters
* @param[in,out] results ector containing the split up string
* @param[in,out] results ector containing the split up string
*/
*/
void
split_string
(
const
std
::
string
&
str
,
std
::
string
delim
,
void
split_string
(
const
std
::
string
&
str
,
std
::
string
delim
,
std
::
set
<
std
::
string
>
&
results
);
std
::
set
<
std
::
string
>
&
results
);
void
split_string
(
const
std
::
string
&
str
,
std
::
string
delim
,
std
::
vector
<
std
::
string
>
&
results
);
void
split_string
(
const
std
::
string
&
str
,
std
::
string
delim
,
void
split_string
(
char
*
str
,
char
dim
,
std
::
vector
<
char
*>
&
results
,
bool
keep_null
=
false
);
std
::
vector
<
std
::
string
>
&
results
);
void
split_string
(
char
*
str
,
char
dim
,
std
::
vector
<
char
*>
&
results
,
void
merge_string
(
std
::
string
&
str
,
std
::
string
delim
,
std
::
vector
<
std
::
string
>
&
result
,
size_t
result_len
=
0
);
bool
keep_null
=
false
);
void
merge_string
(
std
::
string
&
str
,
std
::
string
delim
,
std
::
vector
<
std
::
string
>
&
result
,
size_t
result_len
=
0
);
/**
/**
* replace old with new in the string
* replace old with new in the string
*/
*/
void
replace
(
std
::
string
&
str
,
const
std
::
string
&
old
,
void
replace
(
std
::
string
&
str
,
const
std
::
string
&
old
,
const
std
::
string
&
new_str
);
const
std
::
string
&
new_str
);
/**
/**
* binary to hexadecimal
* binary to hexadecimal
...
@@ -102,8 +97,7 @@ char *hex_to_bin(const char *s, char *bin_buff, int *dest_len);
...
@@ -102,8 +97,7 @@ char *hex_to_bin(const char *s, char *bin_buff, int *dest_len);
* number, \c false otherwise
* number, \c false otherwise
*/
*/
template
<
class
T
>
template
<
class
T
>
bool
str_to_val
(
const
std
::
string
&
str
,
T
&
val
,
bool
str_to_val
(
const
std
::
string
&
str
,
T
&
val
,
std
::
ios_base
&
(
*
radix
)(
std
::
ios_base
&
)
=
std
::
dec
);
std
::
ios_base
&
(
*
radix
)(
std
::
ios_base
&
)
=
std
::
dec
);
/**
/**
* Convert a numeric value into its string representation
* Convert a numeric value into its string representation
...
@@ -116,17 +110,17 @@ bool str_to_val(const std::string &str, T &val,
...
@@ -116,17 +110,17 @@ bool str_to_val(const std::string &str, T &val,
* (hexidecimal).
* (hexidecimal).
*/
*/
template
<
class
T
>
template
<
class
T
>
void
val_to_str
(
const
T
&
val
,
std
::
string
&
str
,
void
val_to_str
(
const
T
&
val
,
std
::
string
&
str
,
std
::
ios_base
&
(
*
radix
)(
std
::
ios_base
&
)
=
std
::
dec
);
std
::
ios_base
&
(
*
radix
)(
std
::
ios_base
&
)
=
std
::
dec
);
/**
/**
* get type's name
* get type's name
*/
*/
template
<
class
T
>
std
::
string
get_type_name
(
const
T
&
val
);
template
<
class
T
>
std
::
string
get_type_name
(
const
T
&
val
);
template
<
class
T
>
template
<
class
T
>
bool
str_to_val
(
const
std
::
string
&
str
,
T
&
val
,
bool
str_to_val
(
const
std
::
string
&
str
,
T
&
val
,
std
::
ios_base
&
(
*
radix
)(
std
::
ios_base
&
)
/* = std::dec */
)
std
::
ios_base
&
(
*
radix
)(
std
::
ios_base
&
)
/* = std::dec */
)
{
{
bool
success
=
true
;
bool
success
=
true
;
std
::
istringstream
is
(
str
);
std
::
istringstream
is
(
str
);
if
(
!
(
is
>>
radix
>>
val
))
{
if
(
!
(
is
>>
radix
>>
val
))
{
...
@@ -137,14 +131,16 @@ bool str_to_val(const std::string &str, T &val,
...
@@ -137,14 +131,16 @@ bool str_to_val(const std::string &str, T &val,
}
}
template
<
class
T
>
template
<
class
T
>
void
val_to_str
(
const
T
&
val
,
std
::
string
&
str
,
void
val_to_str
(
const
T
&
val
,
std
::
string
&
str
,
std
::
ios_base
&
(
*
radix
)(
std
::
ios_base
&
)
/* = std::dec */
)
std
::
ios_base
&
(
*
radix
)(
std
::
ios_base
&
)
/* = std::dec */
)
{
{
std
::
stringstream
strm
;
std
::
stringstream
strm
;
strm
<<
radix
<<
val
;
strm
<<
radix
<<
val
;
str
=
strm
.
str
();
str
=
strm
.
str
();
}
}
template
<
class
T
>
std
::
string
get_type_name
(
const
T
&
val
)
{
template
<
class
T
>
std
::
string
get_type_name
(
const
T
&
val
)
{
int
status
=
0
;
int
status
=
0
;
char
*
stmp
=
abi
::
__cxa_demangle
(
typeid
(
val
).
name
(),
0
,
0
,
&
status
);
char
*
stmp
=
abi
::
__cxa_demangle
(
typeid
(
val
).
name
(),
0
,
0
,
&
status
);
if
(
!
stmp
)
if
(
!
stmp
)
...
@@ -158,5 +154,5 @@ template <class T> std::string get_type_name(const T &val) {
...
@@ -158,5 +154,5 @@ template <class T> std::string get_type_name(const T &val) {
bool
is_blank
(
const
char
*
s
);
bool
is_blank
(
const
char
*
s
);
}
//
namespace common
}
//
namespace common
#endif // __COMMON_LANG_STRING_H__
#endif
// __COMMON_LANG_STRING_H__
deps/common/log/log.cpp
浏览文件 @
e976988d
...
@@ -23,9 +23,9 @@ namespace common {
...
@@ -23,9 +23,9 @@ namespace common {
Log
*
g_log
=
nullptr
;
Log
*
g_log
=
nullptr
;
Log
::
Log
(
const
std
::
string
&
log_file_name
,
const
LOG_LEVEL
log_level
,
Log
::
Log
(
const
std
::
string
&
log_file_name
,
const
LOG_LEVEL
log_level
,
const
LOG_LEVEL
console_level
)
const
LOG_LEVEL
console_level
)
:
log_name_
(
log_file_name
),
log_level_
(
log_level
),
console_level_
(
console_level
)
:
log_name_
(
log_file_name
),
log_level_
(
log_level
),
console_level_
(
console_level
)
{
{
prefix_map_
[
LOG_LEVEL_PANIC
]
=
"PANIC:"
;
prefix_map_
[
LOG_LEVEL_PANIC
]
=
"PANIC:"
;
prefix_map_
[
LOG_LEVEL_ERR
]
=
"ERROR:"
;
prefix_map_
[
LOG_LEVEL_ERR
]
=
"ERROR:"
;
prefix_map_
[
LOG_LEVEL_WARN
]
=
"WARNNING:"
;
prefix_map_
[
LOG_LEVEL_WARN
]
=
"WARNNING:"
;
...
@@ -45,7 +45,8 @@ Log::Log(const std::string &log_file_name, const LOG_LEVEL log_level,
...
@@ -45,7 +45,8 @@ Log::Log(const std::string &log_file_name, const LOG_LEVEL log_level,
check_param_valid
();
check_param_valid
();
}
}
Log
::~
Log
(
void
)
{
Log
::~
Log
(
void
)
{
pthread_mutex_lock
(
&
lock_
);
pthread_mutex_lock
(
&
lock_
);
if
(
ofs_
.
is_open
())
{
if
(
ofs_
.
is_open
())
{
ofs_
.
close
();
ofs_
.
close
();
...
@@ -55,7 +56,8 @@ Log::~Log(void) {
...
@@ -55,7 +56,8 @@ Log::~Log(void) {
pthread_mutex_destroy
(
&
lock_
);
pthread_mutex_destroy
(
&
lock_
);
}
}
void
Log
::
check_param_valid
()
{
void
Log
::
check_param_valid
()
{
assert
(
!
log_name_
.
empty
());
assert
(
!
log_name_
.
empty
());
assert
(
LOG_LEVEL_PANIC
<=
log_level_
&&
log_level_
<
LOG_LEVEL_LAST
);
assert
(
LOG_LEVEL_PANIC
<=
log_level_
&&
log_level_
<
LOG_LEVEL_LAST
);
assert
(
LOG_LEVEL_PANIC
<=
console_level_
&&
console_level_
<
LOG_LEVEL_LAST
);
assert
(
LOG_LEVEL_PANIC
<=
console_level_
&&
console_level_
<
LOG_LEVEL_LAST
);
...
@@ -63,7 +65,8 @@ void Log::check_param_valid() {
...
@@ -63,7 +65,8 @@ void Log::check_param_valid() {
return
;
return
;
}
}
bool
Log
::
check_output
(
const
LOG_LEVEL
level
,
const
char
*
module
)
{
bool
Log
::
check_output
(
const
LOG_LEVEL
level
,
const
char
*
module
)
{
if
(
LOG_LEVEL_LAST
>
level
&&
level
<=
console_level_
)
{
if
(
LOG_LEVEL_LAST
>
level
&&
level
<=
console_level_
)
{
return
true
;
return
true
;
}
}
...
@@ -77,8 +80,8 @@ bool Log::check_output(const LOG_LEVEL level, const char *module) {
...
@@ -77,8 +80,8 @@ bool Log::check_output(const LOG_LEVEL level, const char *module) {
return
false
;
return
false
;
}
}
int
Log
::
output
(
const
LOG_LEVEL
level
,
const
char
*
module
,
const
char
*
prefix
,
int
Log
::
output
(
const
LOG_LEVEL
level
,
const
char
*
module
,
const
char
*
prefix
,
const
char
*
f
,
...)
const
char
*
f
,
...)
{
{
bool
locked
=
false
;
bool
locked
=
false
;
try
{
try
{
va_list
args
;
va_list
args
;
...
@@ -127,7 +130,8 @@ int Log::output(const LOG_LEVEL level, const char *module, const char *prefix,
...
@@ -127,7 +130,8 @@ int Log::output(const LOG_LEVEL level, const char *module, const char *prefix,
return
LOG_STATUS_OK
;
return
LOG_STATUS_OK
;
}
}
int
Log
::
set_console_level
(
LOG_LEVEL
console_level
)
{
int
Log
::
set_console_level
(
LOG_LEVEL
console_level
)
{
if
(
LOG_LEVEL_PANIC
<=
console_level
&&
console_level
<
LOG_LEVEL_LAST
)
{
if
(
LOG_LEVEL_PANIC
<=
console_level
&&
console_level
<
LOG_LEVEL_LAST
)
{
console_level_
=
console_level
;
console_level_
=
console_level
;
return
LOG_STATUS_OK
;
return
LOG_STATUS_OK
;
...
@@ -136,9 +140,13 @@ int Log::set_console_level(LOG_LEVEL console_level) {
...
@@ -136,9 +140,13 @@ int Log::set_console_level(LOG_LEVEL console_level) {
return
LOG_STATUS_ERR
;
return
LOG_STATUS_ERR
;
}
}
LOG_LEVEL
Log
::
get_console_level
()
{
return
console_level_
;
}
LOG_LEVEL
Log
::
get_console_level
()
{
return
console_level_
;
}
int
Log
::
set_log_level
(
LOG_LEVEL
log_level
)
{
int
Log
::
set_log_level
(
LOG_LEVEL
log_level
)
{
if
(
LOG_LEVEL_PANIC
<=
log_level
&&
log_level
<
LOG_LEVEL_LAST
)
{
if
(
LOG_LEVEL_PANIC
<=
log_level
&&
log_level
<
LOG_LEVEL_LAST
)
{
log_level_
=
log_level
;
log_level_
=
log_level
;
return
LOG_STATUS_OK
;
return
LOG_STATUS_OK
;
...
@@ -147,9 +155,13 @@ int Log::set_log_level(LOG_LEVEL log_level) {
...
@@ -147,9 +155,13 @@ int Log::set_log_level(LOG_LEVEL log_level) {
return
LOG_STATUS_ERR
;
return
LOG_STATUS_ERR
;
}
}
LOG_LEVEL
Log
::
get_log_level
()
{
return
log_level_
;
}
LOG_LEVEL
Log
::
get_log_level
()
{
return
log_level_
;
}
const
char
*
Log
::
prefix_msg
(
LOG_LEVEL
level
)
{
const
char
*
Log
::
prefix_msg
(
LOG_LEVEL
level
)
{
if
(
LOG_LEVEL_PANIC
<=
level
&&
level
<
LOG_LEVEL_LAST
)
{
if
(
LOG_LEVEL_PANIC
<=
level
&&
level
<
LOG_LEVEL_LAST
)
{
return
prefix_map_
[
level
].
c_str
();
return
prefix_map_
[
level
].
c_str
();
}
}
...
@@ -157,22 +169,27 @@ const char *Log::prefix_msg(LOG_LEVEL level) {
...
@@ -157,22 +169,27 @@ const char *Log::prefix_msg(LOG_LEVEL level) {
return
empty_prefix
;
return
empty_prefix
;
}
}
void
Log
::
set_default_module
(
const
std
::
string
&
modules
)
{
void
Log
::
set_default_module
(
const
std
::
string
&
modules
)
{
split_string
(
modules
,
","
,
default_set_
);
split_string
(
modules
,
","
,
default_set_
);
}
}
int
Log
::
set_rotate_type
(
LOG_ROTATE
rotate_type
)
{
int
Log
::
set_rotate_type
(
LOG_ROTATE
rotate_type
)
{
if
(
LOG_ROTATE_BYDAY
<=
rotate_type
&&
rotate_type
<
LOG_ROTATE_LAST
)
{
if
(
LOG_ROTATE_BYDAY
<=
rotate_type
&&
rotate_type
<
LOG_ROTATE_LAST
)
{
rotate_type_
=
rotate_type
;
rotate_type_
=
rotate_type
;
}
}
return
LOG_STATUS_OK
;
return
LOG_STATUS_OK
;
}
}
LOG_ROTATE
Log
::
get_rotate_type
()
{
return
rotate_type_
;
}
LOG_ROTATE
Log
::
get_rotate_type
()
{
return
rotate_type_
;
}
int
Log
::
rotate_by_day
(
const
int
year
,
const
int
month
,
const
int
day
)
{
int
Log
::
rotate_by_day
(
const
int
year
,
const
int
month
,
const
int
day
)
if
(
log_date_
.
year_
==
year
&&
log_date_
.
mon_
==
month
&&
{
log_date_
.
day_
==
day
)
{
if
(
log_date_
.
year_
==
year
&&
log_date_
.
mon_
==
month
&&
log_date_
.
day_
==
day
)
{
// Don't need rotate
// Don't need rotate
return
0
;
return
0
;
}
}
...
@@ -196,7 +213,8 @@ int Log::rotate_by_day(const int year, const int month, const int day) {
...
@@ -196,7 +213,8 @@ int Log::rotate_by_day(const int year, const int month, const int day) {
return
0
;
return
0
;
}
}
int
Log
::
rename_old_logs
()
{
int
Log
::
rename_old_logs
()
{
int
log_index
=
1
;
int
log_index
=
1
;
int
max_log_index
=
0
;
int
max_log_index
=
0
;
char
log_index_str
[
4
]
=
{
0
};
char
log_index_str
[
4
]
=
{
0
};
...
@@ -234,7 +252,8 @@ int Log::rename_old_logs() {
...
@@ -234,7 +252,8 @@ int Log::rename_old_logs() {
return
LOG_STATUS_OK
;
return
LOG_STATUS_OK
;
}
}
int
Log
::
rotate_by_size
()
{
int
Log
::
rotate_by_size
()
{
if
(
log_line_
<
0
)
{
if
(
log_line_
<
0
)
{
// The first time open log file
// The first time open log file
ofs_
.
open
(
log_name_
.
c_str
(),
std
::
ios_base
::
out
|
std
::
ios_base
::
app
);
ofs_
.
open
(
log_name_
.
c_str
(),
std
::
ios_base
::
out
|
std
::
ios_base
::
app
);
...
@@ -260,8 +279,7 @@ int Log::rotate_by_size() {
...
@@ -260,8 +279,7 @@ int Log::rotate_by_size() {
std
::
string
log_name_new
=
log_name_
+
"."
+
log_index_str
;
std
::
string
log_name_new
=
log_name_
+
"."
+
log_index_str
;
result
=
rename
(
log_name_
.
c_str
(),
log_name_new
.
c_str
());
result
=
rename
(
log_name_
.
c_str
(),
log_name_new
.
c_str
());
if
(
result
)
{
if
(
result
)
{
std
::
cerr
<<
"Failed to rename "
<<
log_name_
<<
" to "
<<
log_name_new
std
::
cerr
<<
"Failed to rename "
<<
log_name_
<<
" to "
<<
log_name_new
<<
std
::
endl
;
<<
std
::
endl
;
}
}
ofs_
.
open
(
log_name_
.
c_str
(),
std
::
ios_base
::
out
|
std
::
ios_base
::
app
);
ofs_
.
open
(
log_name_
.
c_str
(),
std
::
ios_base
::
out
|
std
::
ios_base
::
app
);
...
@@ -278,7 +296,8 @@ int Log::rotate_by_size() {
...
@@ -278,7 +296,8 @@ int Log::rotate_by_size() {
return
LOG_STATUS_OK
;
return
LOG_STATUS_OK
;
}
}
int
Log
::
rotate
(
const
int
year
,
const
int
month
,
const
int
day
)
{
int
Log
::
rotate
(
const
int
year
,
const
int
month
,
const
int
day
)
{
int
result
=
0
;
int
result
=
0
;
pthread_mutex_lock
(
&
lock_
);
pthread_mutex_lock
(
&
lock_
);
if
(
rotate_type_
==
LOG_ROTATE_BYDAY
)
{
if
(
rotate_type_
==
LOG_ROTATE_BYDAY
)
{
...
@@ -291,17 +310,19 @@ int Log::rotate(const int year, const int month, const int day) {
...
@@ -291,17 +310,19 @@ int Log::rotate(const int year, const int month, const int day) {
return
result
;
return
result
;
}
}
LoggerFactory
::
LoggerFactory
()
{
LoggerFactory
::
LoggerFactory
()
{
// Auto-generated constructor stub
// Auto-generated constructor stub
}
}
LoggerFactory
::~
LoggerFactory
()
{
LoggerFactory
::~
LoggerFactory
()
{
// Auto-generated destructor stub
// Auto-generated destructor stub
}
}
int
LoggerFactory
::
init
(
const
std
::
string
&
log_file
,
Log
**
logger
,
int
LoggerFactory
::
init
(
LOG_LEVEL
log_level
,
LOG_LEVEL
console_level
,
const
std
::
string
&
log_file
,
Log
**
logger
,
LOG_LEVEL
log_level
,
LOG_LEVEL
console_level
,
LOG_ROTATE
rotate_type
)
LOG_ROTATE
rotate_type
)
{
{
Log
*
log
=
new
(
std
::
nothrow
)
Log
(
log_file
,
log_level
,
console_level
);
Log
*
log
=
new
(
std
::
nothrow
)
Log
(
log_file
,
log_level
,
console_level
);
if
(
log
==
nullptr
)
{
if
(
log
==
nullptr
)
{
std
::
cout
<<
"Error: fail to construct a log object!"
<<
std
::
endl
;
std
::
cout
<<
"Error: fail to construct a log object!"
<<
std
::
endl
;
...
@@ -314,8 +335,9 @@ int LoggerFactory::init(const std::string &log_file, Log **logger,
...
@@ -314,8 +335,9 @@ int LoggerFactory::init(const std::string &log_file, Log **logger,
return
0
;
return
0
;
}
}
int
LoggerFactory
::
init_default
(
const
std
::
string
&
log_file
,
LOG_LEVEL
log_level
,
int
LoggerFactory
::
init_default
(
LOG_LEVEL
console_level
,
LOG_ROTATE
rotate_type
)
{
const
std
::
string
&
log_file
,
LOG_LEVEL
log_level
,
LOG_LEVEL
console_level
,
LOG_ROTATE
rotate_type
)
{
if
(
g_log
!=
nullptr
)
{
if
(
g_log
!=
nullptr
)
{
LOG_WARN
(
"Default logger has been initialized"
);
LOG_WARN
(
"Default logger has been initialized"
);
return
0
;
return
0
;
...
@@ -324,4 +346,4 @@ int LoggerFactory::init_default(const std::string &log_file, LOG_LEVEL log_level
...
@@ -324,4 +346,4 @@ int LoggerFactory::init_default(const std::string &log_file, LOG_LEVEL log_level
return
init
(
log_file
,
&
g_log
,
log_level
,
console_level
,
rotate_type
);
return
init
(
log_file
,
&
g_log
,
log_level
,
console_level
,
rotate_type
);
}
}
}
//namespace common
}
// namespace common
\ No newline at end of file
\ No newline at end of file
deps/common/log/log.h
浏览文件 @
e976988d
...
@@ -45,14 +45,10 @@ typedef enum {
...
@@ -45,14 +45,10 @@ typedef enum {
LOG_LEVEL_LAST
LOG_LEVEL_LAST
}
LOG_LEVEL
;
}
LOG_LEVEL
;
typedef
enum
{
typedef
enum
{
LOG_ROTATE_BYDAY
=
0
,
LOG_ROTATE_BYSIZE
,
LOG_ROTATE_LAST
}
LOG_ROTATE
;
LOG_ROTATE_BYDAY
=
0
,
LOG_ROTATE_BYSIZE
,
LOG_ROTATE_LAST
}
LOG_ROTATE
;
class
Log
{
class
Log
{
public:
public:
Log
(
const
std
::
string
&
log_name
,
const
LOG_LEVEL
log_level
=
LOG_LEVEL_INFO
,
Log
(
const
std
::
string
&
log_name
,
const
LOG_LEVEL
log_level
=
LOG_LEVEL_INFO
,
const
LOG_LEVEL
console_level
=
LOG_LEVEL_WARN
);
const
LOG_LEVEL
console_level
=
LOG_LEVEL_WARN
);
~
Log
(
void
);
~
Log
(
void
);
...
@@ -65,29 +61,28 @@ class Log {
...
@@ -65,29 +61,28 @@ class Log {
* If the header information should be outputed
* If the header information should be outputed
* please use LOG_PANIC, LOG_ERROR ...
* please use LOG_PANIC, LOG_ERROR ...
*/
*/
template
<
class
T
>
template
<
class
T
>
Log
&
operator
<<
(
T
message
);
Log
&
operator
<<
(
T
message
);
template
<
class
T
>
template
<
class
T
>
int
panic
(
T
message
);
int
panic
(
T
message
);
template
<
class
T
>
template
<
class
T
>
int
error
(
T
message
);
int
error
(
T
message
);
template
<
class
T
>
template
<
class
T
>
int
warnning
(
T
message
);
int
warnning
(
T
message
);
template
<
class
T
>
template
<
class
T
>
int
info
(
T
message
);
int
info
(
T
message
);
template
<
class
T
>
template
<
class
T
>
int
debug
(
T
message
);
int
debug
(
T
message
);
template
<
class
T
>
template
<
class
T
>
int
trace
(
T
message
);
int
trace
(
T
message
);
int
output
(
const
LOG_LEVEL
level
,
const
char
*
module
,
const
char
*
prefix
,
int
output
(
const
LOG_LEVEL
level
,
const
char
*
module
,
const
char
*
prefix
,
const
char
*
f
,
...);
const
char
*
f
,
...);
int
set_console_level
(
const
LOG_LEVEL
console_level
);
int
set_console_level
(
const
LOG_LEVEL
console_level
);
LOG_LEVEL
get_console_level
();
LOG_LEVEL
get_console_level
();
...
@@ -110,17 +105,17 @@ class Log {
...
@@ -110,17 +105,17 @@ class Log {
int
rotate
(
const
int
year
=
0
,
const
int
month
=
0
,
const
int
day
=
0
);
int
rotate
(
const
int
year
=
0
,
const
int
month
=
0
,
const
int
day
=
0
);
private:
private:
void
check_param_valid
();
void
check_param_valid
();
int
rotate_by_size
();
int
rotate_by_size
();
int
rename_old_logs
();
int
rename_old_logs
();
int
rotate_by_day
(
const
int
year
,
const
int
month
,
const
int
day
);
int
rotate_by_day
(
const
int
year
,
const
int
month
,
const
int
day
);
template
<
class
T
>
template
<
class
T
>
int
out
(
const
LOG_LEVEL
console_level
,
const
LOG_LEVEL
log_level
,
T
&
message
);
int
out
(
const
LOG_LEVEL
console_level
,
const
LOG_LEVEL
log_level
,
T
&
message
);
private:
private:
pthread_mutex_t
lock_
;
pthread_mutex_t
lock_
;
std
::
ofstream
ofs_
;
std
::
ofstream
ofs_
;
std
::
string
log_name_
;
std
::
string
log_name_
;
...
@@ -145,57 +140,63 @@ class Log {
...
@@ -145,57 +140,63 @@ class Log {
};
};
class
LoggerFactory
{
class
LoggerFactory
{
public:
public:
LoggerFactory
();
LoggerFactory
();
virtual
~
LoggerFactory
();
virtual
~
LoggerFactory
();
static
int
init
(
const
std
::
string
&
log_file
,
Log
**
logger
,
static
int
init
(
const
std
::
string
&
log_file
,
Log
**
logger
,
LOG_LEVEL
log_level
=
LOG_LEVEL_INFO
,
LOG_LEVEL
log_level
=
LOG_LEVEL_INFO
,
LOG_LEVEL
console_level
=
LOG_LEVEL_WARN
,
LOG_ROTATE
rotate_type
=
LOG_ROTATE_BYDAY
);
LOG_LEVEL
console_level
=
LOG_LEVEL_WARN
,
LOG_ROTATE
rotate_type
=
LOG_ROTATE_BYDAY
);
static
int
init_default
(
const
std
::
string
&
log_file
,
static
int
init_default
(
const
std
::
string
&
log_file
,
LOG_LEVEL
log_level
=
LOG_LEVEL_INFO
,
LOG_LEVEL
log_level
=
LOG_LEVEL_INFO
,
LOG_LEVEL
console_level
=
LOG_LEVEL_WARN
,
LOG_ROTATE
rotate_type
=
LOG_ROTATE_BYDAY
);
LOG_LEVEL
console_level
=
LOG_LEVEL_WARN
,
LOG_ROTATE
rotate_type
=
LOG_ROTATE_BYDAY
);
};
};
extern
Log
*
g_log
;
extern
Log
*
g_log
;
#ifndef __FILE_NAME__
#ifndef __FILE_NAME__
#define __FILE_NAME__ (strrchr(__FILE__,
'/')?strrchr(__FILE__,'/')+1:
__FILE__)
#define __FILE_NAME__ (strrchr(__FILE__,
'/') ? strrchr(__FILE__, '/') + 1 :
__FILE__)
#endif
#endif
#define LOG_HEAD(prefix, level) \
#define LOG_HEAD(prefix, level) \
if (common::g_log) { \
if (common::g_log) { \
time_t now_time; \
time_t now_time; \
time(&now_time); \
time(&now_time); \
struct tm *p = localtime(&now_time); \
struct tm *p = localtime(&now_time); \
char sz_head[64] = {0}; \
char sz_head[64] = {0}; \
if (p) { \
if (p) { \
sprintf(sz_head, \
sprintf(sz_head, "%d-%d-%d %d:%d:%u pid:%u tid:%llx ", p->tm_year + 1900, \
"%d-%d-%d %d:%d:%u pid:%u tid:%llx ", \
p->tm_mon + 1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec, \
p->tm_year + 1900, \
(u32_t)getpid(), gettid()); \
p->tm_mon + 1, \
common::g_log->rotate(p->tm_year + 1900, p->tm_mon + 1, p->tm_mday); \
p->tm_mday, \
} \
p->tm_hour, \
snprintf(prefix, sizeof(prefix), "[%s %s %s %s %u]>>", sz_head, \
p->tm_min, \
(common::g_log)->prefix_msg(level), __FILE_NAME__, \
p->tm_sec, \
__FUNCTION__, (u32_t)__LINE__); \
(u32_t)getpid(), \
gettid()); \
common::g_log->rotate(p->tm_year + 1900, p->tm_mon + 1, p->tm_mday); \
} \
snprintf(prefix, \
sizeof(prefix), \
"[%s %s %s %s %u]>>", \
sz_head, \
(common::g_log)->prefix_msg(level), \
__FILE_NAME__, \
__FUNCTION__, \
(u32_t)__LINE__); \
}
}
#define LOG_OUTPUT(level, fmt, ...)
\
#define LOG_OUTPUT(level, fmt, ...) \
do {
\
do { \
using namespace common;
\
using namespace common; \
if (g_log && g_log->check_output(level, __FILE_NAME__)) {
\
if (g_log && g_log->check_output(level, __FILE_NAME__)) { \
char prefix[ONE_KILO] = {0};
\
char prefix[ONE_KILO] = {0}; \
LOG_HEAD(prefix, level);
\
LOG_HEAD(prefix, level); \
g_log->output(level, __FILE_NAME__, prefix, fmt, ##__VA_ARGS__);
\
g_log->output(level, __FILE_NAME__, prefix, fmt, ##__VA_ARGS__); \
}
\
} \
} while (0)
} while (0)
#define LOG_DEFAULT(fmt, ...) \
#define LOG_DEFAULT(fmt, ...) LOG_OUTPUT(common::g_log->get_log_level(), fmt, ##__VA_ARGS__)
LOG_OUTPUT(common::g_log->get_log_level(), fmt, ##__VA_ARGS__)
#define LOG_PANIC(fmt, ...) LOG_OUTPUT(common::LOG_LEVEL_PANIC, fmt, ##__VA_ARGS__)
#define LOG_PANIC(fmt, ...) LOG_OUTPUT(common::LOG_LEVEL_PANIC, fmt, ##__VA_ARGS__)
#define LOG_ERROR(fmt, ...) LOG_OUTPUT(common::LOG_LEVEL_ERR, fmt, ##__VA_ARGS__)
#define LOG_ERROR(fmt, ...) LOG_OUTPUT(common::LOG_LEVEL_ERR, fmt, ##__VA_ARGS__)
#define LOG_WARN(fmt, ...) LOG_OUTPUT(common::LOG_LEVEL_WARN, fmt, ##__VA_ARGS__)
#define LOG_WARN(fmt, ...) LOG_OUTPUT(common::LOG_LEVEL_WARN, fmt, ##__VA_ARGS__)
...
@@ -203,48 +204,56 @@ extern Log *g_log;
...
@@ -203,48 +204,56 @@ extern Log *g_log;
#define LOG_DEBUG(fmt, ...) LOG_OUTPUT(common::LOG_LEVEL_DEBUG, fmt, ##__VA_ARGS__)
#define LOG_DEBUG(fmt, ...) LOG_OUTPUT(common::LOG_LEVEL_DEBUG, fmt, ##__VA_ARGS__)
#define LOG_TRACE(fmt, ...) LOG_OUTPUT(common::LOG_LEVEL_TRACE, fmt, ##__VA_ARGS__)
#define LOG_TRACE(fmt, ...) LOG_OUTPUT(common::LOG_LEVEL_TRACE, fmt, ##__VA_ARGS__)
template
<
class
T
>
template
<
class
T
>
Log
&
Log
::
operator
<<
(
T
msg
)
{
Log
&
Log
::
operator
<<
(
T
msg
)
{
// at this time, the input level is the default log level
// at this time, the input level is the default log level
out
(
console_level_
,
log_level_
,
msg
);
out
(
console_level_
,
log_level_
,
msg
);
return
*
this
;
return
*
this
;
}
}
template
<
class
T
>
template
<
class
T
>
int
Log
::
panic
(
T
message
)
{
int
Log
::
panic
(
T
message
)
{
return
out
(
LOG_LEVEL_PANIC
,
LOG_LEVEL_PANIC
,
message
);
return
out
(
LOG_LEVEL_PANIC
,
LOG_LEVEL_PANIC
,
message
);
}
}
template
<
class
T
>
template
<
class
T
>
int
Log
::
error
(
T
message
)
{
int
Log
::
error
(
T
message
)
{
return
out
(
LOG_LEVEL_ERR
,
LOG_LEVEL_ERR
,
message
);
return
out
(
LOG_LEVEL_ERR
,
LOG_LEVEL_ERR
,
message
);
}
}
template
<
class
T
>
template
<
class
T
>
int
Log
::
warnning
(
T
message
)
{
int
Log
::
warnning
(
T
message
)
{
return
out
(
LOG_LEVEL_WARN
,
LOG_LEVEL_WARN
,
message
);
return
out
(
LOG_LEVEL_WARN
,
LOG_LEVEL_WARN
,
message
);
}
}
template
<
class
T
>
template
<
class
T
>
int
Log
::
info
(
T
message
)
{
int
Log
::
info
(
T
message
)
{
return
out
(
LOG_LEVEL_INFO
,
LOG_LEVEL_INFO
,
message
);
return
out
(
LOG_LEVEL_INFO
,
LOG_LEVEL_INFO
,
message
);
}
}
template
<
class
T
>
template
<
class
T
>
int
Log
::
debug
(
T
message
)
{
int
Log
::
debug
(
T
message
)
{
return
out
(
LOG_LEVEL_DEBUG
,
LOG_LEVEL_DEBUG
,
message
);
return
out
(
LOG_LEVEL_DEBUG
,
LOG_LEVEL_DEBUG
,
message
);
}
}
template
<
class
T
>
template
<
class
T
>
int
Log
::
trace
(
T
message
)
{
int
Log
::
trace
(
T
message
)
{
return
out
(
LOG_LEVEL_TRACE
,
LOG_LEVEL_TRACE
,
message
);
return
out
(
LOG_LEVEL_TRACE
,
LOG_LEVEL_TRACE
,
message
);
}
}
template
<
class
T
>
template
<
class
T
>
int
Log
::
out
(
const
LOG_LEVEL
console_level
,
const
LOG_LEVEL
log_level
,
T
&
msg
)
{
int
Log
::
out
(
const
LOG_LEVEL
console_level
,
const
LOG_LEVEL
log_level
,
T
&
msg
)
{
bool
locked
=
false
;
bool
locked
=
false
;
if
(
console_level
<
LOG_LEVEL_PANIC
||
console_level
>
console_level_
||
if
(
console_level
<
LOG_LEVEL_PANIC
||
console_level
>
console_level_
||
log_level
<
LOG_LEVEL_PANIC
||
log_level
<
LOG_LEVEL_PANIC
||
log_level
>
log_level_
)
{
log_level
>
log_level_
)
{
return
LOG_STATUS_OK
;
return
LOG_STATUS_OK
;
}
}
try
{
try
{
...
@@ -276,21 +285,20 @@ int Log::out(const LOG_LEVEL console_level, const LOG_LEVEL log_level, T &msg) {
...
@@ -276,21 +285,20 @@ int Log::out(const LOG_LEVEL console_level, const LOG_LEVEL log_level, T &msg) {
}
}
#ifndef ASSERT
#ifndef ASSERT
#define ASSERT(expression, description, ...)
\
#define ASSERT(expression, description, ...) \
do {
\
do { \
if (!(expression)) {
\
if (!(expression)) { \
if (common::g_log) {
\
if (common::g_log) { \
LOG_PANIC(description, ##__VA_ARGS__);
\
LOG_PANIC(description, ##__VA_ARGS__); \
LOG_PANIC("\n");
\
LOG_PANIC("\n"); \
}
\
} \
assert(expression);
\
assert(expression); \
}
\
} \
} while (0)
} while (0)
#endif // ASSERT
#endif
// ASSERT
#define SYS_OUTPUT_FILE_POS \
#define SYS_OUTPUT_FILE_POS ", File:" << __FILE__ << ", line:" << __LINE__ << ",function:" << __FUNCTION__
", File:" << __FILE__ << ", line:" << __LINE__ << ",function:" << __FUNCTION__
#define SYS_OUTPUT_ERROR ",error:" << errno << ":" << strerror(errno)
#define SYS_OUTPUT_ERROR ",error:" << errno << ":" << strerror(errno)
}
//
namespace common
}
//
namespace common
#endif //__COMMON_LOG_LOG_H__
#endif
//__COMMON_LOG_LOG_H__
deps/common/math/md5.cpp
浏览文件 @
e976988d
...
@@ -41,10 +41,70 @@ static void Decode(UINT4 *, unsigned char *, unsigned int);
...
@@ -41,10 +41,70 @@ static void Decode(UINT4 *, unsigned char *, unsigned int);
static
void
MD5_memcpy
(
POINTER
,
POINTER
,
unsigned
int
);
static
void
MD5_memcpy
(
POINTER
,
POINTER
,
unsigned
int
);
static
void
MD5_memset
(
POINTER
,
int
,
unsigned
int
);
static
void
MD5_memset
(
POINTER
,
int
,
unsigned
int
);
static
unsigned
char
PADDING
[
64
]
=
{
static
unsigned
char
PADDING
[
64
]
=
{
0x80
,
0x80
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
/*
/*
* F, G, H and I are basic MD5 functions.
* F, G, H and I are basic MD5 functions.
...
@@ -63,35 +123,36 @@ static unsigned char PADDING[64] = {
...
@@ -63,35 +123,36 @@ static unsigned char PADDING[64] = {
* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. Rotation is
* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. Rotation is
* separate from addition to prevent recomputation.
* separate from addition to prevent recomputation.
*/
*/
#define FF(a, b, c, d, x, s, ac)
\
#define FF(a, b, c, d, x, s, ac) \
{
\
{ \
(a) += F((b), (c), (d)) + (x) + (UINT4)(ac);
\
(a) += F((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT((a), (s));
\
(a) = ROTATE_LEFT((a), (s)); \
(a) += (b);
\
(a) += (b); \
}
}
#define GG(a, b, c, d, x, s, ac)
\
#define GG(a, b, c, d, x, s, ac) \
{
\
{ \
(a) += G((b), (c), (d)) + (x) + (UINT4)(ac);
\
(a) += G((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT((a), (s));
\
(a) = ROTATE_LEFT((a), (s)); \
(a) += (b);
\
(a) += (b); \
}
}
#define HH(a, b, c, d, x, s, ac)
\
#define HH(a, b, c, d, x, s, ac) \
{
\
{ \
(a) += H((b), (c), (d)) + (x) + (UINT4)(ac);
\
(a) += H((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT((a), (s));
\
(a) = ROTATE_LEFT((a), (s)); \
(a) += (b);
\
(a) += (b); \
}
}
#define II(a, b, c, d, x, s, ac)
\
#define II(a, b, c, d, x, s, ac) \
{
\
{ \
(a) += I((b), (c), (d)) + (x) + (UINT4)(ac);
\
(a) += I((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT((a), (s));
\
(a) = ROTATE_LEFT((a), (s)); \
(a) += (b);
\
(a) += (b); \
}
}
/*
/*
* MD5 initialization. Begins an MD5 operation, writing a new context.
* MD5 initialization. Begins an MD5 operation, writing a new context.
*/
*/
void
MD5Init
(
MD5_CTX
*
context
)
{
void
MD5Init
(
MD5_CTX
*
context
)
{
context
->
count
[
0
]
=
context
->
count
[
1
]
=
0
;
context
->
count
[
0
]
=
context
->
count
[
1
]
=
0
;
/*
/*
* Load magic initialization constants.
* Load magic initialization constants.
...
@@ -106,16 +167,17 @@ void MD5Init(MD5_CTX *context) {
...
@@ -106,16 +167,17 @@ void MD5Init(MD5_CTX *context) {
* MD5 block update operation. Continues an MD5 message-digest operation,
* MD5 block update operation. Continues an MD5 message-digest operation,
* processing another message block, and updating the context.
* processing another message block, and updating the context.
*/
*/
void
MD5Update
(
MD5_CTX
*
context
,
unsigned
char
*
input
,
unsigned
int
inputLen
)
{
void
MD5Update
(
MD5_CTX
*
context
,
unsigned
char
*
input
,
unsigned
int
inputLen
)
{
unsigned
int
i
,
index
,
partLen
;
unsigned
int
i
,
index
,
partLen
;
/* Compute number of bytes mod 64 */
/* Compute number of bytes mod 64 */
index
=
(
unsigned
int
)
((
context
->
count
[
0
]
>>
3
)
&
0x3F
);
index
=
(
unsigned
int
)((
context
->
count
[
0
]
>>
3
)
&
0x3F
);
/* update number of bits */
/* update number of bits */
if
((
context
->
count
[
0
]
+=
((
UINT4
)
inputLen
<<
3
))
<
((
UINT4
)
inputLen
<<
3
))
if
((
context
->
count
[
0
]
+=
((
UINT4
)
inputLen
<<
3
))
<
((
UINT4
)
inputLen
<<
3
))
context
->
count
[
1
]
++
;
context
->
count
[
1
]
++
;
context
->
count
[
1
]
+=
((
UINT4
)
inputLen
>>
29
);
context
->
count
[
1
]
+=
((
UINT4
)
inputLen
>>
29
);
partLen
=
64
-
index
;
partLen
=
64
-
index
;
...
@@ -123,7 +185,7 @@ void MD5Update(MD5_CTX *context, unsigned char *input, unsigned int inputLen) {
...
@@ -123,7 +185,7 @@ void MD5Update(MD5_CTX *context, unsigned char *input, unsigned int inputLen) {
* Transform as many times as possible.
* Transform as many times as possible.
*/
*/
if
(
inputLen
>=
partLen
)
{
if
(
inputLen
>=
partLen
)
{
MD5_memcpy
((
POINTER
)
&
context
->
buffer
[
index
],
(
POINTER
)
input
,
partLen
);
MD5_memcpy
((
POINTER
)
&
context
->
buffer
[
index
],
(
POINTER
)
input
,
partLen
);
MD5Transform
(
context
->
state
,
context
->
buffer
);
MD5Transform
(
context
->
state
,
context
->
buffer
);
for
(
i
=
partLen
;
i
+
63
<
inputLen
;
i
+=
64
)
for
(
i
=
partLen
;
i
+
63
<
inputLen
;
i
+=
64
)
...
@@ -134,15 +196,15 @@ void MD5Update(MD5_CTX *context, unsigned char *input, unsigned int inputLen) {
...
@@ -134,15 +196,15 @@ void MD5Update(MD5_CTX *context, unsigned char *input, unsigned int inputLen) {
i
=
0
;
i
=
0
;
/* Buffer remaining input */
/* Buffer remaining input */
MD5_memcpy
((
POINTER
)
&
context
->
buffer
[
index
],
(
POINTER
)
&
input
[
i
],
MD5_memcpy
((
POINTER
)
&
context
->
buffer
[
index
],
(
POINTER
)
&
input
[
i
],
inputLen
-
i
);
inputLen
-
i
);
}
}
/*
/*
* MD5 finalization. Ends an MD5 message-digest operation, writing the the
* MD5 finalization. Ends an MD5 message-digest operation, writing the the
* message digest and zeroizing the context.
* message digest and zeroizing the context.
*/
*/
void
MD5Final
(
unsigned
char
digest
[
16
],
MD5_CTX
*
context
)
{
void
MD5Final
(
unsigned
char
digest
[
16
],
MD5_CTX
*
context
)
{
unsigned
char
bits
[
8
];
unsigned
char
bits
[
8
];
unsigned
int
index
,
padLen
;
unsigned
int
index
,
padLen
;
...
@@ -152,7 +214,7 @@ void MD5Final(unsigned char digest[16], MD5_CTX *context) {
...
@@ -152,7 +214,7 @@ void MD5Final(unsigned char digest[16], MD5_CTX *context) {
/*
/*
* Pad out to 56 mod 64.
* Pad out to 56 mod 64.
*/
*/
index
=
(
unsigned
int
)
((
context
->
count
[
0
]
>>
3
)
&
0x3f
);
index
=
(
unsigned
int
)((
context
->
count
[
0
]
>>
3
)
&
0x3f
);
padLen
=
(
index
<
56
)
?
(
56
-
index
)
:
(
120
-
index
);
padLen
=
(
index
<
56
)
?
(
56
-
index
)
:
(
120
-
index
);
MD5Update
(
context
,
PADDING
,
padLen
);
MD5Update
(
context
,
PADDING
,
padLen
);
...
@@ -164,13 +226,14 @@ void MD5Final(unsigned char digest[16], MD5_CTX *context) {
...
@@ -164,13 +226,14 @@ void MD5Final(unsigned char digest[16], MD5_CTX *context) {
/*
/*
* Zeroize sensitive information.
* Zeroize sensitive information.
*/
*/
MD5_memset
((
POINTER
)
context
,
0
,
sizeof
(
*
context
));
MD5_memset
((
POINTER
)
context
,
0
,
sizeof
(
*
context
));
}
}
/*
/*
* MD5 basic transformation. Transforms state based on block.
* MD5 basic transformation. Transforms state based on block.
*/
*/
static
void
MD5Transform
(
UINT4
state
[
4
],
unsigned
char
block
[
64
])
{
static
void
MD5Transform
(
UINT4
state
[
4
],
unsigned
char
block
[
64
])
{
UINT4
a
=
state
[
0
],
b
=
state
[
1
],
c
=
state
[
2
],
d
=
state
[
3
],
x
[
16
];
UINT4
a
=
state
[
0
],
b
=
state
[
1
],
c
=
state
[
2
],
d
=
state
[
3
],
x
[
16
];
Decode
(
x
,
block
,
64
);
Decode
(
x
,
block
,
64
);
...
@@ -256,21 +319,22 @@ static void MD5Transform(UINT4 state[4], unsigned char block[64]) {
...
@@ -256,21 +319,22 @@ static void MD5Transform(UINT4 state[4], unsigned char block[64]) {
* Zeroize sensitive information.
* Zeroize sensitive information.
*
*
*/
*/
MD5_memset
((
POINTER
)
x
,
0
,
sizeof
(
x
));
MD5_memset
((
POINTER
)
x
,
0
,
sizeof
(
x
));
}
}
/*
/*
* Encodes input (UINT4) into output (unsigned char). Assumes len is a
* Encodes input (UINT4) into output (unsigned char). Assumes len is a
* multiple of 4.
* multiple of 4.
*/
*/
static
void
Encode
(
unsigned
char
*
output
,
UINT4
*
input
,
unsigned
int
len
)
{
static
void
Encode
(
unsigned
char
*
output
,
UINT4
*
input
,
unsigned
int
len
)
{
unsigned
int
i
,
j
;
unsigned
int
i
,
j
;
for
(
i
=
0
,
j
=
0
;
j
<
len
;
i
++
,
j
+=
4
)
{
for
(
i
=
0
,
j
=
0
;
j
<
len
;
i
++
,
j
+=
4
)
{
output
[
j
]
=
(
unsigned
char
)
(
input
[
i
]
&
0xff
);
output
[
j
]
=
(
unsigned
char
)(
input
[
i
]
&
0xff
);
output
[
j
+
1
]
=
(
unsigned
char
)
((
input
[
i
]
>>
8
)
&
0xff
);
output
[
j
+
1
]
=
(
unsigned
char
)((
input
[
i
]
>>
8
)
&
0xff
);
output
[
j
+
2
]
=
(
unsigned
char
)
((
input
[
i
]
>>
16
)
&
0xff
);
output
[
j
+
2
]
=
(
unsigned
char
)((
input
[
i
]
>>
16
)
&
0xff
);
output
[
j
+
3
]
=
(
unsigned
char
)
((
input
[
i
]
>>
24
)
&
0xff
);
output
[
j
+
3
]
=
(
unsigned
char
)((
input
[
i
]
>>
24
)
&
0xff
);
}
}
}
}
...
@@ -278,19 +342,21 @@ static void Encode(unsigned char *output, UINT4 *input, unsigned int len) {
...
@@ -278,19 +342,21 @@ static void Encode(unsigned char *output, UINT4 *input, unsigned int len) {
* Decodes input (unsigned char) into output (UINT4). Assumes len is a
* Decodes input (unsigned char) into output (UINT4). Assumes len is a
* multiple of 4.
* multiple of 4.
*/
*/
static
void
Decode
(
UINT4
*
output
,
unsigned
char
*
input
,
unsigned
int
len
)
{
static
void
Decode
(
UINT4
*
output
,
unsigned
char
*
input
,
unsigned
int
len
)
{
unsigned
int
i
,
j
;
unsigned
int
i
,
j
;
for
(
i
=
0
,
j
=
0
;
j
<
len
;
i
++
,
j
+=
4
)
for
(
i
=
0
,
j
=
0
;
j
<
len
;
i
++
,
j
+=
4
)
output
[
i
]
=
((
UINT4
)
input
[
j
])
|
(((
UINT4
)
input
[
j
+
1
])
<<
8
)
|
output
[
i
]
=
((
UINT4
)
input
[
j
])
|
(((
UINT4
)
input
[
j
+
1
])
<<
8
)
|
(((
UINT4
)
input
[
j
+
2
])
<<
16
)
|
(((
UINT4
)
input
[
j
+
2
])
<<
16
)
|
(((
UINT4
)
input
[
j
+
3
])
<<
24
);
(((
UINT4
)
input
[
j
+
3
])
<<
24
);
}
}
/*
/*
* Note: Replace "for loop" with standard memcpy if possible.
* Note: Replace "for loop" with standard memcpy if possible.
*/
*/
static
void
MD5_memcpy
(
POINTER
output
,
POINTER
input
,
unsigned
int
len
)
{
static
void
MD5_memcpy
(
POINTER
output
,
POINTER
input
,
unsigned
int
len
)
{
unsigned
int
i
;
unsigned
int
i
;
for
(
i
=
0
;
i
<
len
;
i
++
)
for
(
i
=
0
;
i
<
len
;
i
++
)
...
@@ -300,36 +366,40 @@ static void MD5_memcpy(POINTER output, POINTER input, unsigned int len) {
...
@@ -300,36 +366,40 @@ static void MD5_memcpy(POINTER output, POINTER input, unsigned int len) {
/*
/*
* Note: Replace "for loop" with standard memset if possible.
* Note: Replace "for loop" with standard memset if possible.
*/
*/
static
void
MD5_memset
(
POINTER
output
,
int
value
,
unsigned
int
len
)
{
static
void
MD5_memset
(
POINTER
output
,
int
value
,
unsigned
int
len
)
{
unsigned
int
i
;
unsigned
int
i
;
for
(
i
=
0
;
i
<
len
;
i
++
)
for
(
i
=
0
;
i
<
len
;
i
++
)
((
char
*
)
output
)[
i
]
=
(
char
)
value
;
((
char
*
)
output
)[
i
]
=
(
char
)
value
;
}
}
/*
/*
* Digests a string
* Digests a string
*/
*/
int
MD5String
(
char
*
string
,
unsigned
char
digest
[
16
])
{
int
MD5String
(
char
*
string
,
unsigned
char
digest
[
16
])
{
MD5_CTX
context
;
MD5_CTX
context
;
unsigned
int
len
=
strlen
(
string
);
unsigned
int
len
=
strlen
(
string
);
MD5Init
(
&
context
);
MD5Init
(
&
context
);
MD5Update
(
&
context
,
(
unsigned
char
*
)
string
,
len
);
MD5Update
(
&
context
,
(
unsigned
char
*
)
string
,
len
);
MD5Final
(
digest
,
&
context
);
MD5Final
(
digest
,
&
context
);
return
0
;
return
0
;
}
}
int
MD5Buffer
(
char
*
buffer
,
unsigned
int
len
,
unsigned
char
digest
[
16
])
{
int
MD5Buffer
(
char
*
buffer
,
unsigned
int
len
,
unsigned
char
digest
[
16
])
{
MD5_CTX
context
;
MD5_CTX
context
;
MD5Init
(
&
context
);
MD5Init
(
&
context
);
MD5Update
(
&
context
,
(
unsigned
char
*
)
buffer
,
len
);
MD5Update
(
&
context
,
(
unsigned
char
*
)
buffer
,
len
);
MD5Final
(
digest
,
&
context
);
MD5Final
(
digest
,
&
context
);
return
0
;
return
0
;
}
}
int
MD5File
(
char
*
filename
,
unsigned
char
digest
[
16
])
{
int
MD5File
(
char
*
filename
,
unsigned
char
digest
[
16
])
{
FILE
*
file
;
FILE
*
file
;
MD5_CTX
context
;
MD5_CTX
context
;
int
len
;
int
len
;
...
@@ -349,4 +419,4 @@ int MD5File(char *filename, unsigned char digest[16]) {
...
@@ -349,4 +419,4 @@ int MD5File(char *filename, unsigned char digest[16]) {
return
0
;
return
0
;
}
}
}
//namespace common
}
// namespace common
\ No newline at end of file
\ No newline at end of file
deps/common/math/md5.h
浏览文件 @
e976988d
...
@@ -66,5 +66,5 @@ void MD5Final(unsigned char[16], MD5_CTX *);
...
@@ -66,5 +66,5 @@ void MD5Final(unsigned char[16], MD5_CTX *);
}
}
#endif
#endif
}
//
namespace common
}
//
namespace common
#endif //__COMMON_MATH_MD5_H__
#endif
//__COMMON_MATH_MD5_H__
deps/common/math/random_generator.cpp
浏览文件 @
e976988d
...
@@ -12,27 +12,26 @@ See the Mulan PSL v2 for more details. */
...
@@ -12,27 +12,26 @@ See the Mulan PSL v2 for more details. */
// Created by Longda on 2021/4/20.
// Created by Longda on 2021/4/20.
//
//
#include <chrono>
#include <chrono>
#include "common/math/random_generator.h"
#include "common/math/random_generator.h"
namespace
common
{
namespace
common
{
RandomGenerator
::
RandomGenerator
()
RandomGenerator
::
RandomGenerator
()
:
randomData
(
std
::
chrono
::
system_clock
::
now
().
time_since_epoch
().
count
())
:
randomData
(
std
::
chrono
::
system_clock
::
now
().
time_since_epoch
().
count
())
{}
{}
RandomGenerator
::~
RandomGenerator
()
{}
unsigned
int
RandomGenerator
::
next
()
{
RandomGenerator
::~
RandomGenerator
()
{}
unsigned
int
RandomGenerator
::
next
()
{
return
randomData
();
return
randomData
();
}
}
unsigned
int
RandomGenerator
::
next
(
unsigned
int
range
)
{
unsigned
int
RandomGenerator
::
next
(
unsigned
int
range
)
{
if
(
range
>
0
)
{
if
(
range
>
0
)
{
return
next
()
%
range
;
return
next
()
%
range
;
}
else
{
}
else
{
...
@@ -40,4 +39,4 @@ unsigned int RandomGenerator::next(unsigned int range) {
...
@@ -40,4 +39,4 @@ unsigned int RandomGenerator::next(unsigned int range) {
}
}
}
}
}
//namespace common
}
// namespace common
\ No newline at end of file
\ No newline at end of file
deps/common/math/random_generator.h
浏览文件 @
e976988d
...
@@ -16,27 +16,25 @@ See the Mulan PSL v2 for more details. */
...
@@ -16,27 +16,25 @@ See the Mulan PSL v2 for more details. */
#include <stdlib.h>
#include <stdlib.h>
#include <random>
#include <random>
namespace
common
namespace
common
{
{
#define DEFAULT_RANDOM_BUFF_SIZE 512
#define DEFAULT_RANDOM_BUFF_SIZE 512
class
RandomGenerator
class
RandomGenerator
{
{
public:
public:
RandomGenerator
();
RandomGenerator
();
virtual
~
RandomGenerator
();
virtual
~
RandomGenerator
();
public:
public:
unsigned
int
next
();
unsigned
int
next
();
unsigned
int
next
(
unsigned
int
range
);
unsigned
int
next
(
unsigned
int
range
);
private:
private:
// The GUN Extended TLS Version
// The GUN Extended TLS Version
std
::
mt19937
randomData
;
std
::
mt19937
randomData
;
};
};
}
}
// namespace common
#endif
/* __COMMON_MATH_RANDOM_GENERATOR_H_ */
#endif
/* __COMMON_MATH_RANDOM_GENERATOR_H_ */
deps/common/math/regex.cpp
浏览文件 @
e976988d
...
@@ -19,7 +19,8 @@ See the Mulan PSL v2 for more details. */
...
@@ -19,7 +19,8 @@ See the Mulan PSL v2 for more details. */
#include "common/math/regex.h"
#include "common/math/regex.h"
namespace
common
{
namespace
common
{
int
regex_match
(
const
char
*
str_
,
const
char
*
pat_
)
{
int
regex_match
(
const
char
*
str_
,
const
char
*
pat_
)
{
regex_t
reg
;
regex_t
reg
;
if
(
regcomp
(
&
reg
,
pat_
,
REG_EXTENDED
|
REG_NOSUB
))
if
(
regcomp
(
&
reg
,
pat_
,
REG_EXTENDED
|
REG_NOSUB
))
return
-
1
;
return
-
1
;
...
@@ -29,4 +30,4 @@ int regex_match(const char *str_, const char *pat_) {
...
@@ -29,4 +30,4 @@ int regex_match(const char *str_, const char *pat_) {
return
ret
;
return
ret
;
}
}
}
//namespace common
}
// namespace common
\ No newline at end of file
\ No newline at end of file
deps/common/math/regex.h
浏览文件 @
e976988d
...
@@ -18,5 +18,5 @@ namespace common {
...
@@ -18,5 +18,5 @@ namespace common {
int
regex_match
(
const
char
*
str_
,
const
char
*
pat_
);
int
regex_match
(
const
char
*
str_
,
const
char
*
pat_
);
}
//
namespace common
}
//
namespace common
#endif
/* __COMMON_MATH_REGEX_H__ */
#endif
/* __COMMON_MATH_REGEX_H__ */
deps/common/metrics/console_reporter.cpp
浏览文件 @
e976988d
...
@@ -21,13 +21,15 @@ See the Mulan PSL v2 for more details. */
...
@@ -21,13 +21,15 @@ See the Mulan PSL v2 for more details. */
namespace
common
{
namespace
common
{
ConsoleReporter
*
get_console_reporter
()
{
ConsoleReporter
*
get_console_reporter
()
{
static
ConsoleReporter
*
instance
=
new
ConsoleReporter
();
static
ConsoleReporter
*
instance
=
new
ConsoleReporter
();
return
instance
;
return
instance
;
}
}
void
ConsoleReporter
::
report
(
const
std
::
string
&
tag
,
Metric
*
metric
)
{
void
ConsoleReporter
::
report
(
const
std
::
string
&
tag
,
Metric
*
metric
)
{
Snapshot
*
snapshot
=
metric
->
get_snapshot
();
Snapshot
*
snapshot
=
metric
->
get_snapshot
();
if
(
snapshot
!=
NULL
)
{
if
(
snapshot
!=
NULL
)
{
...
@@ -37,4 +39,4 @@ void ConsoleReporter::report(const std::string &tag, Metric *metric) {
...
@@ -37,4 +39,4 @@ void ConsoleReporter::report(const std::string &tag, Metric *metric) {
}
}
}
}
}
// namespace common
}
// namespace common
\ No newline at end of file
\ No newline at end of file
deps/common/metrics/console_reporter.h
浏览文件 @
e976988d
...
@@ -19,12 +19,11 @@ See the Mulan PSL v2 for more details. */
...
@@ -19,12 +19,11 @@ See the Mulan PSL v2 for more details. */
namespace
common
{
namespace
common
{
class
ConsoleReporter
:
public
Reporter
{
class
ConsoleReporter
:
public
Reporter
{
public:
public:
void
report
(
const
std
::
string
&
tag
,
Metric
*
metric
);
void
report
(
const
std
::
string
&
tag
,
Metric
*
metric
);
};
};
ConsoleReporter
*
get_console_reporter
();
ConsoleReporter
*
get_console_reporter
();
}
//
namespace common
}
//
namespace common
#endif //__COMMON_METRICS_CONSOLE_REPORTER_H__
#endif
//__COMMON_METRICS_CONSOLE_REPORTER_H__
deps/common/metrics/histogram_snapshot.cpp
浏览文件 @
e976988d
...
@@ -24,145 +24,129 @@ See the Mulan PSL v2 for more details. */
...
@@ -24,145 +24,129 @@ See the Mulan PSL v2 for more details. */
namespace
common
{
namespace
common
{
HistogramSnapShot
::
HistogramSnapShot
()
HistogramSnapShot
::
HistogramSnapShot
()
{
{}
}
HistogramSnapShot
::
HistogramSnapShot
(
const
std
::
vector
<
double
>
&
collection
)
HistogramSnapShot
::
HistogramSnapShot
(
const
std
::
vector
<
double
>
&
collection
)
{
{
set_collection
(
collection
);
set_collection
(
collection
);
}
}
HistogramSnapShot
::~
HistogramSnapShot
()
HistogramSnapShot
::~
HistogramSnapShot
()
{
{}
}
void
HistogramSnapShot
::
set_collection
(
const
std
::
vector
<
double
>
&
collection
)
void
HistogramSnapShot
::
set_collection
(
const
std
::
vector
<
double
>
&
collection
)
{
{
if
(
collection
.
empty
())
if
(
collection
.
empty
())
{
{
return
;
return
;
}
}
data_
=
collection
;
data_
=
collection
;
std
::
sort
(
data_
.
begin
(),
data_
.
end
());
std
::
sort
(
data_
.
begin
(),
data_
.
end
());
}
}
size_t
HistogramSnapShot
::
size
()
const
size_t
HistogramSnapShot
::
size
()
const
{
{
return
data_
.
size
();
return
data_
.
size
();
}
}
double
HistogramSnapShot
::
get_value
(
double
quantile
)
double
HistogramSnapShot
::
get_value
(
double
quantile
)
{
{
if
(
quantile
>
1.0
f
)
if
(
quantile
>
1.0
f
)
{
{
quantile
=
1.0
f
;
quantile
=
1.0
f
;
}
}
if
(
quantile
<
0.0
f
)
{
if
(
quantile
<
0.0
f
)
quantile
=
0.0
f
;
{
}
quantile
=
0.0
f
;
}
if
(
data_
.
empty
())
{
return
0.0
f
;
if
(
data_
.
empty
())
}
{
return
0.0
f
;
double
pos
=
quantile
*
(
data_
.
size
()
+
1
);
}
if
(
pos
<
1
)
{
double
pos
=
quantile
*
(
data_
.
size
()
+
1
);
return
data_
[
0
];
}
if
(
pos
<
1
)
{
if
(
pos
>=
data_
.
size
())
{
return
data_
[
0
];
return
data_
[
data_
.
size
()
-
1
];
}
}
if
(
pos
>=
data_
.
size
())
double
lower
=
data_
[(
int
)
pos
-
1
];
{
double
upper
=
data_
[(
int
)
pos
];
return
data_
[
data_
.
size
()
-
1
];
}
return
lower
+
(
pos
-
floor
(
pos
))
*
(
upper
-
lower
);
double
lower
=
data_
[(
int
)
pos
-
1
];
double
upper
=
data_
[(
int
)
pos
];
return
lower
+
(
pos
-
floor
(
pos
))
*
(
upper
-
lower
);
}
}
double
HistogramSnapShot
::
get_median
()
double
HistogramSnapShot
::
get_median
()
{
{
return
get_value
(
0.5
f
);
return
get_value
(
0.5
f
);
}
}
double
HistogramSnapShot
::
get_75th
()
double
HistogramSnapShot
::
get_75th
()
{
{
return
get_value
(
0.75
f
);
return
get_value
(
0.75
f
);
}
}
double
HistogramSnapShot
::
get_90th
()
double
HistogramSnapShot
::
get_90th
()
{
{
return
get_value
(
0.90
f
);
return
get_value
(
0.90
f
);
}
}
double
HistogramSnapShot
::
get_95th
()
double
HistogramSnapShot
::
get_95th
()
{
{
return
get_value
(
0.95
f
);
return
get_value
(
0.95
f
);
}
}
double
HistogramSnapShot
::
get_99th
()
double
HistogramSnapShot
::
get_99th
()
{
{
return
get_value
(
0.99
f
);
return
get_value
(
0.99
f
);
}
}
double
HistogramSnapShot
::
get_999th
()
double
HistogramSnapShot
::
get_999th
()
{
{
return
get_value
(
0.999
f
);
return
get_value
(
0.999
f
);
}
}
double
HistogramSnapShot
::
get_max
()
double
HistogramSnapShot
::
get_max
()
{
{
if
(
data_
.
empty
())
if
(
data_
.
empty
())
{
{
return
0.0
f
;
return
0.0
f
;
}
}
return
static_cast
<
double
>
(
*
data_
.
rbegin
());
return
static_cast
<
double
>
(
*
data_
.
rbegin
());
}
}
double
HistogramSnapShot
::
get_min
()
double
HistogramSnapShot
::
get_min
()
{
{
if
(
data_
.
empty
())
if
(
data_
.
empty
())
{
{
return
0.0
f
;
return
0.0
f
;
}
}
return
static_cast
<
double
>
(
*
data_
.
begin
());
return
static_cast
<
double
>
(
*
data_
.
begin
());
}
}
double
HistogramSnapShot
::
get_mean
()
double
HistogramSnapShot
::
get_mean
()
{
{
if
(
data_
.
empty
())
if
(
data_
.
empty
())
{
{
return
0.0
f
;
return
0.0
f
;
}
}
return
std
::
accumulate
(
data_
.
begin
(),
data_
.
end
(),
(
double
)
0
)
*
1.0
f
/
data_
.
size
();
}
return
std
::
accumulate
(
data_
.
begin
(),
data_
.
end
(),
(
double
)
0
)
*
1.0
f
/
data_
.
size
();
}
const
std
::
vector
<
double
>
&
HistogramSnapShot
::
get_values
()
const
std
::
vector
<
double
>
&
HistogramSnapShot
::
get_values
()
{
{
return
data_
;
return
data_
;
}
}
std
::
string
HistogramSnapShot
::
to_string
()
{
std
::
string
HistogramSnapShot
::
to_string
()
{
std
::
stringstream
oss
;
std
::
stringstream
oss
;
oss
<<
"mean:"
<<
get_mean
()
<<
",min:"
<<
get_min
()
<<
",max:"
<<
get_max
()
oss
<<
"mean:"
<<
get_mean
()
<<
",min:"
<<
get_min
()
<<
",max:"
<<
get_max
()
<<
",median:"
<<
get_median
()
<<
",median:"
<<
get_median
()
<<
", 75th:"
<<
get_75th
()
<<
", 75th:"
<<
get_75th
()
<<
",90th:"
<<
get_90th
()
<<
",99th:"
<<
get_99th
()
<<
",999th:"
<<
get_999th
();
<<
",90th:"
<<
get_90th
()
<<
",99th:"
<<
get_99th
()
<<
",999th:"
<<
get_999th
();
return
oss
.
str
();
return
oss
.
str
();
}
}
}
// namespace common
}
// namespace common
\ No newline at end of file
\ No newline at end of file
deps/common/metrics/histogram_snapshot.h
浏览文件 @
e976988d
...
@@ -65,10 +65,11 @@ public:
...
@@ -65,10 +65,11 @@ public:
const
std
::
vector
<
double
>
&
get_values
();
const
std
::
vector
<
double
>
&
get_values
();
std
::
string
to_string
();
std
::
string
to_string
();
protected:
protected:
std
::
vector
<
double
>
data_
;
std
::
vector
<
double
>
data_
;
};
};
}
// namespace common
}
// namespace common
#endif
/* __COMMON_METRICS_HISTOGRAM_SNAPSHOT_H_ */
#endif
/* __COMMON_METRICS_HISTOGRAM_SNAPSHOT_H_ */
deps/common/metrics/log_reporter.cpp
浏览文件 @
e976988d
...
@@ -19,23 +19,24 @@ See the Mulan PSL v2 for more details. */
...
@@ -19,23 +19,24 @@ See the Mulan PSL v2 for more details. */
#include "common/metrics/metric.h"
#include "common/metrics/metric.h"
#include "common/log/log.h"
#include "common/log/log.h"
namespace
common
{
namespace
common
{
LogReporter
*
get_log_reporter
()
{
LogReporter
*
get_log_reporter
()
static
LogReporter
*
instance
=
new
LogReporter
();
{
static
LogReporter
*
instance
=
new
LogReporter
();
return
instance
;
return
instance
;
}
}
void
LogReporter
::
report
(
const
std
::
string
&
tag
,
Metric
*
metric
)
{
void
LogReporter
::
report
(
const
std
::
string
&
tag
,
Metric
*
metric
)
{
Snapshot
*
snapshot
=
metric
->
get_snapshot
();
Snapshot
*
snapshot
=
metric
->
get_snapshot
();
if
(
snapshot
!=
NULL
)
{
if
(
snapshot
!=
NULL
)
{
LOG_INFO
(
"%s:%s"
,
tag
.
c_str
(),
snapshot
->
to_string
().
c_str
());
LOG_INFO
(
"%s:%s"
,
tag
.
c_str
(),
snapshot
->
to_string
().
c_str
());
}
else
{
}
else
{
LOG_WARN
(
"There is no snapshot of %s metrics."
,
tag
.
c_str
());
LOG_WARN
(
"There is no snapshot of %s metrics."
,
tag
.
c_str
());
}
}
}
}
}
// namespace common
}
// namespace common
\ No newline at end of file
\ No newline at end of file
deps/common/metrics/log_reporter.h
浏览文件 @
e976988d
...
@@ -19,12 +19,11 @@ See the Mulan PSL v2 for more details. */
...
@@ -19,12 +19,11 @@ See the Mulan PSL v2 for more details. */
namespace
common
{
namespace
common
{
class
LogReporter
:
public
Reporter
{
class
LogReporter
:
public
Reporter
{
public:
public:
void
report
(
const
std
::
string
&
tag
,
Metric
*
metric
);
void
report
(
const
std
::
string
&
tag
,
Metric
*
metric
);
};
};
LogReporter
*
get_log_reporter
();
LogReporter
*
get_log_reporter
();
}
//
namespace common
}
//
namespace common
#endif //__COMMON_METRICS_LOG_REPORTER_H__
#endif
//__COMMON_METRICS_LOG_REPORTER_H__
deps/common/metrics/metric.h
浏览文件 @
e976988d
...
@@ -23,11 +23,14 @@ class Metric {
...
@@ -23,11 +23,14 @@ class Metric {
public:
public:
virtual
void
snapshot
()
=
0
;
virtual
void
snapshot
()
=
0
;
virtual
Snapshot
*
get_snapshot
()
{
return
snapshot_value_
;
}
virtual
Snapshot
*
get_snapshot
()
{
return
snapshot_value_
;
}
protected:
protected:
Snapshot
*
snapshot_value_
;
Snapshot
*
snapshot_value_
;
};
};
}
//
namespace common
}
//
namespace common
#endif //__COMMON_METRICS_METRIC_H__
#endif
//__COMMON_METRICS_METRIC_H__
deps/common/metrics/metrics.cpp
浏览文件 @
e976988d
...
@@ -16,7 +16,8 @@ See the Mulan PSL v2 for more details. */
...
@@ -16,7 +16,8 @@ See the Mulan PSL v2 for more details. */
#include "common/lang/mutex.h"
#include "common/lang/mutex.h"
namespace
common
{
namespace
common
{
Meter
::
Meter
()
{
Meter
::
Meter
()
{
struct
timeval
start_time
;
struct
timeval
start_time
;
gettimeofday
(
&
start_time
,
NULL
);
gettimeofday
(
&
start_time
,
NULL
);
...
@@ -24,17 +25,26 @@ Meter::Meter() {
...
@@ -24,17 +25,26 @@ Meter::Meter() {
value_
.
store
(
0l
);
value_
.
store
(
0l
);
}
}
Meter
::~
Meter
()
{
Meter
::~
Meter
()
{
if
(
snapshot_value_
!=
NULL
)
{
if
(
snapshot_value_
!=
NULL
)
{
delete
snapshot_value_
;
delete
snapshot_value_
;
snapshot_value_
=
NULL
;
snapshot_value_
=
NULL
;
}
}
}
}
void
Meter
::
inc
(
long
increase
)
{
value_
.
fetch_add
(
increase
);
}
void
Meter
::
inc
(
long
increase
)
void
Meter
::
inc
()
{
inc
(
1l
);
}
{
value_
.
fetch_add
(
increase
);
}
void
Meter
::
inc
()
{
inc
(
1l
);
}
void
Meter
::
snapshot
()
{
void
Meter
::
snapshot
()
{
// lock here
// lock here
struct
timeval
now
;
struct
timeval
now
;
...
@@ -42,8 +52,7 @@ void Meter::snapshot() {
...
@@ -42,8 +52,7 @@ void Meter::snapshot() {
long
now_tick
=
now
.
tv_sec
*
1000000
+
now
.
tv_usec
;
long
now_tick
=
now
.
tv_sec
*
1000000
+
now
.
tv_usec
;
double
temp_value
=
double
temp_value
=
((
double
)
value_
.
exchange
(
0l
))
/
((
now_tick
-
snapshot_tick_
)
/
1000000
);
((
double
)
value_
.
exchange
(
0l
))
/
((
now_tick
-
snapshot_tick_
)
/
1000000
);
snapshot_tick_
=
now_tick
;
snapshot_tick_
=
now_tick
;
if
(
snapshot_value_
==
NULL
)
{
if
(
snapshot_value_
==
NULL
)
{
...
@@ -52,21 +61,27 @@ void Meter::snapshot() {
...
@@ -52,21 +61,27 @@ void Meter::snapshot() {
((
SnapshotBasic
<
double
>
*
)
snapshot_value_
)
->
setValue
(
temp_value
);
((
SnapshotBasic
<
double
>
*
)
snapshot_value_
)
->
setValue
(
temp_value
);
}
}
SimpleTimer
::~
SimpleTimer
()
{
SimpleTimer
::~
SimpleTimer
()
{
if
(
snapshot_value_
!=
NULL
)
{
if
(
snapshot_value_
!=
NULL
)
{
delete
snapshot_value_
;
delete
snapshot_value_
;
snapshot_value_
=
NULL
;
snapshot_value_
=
NULL
;
}
}
}
}
void
SimpleTimer
::
inc
(
long
increase
)
{
void
SimpleTimer
::
inc
(
long
increase
)
{
value_
.
fetch_add
(
increase
);
value_
.
fetch_add
(
increase
);
times_
.
fetch_add
(
1
);
times_
.
fetch_add
(
1
);
}
}
void
SimpleTimer
::
update
(
long
one
)
{
inc
(
one
);
}
void
SimpleTimer
::
update
(
long
one
)
{
inc
(
one
);
}
void
SimpleTimer
::
snapshot
()
{
void
SimpleTimer
::
snapshot
()
{
// lock here
// lock here
struct
timeval
now
;
struct
timeval
now
;
...
@@ -81,7 +96,7 @@ void SimpleTimer::snapshot() {
...
@@ -81,7 +96,7 @@ void SimpleTimer::snapshot() {
double
mean
=
0
;
double
mean
=
0
;
if
(
times_snapshot
>
0
)
{
if
(
times_snapshot
>
0
)
{
tps
=
((
double
)
times_snapshot
)
/
((
now_tick
-
snapshot_tick_
)
/
1000000
);
tps
=
((
double
)
times_snapshot
)
/
((
now_tick
-
snapshot_tick_
)
/
1000000
);
mean
=
((
double
)
value_snapshot
)
/
times_snapshot
;
mean
=
((
double
)
value_snapshot
)
/
times_snapshot
;
}
}
...
@@ -93,21 +108,22 @@ void SimpleTimer::snapshot() {
...
@@ -93,21 +108,22 @@ void SimpleTimer::snapshot() {
((
SimplerTimerSnapshot
*
)
snapshot_value_
)
->
setValue
(
mean
,
tps
);
((
SimplerTimerSnapshot
*
)
snapshot_value_
)
->
setValue
(
mean
,
tps
);
}
}
Histogram
::
Histogram
(
RandomGenerator
&
random
)
:
UniformReservoir
(
random
)
{}
Histogram
::
Histogram
(
RandomGenerator
&
random
)
:
UniformReservoir
(
random
)
{}
Histogram
::
Histogram
(
RandomGenerator
&
random
,
size_t
size
)
:
UniformReservoir
(
random
,
size
)
{}
Histogram
::~
Histogram
()
{
Histogram
::
Histogram
(
RandomGenerator
&
random
,
size_t
size
)
:
UniformReservoir
(
random
,
size
)
{}
}
Histogram
::~
Histogram
()
{}
void
Histogram
::
snapshot
()
{
void
Histogram
::
snapshot
()
{
UniformReservoir
::
snapshot
();
UniformReservoir
::
snapshot
();
}
}
Timer
::
Timer
(
RandomGenerator
&
random
)
Timer
::
Timer
(
RandomGenerator
&
random
)
:
UniformReservoir
(
random
)
:
UniformReservoir
(
random
)
{
{
struct
timeval
start_time
;
struct
timeval
start_time
;
gettimeofday
(
&
start_time
,
NULL
);
gettimeofday
(
&
start_time
,
NULL
);
...
@@ -115,8 +131,8 @@ Timer::Timer(RandomGenerator &random)
...
@@ -115,8 +131,8 @@ Timer::Timer(RandomGenerator &random)
value_
.
store
(
0l
);
value_
.
store
(
0l
);
}
}
Timer
::
Timer
(
RandomGenerator
&
random
,
size_t
size
)
Timer
::
Timer
(
RandomGenerator
&
random
,
size_t
size
)
:
UniformReservoir
(
random
,
size
)
:
UniformReservoir
(
random
,
size
)
{
{
struct
timeval
start_time
;
struct
timeval
start_time
;
gettimeofday
(
&
start_time
,
NULL
);
gettimeofday
(
&
start_time
,
NULL
);
...
@@ -124,19 +140,22 @@ Timer::Timer(RandomGenerator &random, size_t size)
...
@@ -124,19 +140,22 @@ Timer::Timer(RandomGenerator &random, size_t size)
value_
.
store
(
0l
);
value_
.
store
(
0l
);
}
}
Timer
::~
Timer
()
{
Timer
::~
Timer
()
{
if
(
snapshot_value_
==
NULL
)
{
if
(
snapshot_value_
==
NULL
)
{
delete
snapshot_value_
;
delete
snapshot_value_
;
snapshot_value_
=
NULL
;
snapshot_value_
=
NULL
;
}
}
}
}
void
Timer
::
update
(
double
ms
)
{
void
Timer
::
update
(
double
ms
)
{
UniformReservoir
::
update
(
ms
);
UniformReservoir
::
update
(
ms
);
value_
.
fetch_add
(
1l
);
value_
.
fetch_add
(
1l
);
}
}
void
Timer
::
snapshot
()
{
void
Timer
::
snapshot
()
{
if
(
snapshot_value_
==
NULL
)
{
if
(
snapshot_value_
==
NULL
)
{
snapshot_value_
=
new
TimerSnapshot
();
snapshot_value_
=
new
TimerSnapshot
();
}
}
...
@@ -147,8 +166,7 @@ void Timer::snapshot() {
...
@@ -147,8 +166,7 @@ void Timer::snapshot() {
long
now_tick
=
now
.
tv_sec
*
1000000
+
now
.
tv_usec
;
long
now_tick
=
now
.
tv_sec
*
1000000
+
now
.
tv_usec
;
double
tps
=
double
tps
=
((
double
)
value_
.
exchange
(
0l
))
/
((
now_tick
-
snapshot_tick_
)
/
1000000
);
((
double
)
value_
.
exchange
(
0l
)
)
/
((
now_tick
-
snapshot_tick_
)
/
1000000
);
snapshot_tick_
=
now_tick
;
snapshot_tick_
=
now_tick
;
MUTEX_LOCK
(
&
mutex
);
MUTEX_LOCK
(
&
mutex
);
...
@@ -159,13 +177,14 @@ void Timer::snapshot() {
...
@@ -159,13 +177,14 @@ void Timer::snapshot() {
timer_snapshot
->
set_tps
(
tps
);
timer_snapshot
->
set_tps
(
tps
);
}
}
TimerStat
::
TimerStat
(
SimpleTimer
&
other_st
)
TimerStat
::
TimerStat
(
SimpleTimer
&
other_st
)
:
st_
(
other_st
),
start_tick_
(
0
),
end_tick_
(
0
)
:
st_
(
other_st
),
start_tick_
(
0
),
end_tick_
(
0
)
{
{
start
();
start
();
}
}
TimerStat
::~
TimerStat
()
{
TimerStat
::~
TimerStat
()
{
if
(
end_tick_
==
0
)
{
if
(
end_tick_
==
0
)
{
end
();
end
();
}
}
...
@@ -173,18 +192,20 @@ TimerStat::~TimerStat() {
...
@@ -173,18 +192,20 @@ TimerStat::~TimerStat() {
st_
.
update
((
end_tick_
-
start_tick_
)
/
1000
);
st_
.
update
((
end_tick_
-
start_tick_
)
/
1000
);
}
}
void
TimerStat
::
start
()
{
void
TimerStat
::
start
()
{
struct
timeval
now
;
struct
timeval
now
;
gettimeofday
(
&
now
,
NULL
);
gettimeofday
(
&
now
,
NULL
);
start_tick_
=
now
.
tv_sec
*
1000000
+
now
.
tv_usec
;
start_tick_
=
now
.
tv_sec
*
1000000
+
now
.
tv_usec
;
}
}
void
TimerStat
::
end
()
{
void
TimerStat
::
end
()
{
struct
timeval
now
;
struct
timeval
now
;
gettimeofday
(
&
now
,
NULL
);
gettimeofday
(
&
now
,
NULL
);
end_tick_
=
now
.
tv_sec
*
1000000
+
now
.
tv_usec
;
end_tick_
=
now
.
tv_sec
*
1000000
+
now
.
tv_usec
;
}
}
}
// namespace common
}
// namespace common
\ No newline at end of file
\ No newline at end of file
deps/common/metrics/metrics.h
浏览文件 @
e976988d
...
@@ -27,17 +27,23 @@ namespace common {
...
@@ -27,17 +27,23 @@ namespace common {
class
Gauge
:
public
Metric
{
class
Gauge
:
public
Metric
{
public:
public:
// user implement snapshot function
// user implement snapshot function
void
set_snapshot
(
Snapshot
*
value
)
{
snapshot_value_
=
value
;
}
void
set_snapshot
(
Snapshot
*
value
)
{
snapshot_value_
=
value
;
}
};
};
class
Counter
:
public
Metric
{
class
Counter
:
public
Metric
{
void
set_snapshot
(
SnapshotBasic
<
long
>
*
value
)
{
snapshot_value_
=
value
;
}
void
set_snapshot
(
SnapshotBasic
<
long
>
*
value
)
{
snapshot_value_
=
value
;
}
};
};
class
Meter
:
public
Metric
{
class
Meter
:
public
Metric
{
public:
public:
Meter
();
Meter
();
virtual
~
Meter
();
virtual
~
Meter
();
void
inc
(
long
increase
);
void
inc
(
long
increase
);
void
inc
();
void
inc
();
...
@@ -76,7 +82,6 @@ public:
...
@@ -76,7 +82,6 @@ public:
virtual
~
Histogram
();
virtual
~
Histogram
();
void
snapshot
();
void
snapshot
();
};
};
// timeunit is ms
// timeunit is ms
...
@@ -109,5 +114,5 @@ public:
...
@@ -109,5 +114,5 @@ public:
long
end_tick_
;
long
end_tick_
;
};
};
}
// namespace common
}
// namespace common
#endif //__COMMON_METRICS_METRICS_H__
#endif
//__COMMON_METRICS_METRICS_H__
deps/common/metrics/metrics_registry.cpp
浏览文件 @
e976988d
...
@@ -12,32 +12,33 @@ See the Mulan PSL v2 for more details. */
...
@@ -12,32 +12,33 @@ See the Mulan PSL v2 for more details. */
// Created by Longda on 2021/4/20.
// Created by Longda on 2021/4/20.
//
//
#include "common/metrics/metrics_registry.h"
#include "common/metrics/metrics_registry.h"
#include "common/log/log.h"
#include "common/log/log.h"
namespace
common
{
namespace
common
{
MetricsRegistry
&
get_metrics_registry
()
{
MetricsRegistry
&
get_metrics_registry
()
{
static
MetricsRegistry
instance
;
static
MetricsRegistry
instance
;
return
instance
;
return
instance
;
}
}
void
MetricsRegistry
::
register_metric
(
const
std
::
string
&
tag
,
Metric
*
metric
)
{
void
MetricsRegistry
::
register_metric
(
const
std
::
string
&
tag
,
Metric
*
metric
)
std
::
map
<
std
::
string
,
Metric
*>::
iterator
it
=
metrics
.
find
(
tag
);
{
std
::
map
<
std
::
string
,
Metric
*>::
iterator
it
=
metrics
.
find
(
tag
);
if
(
it
!=
metrics
.
end
())
{
if
(
it
!=
metrics
.
end
())
{
LOG_WARN
(
"%s has been registered!"
,
tag
.
c_str
());
LOG_WARN
(
"%s has been registered!"
,
tag
.
c_str
());
return
;
return
;
}
}
//metrics[tag] = metric;
//
metrics[tag] = metric;
metrics
.
insert
(
std
::
pair
<
std
::
string
,
Metric
*>
(
tag
,
metric
));
metrics
.
insert
(
std
::
pair
<
std
::
string
,
Metric
*>
(
tag
,
metric
));
LOG_INFO
(
"Successfully register metric :%s"
,
tag
.
c_str
());
LOG_INFO
(
"Successfully register metric :%s"
,
tag
.
c_str
());
}
}
void
MetricsRegistry
::
unregister
(
const
std
::
string
&
tag
)
{
void
MetricsRegistry
::
unregister
(
const
std
::
string
&
tag
)
{
unsigned
int
num
=
metrics
.
erase
(
tag
);
unsigned
int
num
=
metrics
.
erase
(
tag
);
if
(
num
==
0
)
{
if
(
num
==
0
)
{
LOG_WARN
(
"There is no %s metric!"
,
tag
.
c_str
());
LOG_WARN
(
"There is no %s metric!"
,
tag
.
c_str
());
...
@@ -46,22 +47,22 @@ void MetricsRegistry::unregister(const std::string &tag) {
...
@@ -46,22 +47,22 @@ void MetricsRegistry::unregister(const std::string &tag) {
LOG_INFO
(
"Successfully remove metric of %s"
,
tag
.
c_str
());
LOG_INFO
(
"Successfully remove metric of %s"
,
tag
.
c_str
());
}
}
void
MetricsRegistry
::
snapshot
()
{
void
MetricsRegistry
::
snapshot
()
std
::
map
<
std
::
string
,
Metric
*>::
iterator
it
=
metrics
.
begin
();
{
std
::
map
<
std
::
string
,
Metric
*>::
iterator
it
=
metrics
.
begin
();
for
(;
it
!=
metrics
.
end
();
it
++
)
{
for
(;
it
!=
metrics
.
end
();
it
++
)
{
it
->
second
->
snapshot
();
it
->
second
->
snapshot
();
}
}
}
}
void
MetricsRegistry
::
report
()
{
void
MetricsRegistry
::
report
()
for
(
std
::
list
<
Reporter
*>::
iterator
reporterIt
=
reporters
.
begin
();
{
reporterIt
!=
reporters
.
end
();
reporterIt
++
)
{
for
(
std
::
list
<
Reporter
*>::
iterator
reporterIt
=
reporters
.
begin
();
reporterIt
!=
reporters
.
end
();
reporterIt
++
)
{
for
(
std
::
map
<
std
::
string
,
Metric
*>::
iterator
it
=
metrics
.
begin
();
for
(
std
::
map
<
std
::
string
,
Metric
*>::
iterator
it
=
metrics
.
begin
();
it
!=
metrics
.
end
();
it
++
)
{
it
!=
metrics
.
end
();
it
++
)
{
(
*
reporterIt
)
->
report
(
it
->
first
,
it
->
second
);
(
*
reporterIt
)
->
report
(
it
->
first
,
it
->
second
);
}
}
}
}
}
}
}
// namespace common
}
// namespace common
deps/common/metrics/metrics_registry.h
浏览文件 @
e976988d
...
@@ -26,7 +26,7 @@ namespace common {
...
@@ -26,7 +26,7 @@ namespace common {
class
MetricsRegistry
{
class
MetricsRegistry
{
public:
public:
MetricsRegistry
()
{};
MetricsRegistry
(){};
virtual
~
MetricsRegistry
(){};
virtual
~
MetricsRegistry
(){};
void
register_metric
(
const
std
::
string
&
tag
,
Metric
*
metric
);
void
register_metric
(
const
std
::
string
&
tag
,
Metric
*
metric
);
...
@@ -36,18 +36,16 @@ public:
...
@@ -36,18 +36,16 @@ public:
void
report
();
void
report
();
void
add_reporter
(
Reporter
*
reporter
)
{
void
add_reporter
(
Reporter
*
reporter
)
{
reporters
.
push_back
(
reporter
);
reporters
.
push_back
(
reporter
);
}
}
protected:
protected:
std
::
map
<
std
::
string
,
Metric
*>
metrics
;
std
::
map
<
std
::
string
,
Metric
*>
metrics
;
std
::
list
<
Reporter
*>
reporters
;
std
::
list
<
Reporter
*>
reporters
;
};
};
MetricsRegistry
&
get_metrics_registry
();
MetricsRegistry
&
get_metrics_registry
();
}
//
namespace common
}
//
namespace common
#endif //__COMMON_METRICS_METRICS_REGISTRY_H__
#endif
//__COMMON_METRICS_METRICS_REGISTRY_H__
deps/common/metrics/reporter.h
浏览文件 @
e976988d
...
@@ -20,10 +20,9 @@ See the Mulan PSL v2 for more details. */
...
@@ -20,10 +20,9 @@ See the Mulan PSL v2 for more details. */
namespace
common
{
namespace
common
{
class
Reporter
{
class
Reporter
{
public:
public:
virtual
void
report
(
const
std
::
string
&
tag
,
Metric
*
metric
)
=
0
;
virtual
void
report
(
const
std
::
string
&
tag
,
Metric
*
metric
)
=
0
;
};
};
}
// namespace Reporter
}
// namespace common
#endif //__COMMON_METRICS_REPORTER_H__
#endif
//__COMMON_METRICS_REPORTER_H__
deps/common/metrics/reservoir.cpp
浏览文件 @
e976988d
...
@@ -16,17 +16,13 @@ See the Mulan PSL v2 for more details. */
...
@@ -16,17 +16,13 @@ See the Mulan PSL v2 for more details. */
using
namespace
common
;
using
namespace
common
;
Reservoir
::
Reservoir
(
RandomGenerator
&
random
)
:
Reservoir
::
Reservoir
(
RandomGenerator
&
random
)
:
random
(
random
)
random
(
random
)
{}
{
}
Reservoir
::~
Reservoir
()
Reservoir
::~
Reservoir
()
{
{}
}
size_t
Reservoir
::
next
(
size_t
range
)
size_t
Reservoir
::
next
(
size_t
range
)
{
{
return
random
.
next
(
range
);
return
random
.
next
(
range
);
}
}
deps/common/metrics/reservoir.h
浏览文件 @
e976988d
...
@@ -21,8 +21,6 @@ See the Mulan PSL v2 for more details. */
...
@@ -21,8 +21,6 @@ See the Mulan PSL v2 for more details. */
#include "common/metrics/metric.h"
#include "common/metrics/metric.h"
#include "common/metrics/snapshot.h"
#include "common/metrics/snapshot.h"
namespace
common
{
namespace
common
{
class
Reservoir
:
public
Metric
{
class
Reservoir
:
public
Metric
{
...
@@ -45,6 +43,6 @@ private:
...
@@ -45,6 +43,6 @@ private:
RandomGenerator
&
random
;
RandomGenerator
&
random
;
};
};
}
// namespace common
}
// namespace common
#endif
/* __COMMON_METRICS_RESERVOIR_H_ */
#endif
/* __COMMON_METRICS_RESERVOIR_H_ */
deps/common/metrics/sampler.cpp
浏览文件 @
e976988d
...
@@ -19,17 +19,21 @@ See the Mulan PSL v2 for more details. */
...
@@ -19,17 +19,21 @@ See the Mulan PSL v2 for more details. */
namespace
common
{
namespace
common
{
Sampler
*&
get_sampler
()
{
Sampler
*&
get_sampler
()
{
static
Sampler
*
g_sampler
=
new
Sampler
();
static
Sampler
*
g_sampler
=
new
Sampler
();
return
g_sampler
;
return
g_sampler
;
}
}
Sampler
::
Sampler
()
:
random_
()
{}
Sampler
::
Sampler
()
:
random_
()
{}
Sampler
::~
Sampler
()
{}
Sampler
::~
Sampler
()
{}
bool
Sampler
::
sampling
()
{
bool
Sampler
::
sampling
()
{
int
v
=
random_
.
next
(
RANGE_SIZE
);
int
v
=
random_
.
next
(
RANGE_SIZE
);
if
(
v
<=
ratio_num_
)
{
if
(
v
<=
ratio_num_
)
{
return
true
;
return
true
;
...
@@ -38,9 +42,13 @@ bool Sampler::sampling() {
...
@@ -38,9 +42,13 @@ bool Sampler::sampling() {
}
}
}
}
double
Sampler
::
get_ratio
()
{
return
ratio_
;
}
double
Sampler
::
get_ratio
()
{
return
ratio_
;
}
void
Sampler
::
set_ratio
(
double
ratio
)
{
void
Sampler
::
set_ratio
(
double
ratio
)
{
if
(
0
<=
ratio
&&
ratio
<=
1
)
{
if
(
0
<=
ratio
&&
ratio
<=
1
)
{
this
->
ratio_
=
ratio
;
this
->
ratio_
=
ratio
;
ratio_num_
=
ratio
*
RANGE_SIZE
;
ratio_num_
=
ratio
*
RANGE_SIZE
;
...
@@ -49,5 +57,4 @@ void Sampler::set_ratio(double ratio) {
...
@@ -49,5 +57,4 @@ void Sampler::set_ratio(double ratio) {
}
}
}
}
}
//namespace common
}
// namespace common
deps/common/metrics/sampler.h
浏览文件 @
e976988d
...
@@ -19,7 +19,6 @@ See the Mulan PSL v2 for more details. */
...
@@ -19,7 +19,6 @@ See the Mulan PSL v2 for more details. */
namespace
common
{
namespace
common
{
/**
/**
* The most simple sample function
* The most simple sample function
*/
*/
...
@@ -40,5 +39,5 @@ private:
...
@@ -40,5 +39,5 @@ private:
};
};
Sampler
*&
get_sampler
();
Sampler
*&
get_sampler
();
}
//
namespace common
}
//
namespace common
#endif //__COMMON_METRICS_SAMPLER_H__
#endif
//__COMMON_METRICS_SAMPLER_H__
deps/common/metrics/snapshot.h
浏览文件 @
e976988d
...
@@ -20,25 +20,30 @@ See the Mulan PSL v2 for more details. */
...
@@ -20,25 +20,30 @@ See the Mulan PSL v2 for more details. */
namespace
common
{
namespace
common
{
class
Snapshot
{
class
Snapshot
{
public:
public:
virtual
~
Snapshot
()
{};
virtual
~
Snapshot
(){};
virtual
std
::
string
to_string
()
=
0
;
virtual
std
::
string
to_string
()
=
0
;
};
};
template
<
class
T
>
template
<
class
T
>
class
SnapshotBasic
:
public
Snapshot
{
class
SnapshotBasic
:
public
Snapshot
{
public:
public:
SnapshotBasic
()
:
value
(){
SnapshotBasic
()
:
value
(){
};
};
virtual
~
SnapshotBasic
()
{}
virtual
~
SnapshotBasic
()
{}
void
setValue
(
T
&
input
)
{
value
=
input
;
}
void
setValue
(
T
&
input
)
{
value
=
input
;
}
std
::
string
to_string
()
{
std
::
string
to_string
()
{
std
::
string
ret
;
std
::
string
ret
;
val_to_str
(
value
,
ret
);
val_to_str
(
value
,
ret
);
return
ret
;
return
ret
;
...
@@ -48,28 +53,31 @@ private:
...
@@ -48,28 +53,31 @@ private:
T
value
;
T
value
;
};
};
class
SimplerTimerSnapshot
:
public
Snapshot
{
class
SimplerTimerSnapshot
:
public
Snapshot
{
public:
public:
SimplerTimerSnapshot
()
{
SimplerTimerSnapshot
()
{}
}
virtual
~
SimplerTimerSnapshot
()
{}
virtual
~
SimplerTimerSnapshot
()
{}
void
setValue
(
double
mean
,
double
tps
)
{
void
setValue
(
double
mean
,
double
tps
)
{
this
->
mean
=
mean
;
this
->
mean
=
mean
;
this
->
tps
=
tps
;
this
->
tps
=
tps
;
}
}
std
::
string
to_string
()
{
std
::
string
to_string
()
{
std
::
stringstream
oss
;
std
::
stringstream
oss
;
oss
<<
"mean:"
<<
mean
<<
",tps:"
<<
tps
;
oss
<<
"mean:"
<<
mean
<<
",tps:"
<<
tps
;
return
oss
.
str
();
return
oss
.
str
();
}
}
private:
private:
double
mean
=
1.0
;
double
mean
=
1.0
;
double
tps
=
1.0
;
double
tps
=
1.0
;
};
};
}
//
namespace common
}
//
namespace common
#endif //__COMMON_METRICS_SNAPSHOT_H__
#endif
//__COMMON_METRICS_SNAPSHOT_H__
deps/common/metrics/timer_snapshot.cpp
浏览文件 @
e976988d
...
@@ -17,19 +17,28 @@ See the Mulan PSL v2 for more details. */
...
@@ -17,19 +17,28 @@ See the Mulan PSL v2 for more details. */
namespace
common
{
namespace
common
{
TimerSnapshot
::
TimerSnapshot
()
{}
TimerSnapshot
::
TimerSnapshot
()
{}
TimerSnapshot
::~
TimerSnapshot
()
{}
TimerSnapshot
::~
TimerSnapshot
()
{}
double
TimerSnapshot
::
get_tps
()
{
return
tps
;
}
double
TimerSnapshot
::
get_tps
()
{
return
tps
;
}
void
TimerSnapshot
::
set_tps
(
double
tps
)
{
this
->
tps
=
tps
;
}
void
TimerSnapshot
::
set_tps
(
double
tps
)
{
this
->
tps
=
tps
;
}
std
::
string
TimerSnapshot
::
to_string
()
{
std
::
string
TimerSnapshot
::
to_string
()
{
std
::
stringstream
oss
;
std
::
stringstream
oss
;
oss
<<
HistogramSnapShot
::
to_string
()
<<
",tps:"
<<
tps
;
oss
<<
HistogramSnapShot
::
to_string
()
<<
",tps:"
<<
tps
;
return
oss
.
str
();
return
oss
.
str
();
}
}
}
// namespace common
}
// namespace common
\ No newline at end of file
\ No newline at end of file
deps/common/metrics/timer_snapshot.h
浏览文件 @
e976988d
...
@@ -27,8 +27,9 @@ public:
...
@@ -27,8 +27,9 @@ public:
void
set_tps
(
double
tps
);
void
set_tps
(
double
tps
);
std
::
string
to_string
();
std
::
string
to_string
();
protected:
protected:
double
tps
=
1.0
;
double
tps
=
1.0
;
};
};
}
//
namespace common
}
//
namespace common
#endif //__COMMON_METRICS_TIMER_SNAPSHOT_H__
#endif
//__COMMON_METRICS_TIMER_SNAPSHOT_H__
deps/common/metrics/uniform_reservoir.cpp
浏览文件 @
e976988d
...
@@ -23,8 +23,8 @@ namespace common {
...
@@ -23,8 +23,8 @@ namespace common {
#define DEFAULT_SIZE 1023
#define DEFAULT_SIZE 1023
UniformReservoir
::
UniformReservoir
(
RandomGenerator
&
random
)
UniformReservoir
::
UniformReservoir
(
RandomGenerator
&
random
)
:
Reservoir
(
random
),
counter
(
0
)
:
Reservoir
(
random
),
counter
(
0
)
{
{
pthread_mutexattr_t
mutexatr
;
pthread_mutexattr_t
mutexatr
;
pthread_mutexattr_init
(
&
mutexatr
);
pthread_mutexattr_init
(
&
mutexatr
);
pthread_mutexattr_settype
(
&
mutexatr
,
PTHREAD_MUTEX_RECURSIVE
);
pthread_mutexattr_settype
(
&
mutexatr
,
PTHREAD_MUTEX_RECURSIVE
);
...
@@ -34,8 +34,8 @@ UniformReservoir::UniformReservoir(RandomGenerator &random)
...
@@ -34,8 +34,8 @@ UniformReservoir::UniformReservoir(RandomGenerator &random)
init
(
DEFAULT_SIZE
);
init
(
DEFAULT_SIZE
);
}
}
UniformReservoir
::
UniformReservoir
(
RandomGenerator
&
random
,
size_t
size
)
UniformReservoir
::
UniformReservoir
(
RandomGenerator
&
random
,
size_t
size
)
:
Reservoir
(
random
),
counter
(
0
)
:
Reservoir
(
random
),
counter
(
0
)
{
{
pthread_mutexattr_t
mutexatr
;
pthread_mutexattr_t
mutexatr
;
pthread_mutexattr_init
(
&
mutexatr
);
pthread_mutexattr_init
(
&
mutexatr
);
...
@@ -45,35 +45,40 @@ UniformReservoir::UniformReservoir(RandomGenerator &random, size_t size)
...
@@ -45,35 +45,40 @@ UniformReservoir::UniformReservoir(RandomGenerator &random, size_t size)
init
(
size
);
init
(
size
);
}
}
UniformReservoir
::~
UniformReservoir
()
{
UniformReservoir
::~
UniformReservoir
()
{
if
(
snapshot_value_
==
NULL
)
{
if
(
snapshot_value_
==
NULL
)
{
delete
snapshot_value_
;
delete
snapshot_value_
;
snapshot_value_
=
NULL
;
snapshot_value_
=
NULL
;
}
}
}
}
void
UniformReservoir
::
init
(
size_t
size
)
{
void
UniformReservoir
::
init
(
size_t
size
)
{
MUTEX_LOCK
(
&
mutex
);
MUTEX_LOCK
(
&
mutex
);
counter
=
0
;
counter
=
0
;
data
.
resize
(
size
);
data
.
resize
(
size
);
MUTEX_UNLOCK
(
&
mutex
);
MUTEX_UNLOCK
(
&
mutex
);
}
}
size_t
UniformReservoir
::
size
()
{
size_t
UniformReservoir
::
size
()
{
MUTEX_LOCK
(
&
mutex
);
MUTEX_LOCK
(
&
mutex
);
size_t
size
=
(
counter
<
data
.
size
())
?
counter
:
data
.
size
();
size_t
size
=
(
counter
<
data
.
size
())
?
counter
:
data
.
size
();
MUTEX_UNLOCK
(
&
mutex
);
MUTEX_UNLOCK
(
&
mutex
);
return
size
;
return
size
;
}
}
size_t
UniformReservoir
::
get_count
()
{
size_t
UniformReservoir
::
get_count
()
{
MUTEX_LOCK
(
&
mutex
);
MUTEX_LOCK
(
&
mutex
);
size_t
ret
=
counter
;
size_t
ret
=
counter
;
MUTEX_UNLOCK
(
&
mutex
);
MUTEX_UNLOCK
(
&
mutex
);
return
ret
;
return
ret
;
}
}
void
UniformReservoir
::
update
(
double
value
)
{
void
UniformReservoir
::
update
(
double
value
)
{
MUTEX_LOCK
(
&
mutex
);
MUTEX_LOCK
(
&
mutex
);
size_t
count
=
++
counter
;
size_t
count
=
++
counter
;
...
@@ -87,7 +92,8 @@ void UniformReservoir::update(double value) {
...
@@ -87,7 +92,8 @@ void UniformReservoir::update(double value) {
MUTEX_UNLOCK
(
&
mutex
);
MUTEX_UNLOCK
(
&
mutex
);
}
}
void
UniformReservoir
::
snapshot
()
{
void
UniformReservoir
::
snapshot
()
{
MUTEX_LOCK
(
&
mutex
);
MUTEX_LOCK
(
&
mutex
);
std
::
vector
<
double
>
output
=
data
;
std
::
vector
<
double
>
output
=
data
;
MUTEX_UNLOCK
(
&
mutex
);
MUTEX_UNLOCK
(
&
mutex
);
...
@@ -98,7 +104,8 @@ void UniformReservoir::snapshot() {
...
@@ -98,7 +104,8 @@ void UniformReservoir::snapshot() {
((
HistogramSnapShot
*
)
snapshot_value_
)
->
set_collection
(
output
);
((
HistogramSnapShot
*
)
snapshot_value_
)
->
set_collection
(
output
);
}
}
void
UniformReservoir
::
reset
()
{
void
UniformReservoir
::
reset
()
{
MUTEX_LOCK
(
&
mutex
);
MUTEX_LOCK
(
&
mutex
);
counter
=
0
;
counter
=
0
;
...
@@ -108,4 +115,4 @@ void UniformReservoir::reset() {
...
@@ -108,4 +115,4 @@ void UniformReservoir::reset() {
MUTEX_UNLOCK
(
&
mutex
);
MUTEX_UNLOCK
(
&
mutex
);
}
}
}
// namespace common
}
// namespace common
\ No newline at end of file
\ No newline at end of file
deps/common/metrics/uniform_reservoir.h
浏览文件 @
e976988d
...
@@ -38,8 +38,8 @@ public:
...
@@ -38,8 +38,8 @@ public:
virtual
~
UniformReservoir
();
virtual
~
UniformReservoir
();
public:
public:
size_t
size
();
// data buffer size
size_t
size
();
// data buffer size
size_t
get_count
();
// how many items have been insert?
size_t
get_count
();
// how many items have been insert?
void
update
(
double
one
);
void
update
(
double
one
);
void
snapshot
();
void
snapshot
();
...
@@ -51,11 +51,11 @@ protected:
...
@@ -51,11 +51,11 @@ protected:
protected:
protected:
pthread_mutex_t
mutex
;
pthread_mutex_t
mutex
;
size_t
counter
;
// counter is likely to be bigger than data.size()
size_t
counter
;
// counter is likely to be bigger than data.size()
std
::
vector
<
double
>
data
;
std
::
vector
<
double
>
data
;
RandomGenerator
random
;
RandomGenerator
random
;
};
};
}
// namespace common
}
// namespace common
#endif
/* __COMMON_METRICS_UNIFORM_RESERVOIR_H_ */
#endif
/* __COMMON_METRICS_UNIFORM_RESERVOIR_H_ */
deps/common/mm/debug_new.cpp.skip
浏览文件 @
e976988d
...
@@ -58,7 +58,8 @@ static new_ptr_list_t *new_ptr_list[DEBUG_NEW_HASHTABLESIZE];
...
@@ -58,7 +58,8 @@ static new_ptr_list_t *new_ptr_list[DEBUG_NEW_HASHTABLESIZE];
bool new_verbose_flag = false;
bool new_verbose_flag = false;
bool new_autocheck_flag = true;
bool new_autocheck_flag = true;
bool check_leaks() {
bool check_leaks()
{
bool fLeaked = false;
bool fLeaked = false;
for (int i = 0; i < DEBUG_NEW_HASHTABLESIZE; ++i) {
for (int i = 0; i < DEBUG_NEW_HASHTABLESIZE; ++i) {
new_ptr_list_t *ptr = new_ptr_list[i];
new_ptr_list_t *ptr = new_ptr_list[i];
...
@@ -67,8 +68,10 @@ bool check_leaks() {
...
@@ -67,8 +68,10 @@ bool check_leaks() {
fLeaked = true;
fLeaked = true;
while (ptr) {
while (ptr) {
printf("Leaked object at %p (size %llu, %s:%d)\n",
printf("Leaked object at %p (size %llu, %s:%d)\n",
(char *)ptr + sizeof(new_ptr_list_t),
(char *)ptr + sizeof(new_ptr_list_t),
(unsigned long long)ptr->size, ptr->file, ptr->line);
(unsigned long long)ptr->size,
ptr->file,
ptr->line);
ptr = ptr->next;
ptr = ptr->next;
}
}
}
}
...
@@ -78,7 +81,8 @@ bool check_leaks() {
...
@@ -78,7 +81,8 @@ bool check_leaks() {
return false;
return false;
}
}
void *operator new(size_t size, const char *file, int line) {
void *operator new(size_t size, const char *file, int line)
{
size_t s = size + sizeof(new_ptr_list_t);
size_t s = size + sizeof(new_ptr_list_t);
new_ptr_list_t *ptr = (new_ptr_list_t *)malloc(s);
new_ptr_list_t *ptr = (new_ptr_list_t *)malloc(s);
if (ptr == NULL) {
if (ptr == NULL) {
...
@@ -102,23 +106,33 @@ void *operator new(size_t size, const char *file, int line) {
...
@@ -102,23 +106,33 @@ void *operator new(size_t size, const char *file, int line) {
return pointer;
return pointer;
}
}
void *operator new[](size_t size, const char *file, int line) {
void *operator new[](size_t size, const char *file, int line)
{
return operator new(size, file, line);
return operator new(size, file, line);
}
}
void *operator new(size_t size) { return operator new(size, "<Unknown>", 0); }
void *operator new(size_t size)
{
return operator new(size, "<Unknown>", 0);
}
void *operator new[](size_t size) { return operator new(size); }
void *operator new[](size_t size)
{
return operator new(size);
}
void *operator new(size_t size, const std::nothrow_t &) throw() {
void *operator new(size_t size, const std::nothrow_t &) throw()
{
return operator new(size);
return operator new(size);
}
}
void *operator new[](size_t size, const std::nothrow_t &) throw() {
void *operator new[](size_t size, const std::nothrow_t &) throw()
{
return operator new[](size);
return operator new[](size);
}
}
void operator delete(void *pointer) {
void operator delete(void *pointer)
{
if (pointer == NULL)
if (pointer == NULL)
return;
return;
size_t hash_index = DEBUG_NEW_HASH(pointer);
size_t hash_index = DEBUG_NEW_HASH(pointer);
...
@@ -142,7 +156,10 @@ void operator delete(void *pointer) {
...
@@ -142,7 +156,10 @@ void operator delete(void *pointer) {
abort();
abort();
}
}
void operator delete[](void *pointer) { operator delete(pointer); }
void operator delete[](void *pointer)
{
operator delete(pointer);
}
// Some older compilers like Borland C++ Compiler 5.5.1 and Digital Mars
// Some older compilers like Borland C++ Compiler 5.5.1 and Digital Mars
// Compiler 8.29 do not support placement delete operators.
// Compiler 8.29 do not support placement delete operators.
...
@@ -151,31 +168,36 @@ void operator delete[](void *pointer) { operator delete(pointer); }
...
@@ -151,31 +168,36 @@ void operator delete[](void *pointer) { operator delete(pointer); }
// is thrown in the initialization (constructor) of a dynamically
// is thrown in the initialization (constructor) of a dynamically
// created object.
// created object.
#ifndef NO_PLACEMENT_DELETE
#ifndef NO_PLACEMENT_DELETE
void operator delete(void *pointer, const char *file, int line) {
void operator delete(void *pointer, const char *file, int line)
{
if (new_verbose_flag)
if (new_verbose_flag)
printf("info: exception thrown on initializing object at %p (%s:%d)\n",
printf("info: exception thrown on initializing object at %p (%s:%d)\n", pointer, file, line);
pointer, file, line);
operator delete(pointer);
operator delete(pointer);
}
}
void operator delete[](void *pointer, const char *file, int line) {
void operator delete[](void *pointer, const char *file, int line)
{
operator delete(pointer, file, line);
operator delete(pointer, file, line);
}
}
void operator delete(void *pointer, const std::nothrow_t &) {
void operator delete(void *pointer, const std::nothrow_t &)
{
operator delete(pointer, "<Unknown>", 0);
operator delete(pointer, "<Unknown>", 0);
}
}
void operator delete[](void *pointer, const std::nothrow_t &) {
void operator delete[](void *pointer, const std::nothrow_t &)
{
operator delete(pointer, std::nothrow);
operator delete(pointer, std::nothrow);
}
}
#endif // NO_PLACEMENT_DELETE
#endif
// NO_PLACEMENT_DELETE
// Proxy class to automatically call check_leaks if new_autocheck_flag is set
// Proxy class to automatically call check_leaks if new_autocheck_flag is set
class new_check_t {
class new_check_t {
public:
public:
new_check_t() {}
new_check_t()
~new_check_t() {
{}
~new_check_t()
{
if (new_autocheck_flag) {
if (new_autocheck_flag) {
// Check for leakage.
// Check for leakage.
// If any leaks are found, set new_verbose_flag so that any
// If any leaks are found, set new_verbose_flag so that any
...
...
deps/common/mm/debug_new.h
浏览文件 @
e976988d
...
@@ -26,8 +26,8 @@ void *operator new[](size_t size, const char *file, int line);
...
@@ -26,8 +26,8 @@ void *operator new[](size_t size, const char *file, int line);
#ifndef NO_PLACEMENT_DELETE
#ifndef NO_PLACEMENT_DELETE
void
operator
delete
(
void
*
pointer
,
const
char
*
file
,
int
line
);
void
operator
delete
(
void
*
pointer
,
const
char
*
file
,
int
line
);
void
operator
delete
[](
void
*
pointer
,
const
char
*
file
,
int
line
);
void
operator
delete
[](
void
*
pointer
,
const
char
*
file
,
int
line
);
#endif // NO_PLACEMENT_DELETE
#endif
// NO_PLACEMENT_DELETE
void
operator
delete
[](
void
*
);
// MSVC 6 requires this declaration
void
operator
delete
[](
void
*
);
// MSVC 6 requires this declaration
/* Macros */
/* Macros */
#ifndef DEBUG_NEW_NO_NEW_REDEFINITION
#ifndef DEBUG_NEW_NO_NEW_REDEFINITION
...
@@ -36,16 +36,16 @@ void operator delete[](void *); // MSVC 6 requires this declaration
...
@@ -36,16 +36,16 @@ void operator delete[](void *); // MSVC 6 requires this declaration
#define debug_new new
#define debug_new new
#else
#else
#define debug_new new (__FILE__, __LINE__)
#define debug_new new (__FILE__, __LINE__)
#endif // DEBUG_NEW_NO_NEW_REDEFINITION
#endif
// DEBUG_NEW_NO_NEW_REDEFINITION
#ifdef DEBUG_NEW_EMULATE_MALLOC
#ifdef DEBUG_NEW_EMULATE_MALLOC
#define malloc(s) ((void *)(debug_new char[s]))
#define malloc(s) ((void *)(debug_new char[s]))
#define free(p) delete[](char *)(p)
#define free(p) delete[](char *)(p)
#endif // DEBUG_NEW_EMULATE_MALLOC
#endif
// DEBUG_NEW_EMULATE_MALLOC
/* Control flags */
/* Control flags */
extern
bool
new_verbose_flag
;
// default to false: no verbose information
extern
bool
new_verbose_flag
;
// default to false: no verbose information
extern
bool
new_autocheck_flag
;
// default to true: call check_leaks() on exit
extern
bool
new_autocheck_flag
;
// default to true: call check_leaks() on exit
}
//
namespace common
}
//
namespace common
#endif // __COMMON_MM_DEBUG_NEW_H__
#endif
// __COMMON_MM_DEBUG_NEW_H__
deps/common/mm/mem.cpp.skip
浏览文件 @
e976988d
...
@@ -28,8 +28,8 @@ MemID *CLMemTrace::mMemIDs[MEM_HASHTABLE_SIZE] = {0};
...
@@ -28,8 +28,8 @@ MemID *CLMemTrace::mMemIDs[MEM_HASHTABLE_SIZE] = {0};
bool CLMemTrace::mVerbose = false;
bool CLMemTrace::mVerbose = false;
;
;
void *CLMemTrace::malloc(size_t size, const char *file, const int line,
void *CLMemTrace::malloc(size_t size, const char *file, const int line,
bool retry) throw(std::bad_alloc)
bool retry) throw(std::bad_alloc)
{
{
size_t allocSize = size + sizeof(MemID);
size_t allocSize = size + sizeof(MemID);
void *usedPointer = NULL;
void *usedPointer = NULL;
...
@@ -81,8 +81,8 @@ void *CLMemTrace::malloc(size_t size, const char *file, const int line,
...
@@ -81,8 +81,8 @@ void *CLMemTrace::malloc(size_t size, const char *file, const int line,
return NULL;
return NULL;
}
}
void *CLMemTrace::realloc(void *pointer, size_t size, const char *file,
void *CLMemTrace::realloc(void *pointer, size_t size, const char *file,
const int line)
const int line)
{
{
if (pointer == NULL && size == 0) {
if (pointer == NULL && size == 0) {
return NULL;
return NULL;
} else if (pointer == NULL && size != 0) {
} else if (pointer == NULL && size != 0) {
...
@@ -172,8 +172,7 @@ void *CLMemTrace::realloc(void *pointer, size_t size, const char *file,
...
@@ -172,8 +172,7 @@ void *CLMemTrace::realloc(void *pointer, size_t size, const char *file,
/**
/**
* Secondly, add the new one to table
* Secondly, add the new one to table
*/
*/
u64_t newHashIndex =
u64_t newHashIndex = (u64_t)MEM_ID_HASH((char *)pNewMemID + sizeof(MemID));
(u64_t)MEM_ID_HASH((char *)pNewMemID + sizeof(MemID));
pNewMemID->mNext = mMemIDs[newHashIndex];
pNewMemID->mNext = mMemIDs[newHashIndex];
mMemIDs[newHashIndex] = pNewMemID;
mMemIDs[newHashIndex] = pNewMemID;
...
@@ -182,8 +181,7 @@ void *CLMemTrace::realloc(void *pointer, size_t size, const char *file,
...
@@ -182,8 +181,7 @@ void *CLMemTrace::realloc(void *pointer, size_t size, const char *file,
* Third, do memory copy
* Third, do memory copy
* to simplify the old logic, copy memory here
* to simplify the old logic, copy memory here
*/
*/
memcpy((char *)pNewMemID + sizeof(MemID),
memcpy((char *)pNewMemID + sizeof(MemID), (char *)pFreeMemID + sizeof(MemID), pFreeMemID->mSize);
(char *)pFreeMemID + sizeof(MemID), pFreeMemID->mSize);
break;
break;
}
}
}
}
...
@@ -191,9 +189,7 @@ void *CLMemTrace::realloc(void *pointer, size_t size, const char *file,
...
@@ -191,9 +189,7 @@ void *CLMemTrace::realloc(void *pointer, size_t size, const char *file,
MUTEX_UNLOCK(&mMutex);
MUTEX_UNLOCK(&mMutex);
if (foundOld == false) {
if (foundOld == false) {
LOG_WARN(
LOG_WARN("Something is wrong, the old pointer %p isn't found, so alloc new one", pointer);
"Something is wrong, the old pointer %p isn't found, so alloc new one",
pointer);
try {
try {
return malloc(size, file, line, false);
return malloc(size, file, line, false);
} catch (std::bad_alloc &e) {
} catch (std::bad_alloc &e) {
...
@@ -203,8 +199,7 @@ void *CLMemTrace::realloc(void *pointer, size_t size, const char *file,
...
@@ -203,8 +199,7 @@ void *CLMemTrace::realloc(void *pointer, size_t size, const char *file,
}
}
if (mVerbose) {
if (mVerbose) {
LOG_INFO("Delete %p, file:%s, line:%u, size:%llu", pointer, oldMemID.mFile,
LOG_INFO("Delete %p, file:%s, line:%u, size:%llu", pointer, oldMemID.mFile, oldMemID.mLine, oldMemID.mSize);
oldMemID.mLine, oldMemID.mSize);
}
}
if (pFreeMemID) {
if (pFreeMemID) {
...
@@ -215,8 +210,10 @@ void *CLMemTrace::realloc(void *pointer, size_t size, const char *file,
...
@@ -215,8 +210,10 @@ void *CLMemTrace::realloc(void *pointer, size_t size, const char *file,
if (mVerbose) {
if (mVerbose) {
LOG_INFO("Alloc %p, file:%s, line:%u, size:%llu",
LOG_INFO("Alloc %p, file:%s, line:%u, size:%llu",
(char *)pNewMemID + sizeof(MemID), pNewMemID->mFile,
(char *)pNewMemID + sizeof(MemID),
pNewMemID->mLine, pNewMemID->mSize);
pNewMemID->mFile,
pNewMemID->mLine,
pNewMemID->mSize);
}
}
return pNewMemID;
return pNewMemID;
}
}
...
@@ -224,7 +221,8 @@ void *CLMemTrace::realloc(void *pointer, size_t size, const char *file,
...
@@ -224,7 +221,8 @@ void *CLMemTrace::realloc(void *pointer, size_t size, const char *file,
return NULL;
return NULL;
}
}
void CLMemTrace::free(void *pointer) {
void CLMemTrace::free(void *pointer)
{
if (pointer == NULL) {
if (pointer == NULL) {
LOG_WARN("Free one empty pointer");
LOG_WARN("Free one empty pointer");
return;
return;
...
@@ -260,8 +258,7 @@ void CLMemTrace::free(void *pointer) {
...
@@ -260,8 +258,7 @@ void CLMemTrace::free(void *pointer) {
if (pMemID) {
if (pMemID) {
if (mVerbose) {
if (mVerbose) {
LOG_INFO("Delete %p, file:%s, line:%u, size:%llu", pointer, pMemID->mFile,
LOG_INFO("Delete %p, file:%s, line:%u, size:%llu", pointer, pMemID->mFile, pMemID->mLine, pMemID->mSize);
pMemID->mLine, pMemID->mSize);
}
}
::free(pMemID);
::free(pMemID);
return;
return;
...
@@ -273,7 +270,8 @@ void CLMemTrace::free(void *pointer) {
...
@@ -273,7 +270,8 @@ void CLMemTrace::free(void *pointer) {
return;
return;
}
}
std::new_handler CLMemTrace::getNewHandler() {
std::new_handler CLMemTrace::getNewHandler()
{
std::new_handler newHandler = NULL;
std::new_handler newHandler = NULL;
MUTEX_LOCK(&mMutex);
MUTEX_LOCK(&mMutex);
...
@@ -285,7 +283,8 @@ std::new_handler CLMemTrace::getNewHandler() {
...
@@ -285,7 +283,8 @@ std::new_handler CLMemTrace::getNewHandler() {
return newHandler;
return newHandler;
}
}
void CLMemTrace::output() {
void CLMemTrace::output()
{
for (int i = 0; i < MEM_HASHTABLE_SIZE; ++i) {
for (int i = 0; i < MEM_HASHTABLE_SIZE; ++i) {
// Don't lock outside of the loop
// Don't lock outside of the loop
// 1. avoid output too long to alloc/free memory
// 1. avoid output too long to alloc/free memory
...
@@ -298,8 +297,8 @@ void CLMemTrace::output() {
...
@@ -298,8 +297,8 @@ void CLMemTrace::output() {
}
}
while (ptr) {
while (ptr) {
// if LOG_INFO alloc memory, it will easy leading to dead lock
// if LOG_INFO alloc memory, it will easy leading to dead lock
LOG_INFO(
"Exist %p, file:%s, line:%u, size:%llu",
LOG_INFO(
(char *)ptr + sizeof(MemID), ptr->mFile, ptr->mLine, ptr->mSize);
"Exist %p, file:%s, line:%u, size:%llu",
(char *)ptr + sizeof(MemID), ptr->mFile, ptr->mLine, ptr->mSize);
ptr = ptr->mNext;
ptr = ptr->mNext;
}
}
...
@@ -307,23 +306,28 @@ void CLMemTrace::output() {
...
@@ -307,23 +306,28 @@ void CLMemTrace::output() {
}
}
}
}
void *operator new(std::size_t size, const char *file, int line) {
void *operator new(std::size_t size, const char *file, int line)
{
return CLMemTrace::malloc(size, file, line, true);
return CLMemTrace::malloc(size, file, line, true);
}
}
void *operator new[](std::size_t size, const char *file, int line) {
void *operator new[](std::size_t size, const char *file, int line)
{
return operator new(size, file, line);
return operator new(size, file, line);
}
}
void *operator new(std::size_t size) throw(std::bad_alloc) {
void *operator new(std::size_t size) throw(std::bad_alloc)
{
return operator new(size, "<Unknown>", 0);
return operator new(size, "<Unknown>", 0);
}
}
void *operator new[](std::size_t size) throw(std::bad_alloc) {
void *operator new[](std::size_t size) throw(std::bad_alloc)
{
return operator new(size);
return operator new(size);
}
}
void *operator new(std::size_t size, const std::nothrow_t &) throw() {
void *operator new(std::size_t size, const std::nothrow_t &) throw()
{
void *pointer = NULL;
void *pointer = NULL;
try {
try {
pointer = operator new(size);
pointer = operator new(size);
...
@@ -334,7 +338,8 @@ void *operator new(std::size_t size, const std::nothrow_t &) throw() {
...
@@ -334,7 +338,8 @@ void *operator new(std::size_t size, const std::nothrow_t &) throw() {
return pointer;
return pointer;
}
}
void *operator new[](std::size_t size, const std::nothrow_t &) throw() {
void *operator new[](std::size_t size, const std::nothrow_t &) throw()
{
void *pointer = NULL;
void *pointer = NULL;
try {
try {
pointer = operator[] new(size);
pointer = operator[] new(size);
...
@@ -345,9 +350,15 @@ void *operator new[](std::size_t size, const std::nothrow_t &) throw() {
...
@@ -345,9 +350,15 @@ void *operator new[](std::size_t size, const std::nothrow_t &) throw() {
return pointer;
return pointer;
}
}
void operator delete(void *pointer) { CLMemTrace::free(pointer); }
void operator delete(void *pointer)
{
CLMemTrace::free(pointer);
}
void operator delete[](void *pointer) { operator delete(pointer); }
void operator delete[](void *pointer)
{
operator delete(pointer);
}
// Some older compilers like Borland C++ Compiler 5.5.1 and Digital Mars
// Some older compilers like Borland C++ Compiler 5.5.1 and Digital Mars
// Compiler 8.29 do not support placement delete operators.
// Compiler 8.29 do not support placement delete operators.
...
@@ -355,23 +366,28 @@ void operator delete[](void *pointer) { operator delete(pointer); }
...
@@ -355,23 +366,28 @@ void operator delete[](void *pointer) { operator delete(pointer); }
// Also note that in that case memory leakage will occur if an exception
// Also note that in that case memory leakage will occur if an exception
// is thrown in the initialization (constructor) of a dynamically
// is thrown in the initialization (constructor) of a dynamically
// created object.
// created object.
void operator delete(void *pointer, const char *file, int line) {
void operator delete(void *pointer, const char *file, int line)
{
operator delete(pointer);
operator delete(pointer);
}
}
void operator delete[](void *pointer, const char *file, int line) {
void operator delete[](void *pointer, const char *file, int line)
{
operator delete(pointer, file, line);
operator delete(pointer, file, line);
}
}
void operator delete(void *pointer, const std::nothrow_t &) {
void operator delete(void *pointer, const std::nothrow_t &)
{
operator delete(pointer, "<Unknown>", 0);
operator delete(pointer, "<Unknown>", 0);
}
}
void operator delete[](void *pointer, const std::nothrow_t &) {
void operator delete[](void *pointer, const std::nothrow_t &)
{
operator delete(pointer, std::nothrow);
operator delete(pointer, std::nothrow);
}
}
void *Lcalloc(size_t nmemb, size_t size, const char *file, const int line) {
void *Lcalloc(size_t nmemb, size_t size, const char *file, const int line)
{
try {
try {
void *point = CLMemTrace::malloc(size * nmemb, file, line, false);
void *point = CLMemTrace::malloc(size * nmemb, file, line, false);
if (point) {
if (point) {
...
@@ -384,7 +400,8 @@ void *Lcalloc(size_t nmemb, size_t size, const char *file, const int line) {
...
@@ -384,7 +400,8 @@ void *Lcalloc(size_t nmemb, size_t size, const char *file, const int line) {
return pointer;
return pointer;
}
}
void *Lmalloc(size_t size, const char *file, const int line) {
void *Lmalloc(size_t size, const char *file, const int line)
{
try {
try {
void *point = CLMemTrace::malloc(size, file, line, false);
void *point = CLMemTrace::malloc(size, file, line, false);
} catch (std::bad_alloc &e) {
} catch (std::bad_alloc &e) {
...
@@ -394,8 +411,12 @@ void *Lmalloc(size_t size, const char *file, const int line) {
...
@@ -394,8 +411,12 @@ void *Lmalloc(size_t size, const char *file, const int line) {
return pointer;
return pointer;
}
}
void Lfree(void *ptr) { CLMemTrace::free(pointer); }
void Lfree(void *ptr)
void *Lrealloc(void *ptr, size_t size, const char *file, const int line) {
{
CLMemTrace::free(pointer);
}
void *Lrealloc(void *ptr, size_t size, const char *file, const int line)
{
// simplify the logic
// simplify the logic
return CLMemTrace::realloc(ptr, size, file, line);
return CLMemTrace::realloc(ptr, size, file, line);
}
}
...
...
deps/common/mm/mem.h
浏览文件 @
e976988d
...
@@ -31,8 +31,6 @@ namespace common {
...
@@ -31,8 +31,6 @@ namespace common {
#else
#else
typedef
struct
MemID_t
{
typedef
struct
MemID_t
{
public:
public:
const
static
int
MEM_FILENAME_LEN
=
32
;
const
static
int
MEM_FILENAME_LEN
=
32
;
...
@@ -44,12 +42,10 @@ public:
...
@@ -44,12 +42,10 @@ public:
class
CLMemTrace
{
class
CLMemTrace
{
public:
public:
static
void
*
malloc
(
size_t
size
,
const
char
*
file
,
const
int
line
,
static
void
*
malloc
(
size_t
size
,
const
char
*
file
,
const
int
line
,
bool
retry
=
false
)
throw
(
std
::
bad_alloc
);
bool
retry
=
false
)
throw
(
std
::
bad_alloc
);
// just use for realloc, same functionality as realloc
// just use for realloc, same functionality as realloc
static
void
*
realloc
(
void
*
ptr
,
size_t
size
,
const
char
*
file
,
static
void
*
realloc
(
void
*
ptr
,
size_t
size
,
const
char
*
file
,
const
int
line
);
const
int
line
);
static
void
free
(
void
*
ptr
);
static
void
free
(
void
*
ptr
);
...
@@ -58,7 +54,10 @@ public:
...
@@ -58,7 +54,10 @@ public:
/**
/**
* set whether show every details
* set whether show every details
*/
*/
static
void
setVerbose
(
bool
verbose
)
{
mVerbose
=
verbose
;
}
static
void
setVerbose
(
bool
verbose
)
{
mVerbose
=
verbose
;
}
protected:
protected:
static
std
::
new_handler
getNewHandler
();
static
std
::
new_handler
getNewHandler
();
...
@@ -132,5 +131,5 @@ static void operator delete[](void *pointer);
...
@@ -132,5 +131,5 @@ static void operator delete[](void *pointer);
#endif
/* MEM_DEBUG */
#endif
/* MEM_DEBUG */
}
//
namespace common
}
//
namespace common
#endif
/* __COMMON_MM_MEM_H__ */
#endif
/* __COMMON_MM_MEM_H__ */
deps/common/os/os.cpp
浏览文件 @
e976988d
...
@@ -21,7 +21,8 @@ See the Mulan PSL v2 for more details. */
...
@@ -21,7 +21,8 @@ See the Mulan PSL v2 for more details. */
namespace
common
{
namespace
common
{
// Don't care windows
// Don't care windows
u32_t
getCpuNum
()
{
u32_t
getCpuNum
()
{
return
std
::
thread
::
hardware_concurrency
();
return
std
::
thread
::
hardware_concurrency
();
}
}
...
@@ -30,14 +31,13 @@ u32_t getCpuNum() {
...
@@ -30,14 +31,13 @@ u32_t getCpuNum() {
void
print_stacktrace
()
void
print_stacktrace
()
{
{
int
size
=
MAX_STACK_SIZE
;
int
size
=
MAX_STACK_SIZE
;
void
*
array
[
MAX_STACK_SIZE
];
void
*
array
[
MAX_STACK_SIZE
];
int
stack_num
=
backtrace
(
array
,
size
);
int
stack_num
=
backtrace
(
array
,
size
);
char
**
stacktrace
=
backtrace_symbols
(
array
,
stack_num
);
char
**
stacktrace
=
backtrace_symbols
(
array
,
stack_num
);
for
(
int
i
=
0
;
i
<
stack_num
;
++
i
)
for
(
int
i
=
0
;
i
<
stack_num
;
++
i
)
{
{
LOG_INFO
(
"%d ----- %s
\n
"
,
i
,
stacktrace
[
i
]);
LOG_INFO
(
"%d ----- %s
\n
"
,
i
,
stacktrace
[
i
]);
}
}
free
(
stacktrace
);
free
(
stacktrace
);
}
}
}
//namespace common
}
// namespace common
\ No newline at end of file
\ No newline at end of file
deps/common/os/os.h
浏览文件 @
e976988d
...
@@ -20,5 +20,5 @@ u32_t getCpuNum();
...
@@ -20,5 +20,5 @@ u32_t getCpuNum();
void
print_stacktrace
();
void
print_stacktrace
();
}
//
namespace common
}
//
namespace common
#endif
/* __COMMON_OS_OS_H__ */
#endif
/* __COMMON_OS_OS_H__ */
deps/common/os/path.h
浏览文件 @
e976988d
...
@@ -18,7 +18,6 @@ See the Mulan PSL v2 for more details. */
...
@@ -18,7 +18,6 @@ See the Mulan PSL v2 for more details. */
#include <string>
#include <string>
namespace
common
{
namespace
common
{
/**
/**
* get file name from full path
* get file name from full path
* example
* example
...
@@ -66,7 +65,7 @@ bool check_directory(std::string &path);
...
@@ -66,7 +65,7 @@ bool check_directory(std::string &path);
* @param filter_pattern 示例 ^miniob.*bin$
* @param filter_pattern 示例 ^miniob.*bin$
* @return 成功返回找到的文件个数,否则返回-1
* @return 成功返回找到的文件个数,否则返回-1
*/
*/
int
list_file
(
const
char
*
path
,
const
char
*
filter_pattern
,
std
::
vector
<
std
::
string
>
&
files
);
// io/io.h::getFileList
int
list_file
(
const
char
*
path
,
const
char
*
filter_pattern
,
std
::
vector
<
std
::
string
>
&
files
);
// io/io.h::getFileList
}
//
namespace common
}
//
namespace common
#endif //__COMMON_OS_PATH_H__
#endif
//__COMMON_OS_PATH_H__
deps/common/os/pidfile.cpp
浏览文件 @
e976988d
...
@@ -26,25 +26,26 @@ See the Mulan PSL v2 for more details. */
...
@@ -26,25 +26,26 @@ See the Mulan PSL v2 for more details. */
#include "common/os/pidfile.h"
#include "common/os/pidfile.h"
namespace
common
{
namespace
common
{
std
::
string
&
getPidPath
()
{
std
::
string
&
getPidPath
()
{
static
std
::
string
path
;
static
std
::
string
path
;
return
path
;
return
path
;
}
}
void
setPidPath
(
const
char
*
progName
)
{
void
setPidPath
(
const
char
*
progName
)
{
std
::
string
&
path
=
getPidPath
();
std
::
string
&
path
=
getPidPath
();
if
(
progName
!=
NULL
)
{
if
(
progName
!=
NULL
)
{
path
=
std
::
string
(
_PATH_TMP
)
+
progName
+
".pid"
;
path
=
std
::
string
(
_PATH_TMP
)
+
progName
+
".pid"
;
}
else
{
}
else
{
path
=
""
;
path
=
""
;
}
}
}
}
int
writePidFile
(
const
char
*
progName
)
int
writePidFile
(
const
char
*
progName
)
{
{
assert
(
progName
);
assert
(
progName
);
std
::
ofstream
ostr
;
std
::
ofstream
ostr
;
int
rv
=
1
;
int
rv
=
1
;
...
@@ -58,15 +59,14 @@ int writePidFile(const char *progName) {
...
@@ -58,15 +59,14 @@ int writePidFile(const char *progName) {
rv
=
0
;
rv
=
0
;
}
else
{
}
else
{
rv
=
errno
;
rv
=
errno
;
std
::
cerr
<<
"error opening PID file "
<<
path
.
c_str
()
<<
SYS_OUTPUT_ERROR
std
::
cerr
<<
"error opening PID file "
<<
path
.
c_str
()
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
<<
std
::
endl
;
}
}
return
rv
;
return
rv
;
}
}
void
removePidFile
(
void
)
void
removePidFile
(
void
)
{
{
std
::
string
path
=
getPidPath
();
std
::
string
path
=
getPidPath
();
if
(
!
path
.
empty
())
{
if
(
!
path
.
empty
())
{
unlink
(
path
.
c_str
());
unlink
(
path
.
c_str
());
...
@@ -75,5 +75,4 @@ void removePidFile(void) {
...
@@ -75,5 +75,4 @@ void removePidFile(void) {
return
;
return
;
}
}
}
// namespace common
}
//namespace common
\ No newline at end of file
\ No newline at end of file
deps/common/os/pidfile.h
浏览文件 @
e976988d
...
@@ -16,7 +16,6 @@ See the Mulan PSL v2 for more details. */
...
@@ -16,7 +16,6 @@ See the Mulan PSL v2 for more details. */
#define __COMMON_OS_PIDFILE_H__
#define __COMMON_OS_PIDFILE_H__
namespace
common
{
namespace
common
{
//! Generates a PID file for the current component
//! Generates a PID file for the current component
/**
/**
* Gets the process ID (PID) of the calling process and writes a file
* Gets the process ID (PID) of the calling process and writes a file
...
@@ -35,7 +34,7 @@ int writePidFile(const char *progName);
...
@@ -35,7 +34,7 @@ int writePidFile(const char *progName);
*/
*/
void
removePidFile
(
void
);
void
removePidFile
(
void
);
std
::
string
&
getPidPath
();
std
::
string
&
getPidPath
();
}
//
namespace common
}
//
namespace common
#endif // __COMMON_OS_PIDFILE_H__
#endif
// __COMMON_OS_PIDFILE_H__
deps/common/os/process.cpp
浏览文件 @
e976988d
...
@@ -30,12 +30,13 @@ namespace common {
...
@@ -30,12 +30,13 @@ namespace common {
#include <libgen.h>
#include <libgen.h>
#endif
#endif
#define MAX_ERR_OUTPUT 10000000 // 10M
#define MAX_ERR_OUTPUT 10000000
// 10M
#define MAX_STD_OUTPUT 10000000 // 10M
#define MAX_STD_OUTPUT 10000000
// 10M
#define RWRR (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
#define RWRR (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
std
::
string
get_process_name
(
const
char
*
prog_name
)
{
std
::
string
get_process_name
(
const
char
*
prog_name
)
{
std
::
string
process_name
;
std
::
string
process_name
;
int
buf_len
=
strlen
(
prog_name
);
int
buf_len
=
strlen
(
prog_name
);
...
@@ -44,8 +45,7 @@ std::string get_process_name(const char *prog_name) {
...
@@ -44,8 +45,7 @@ std::string get_process_name(const char *prog_name) {
char
*
buf
=
new
char
[
buf_len
+
1
];
char
*
buf
=
new
char
[
buf_len
+
1
];
if
(
buf
==
NULL
)
{
if
(
buf
==
NULL
)
{
std
::
cerr
<<
"Failed to alloc memory for program name."
std
::
cerr
<<
"Failed to alloc memory for program name."
<<
SYS_OUTPUT_FILE_POS
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
<<
SYS_OUTPUT_FILE_POS
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
return
""
;
return
""
;
}
}
memset
(
buf
,
0
,
buf_len
+
1
);
memset
(
buf
,
0
,
buf_len
+
1
);
...
@@ -59,7 +59,8 @@ std::string get_process_name(const char *prog_name) {
...
@@ -59,7 +59,8 @@ std::string get_process_name(const char *prog_name) {
// Background the process by detaching it from the console and redirecting
// Background the process by detaching it from the console and redirecting
// std in, out, and err to /dev/null
// std in, out, and err to /dev/null
int
daemonize_service
(
bool
close_std_streams
)
{
int
daemonize_service
(
bool
close_std_streams
)
{
int
nochdir
=
1
;
int
nochdir
=
1
;
int
noclose
=
close_std_streams
?
0
:
1
;
int
noclose
=
close_std_streams
?
0
:
1
;
int
rc
=
daemon
(
nochdir
,
noclose
);
int
rc
=
daemon
(
nochdir
,
noclose
);
...
@@ -70,7 +71,8 @@ int daemonize_service(bool close_std_streams) {
...
@@ -70,7 +71,8 @@ int daemonize_service(bool close_std_streams) {
return
rc
;
return
rc
;
}
}
int
daemonize_service
(
const
char
*
std_out_file
,
const
char
*
std_err_file
)
{
int
daemonize_service
(
const
char
*
std_out_file
,
const
char
*
std_err_file
)
{
int
rc
=
daemonize_service
(
false
);
int
rc
=
daemonize_service
(
false
);
if
(
rc
!=
0
)
{
if
(
rc
!=
0
)
{
...
@@ -83,7 +85,8 @@ int daemonize_service(const char *std_out_file, const char *std_err_file) {
...
@@ -83,7 +85,8 @@ int daemonize_service(const char *std_out_file, const char *std_err_file) {
return
0
;
return
0
;
}
}
void
sys_log_redirect
(
const
char
*
std_out_file
,
const
char
*
std_err_file
)
{
void
sys_log_redirect
(
const
char
*
std_out_file
,
const
char
*
std_err_file
)
{
int
rc
=
0
;
int
rc
=
0
;
// Redirect stdin to /dev/null
// Redirect stdin to /dev/null
...
@@ -107,7 +110,7 @@ void sys_log_redirect(const char *std_out_file, const char *std_err_file) {
...
@@ -107,7 +110,7 @@ void sys_log_redirect(const char *std_out_file, const char *std_err_file) {
std
::
string
err_file
=
getAboslutPath
(
std_err_file
);
std
::
string
err_file
=
getAboslutPath
(
std_err_file
);
// CWE367: A check occurs on a file's attributes before the file is
// CWE367: A check occurs on a file's attributes before the file is
// used in a privileged operation, but things may have changed
// used in a privileged operation, but things may have changed
// Redirect stderr to std_err_file
// Redirect stderr to std_err_file
// struct stat st;
// struct stat st;
...
@@ -117,16 +120,15 @@ void sys_log_redirect(const char *std_out_file, const char *std_err_file) {
...
@@ -117,16 +120,15 @@ void sys_log_redirect(const char *std_out_file, const char *std_err_file) {
// std_err_flag |= O_TRUNC; // Remove old content if any.
// std_err_flag |= O_TRUNC; // Remove old content if any.
// }
// }
std_err_flag
|=
O_TRUNC
;
// Remove old content if any.
std_err_flag
|=
O_TRUNC
;
// Remove old content if any.
int
errfd
=
open
(
err_file
.
c_str
(),
std_err_flag
,
RWRR
);
int
errfd
=
open
(
err_file
.
c_str
(),
std_err_flag
,
RWRR
);
if
(
errfd
>=
0
)
{
if
(
errfd
>=
0
)
{
dup2
(
errfd
,
STDERR_FILENO
);
dup2
(
errfd
,
STDERR_FILENO
);
close
(
errfd
);
close
(
errfd
);
}
}
setvbuf
(
stderr
,
NULL
,
_IONBF
,
0
);
// Make sure stderr is not buffering
setvbuf
(
stderr
,
NULL
,
_IONBF
,
0
);
// Make sure stderr is not buffering
std
::
cerr
<<
"Process "
<<
getpid
()
<<
" built error output at "
<<
tv
.
tv_sec
std
::
cerr
<<
"Process "
<<
getpid
()
<<
" built error output at "
<<
tv
.
tv_sec
<<
std
::
endl
;
<<
std
::
endl
;
std
::
string
outFile
=
getAboslutPath
(
std_out_file
);
std
::
string
outFile
=
getAboslutPath
(
std_out_file
);
...
@@ -137,17 +139,16 @@ void sys_log_redirect(const char *std_out_file, const char *std_err_file) {
...
@@ -137,17 +139,16 @@ void sys_log_redirect(const char *std_out_file, const char *std_err_file) {
// std_out_flag |= O_TRUNC; // Remove old content if any.
// std_out_flag |= O_TRUNC; // Remove old content if any.
// }
// }
std_out_flag
|=
O_TRUNC
;
// Remove old content if any.
std_out_flag
|=
O_TRUNC
;
// Remove old content if any.
int
outfd
=
open
(
outFile
.
c_str
(),
std_out_flag
,
RWRR
);
int
outfd
=
open
(
outFile
.
c_str
(),
std_out_flag
,
RWRR
);
if
(
outfd
>=
0
)
{
if
(
outfd
>=
0
)
{
dup2
(
outfd
,
STDOUT_FILENO
);
dup2
(
outfd
,
STDOUT_FILENO
);
close
(
outfd
);
close
(
outfd
);
}
}
setvbuf
(
stdout
,
NULL
,
_IONBF
,
0
);
// Make sure stdout not buffering
setvbuf
(
stdout
,
NULL
,
_IONBF
,
0
);
// Make sure stdout not buffering
std
::
cout
<<
"Process "
<<
getpid
()
<<
" built standard output at "
std
::
cout
<<
"Process "
<<
getpid
()
<<
" built standard output at "
<<
tv
.
tv_sec
<<
std
::
endl
;
<<
tv
.
tv_sec
<<
std
::
endl
;
return
;
return
;
}
}
}
//namespace common
}
// namespace common
\ No newline at end of file
\ No newline at end of file
deps/common/os/process.h
浏览文件 @
e976988d
...
@@ -16,7 +16,6 @@ See the Mulan PSL v2 for more details. */
...
@@ -16,7 +16,6 @@ See the Mulan PSL v2 for more details. */
#define __COMMON_OS_PROCESS_H__
#define __COMMON_OS_PROCESS_H__
namespace
common
{
namespace
common
{
//! Get process Name
//! Get process Name
/**
/**
* @param[in] prog_full_name process full name with full path
* @param[in] prog_full_name process full name with full path
...
@@ -43,5 +42,5 @@ int daemonize_service(const char *std_out_file, const char *std_err_file);
...
@@ -43,5 +42,5 @@ int daemonize_service(const char *std_out_file, const char *std_err_file);
void
sys_log_redirect
(
const
char
*
std_out_file
,
const
char
*
std_err_file
);
void
sys_log_redirect
(
const
char
*
std_out_file
,
const
char
*
std_err_file
);
}
//
namespace common
}
//
namespace common
#endif //__COMMON_OS_PROCESS_H__
#endif
//__COMMON_OS_PROCESS_H__
deps/common/os/process_param.cpp
浏览文件 @
e976988d
...
@@ -17,14 +17,15 @@ See the Mulan PSL v2 for more details. */
...
@@ -17,14 +17,15 @@ See the Mulan PSL v2 for more details. */
namespace
common
{
namespace
common
{
//! Global process config
//! Global process config
ProcessParam
*&
the_process_param
()
ProcessParam
*&
the_process_param
()
{
{
static
ProcessParam
*
process_cfg
=
new
ProcessParam
();
static
ProcessParam
*
process_cfg
=
new
ProcessParam
();
return
process_cfg
;
return
process_cfg
;
}
}
void
ProcessParam
::
init_default
(
std
::
string
&
process_name
)
{
void
ProcessParam
::
init_default
(
std
::
string
&
process_name
)
{
assert
(
process_name
.
empty
()
==
false
);
assert
(
process_name
.
empty
()
==
false
);
this
->
process_name_
=
process_name
;
this
->
process_name_
=
process_name
;
if
(
std_out_
.
empty
())
{
if
(
std_out_
.
empty
())
{
...
@@ -40,6 +41,4 @@ void ProcessParam::init_default(std::string &process_name) {
...
@@ -40,6 +41,4 @@ void ProcessParam::init_default(std::string &process_name) {
demon
=
false
;
demon
=
false
;
}
}
}
// namespace common
\ No newline at end of file
}
//namespace common
\ No newline at end of file
deps/common/os/process_param.h
浏览文件 @
e976988d
...
@@ -21,69 +21,107 @@ namespace common {
...
@@ -21,69 +21,107 @@ namespace common {
class
ProcessParam
{
class
ProcessParam
{
public:
public:
ProcessParam
()
{}
ProcessParam
()
{}
virtual
~
ProcessParam
()
{}
virtual
~
ProcessParam
()
{}
void
init_default
(
std
::
string
&
process_name
);
void
init_default
(
std
::
string
&
process_name
);
const
std
::
string
&
get_std_out
()
const
{
return
std_out_
;
}
const
std
::
string
&
get_std_out
()
const
{
return
std_out_
;
}
void
set_std_out
(
const
std
::
string
&
std_out
)
{
ProcessParam
::
std_out_
=
std_out
;
}
void
set_std_out
(
const
std
::
string
&
std_out
)
{
ProcessParam
::
std_out_
=
std_out
;
}
const
std
::
string
&
get_std_err
()
const
{
return
std_err_
;
}
const
std
::
string
&
get_std_err
()
const
{
return
std_err_
;
}
void
set_std_err
(
const
std
::
string
&
std_err
)
{
ProcessParam
::
std_err_
=
std_err
;
}
void
set_std_err
(
const
std
::
string
&
std_err
)
{
ProcessParam
::
std_err_
=
std_err
;
}
const
std
::
string
&
get_conf
()
const
{
return
conf
;
}
const
std
::
string
&
get_conf
()
const
{
return
conf
;
}
void
set_conf
(
const
std
::
string
&
conf
)
{
ProcessParam
::
conf
=
conf
;
}
void
set_conf
(
const
std
::
string
&
conf
)
{
ProcessParam
::
conf
=
conf
;
}
const
std
::
string
&
get_process_name
()
const
{
return
process_name_
;
}
const
std
::
string
&
get_process_name
()
const
{
return
process_name_
;
}
void
set_process_name
(
const
std
::
string
&
processName
)
{
void
set_process_name
(
const
std
::
string
&
processName
)
{
ProcessParam
::
process_name_
=
processName
;
ProcessParam
::
process_name_
=
processName
;
}
}
bool
is_demon
()
const
{
return
demon
;
}
bool
is_demon
()
const
{
return
demon
;
}
void
set_demon
(
bool
demon
)
{
ProcessParam
::
demon
=
demon
;
}
void
set_demon
(
bool
demon
)
{
ProcessParam
::
demon
=
demon
;
}
const
std
::
vector
<
std
::
string
>
&
get_args
()
const
{
return
args
;
}
const
std
::
vector
<
std
::
string
>
&
get_args
()
const
{
return
args
;
}
void
set_args
(
const
std
::
vector
<
std
::
string
>
&
args
)
{
void
set_args
(
const
std
::
vector
<
std
::
string
>
&
args
)
{
ProcessParam
::
args
=
args
;
ProcessParam
::
args
=
args
;
}
}
void
set_server_port
(
int
port
)
{
void
set_server_port
(
int
port
)
{
server_port_
=
port
;
server_port_
=
port
;
}
}
int
get_server_port
()
const
{
int
get_server_port
()
const
{
return
server_port_
;
return
server_port_
;
}
}
void
set_unix_socket_path
(
const
char
*
unix_socket_path
)
{
void
set_unix_socket_path
(
const
char
*
unix_socket_path
)
{
unix_socket_path_
=
unix_socket_path
;
unix_socket_path_
=
unix_socket_path
;
}
}
const
std
::
string
&
get_unix_socket_path
()
const
{
const
std
::
string
&
get_unix_socket_path
()
const
{
return
unix_socket_path_
;
return
unix_socket_path_
;
}
}
private:
private:
std
::
string
std_out_
;
// The output file
std
::
string
std_out_
;
// The output file
std
::
string
std_err_
;
// The err output file
std
::
string
std_err_
;
// The err output file
std
::
string
conf
;
// The configuration file
std
::
string
conf
;
// The configuration file
std
::
string
process_name_
;
// The process name
std
::
string
process_name_
;
// The process name
bool
demon
=
false
;
// whether demon or not
bool
demon
=
false
;
// whether demon or not
std
::
vector
<
std
::
string
>
args
;
// arguments
std
::
vector
<
std
::
string
>
args
;
// arguments
int
server_port_
=
-
1
;
// server port(if valid, will overwrite the port in the config file)
int
server_port_
=
-
1
;
// server port(if valid, will overwrite the port in the config file)
std
::
string
unix_socket_path_
;
std
::
string
unix_socket_path_
;
};
};
ProcessParam
*&
the_process_param
();
ProcessParam
*&
the_process_param
();
}
//
namespace common
}
//
namespace common
#endif //__COMMON_OS_PROCESS_PARAM_H__
#endif
//__COMMON_OS_PROCESS_PARAM_H__
deps/common/os/signal.cpp
浏览文件 @
e976988d
...
@@ -17,29 +17,31 @@ See the Mulan PSL v2 for more details. */
...
@@ -17,29 +17,31 @@ See the Mulan PSL v2 for more details. */
#include "pthread.h"
#include "pthread.h"
namespace
common
{
namespace
common
{
void
setSignalHandler
(
int
sig
,
sighandler_t
func
)
{
void
setSignalHandler
(
int
sig
,
sighandler_t
func
)
{
struct
sigaction
newsa
,
oldsa
;
struct
sigaction
newsa
,
oldsa
;
sigemptyset
(
&
newsa
.
sa_mask
);
sigemptyset
(
&
newsa
.
sa_mask
);
newsa
.
sa_flags
=
0
;
newsa
.
sa_flags
=
0
;
newsa
.
sa_handler
=
func
;
newsa
.
sa_handler
=
func
;
int
rc
=
sigaction
(
sig
,
&
newsa
,
&
oldsa
);
int
rc
=
sigaction
(
sig
,
&
newsa
,
&
oldsa
);
if
(
rc
)
{
if
(
rc
)
{
std
::
cerr
<<
"Failed to set signal "
<<
sig
<<
SYS_OUTPUT_FILE_POS
std
::
cerr
<<
"Failed to set signal "
<<
sig
<<
SYS_OUTPUT_FILE_POS
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
<<
SYS_OUTPUT_ERROR
<<
std
::
endl
;
}
}
}
}
/*
/*
** Set Singal handling Fucntion
** Set Singal handling Fucntion
*/
*/
void
setSignalHandler
(
sighandler_t
func
)
{
void
setSignalHandler
(
sighandler_t
func
)
{
setSignalHandler
(
SIGQUIT
,
func
);
setSignalHandler
(
SIGQUIT
,
func
);
setSignalHandler
(
SIGINT
,
func
);
setSignalHandler
(
SIGINT
,
func
);
setSignalHandler
(
SIGHUP
,
func
);
setSignalHandler
(
SIGHUP
,
func
);
setSignalHandler
(
SIGTERM
,
func
);
setSignalHandler
(
SIGTERM
,
func
);
}
}
void
blockDefaultSignals
(
sigset_t
*
signal_set
,
sigset_t
*
old_set
)
{
void
blockDefaultSignals
(
sigset_t
*
signal_set
,
sigset_t
*
old_set
)
{
sigemptyset
(
signal_set
);
sigemptyset
(
signal_set
);
#ifndef DEBUG
#ifndef DEBUG
// SIGINT will effect our gdb debugging
// SIGINT will effect our gdb debugging
...
@@ -50,7 +52,8 @@ void blockDefaultSignals(sigset_t *signal_set, sigset_t *old_set) {
...
@@ -50,7 +52,8 @@ void blockDefaultSignals(sigset_t *signal_set, sigset_t *old_set) {
pthread_sigmask
(
SIG_BLOCK
,
signal_set
,
old_set
);
pthread_sigmask
(
SIG_BLOCK
,
signal_set
,
old_set
);
}
}
void
unBlockDefaultSignals
(
sigset_t
*
signal_set
,
sigset_t
*
old_set
)
{
void
unBlockDefaultSignals
(
sigset_t
*
signal_set
,
sigset_t
*
old_set
)
{
sigemptyset
(
signal_set
);
sigemptyset
(
signal_set
);
#ifndef DEBUG
#ifndef DEBUG
sigaddset
(
signal_set
,
SIGINT
);
sigaddset
(
signal_set
,
SIGINT
);
...
@@ -60,7 +63,8 @@ void unBlockDefaultSignals(sigset_t *signal_set, sigset_t *old_set) {
...
@@ -60,7 +63,8 @@ void unBlockDefaultSignals(sigset_t *signal_set, sigset_t *old_set) {
pthread_sigmask
(
SIG_UNBLOCK
,
signal_set
,
old_set
);
pthread_sigmask
(
SIG_UNBLOCK
,
signal_set
,
old_set
);
}
}
void
*
waitForSignals
(
void
*
args
)
{
void
*
waitForSignals
(
void
*
args
)
{
LOG_INFO
(
"Start thread to wait signals."
);
LOG_INFO
(
"Start thread to wait signals."
);
sigset_t
*
signal_set
=
(
sigset_t
*
)
args
;
sigset_t
*
signal_set
=
(
sigset_t
*
)
args
;
int
sig_number
=
-
1
;
int
sig_number
=
-
1
;
...
@@ -68,7 +72,7 @@ void *waitForSignals(void *args) {
...
@@ -68,7 +72,7 @@ void *waitForSignals(void *args) {
errno
=
0
;
errno
=
0
;
int
ret
=
sigwait
(
signal_set
,
&
sig_number
);
int
ret
=
sigwait
(
signal_set
,
&
sig_number
);
LOG_INFO
(
"sigwait return value: %d, %d
\n
"
,
ret
,
sig_number
);
LOG_INFO
(
"sigwait return value: %d, %d
\n
"
,
ret
,
sig_number
);
if
(
ret
!=
0
)
{
if
(
ret
!=
0
)
{
char
errstr
[
256
];
char
errstr
[
256
];
strerror_r
(
errno
,
errstr
,
sizeof
(
errstr
));
strerror_r
(
errno
,
errstr
,
sizeof
(
errstr
));
LOG_ERROR
(
"error (%d) %s
\n
"
,
errno
,
errstr
);
LOG_ERROR
(
"error (%d) %s
\n
"
,
errno
,
errstr
);
...
@@ -77,7 +81,8 @@ void *waitForSignals(void *args) {
...
@@ -77,7 +81,8 @@ void *waitForSignals(void *args) {
return
NULL
;
return
NULL
;
}
}
void
startWaitForSignals
(
sigset_t
*
signal_set
)
{
void
startWaitForSignals
(
sigset_t
*
signal_set
)
{
pthread_t
pThread
;
pthread_t
pThread
;
pthread_attr_t
pThreadAttrs
;
pthread_attr_t
pThreadAttrs
;
...
@@ -86,6 +91,5 @@ void startWaitForSignals(sigset_t *signal_set) {
...
@@ -86,6 +91,5 @@ void startWaitForSignals(sigset_t *signal_set) {
pthread_attr_setdetachstate
(
&
pThreadAttrs
,
PTHREAD_CREATE_DETACHED
);
pthread_attr_setdetachstate
(
&
pThreadAttrs
,
PTHREAD_CREATE_DETACHED
);
pthread_create
(
&
pThread
,
&
pThreadAttrs
,
waitForSignals
,
(
void
*
)
signal_set
);
pthread_create
(
&
pThread
,
&
pThreadAttrs
,
waitForSignals
,
(
void
*
)
signal_set
);
}
}
}
// namespace common
}
// namespace common
\ No newline at end of file
\ No newline at end of file
deps/common/os/signal.h
浏览文件 @
e976988d
...
@@ -30,7 +30,6 @@ void blockDefaultSignals(sigset_t *signal_set, sigset_t *old_set);
...
@@ -30,7 +30,6 @@ void blockDefaultSignals(sigset_t *signal_set, sigset_t *old_set);
*/
*/
void
unBlockDefaultSignals
(
sigset_t
*
signal_set
,
sigset_t
*
old_set
);
void
unBlockDefaultSignals
(
sigset_t
*
signal_set
,
sigset_t
*
old_set
);
void
*
waitForSignals
(
sigset_t
*
signal_set
);
void
*
waitForSignals
(
sigset_t
*
signal_set
);
void
startWaitForSignals
(
sigset_t
*
signal_set
);
void
startWaitForSignals
(
sigset_t
*
signal_set
);
...
@@ -42,5 +41,5 @@ typedef void (*sighandler_t)(int);
...
@@ -42,5 +41,5 @@ typedef void (*sighandler_t)(int);
void
setSignalHandler
(
sighandler_t
func
);
void
setSignalHandler
(
sighandler_t
func
);
void
setSignalHandler
(
int
sig
,
sighandler_t
func
);
void
setSignalHandler
(
int
sig
,
sighandler_t
func
);
}
//
namespace common
}
//
namespace common
#endif
/* __COMMON_OS_SIGNAL_H__ */
#endif
/* __COMMON_OS_SIGNAL_H__ */
deps/common/seda/callback.cpp
浏览文件 @
e976988d
...
@@ -33,11 +33,12 @@ extern bool &get_event_history_flag();
...
@@ -33,11 +33,12 @@ extern bool &get_event_history_flag();
// Constructor
// Constructor
CompletionCallback
::
CompletionCallback
(
Stage
*
trgt
,
CallbackContext
*
ctx
)
CompletionCallback
::
CompletionCallback
(
Stage
*
trgt
,
CallbackContext
*
ctx
)
:
target_stage_
(
trgt
),
context_
(
ctx
),
next_cb_
(
NULL
),
:
target_stage_
(
trgt
),
context_
(
ctx
),
next_cb_
(
NULL
),
ev_hist_flag_
(
get_event_history_flag
())
ev_hist_flag_
(
get_event_history_flag
())
{}
{}
// Destructor
// Destructor
CompletionCallback
::~
CompletionCallback
()
{
CompletionCallback
::~
CompletionCallback
()
{
if
(
context_
)
{
if
(
context_
)
{
delete
context_
;
delete
context_
;
}
}
...
@@ -47,14 +48,16 @@ CompletionCallback::~CompletionCallback() {
...
@@ -47,14 +48,16 @@ CompletionCallback::~CompletionCallback() {
}
}
// Push onto a callback stack
// Push onto a callback stack
void
CompletionCallback
::
push_callback
(
CompletionCallback
*
next
)
{
void
CompletionCallback
::
push_callback
(
CompletionCallback
*
next
)
{
ASSERT
((
!
next_cb_
),
"%s"
,
"cannot push a callback twice"
);
ASSERT
((
!
next_cb_
),
"%s"
,
"cannot push a callback twice"
);
next_cb_
=
next
;
next_cb_
=
next
;
}
}
// Pop off of a callback stack
// Pop off of a callback stack
CompletionCallback
*
CompletionCallback
::
pop_callback
()
{
CompletionCallback
*
CompletionCallback
::
pop_callback
()
{
CompletionCallback
*
ret_val
=
next_cb_
;
CompletionCallback
*
ret_val
=
next_cb_
;
next_cb_
=
NULL
;
next_cb_
=
NULL
;
...
@@ -62,7 +65,8 @@ CompletionCallback *CompletionCallback::pop_callback() {
...
@@ -62,7 +65,8 @@ CompletionCallback *CompletionCallback::pop_callback() {
}
}
// One event is complete
// One event is complete
void
CompletionCallback
::
event_done
(
StageEvent
*
ev
)
{
void
CompletionCallback
::
event_done
(
StageEvent
*
ev
)
{
if
(
ev_hist_flag_
)
{
if
(
ev_hist_flag_
)
{
ev
->
save_stage
(
target_stage_
,
StageEvent
::
CALLBACK_EV
);
ev
->
save_stage
(
target_stage_
,
StageEvent
::
CALLBACK_EV
);
...
@@ -71,11 +75,13 @@ void CompletionCallback::event_done(StageEvent *ev) {
...
@@ -71,11 +75,13 @@ void CompletionCallback::event_done(StageEvent *ev) {
}
}
// Reschedule callback on target stage thread
// Reschedule callback on target stage thread
void
CompletionCallback
::
event_reschedule
(
StageEvent
*
ev
)
{
void
CompletionCallback
::
event_reschedule
(
StageEvent
*
ev
)
{
target_stage_
->
add_event
(
ev
);
target_stage_
->
add_event
(
ev
);
}
}
void
CompletionCallback
::
event_timeout
(
StageEvent
*
ev
)
{
void
CompletionCallback
::
event_timeout
(
StageEvent
*
ev
)
{
LOG_DEBUG
(
"to call event_timeout for stage %s"
,
target_stage_
->
get_name
());
LOG_DEBUG
(
"to call event_timeout for stage %s"
,
target_stage_
->
get_name
());
if
(
ev_hist_flag_
)
{
if
(
ev_hist_flag_
)
{
ev
->
save_stage
(
target_stage_
,
StageEvent
::
TIMEOUT_EV
);
ev
->
save_stage
(
target_stage_
,
StageEvent
::
TIMEOUT_EV
);
...
@@ -83,4 +89,4 @@ void CompletionCallback::event_timeout(StageEvent *ev) {
...
@@ -83,4 +89,4 @@ void CompletionCallback::event_timeout(StageEvent *ev) {
target_stage_
->
timeout_event
(
ev
,
context_
);
target_stage_
->
timeout_event
(
ev
,
context_
);
}
}
}
//namespace common
}
// namespace common
\ No newline at end of file
\ No newline at end of file
deps/common/seda/callback.h
浏览文件 @
e976988d
...
@@ -59,7 +59,7 @@ class CompletionCallback {
...
@@ -59,7 +59,7 @@ class CompletionCallback {
// public interface operations
// public interface operations
public:
public:
// Constructor
// Constructor
CompletionCallback
(
Stage
*
trgt
,
CallbackContext
*
ctx
=
NULL
);
CompletionCallback
(
Stage
*
trgt
,
CallbackContext
*
ctx
=
NULL
);
...
@@ -84,12 +84,12 @@ class CompletionCallback {
...
@@ -84,12 +84,12 @@ class CompletionCallback {
// Complete this event if it has timed out
// Complete this event if it has timed out
void
event_timeout
(
StageEvent
*
ev
);
void
event_timeout
(
StageEvent
*
ev
);
protected:
protected:
// implementation state
// implementation state
Stage
*
target_stage_
;
// stage which is setting this callback
Stage
*
target_stage_
;
// stage which is setting this callback
CallbackContext
*
context_
;
// argument to pass when invoking cb
CallbackContext
*
context_
;
// argument to pass when invoking cb
CompletionCallback
*
next_cb_
;
// next event in the chain
CompletionCallback
*
next_cb_
;
// next event in the chain
bool
ev_hist_flag_
;
// true if event histories are enabled
bool
ev_hist_flag_
;
// true if event histories are enabled
};
};
...
@@ -101,19 +101,25 @@ class CompletionCallback {
...
@@ -101,19 +101,25 @@ class CompletionCallback {
* callback context class from this base.
* callback context class from this base.
*/
*/
class
CallbackContext
{
class
CallbackContext
{
public:
public:
virtual
~
CallbackContext
()
{}
virtual
~
CallbackContext
()
{}
};
};
class
CallbackContextEvent
:
public
CallbackContext
{
class
CallbackContextEvent
:
public
CallbackContext
{
public:
public:
CallbackContextEvent
(
StageEvent
*
event
=
NULL
)
:
ev_
(
event
)
{}
CallbackContextEvent
(
StageEvent
*
event
=
NULL
)
:
ev_
(
event
)
~
CallbackContextEvent
()
{}
{}
StageEvent
*
get_event
()
{
return
ev_
;
}
~
CallbackContextEvent
()
{}
private:
StageEvent
*
get_event
()
{
return
ev_
;
}
private:
StageEvent
*
ev_
;
StageEvent
*
ev_
;
};
};
}
//
namespace common
}
//
namespace common
#endif // __COMMON_SEDA_CALLBACK_H__
#endif
// __COMMON_SEDA_CALLBACK_H__
deps/common/seda/class_factory.h
浏览文件 @
e976988d
...
@@ -21,7 +21,6 @@ See the Mulan PSL v2 for more details. */
...
@@ -21,7 +21,6 @@ See the Mulan PSL v2 for more details. */
#include "common/log/log.h"
#include "common/log/log.h"
namespace
common
{
namespace
common
{
/**
/**
* A class to construct arbitrary subclass instances
* A class to construct arbitrary subclass instances
*
*
...
@@ -42,10 +41,10 @@ namespace common {
...
@@ -42,10 +41,10 @@ namespace common {
* with static linkage in a global initialization routine.
* with static linkage in a global initialization routine.
*/
*/
template
<
class
T
>
template
<
class
T
>
class
ClassFactory
{
class
ClassFactory
{
public:
public:
typedef
T
*
(
*
FactoryFunc
)(
const
std
::
string
&
);
typedef
T
*
(
*
FactoryFunc
)(
const
std
::
string
&
);
/**
/**
...
@@ -69,13 +68,13 @@ class ClassFactory {
...
@@ -69,13 +68,13 @@ class ClassFactory {
*/
*/
static
T
*
make_instance
(
const
std
::
string
&
tag
);
static
T
*
make_instance
(
const
std
::
string
&
tag
);
private:
private:
// Accessor function that gets the head of the factory list
// Accessor function that gets the head of the factory list
static
ClassFactory
<
T
>
*&
fact_list_head
();
static
ClassFactory
<
T
>
*&
fact_list_head
();
std
::
string
identifier_
;
// identifier for this factory
std
::
string
identifier_
;
// identifier for this factory
FactoryFunc
fact_func_
;
// factory function for this class
FactoryFunc
fact_func_
;
// factory function for this class
ClassFactory
<
T
>
*
next_
;
// next factory in global list
ClassFactory
<
T
>
*
next_
;
// next factory in global list
};
};
/**
/**
...
@@ -88,8 +87,9 @@ class ClassFactory {
...
@@ -88,8 +87,9 @@ class ClassFactory {
* as static. C++ guarantees that the first time the function is
* as static. C++ guarantees that the first time the function is
* invoked (from anywhere) the static local will be initialized.
* invoked (from anywhere) the static local will be initialized.
*/
*/
template
<
class
T
>
template
<
class
T
>
ClassFactory
<
T
>
*&
ClassFactory
<
T
>::
fact_list_head
()
{
ClassFactory
<
T
>
*&
ClassFactory
<
T
>::
fact_list_head
()
{
static
ClassFactory
<
T
>
*
fact_list
=
NULL
;
static
ClassFactory
<
T
>
*
fact_list
=
NULL
;
return
fact_list
;
return
fact_list
;
}
}
...
@@ -99,16 +99,17 @@ ClassFactory<T> *&ClassFactory<T>::fact_list_head() {
...
@@ -99,16 +99,17 @@ ClassFactory<T> *&ClassFactory<T>::fact_list_head() {
* Implementation notes:
* Implementation notes:
* constructor places current instance on the global factory list.
* constructor places current instance on the global factory list.
*/
*/
template
<
class
T
>
template
<
class
T
>
ClassFactory
<
T
>::
ClassFactory
(
const
std
::
string
&
tag
,
FactoryFunc
func
)
ClassFactory
<
T
>::
ClassFactory
(
const
std
::
string
&
tag
,
FactoryFunc
func
)
:
identifier_
(
tag
),
fact_func_
(
func
)
:
identifier_
(
tag
),
fact_func_
(
func
)
{
{
next_
=
fact_list_head
();
next_
=
fact_list_head
();
fact_list_head
()
=
this
;
fact_list_head
()
=
this
;
}
}
// Destructor
// Destructor
template
<
class
T
>
template
<
class
T
>
ClassFactory
<
T
>::~
ClassFactory
()
{}
ClassFactory
<
T
>::~
ClassFactory
()
{}
/**
/**
* Construct an instance of a specified sub-class
* Construct an instance of a specified sub-class
...
@@ -116,8 +117,9 @@ ClassFactory<T>::~ClassFactory() {}
...
@@ -116,8 +117,9 @@ ClassFactory<T>::~ClassFactory() {}
* scan global list to find matching tag and use the factory func to
* scan global list to find matching tag and use the factory func to
* create an instance.
* create an instance.
*/
*/
template
<
class
T
>
template
<
class
T
>
T
*
ClassFactory
<
T
>::
make_instance
(
const
std
::
string
&
tag
)
{
T
*
ClassFactory
<
T
>::
make_instance
(
const
std
::
string
&
tag
)
{
T
*
instance
=
NULL
;
T
*
instance
=
NULL
;
ClassFactory
<
T
>
*
current
=
fact_list_head
();
ClassFactory
<
T
>
*
current
=
fact_list_head
();
...
@@ -136,5 +138,5 @@ T *ClassFactory<T>::make_instance(const std::string &tag) {
...
@@ -136,5 +138,5 @@ T *ClassFactory<T>::make_instance(const std::string &tag) {
return
instance
;
return
instance
;
}
}
}
//
namespace common
}
//
namespace common
#endif // __COMMON_SEDA_CLASS_FACTORY_H__
#endif
// __COMMON_SEDA_CLASS_FACTORY_H__
deps/common/seda/event_dispatcher.cpp
浏览文件 @
e976988d
...
@@ -17,8 +17,8 @@ See the Mulan PSL v2 for more details. */
...
@@ -17,8 +17,8 @@ See the Mulan PSL v2 for more details. */
namespace
common
{
namespace
common
{
// Constructor
// Constructor
EventDispatcher
::
EventDispatcher
(
const
char
*
tag
)
EventDispatcher
::
EventDispatcher
(
const
char
*
tag
)
:
Stage
(
tag
),
event_store_
(),
next_stage_
(
NULL
)
:
Stage
(
tag
),
event_store_
(),
next_stage_
(
NULL
)
{
{
LOG_TRACE
(
"enter
\n
"
);
LOG_TRACE
(
"enter
\n
"
);
pthread_mutexattr_t
attr
;
pthread_mutexattr_t
attr
;
...
@@ -31,7 +31,8 @@ EventDispatcher::EventDispatcher(const char *tag)
...
@@ -31,7 +31,8 @@ EventDispatcher::EventDispatcher(const char *tag)
}
}
// Destructor
// Destructor
EventDispatcher
::~
EventDispatcher
()
{
EventDispatcher
::~
EventDispatcher
()
{
LOG_TRACE
(
"enter
\n
"
);
LOG_TRACE
(
"enter
\n
"
);
pthread_mutex_destroy
(
&
event_lock_
);
pthread_mutex_destroy
(
&
event_lock_
);
LOG_TRACE
(
"exit
\n
"
);
LOG_TRACE
(
"exit
\n
"
);
...
@@ -42,7 +43,8 @@ EventDispatcher::~EventDispatcher() {
...
@@ -42,7 +43,8 @@ EventDispatcher::~EventDispatcher() {
* Check if the event can be dispatched. If not, hash it and store
* Check if the event can be dispatched. If not, hash it and store
* it. If so, send it on to the next stage.
* it. If so, send it on to the next stage.
*/
*/
void
EventDispatcher
::
handle_event
(
StageEvent
*
event
)
{
void
EventDispatcher
::
handle_event
(
StageEvent
*
event
)
{
LOG_TRACE
(
"enter
\n
"
);
LOG_TRACE
(
"enter
\n
"
);
std
::
string
hash
;
std
::
string
hash
;
...
@@ -67,7 +69,8 @@ void EventDispatcher::handle_event(StageEvent *event) {
...
@@ -67,7 +69,8 @@ void EventDispatcher::handle_event(StageEvent *event) {
}
}
// Initialize stage params and validate outputs
// Initialize stage params and validate outputs
bool
EventDispatcher
::
initialize
()
{
bool
EventDispatcher
::
initialize
()
{
bool
ret_val
=
true
;
bool
ret_val
=
true
;
if
(
next_stage_list_
.
size
()
!=
1
)
{
if
(
next_stage_list_
.
size
()
!=
1
)
{
...
@@ -82,15 +85,15 @@ bool EventDispatcher::initialize() {
...
@@ -82,15 +85,15 @@ bool EventDispatcher::initialize() {
* Cleanup stage after disconnection
* Cleanup stage after disconnection
* Call done() on any events left over in the event_store_.
* Call done() on any events left over in the event_store_.
*/
*/
void
EventDispatcher
::
cleanup
()
{
void
EventDispatcher
::
cleanup
()
{
pthread_mutex_lock
(
&
event_lock_
);
pthread_mutex_lock
(
&
event_lock_
);
// for each hash chain...
// for each hash chain...
for
(
EventHash
::
iterator
i
=
event_store_
.
begin
();
i
!=
event_store_
.
end
();
i
++
)
{
for
(
EventHash
::
iterator
i
=
event_store_
.
begin
();
i
!=
event_store_
.
end
();
i
++
)
{
// for each event on the chain
// for each event on the chain
for
(
std
::
list
<
StoredEvent
>::
iterator
j
=
i
->
second
.
begin
();
for
(
std
::
list
<
StoredEvent
>::
iterator
j
=
i
->
second
.
begin
();
j
!=
i
->
second
.
end
();
j
++
)
{
j
!=
i
->
second
.
end
();
j
++
)
{
j
->
first
->
done
();
j
->
first
->
done
();
}
}
i
->
second
.
clear
();
i
->
second
.
clear
();
...
@@ -101,7 +104,8 @@ void EventDispatcher::cleanup() {
...
@@ -101,7 +104,8 @@ void EventDispatcher::cleanup() {
}
}
// Wake up a stored event
// Wake up a stored event
bool
EventDispatcher
::
wakeup_event
(
std
::
string
hashkey
)
{
bool
EventDispatcher
::
wakeup_event
(
std
::
string
hashkey
)
{
bool
sent
=
false
;
bool
sent
=
false
;
EventHash
::
iterator
i
;
EventHash
::
iterator
i
;
...
@@ -131,4 +135,4 @@ bool EventDispatcher::wakeup_event(std::string hashkey) {
...
@@ -131,4 +135,4 @@ bool EventDispatcher::wakeup_event(std::string hashkey) {
return
sent
;
return
sent
;
}
}
}
//namespace common
}
// namespace common
\ No newline at end of file
\ No newline at end of file
deps/common/seda/event_dispatcher.h
浏览文件 @
e976988d
...
@@ -55,7 +55,7 @@ class EventDispatcher : public Stage {
...
@@ -55,7 +55,7 @@ class EventDispatcher : public Stage {
// public interface operations
// public interface operations
public:
public:
typedef
enum
{
SEND_EVENT
=
0
,
STORE_EVENT
,
FAIL_EVENT
}
status_t
;
typedef
enum
{
SEND_EVENT
=
0
,
STORE_EVENT
,
FAIL_EVENT
}
status_t
;
/**
/**
...
@@ -77,7 +77,7 @@ class EventDispatcher : public Stage {
...
@@ -77,7 +77,7 @@ class EventDispatcher : public Stage {
// Note, EventDispatcher is an abstract class and needs no make_stage()
// Note, EventDispatcher is an abstract class and needs no make_stage()
protected:
protected:
/**
/**
* Constructor
* Constructor
* @param[in] tag The label that identifies this stage.
* @param[in] tag The label that identifies this stage.
...
@@ -96,7 +96,10 @@ class EventDispatcher : public Stage {
...
@@ -96,7 +96,10 @@ class EventDispatcher : public Stage {
bool
initialize
();
bool
initialize
();
// set properties for this object
// set properties for this object
bool
set_properties
()
{
return
true
;
}
bool
set_properties
()
{
return
true
;
}
/**
/**
* Cleanup stage after disconnection
* Cleanup stage after disconnection
...
@@ -119,8 +122,7 @@ class EventDispatcher : public Stage {
...
@@ -119,8 +122,7 @@ class EventDispatcher : public Stage {
* FAIL_EVENT if failure, and event has been completed;
* FAIL_EVENT if failure, and event has been completed;
* ctx is NULL
* ctx is NULL
*/
*/
virtual
status_t
dispatch_event
(
StageEvent
*
ev
,
DispatchContext
*&
ctx
,
virtual
status_t
dispatch_event
(
StageEvent
*
ev
,
DispatchContext
*&
ctx
,
std
::
string
&
hash
)
=
0
;
std
::
string
&
hash
)
=
0
;
/**
/**
* Wake up a stored event
* Wake up a stored event
...
@@ -136,11 +138,11 @@ class EventDispatcher : public Stage {
...
@@ -136,11 +138,11 @@ class EventDispatcher : public Stage {
typedef
std
::
pair
<
StageEvent
*
,
DispatchContext
*>
StoredEvent
;
typedef
std
::
pair
<
StageEvent
*
,
DispatchContext
*>
StoredEvent
;
typedef
std
::
map
<
std
::
string
,
std
::
list
<
StoredEvent
>>
EventHash
;
typedef
std
::
map
<
std
::
string
,
std
::
list
<
StoredEvent
>>
EventHash
;
EventHash
event_store_
;
// events stored here while waiting
EventHash
event_store_
;
// events stored here while waiting
pthread_mutex_t
event_lock_
;
// protects access to event_store_
pthread_mutex_t
event_lock_
;
// protects access to event_store_
Stage
*
next_stage_
;
// target for dispatched events
Stage
*
next_stage_
;
// target for dispatched events
protected:
protected:
};
};
/**
/**
...
@@ -148,9 +150,10 @@ class EventDispatcher : public Stage {
...
@@ -148,9 +150,10 @@ class EventDispatcher : public Stage {
* derive from this base class.
* derive from this base class.
*/
*/
class
DispatchContext
{
class
DispatchContext
{
public:
public:
virtual
~
DispatchContext
()
{}
virtual
~
DispatchContext
()
{}
};
};
}
//
namespace common
}
//
namespace common
#endif // __COMMON_SEDA_EVENT_DISPATCHER_H__
#endif
// __COMMON_SEDA_EVENT_DISPATCHER_H__
deps/common/seda/example_stage.cpp
浏览文件 @
e976988d
...
@@ -26,13 +26,16 @@ See the Mulan PSL v2 for more details. */
...
@@ -26,13 +26,16 @@ See the Mulan PSL v2 for more details. */
using
namespace
common
;
using
namespace
common
;
// Constructor
// Constructor
ExampleStage
::
ExampleStage
(
const
char
*
tag
)
:
Stage
(
tag
)
{}
ExampleStage
::
ExampleStage
(
const
char
*
tag
)
:
Stage
(
tag
)
{}
// Destructor
// Destructor
ExampleStage
::~
ExampleStage
()
{}
ExampleStage
::~
ExampleStage
()
{}
// Parse properties, instantiate a stage object
// Parse properties, instantiate a stage object
Stage
*
ExampleStage
::
make_stage
(
const
std
::
string
&
tag
)
{
Stage
*
ExampleStage
::
make_stage
(
const
std
::
string
&
tag
)
{
ExampleStage
*
stage
=
new
ExampleStage
(
tag
.
c_str
());
ExampleStage
*
stage
=
new
ExampleStage
(
tag
.
c_str
());
if
(
stage
==
NULL
)
{
if
(
stage
==
NULL
)
{
LOG_ERROR
(
"new ExampleStage failed"
);
LOG_ERROR
(
"new ExampleStage failed"
);
...
@@ -43,7 +46,8 @@ Stage *ExampleStage::make_stage(const std::string &tag) {
...
@@ -43,7 +46,8 @@ Stage *ExampleStage::make_stage(const std::string &tag) {
}
}
// Set properties for this object set in stage specific properties
// Set properties for this object set in stage specific properties
bool
ExampleStage
::
set_properties
()
{
bool
ExampleStage
::
set_properties
()
{
// std::string stageNameStr(stage_name_);
// std::string stageNameStr(stage_name_);
// std::map<std::string, std::string> section = g_properties()->get(
// std::map<std::string, std::string> section = g_properties()->get(
// stageNameStr);
// stageNameStr);
...
@@ -56,7 +60,8 @@ bool ExampleStage::set_properties() {
...
@@ -56,7 +60,8 @@ bool ExampleStage::set_properties() {
}
}
// Initialize stage params and validate outputs
// Initialize stage params and validate outputs
bool
ExampleStage
::
initialize
()
{
bool
ExampleStage
::
initialize
()
{
LOG_TRACE
(
"Enter"
);
LOG_TRACE
(
"Enter"
);
// std::list<Stage*>::iterator stgp = next_stage_list_.begin();
// std::list<Stage*>::iterator stgp = next_stage_list_.begin();
...
@@ -68,20 +73,23 @@ bool ExampleStage::initialize() {
...
@@ -68,20 +73,23 @@ bool ExampleStage::initialize() {
}
}
// Cleanup after disconnection
// Cleanup after disconnection
void
ExampleStage
::
cleanup
()
{
void
ExampleStage
::
cleanup
()
{
LOG_TRACE
(
"Enter"
);
LOG_TRACE
(
"Enter"
);
LOG_TRACE
(
"Exit"
);
LOG_TRACE
(
"Exit"
);
}
}
void
ExampleStage
::
handle_event
(
StageEvent
*
event
)
{
void
ExampleStage
::
handle_event
(
StageEvent
*
event
)
{
LOG_TRACE
(
"Enter
\n
"
);
LOG_TRACE
(
"Enter
\n
"
);
LOG_TRACE
(
"Exit
\n
"
);
LOG_TRACE
(
"Exit
\n
"
);
return
;
return
;
}
}
void
ExampleStage
::
callback_event
(
StageEvent
*
event
,
CallbackContext
*
context
)
{
void
ExampleStage
::
callback_event
(
StageEvent
*
event
,
CallbackContext
*
context
)
{
LOG_TRACE
(
"Enter
\n
"
);
LOG_TRACE
(
"Enter
\n
"
);
LOG_TRACE
(
"Exit
\n
"
);
LOG_TRACE
(
"Exit
\n
"
);
...
...
deps/common/seda/example_stage.h
浏览文件 @
e976988d
...
@@ -33,7 +33,6 @@ protected:
...
@@ -33,7 +33,6 @@ protected:
void
cleanup
();
void
cleanup
();
void
handle_event
(
StageEvent
*
event
);
void
handle_event
(
StageEvent
*
event
);
void
callback_event
(
StageEvent
*
event
,
CallbackContext
*
context
);
void
callback_event
(
StageEvent
*
event
,
CallbackContext
*
context
);
};
};
}
// namespace common
}
// namespace common
#endif //__COMMON_SEDA_EXAMPLE_STAGE_H__
#endif
//__COMMON_SEDA_EXAMPLE_STAGE_H__
deps/common/seda/init.cpp
浏览文件 @
e976988d
...
@@ -37,17 +37,15 @@ See the Mulan PSL v2 for more details. */
...
@@ -37,17 +37,15 @@ See the Mulan PSL v2 for more details. */
#include "common/seda/timer_stage.h"
#include "common/seda/timer_stage.h"
namespace
common
{
namespace
common
{
int
init_seda
(
ProcessParam
*
process_cfg
)
int
init_seda
(
ProcessParam
*
process_cfg
)
{
{
// Initialize the static data structures of threadpool
// Initialize the static data structures of threadpool
Threadpool
::
create_pool_key
();
Threadpool
::
create_pool_key
();
// initialize class factory instances here
// initialize class factory instances here
static
StageFactory
kill_thread_factory
(
"KillThreads"
,
static
StageFactory
kill_thread_factory
(
"KillThreads"
,
&
KillThreadStage
::
make_stage
);
&
KillThreadStage
::
make_stage
);
static
StageFactory
timer_factory
(
"TimerStage"
,
&
TimerStage
::
make_stage
);
static
StageFactory
timer_factory
(
"TimerStage"
,
&
TimerStage
::
make_stage
);
static
StageFactory
seda_stats_factory
(
"MetricsStage"
,
static
StageFactory
seda_stats_factory
(
"MetricsStage"
,
&
MetricsStage
::
make_stage
);
&
MetricsStage
::
make_stage
);
// try to parse the seda configuration files
// try to parse the seda configuration files
SedaConfig
*
config
=
SedaConfig
::
get_instance
();
SedaConfig
*
config
=
SedaConfig
::
get_instance
();
...
@@ -55,16 +53,14 @@ int init_seda(ProcessParam *process_cfg) {
...
@@ -55,16 +53,14 @@ int init_seda(ProcessParam *process_cfg) {
config_stat
=
config
->
parse
();
config_stat
=
config
->
parse
();
if
(
config_stat
!=
SedaConfig
::
SUCCESS
)
{
if
(
config_stat
!=
SedaConfig
::
SUCCESS
)
{
LOG_ERROR
(
"Error: unable to parse file %s"
,
LOG_ERROR
(
"Error: unable to parse file %s"
,
process_cfg
->
get_process_name
().
c_str
());
process_cfg
->
get_process_name
().
c_str
());
return
errno
;
return
errno
;
}
}
// Log a message to indicate that we are restarting, when looking
// Log a message to indicate that we are restarting, when looking
// at a log we can see if mmon is restarting us because we keep
// at a log we can see if mmon is restarting us because we keep
// crashing.
// crashing.
LOG_INFO
(
"(Re)Starting State: Pid: %u Time: %s"
,
(
unsigned
int
)
getpid
(),
LOG_INFO
(
"(Re)Starting State: Pid: %u Time: %s"
,
(
unsigned
int
)
getpid
(),
DateTime
::
now
().
to_string_local
().
c_str
());
DateTime
::
now
().
to_string_local
().
c_str
());
LOG_INFO
(
"The process Name is %s"
,
process_cfg
->
get_process_name
().
c_str
());
LOG_INFO
(
"The process Name is %s"
,
process_cfg
->
get_process_name
().
c_str
());
// try to initialize the seda configuration
// try to initialize the seda configuration
...
@@ -79,10 +75,11 @@ int init_seda(ProcessParam *process_cfg) {
...
@@ -79,10 +75,11 @@ int init_seda(ProcessParam *process_cfg) {
return
0
;
return
0
;
}
}
void
cleanup_seda
()
{
void
cleanup_seda
()
{
SedaConfig
*
seda_config
=
SedaConfig
::
get_instance
();
SedaConfig
*
seda_config
=
SedaConfig
::
get_instance
();
delete
seda_config
;
delete
seda_config
;
SedaConfig
::
get_instance
()
=
NULL
;
SedaConfig
::
get_instance
()
=
NULL
;
}
}
}
//namespace common
}
// namespace common
\ No newline at end of file
\ No newline at end of file
deps/common/seda/init.h
浏览文件 @
e976988d
...
@@ -36,5 +36,5 @@ int init_seda(ProcessParam *process_cfg);
...
@@ -36,5 +36,5 @@ int init_seda(ProcessParam *process_cfg);
void
cleanup_seda
();
void
cleanup_seda
();
}
//
namespace common
}
//
namespace common
#endif // __COMMON_SEDA_INIT_H__
#endif
// __COMMON_SEDA_INIT_H__
deps/common/seda/kill_thread.cpp
浏览文件 @
e976988d
...
@@ -19,14 +19,14 @@ See the Mulan PSL v2 for more details. */
...
@@ -19,14 +19,14 @@ See the Mulan PSL v2 for more details. */
#include "common/seda/thread_pool.h"
#include "common/seda/thread_pool.h"
namespace
common
{
namespace
common
{
/**
/**
* Notify the pool and kill the thread
* Notify the pool and kill the thread
* @param[in] event Pointer to event that must be handled.
* @param[in] event Pointer to event that must be handled.
*
*
* @post Call never returns. Thread is killed. Pool is notified.
* @post Call never returns. Thread is killed. Pool is notified.
*/
*/
void
KillThreadStage
::
handle_event
(
StageEvent
*
event
)
{
void
KillThreadStage
::
handle_event
(
StageEvent
*
event
)
{
get_pool
()
->
thread_kill
();
get_pool
()
->
thread_kill
();
event
->
done
();
event
->
done
();
this
->
release_event
();
this
->
release_event
();
...
@@ -39,13 +39,15 @@ void KillThreadStage::handle_event(StageEvent *event) {
...
@@ -39,13 +39,15 @@ void KillThreadStage::handle_event(StageEvent *event) {
* @post initializing the class members
* @post initializing the class members
* @return the class object
* @return the class object
*/
*/
Stage
*
KillThreadStage
::
make_stage
(
const
std
::
string
&
tag
)
{
Stage
*
KillThreadStage
::
make_stage
(
const
std
::
string
&
tag
)
{
return
new
KillThreadStage
(
tag
.
c_str
());
return
new
KillThreadStage
(
tag
.
c_str
());
}
}
bool
KillThreadStage
::
set_properties
()
{
bool
KillThreadStage
::
set_properties
()
{
// nothing to do
// nothing to do
return
true
;
return
true
;
}
}
}
//namespace common
}
// namespace common
\ No newline at end of file
\ No newline at end of file
deps/common/seda/kill_thread.h
浏览文件 @
e976988d
...
@@ -21,7 +21,6 @@ See the Mulan PSL v2 for more details. */
...
@@ -21,7 +21,6 @@ See the Mulan PSL v2 for more details. */
#include "common/seda/stage.h"
#include "common/seda/stage.h"
namespace
common
{
namespace
common
{
/**
/**
* @file
* @file
* @author Longda
* @author Longda
...
@@ -56,7 +55,8 @@ protected:
...
@@ -56,7 +55,8 @@ protected:
* @post event queue is empty
* @post event queue is empty
* @post stage is not connected
* @post stage is not connected
*/
*/
KillThreadStage
(
const
char
*
tag
)
:
Stage
(
tag
)
{}
KillThreadStage
(
const
char
*
tag
)
:
Stage
(
tag
)
{}
/**
/**
* Notify the pool and kill the thread
* Notify the pool and kill the thread
...
@@ -70,7 +70,10 @@ protected:
...
@@ -70,7 +70,10 @@ protected:
* Handle the callback
* Handle the callback
* Nothing special for callbacks in this stage.
* Nothing special for callbacks in this stage.
*/
*/
void
callback_event
(
StageEvent
*
event
,
CallbackContext
*
context
)
{
return
;
}
void
callback_event
(
StageEvent
*
event
,
CallbackContext
*
context
)
{
return
;
}
/**
/**
* Initialize stage params
* Initialize stage params
...
@@ -79,7 +82,10 @@ protected:
...
@@ -79,7 +82,10 @@ protected:
* @pre Stage not connected
* @pre Stage not connected
* @return true
* @return true
*/
*/
bool
initialize
()
{
return
true
;
}
bool
initialize
()
{
return
true
;
}
/**
/**
* set properties for this object
* set properties for this object
...
@@ -92,5 +98,5 @@ protected:
...
@@ -92,5 +98,5 @@ protected:
friend
class
Threadpool
;
friend
class
Threadpool
;
};
};
}
//
namespace common
}
//
namespace common
#endif // __COMMON_SEDA_KILL_THREAD_H__
#endif
// __COMMON_SEDA_KILL_THREAD_H__
deps/common/seda/metrics_report_event.h
浏览文件 @
e976988d
...
@@ -28,5 +28,5 @@ public:
...
@@ -28,5 +28,5 @@ public:
};
};
};
};
}
//
namespace common
}
//
namespace common
#endif //__COMMON_SEDA_METRICS_REPORT_EVENT_H__
#endif
//__COMMON_SEDA_METRICS_REPORT_EVENT_H__
deps/common/seda/metrics_stage.cpp
浏览文件 @
e976988d
...
@@ -29,20 +29,24 @@ See the Mulan PSL v2 for more details. */
...
@@ -29,20 +29,24 @@ See the Mulan PSL v2 for more details. */
using
namespace
common
;
using
namespace
common
;
MetricsRegistry
&
get_metric_registry
()
{
MetricsRegistry
&
get_metric_registry
()
{
static
MetricsRegistry
metrics_registry
;
static
MetricsRegistry
metrics_registry
;
return
metrics_registry
;
return
metrics_registry
;
}
}
// Constructor
// Constructor
MetricsStage
::
MetricsStage
(
const
char
*
tag
)
:
Stage
(
tag
)
{}
MetricsStage
::
MetricsStage
(
const
char
*
tag
)
:
Stage
(
tag
)
{}
// Destructor
// Destructor
MetricsStage
::~
MetricsStage
()
{}
MetricsStage
::~
MetricsStage
()
{}
// Parse properties, instantiate a stage object
// Parse properties, instantiate a stage object
Stage
*
MetricsStage
::
make_stage
(
const
std
::
string
&
tag
)
{
Stage
*
MetricsStage
::
make_stage
(
const
std
::
string
&
tag
)
{
MetricsStage
*
stage
=
new
MetricsStage
(
tag
.
c_str
());
MetricsStage
*
stage
=
new
MetricsStage
(
tag
.
c_str
());
if
(
stage
==
NULL
)
{
if
(
stage
==
NULL
)
{
LOG_ERROR
(
"new MetricsStage failed"
);
LOG_ERROR
(
"new MetricsStage failed"
);
...
@@ -53,10 +57,10 @@ Stage *MetricsStage::make_stage(const std::string &tag) {
...
@@ -53,10 +57,10 @@ Stage *MetricsStage::make_stage(const std::string &tag) {
}
}
// Set properties for this object set in stage specific properties
// Set properties for this object set in stage specific properties
bool
MetricsStage
::
set_properties
()
{
bool
MetricsStage
::
set_properties
()
{
std
::
string
stage_name_str
(
stage_name_
);
std
::
string
stage_name_str
(
stage_name_
);
std
::
map
<
std
::
string
,
std
::
string
>
section
=
std
::
map
<
std
::
string
,
std
::
string
>
section
=
get_properties
()
->
get
(
stage_name_str
);
get_properties
()
->
get
(
stage_name_str
);
metric_report_interval_
=
DateTime
::
SECONDS_PER_MIN
;
metric_report_interval_
=
DateTime
::
SECONDS_PER_MIN
;
...
@@ -70,7 +74,8 @@ bool MetricsStage::set_properties() {
...
@@ -70,7 +74,8 @@ bool MetricsStage::set_properties() {
}
}
// Initialize stage params and validate outputs
// Initialize stage params and validate outputs
bool
MetricsStage
::
initialize
()
{
bool
MetricsStage
::
initialize
()
{
LOG_TRACE
(
"Enter"
);
LOG_TRACE
(
"Enter"
);
std
::
list
<
Stage
*>::
iterator
stgp
=
next_stage_list_
.
begin
();
std
::
list
<
Stage
*>::
iterator
stgp
=
next_stage_list_
.
begin
();
...
@@ -84,13 +89,15 @@ bool MetricsStage::initialize() {
...
@@ -84,13 +89,15 @@ bool MetricsStage::initialize() {
}
}
// Cleanup after disconnection
// Cleanup after disconnection
void
MetricsStage
::
cleanup
()
{
void
MetricsStage
::
cleanup
()
{
LOG_TRACE
(
"Enter"
);
LOG_TRACE
(
"Enter"
);
LOG_TRACE
(
"Exit"
);
LOG_TRACE
(
"Exit"
);
}
}
void
MetricsStage
::
handle_event
(
StageEvent
*
event
)
{
void
MetricsStage
::
handle_event
(
StageEvent
*
event
)
{
LOG_TRACE
(
"Enter
\n
"
);
LOG_TRACE
(
"Enter
\n
"
);
CompletionCallback
*
cb
=
new
CompletionCallback
(
this
,
NULL
);
CompletionCallback
*
cb
=
new
CompletionCallback
(
this
,
NULL
);
...
@@ -102,8 +109,7 @@ void MetricsStage::handle_event(StageEvent *event) {
...
@@ -102,8 +109,7 @@ void MetricsStage::handle_event(StageEvent *event) {
return
;
return
;
}
}
TimerRegisterEvent
*
tm_event
=
TimerRegisterEvent
*
tm_event
=
new
TimerRegisterEvent
(
event
,
metric_report_interval_
*
USEC_PER_SEC
);
new
TimerRegisterEvent
(
event
,
metric_report_interval_
*
USEC_PER_SEC
);
if
(
tm_event
==
NULL
)
{
if
(
tm_event
==
NULL
)
{
LOG_ERROR
(
"Failed to new TimerRegisterEvent"
);
LOG_ERROR
(
"Failed to new TimerRegisterEvent"
);
...
@@ -121,7 +127,8 @@ void MetricsStage::handle_event(StageEvent *event) {
...
@@ -121,7 +127,8 @@ void MetricsStage::handle_event(StageEvent *event) {
return
;
return
;
}
}
void
MetricsStage
::
callback_event
(
StageEvent
*
event
,
CallbackContext
*
context
)
{
void
MetricsStage
::
callback_event
(
StageEvent
*
event
,
CallbackContext
*
context
)
{
LOG_TRACE
(
"Enter
\n
"
);
LOG_TRACE
(
"Enter
\n
"
);
MetricsRegistry
&
metrics_registry
=
get_metrics_registry
();
MetricsRegistry
&
metrics_registry
=
get_metrics_registry
();
...
...
deps/common/seda/metrics_stage.h
浏览文件 @
e976988d
...
@@ -37,8 +37,8 @@ protected:
...
@@ -37,8 +37,8 @@ protected:
protected:
protected:
private:
private:
Stage
*
timer_stage_
=
nullptr
;
Stage
*
timer_stage_
=
nullptr
;
//report metrics every @metric_report_interval_ seconds
//
report metrics every @metric_report_interval_ seconds
int
metric_report_interval_
=
10
;
int
metric_report_interval_
=
10
;
};
};
}
// namespace common
}
// namespace common
#endif //__COMMON_SEDA_METRICS_STAGE_H__
#endif
//__COMMON_SEDA_METRICS_STAGE_H__
deps/common/seda/seda_config.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
deps/common/seda/seda_config.h
浏览文件 @
e976988d
...
@@ -26,8 +26,7 @@ See the Mulan PSL v2 for more details. */
...
@@ -26,8 +26,7 @@ See the Mulan PSL v2 for more details. */
namespace
common
{
namespace
common
{
//keywords of sedaconfig
// keywords of sedaconfig
/**
/**
* A class to configure seda stages
* A class to configure seda stages
...
@@ -45,7 +44,7 @@ namespace common {
...
@@ -45,7 +44,7 @@ namespace common {
class
SedaConfig
{
class
SedaConfig
{
public:
public:
typedef
enum
{
SUCCESS
=
0
,
INITFAIL
,
PARSEFAIL
}
status_t
;
typedef
enum
{
SUCCESS
=
0
,
INITFAIL
,
PARSEFAIL
}
status_t
;
static
SedaConfig
*&
get_instance
();
static
SedaConfig
*&
get_instance
();
...
@@ -157,7 +156,7 @@ class SedaConfig {
...
@@ -157,7 +156,7 @@ class SedaConfig {
std
::
map
<
std
::
string
,
Stage
*>::
iterator
begin
();
std
::
map
<
std
::
string
,
Stage
*>::
iterator
begin
();
std
::
map
<
std
::
string
,
Stage
*>::
iterator
end
();
std
::
map
<
std
::
string
,
Stage
*>::
iterator
end
();
private:
private:
// Constructor
// Constructor
SedaConfig
();
SedaConfig
();
...
@@ -192,7 +191,7 @@ class SedaConfig {
...
@@ -192,7 +191,7 @@ class SedaConfig {
void
init_event_history
();
void
init_event_history
();
SedaConfig
&
operator
=
(
const
SedaConfig
&
cevtout
);
SedaConfig
&
operator
=
(
const
SedaConfig
&
cevtout
);
static
SedaConfig
*
instance_
;
static
SedaConfig
*
instance_
;
// In old logic, SedaConfig will parse seda configure file
// In old logic, SedaConfig will parse seda configure file
...
@@ -203,18 +202,20 @@ class SedaConfig {
...
@@ -203,18 +202,20 @@ class SedaConfig {
std
::
map
<
std
::
string
,
Threadpool
*>
thread_pools_
;
std
::
map
<
std
::
string
,
Threadpool
*>
thread_pools_
;
std
::
map
<
std
::
string
,
Stage
*>
stages_
;
std
::
map
<
std
::
string
,
Stage
*>
stages_
;
std
::
vector
<
std
::
string
>
stage_names_
;
std
::
vector
<
std
::
string
>
stage_names_
;
};
};
inline
std
::
map
<
std
::
string
,
Stage
*>::
iterator
SedaConfig
::
begin
()
{
inline
std
::
map
<
std
::
string
,
Stage
*>::
iterator
SedaConfig
::
begin
()
{
return
stages_
.
begin
();
return
stages_
.
begin
();
}
}
inline
std
::
map
<
std
::
string
,
Stage
*>::
iterator
SedaConfig
::
end
()
{
inline
std
::
map
<
std
::
string
,
Stage
*>::
iterator
SedaConfig
::
end
()
{
return
stages_
.
end
();
return
stages_
.
end
();
}
}
inline
Stage
*
SedaConfig
::
get_stage
(
const
char
*
stagename
)
{
inline
Stage
*
SedaConfig
::
get_stage
(
const
char
*
stagename
)
{
if
(
stagename
)
{
if
(
stagename
)
{
std
::
string
sname
(
stagename
);
std
::
string
sname
(
stagename
);
return
stages_
[
stagename
];
return
stages_
[
stagename
];
...
@@ -228,5 +229,5 @@ SedaConfig *&get_seda_config();
...
@@ -228,5 +229,5 @@ SedaConfig *&get_seda_config();
bool
&
get_event_history_flag
();
bool
&
get_event_history_flag
();
u32_t
&
get_max_event_hops
();
u32_t
&
get_max_event_hops
();
}
//
namespace common
}
//
namespace common
#endif //__COMMON_SEDA_SEDA_CONFIG_H__
#endif
//__COMMON_SEDA_SEDA_CONFIG_H__
deps/common/seda/seda_defs.h
浏览文件 @
e976988d
...
@@ -15,7 +15,7 @@ See the Mulan PSL v2 for more details. */
...
@@ -15,7 +15,7 @@ See the Mulan PSL v2 for more details. */
#ifndef __COMMON_SEDA_SEDA_DEFS_H__
#ifndef __COMMON_SEDA_SEDA_DEFS_H__
#define __COMMON_SEDA_SEDA_DEFS_H__
#define __COMMON_SEDA_SEDA_DEFS_H__
#define SEDA_BASE_NAME
"SEDA_BASE"
#define SEDA_BASE_NAME "SEDA_BASE"
#define THREAD_POOLS_NAME "ThreadPools"
#define THREAD_POOLS_NAME "ThreadPools"
#define STAGES "STAGES"
#define STAGES "STAGES"
...
@@ -30,4 +30,4 @@ See the Mulan PSL v2 for more details. */
...
@@ -30,4 +30,4 @@ See the Mulan PSL v2 for more details. */
#define DEFAULT_THREAD_POOL "DefaultThreads"
#define DEFAULT_THREAD_POOL "DefaultThreads"
#define METRCS_REPORT_INTERVAL "MetricsReportInterval"
#define METRCS_REPORT_INTERVAL "MetricsReportInterval"
#endif //__COMMON_SEDA_SEDA_DEFS_H__
#endif
//__COMMON_SEDA_SEDA_DEFS_H__
deps/common/seda/stage.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
deps/common/seda/stage.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
deps/common/seda/stage_event.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
deps/common/seda/stage_event.h
浏览文件 @
e976988d
...
@@ -58,7 +58,7 @@ class TimeoutInfo;
...
@@ -58,7 +58,7 @@ class TimeoutInfo;
class
StageEvent
{
class
StageEvent
{
public:
public:
// Interface for collecting debugging information
// Interface for collecting debugging information
typedef
enum
{
HANDLE_EV
=
0
,
CALLBACK_EV
,
TIMEOUT_EV
}
HistType
;
typedef
enum
{
HANDLE_EV
=
0
,
CALLBACK_EV
,
TIMEOUT_EV
}
HistType
;
...
@@ -106,7 +106,10 @@ class StageEvent {
...
@@ -106,7 +106,10 @@ class StageEvent {
UserData
*
get_user_data
();
UserData
*
get_user_data
();
// True if event represents a callback
// True if event represents a callback
bool
is_callback
()
{
return
cb_flag_
;
}
bool
is_callback
()
{
return
cb_flag_
;
}
// Add stage to list of stages which have handled this event
// Add stage to list of stages which have handled this event
void
save_stage
(
Stage
*
stg
,
HistType
type
);
void
save_stage
(
Stage
*
stg
,
HistType
type
);
...
@@ -123,23 +126,28 @@ class StageEvent {
...
@@ -123,23 +126,28 @@ class StageEvent {
// If the event has timed out (and should be dropped)
// If the event has timed out (and should be dropped)
bool
has_timed_out
();
bool
has_timed_out
();
private:
private:
typedef
std
::
pair
<
Stage
*
,
HistType
>
HistEntry
;
typedef
std
::
pair
<
Stage
*
,
HistType
>
HistEntry
;
// Interface to allow callbacks to be run on target stage's threads
// Interface to allow callbacks to be run on target stage's threads
void
mark_callback
()
{
cb_flag_
=
true
;
}
void
mark_callback
()
void
clear_callback
()
{
cb_flag_
=
false
;
}
{
cb_flag_
=
true
;
}
void
clear_callback
()
{
cb_flag_
=
false
;
}
// Set a timeout info into the event
// Set a timeout info into the event
void
set_timeout_info
(
TimeoutInfo
*
tmi
);
void
set_timeout_info
(
TimeoutInfo
*
tmi
);
CompletionCallback
*
comp_cb_
;
// completion callback stack for this event
CompletionCallback
*
comp_cb_
;
// completion callback stack for this event
UserData
*
ud_
;
// user data associated with event by caller
UserData
*
ud_
;
// user data associated with event by caller
bool
cb_flag_
;
// true if this event is a callback
bool
cb_flag_
;
// true if this event is a callback
std
::
list
<
HistEntry
>
*
history_
;
// List of stages which have handled ev
std
::
list
<
HistEntry
>
*
history_
;
// List of stages which have handled ev
u32_t
stage_hops_
;
// Number of stages which have handled ev
u32_t
stage_hops_
;
// Number of stages which have handled ev
TimeoutInfo
*
tm_info_
;
// the timeout info for this event
TimeoutInfo
*
tm_info_
;
// the timeout info for this event
};
};
/**
/**
...
@@ -155,15 +163,18 @@ class StageEvent {
...
@@ -155,15 +163,18 @@ class StageEvent {
* originating stage can access the \c UserData member to recover its state.
* originating stage can access the \c UserData member to recover its state.
*/
*/
class
UserData
{
class
UserData
{
public:
public:
/**
/**
* \brief A virtual destructor to enable the use of dynamic casts.
* \brief A virtual destructor to enable the use of dynamic casts.
*/
*/
virtual
~
UserData
()
{
return
;
}
virtual
~
UserData
()
{
return
;
}
};
};
bool
&
get_event_history_flag
();
bool
&
get_event_history_flag
();
u32_t
&
get_max_event_hops
();
u32_t
&
get_max_event_hops
();
}
//
namespace common
}
//
namespace common
#endif // __COMMON_SEDA_STAGE_EVENT_H__
#endif
// __COMMON_SEDA_STAGE_EVENT_H__
deps/common/seda/stage_factory.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
deps/common/seda/thread_pool.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
deps/common/seda/thread_pool.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
deps/common/seda/timer_stage.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
deps/common/seda/timer_stage.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
deps/common/time/datetime.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
deps/common/time/datetime.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
deps/common/time/timeout_info.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
deps/common/time/timeout_info.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
deps/common/version.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/obclient/client.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/event/execution_plan_event.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/event/execution_plan_event.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/event/session_event.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/event/session_event.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/event/sql_event.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/event/sql_event.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/event/storage_event.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/event/storage_event.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/handler/handler.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/ini_setting.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/init.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/init.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/main.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/net/connection_context.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/net/server.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/net/server.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/net/server_param.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/rc.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/rc.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/session/session.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/session/session.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/session/session_stage.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/session/session_stage.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/sql/executor/execute_stage.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/sql/executor/execute_stage.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/sql/executor/execution_node.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/sql/executor/execution_node.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/sql/executor/tuple.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/sql/executor/tuple.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/sql/executor/value.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/sql/optimizer/optimize_stage.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/sql/optimizer/optimize_stage.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/sql/parser/lex.yy.c
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/sql/parser/lex.yy.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/sql/parser/parse.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/sql/parser/parse.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/sql/parser/parse_defs.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/sql/parser/parse_stage.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/sql/parser/parse_stage.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/sql/parser/resolve_stage.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/sql/parser/resolve_stage.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/sql/parser/yacc_sql.tab.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/sql/plan_cache/plan_cache_stage.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/sql/plan_cache/plan_cache_stage.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/sql/query_cache/query_cache_stage.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/sql/query_cache/query_cache_stage.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/common/bplus_tree.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/common/bplus_tree.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/common/bplus_tree_index.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/common/bplus_tree_index.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/common/condition_filter.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/common/condition_filter.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/common/db.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/common/db.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/common/field_meta.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/common/field_meta.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/common/index.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/common/index.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/common/index_meta.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/common/index_meta.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/common/meta_util.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/common/meta_util.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/common/record_manager.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/common/record_manager.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/common/table.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/common/table.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/common/table_meta.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/common/table_meta.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/default/default_handler.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/default/default_handler.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/default/default_storage_stage.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/default/default_storage_stage.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/default/disk_buffer_pool.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/default/disk_buffer_pool.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/mem/mem_storage_stage.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/mem/mem_storage_stage.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/trx/trx.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
src/observer/storage/trx/trx.h
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
unitest/bitmap_test.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
unitest/md5_test.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
unitest/path_test.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
unitest/pidfile_test.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
unitest/rc_test.cpp
浏览文件 @
e976988d
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录