Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
oceanbase
oblogmsg
提交
8e3b1d96
O
oblogmsg
项目概览
oceanbase
/
oblogmsg
1 年多 前同步成功
通知
1
Star
10
Fork
6
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
oblogmsg
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
8e3b1d96
编写于
11月 23, 2021
作者:
忠
忠阳
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
change __thread lmb to LogMsgBuf class,set it in toString
上级
0f25623c
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
245 addition
and
290 deletion
+245
-290
CMakeLists.txt
CMakeLists.txt
+0
-3
benchmark/lmTest.cpp
benchmark/lmTest.cpp
+5
-5
include/LogMsgBuf.h
include/LogMsgBuf.h
+29
-18
include/LogRecord.h
include/LogRecord.h
+4
-3
src/CMakeLists.txt
src/CMakeLists.txt
+0
-1
src/LogMsgBuf.cpp
src/LogMsgBuf.cpp
+139
-193
src/LogRecord.cpp
src/LogRecord.cpp
+61
-60
unittest/faTest.cpp
unittest/faTest.cpp
+1
-1
unittest/lrTest.cpp
unittest/lrTest.cpp
+6
-6
未找到文件。
CMakeLists.txt
浏览文件 @
8e3b1d96
...
...
@@ -7,9 +7,6 @@ endif()
add_compile_definitions
(
$<$<COMPILE_LANGUAGE:CXX>:_GLIBCXX_USE_CXX11_ABI=0>
)
option
(
HIDDEN_DMB_SYMBOLS
"hidden dmb symbols"
FALSE
)
mark_as_advanced
(
HIDDEN_DMB_SYMBOLS
)
add_subdirectory
(
src
)
# Check if oblogmsg is being used directly or via add_subdirectory
...
...
benchmark/lmTest.cpp
浏览文件 @
8e3b1d96
...
...
@@ -16,10 +16,10 @@
#endif
#include "itoa.h"
#include "StrArray.h"
using
namespace
std
;
using
namespace
oceanbase
::
logmessage
;
LogMsgBuf
*
lmb
=
NULL
;
const
char
*
tableMeta
=
"[MYTEST,litter]
\n
"
"id,MYSQL_TYPE_LONG,8,P,
\n
"
"num1,MYSQL_TYPE_SHORT,4,,
\n
"
...
...
@@ -618,7 +618,7 @@ LogRecordImpl* createRecordByMeta(ITableMeta* m, int type, bool string_or_point,
#ifdef LMB
LogRecordImpl
*
r
=
new
LogRecordImpl
(
true
,
true
);
#else
LogRecordImpl
*
r
=
new
LogRecordImpl
(
true
,
tru
e
);
LogRecordImpl
*
r
=
new
LogRecordImpl
(
true
,
fals
e
);
#endif
char
*
buf
=
NULL
,
*
pos
=
NULL
;
int
size
=
0
,
csize
=
0
;
...
...
@@ -776,7 +776,7 @@ int dm_speed_test(int type, bool string_or_point)
clock_gettime
(
CLOCK_REALTIME
,
&
s
);
for
(
int
i
=
0
;
i
<
sc
;
i
++
)
{
#ifdef LMB
lrl
[
i
]
->
toString
(
&
size
);
lrl
[
i
]
->
toString
(
&
size
,
lmb
);
#else
lrl
[
i
]
->
toString
();
#endif
...
...
@@ -818,13 +818,13 @@ int dm_speed_test(int type, bool string_or_point)
int
main
(
int
argc
,
char
*
argv
[])
{
#ifdef LMB
LogMsgInit
();
lmb
=
new
LogMsgBuf
();
#endif
dm_speed_test
(
EINSERT
,
false
);
dm_speed_test
(
EUPDATE
,
false
);
dm_speed_test
(
EDELETE
,
false
);
#ifdef LMB
LogMsgDestroy
()
;
delete
lmb
;
#endif
return
0
;
}
include/LogMsgBuf.h
浏览文件 @
8e3b1d96
...
...
@@ -19,24 +19,35 @@ namespace oceanbase {
namespace
logmessage
{
struct
BinLogBuf
;
int
LogMsgInit
();
int
LogMsgLocalInit
();
void
LogMsgDestroy
();
void
LogMsgLocalDestroy
();
const
char
*
LogMsgGetValueByOffset
(
size_t
offset
);
size_t
LogMsgAppendString
(
const
char
*
string
,
size_t
size
);
size_t
LogMsgAppendString
(
const
std
::
string
&
string
);
size_t
LogMsgAppendBuf
(
const
char
*
data
,
size_t
size
);
size_t
LogMsgAppendBuf
(
const
std
::
string
&
string
);
size_t
LogMsgAppendBuf
(
const
BinLogBuf
*
sa
,
size_t
size
);
size_t
LogMsgAppendStringArray
(
std
::
vector
<
std
::
string
*>&
sa
);
size_t
LogMsgAppendStringArray
(
const
char
**
sa
,
size_t
size
);
void
LogMsgSetHead
(
size_t
size
);
void
LogMsgCopyHead
(
const
char
*
head
,
size_t
size
);
void
LogMsgFroceSetHeadSize
(
size_t
size
);
const
char
*
LogMsgGetString
(
size_t
*
size
);
size_t
LogMsgAppendDataArray
(
std
::
vector
<
long
>&
sa
);
size_t
LogMsgAppendDataArray
(
uint8_t
*
sa
,
size_t
size
);
class
LogMsgBuf
{
public:
LogMsgBuf
();
~
LogMsgBuf
();
const
char
*
getValueByOffset
(
size_t
offset
);
size_t
appendString
(
const
char
*
string
,
size_t
size
);
size_t
appendString
(
const
std
::
string
&
string
);
size_t
appendBuf
(
const
char
*
data
,
size_t
size
);
size_t
appendBuf
(
const
std
::
string
&
string
);
size_t
appendBuf
(
const
BinLogBuf
*
sa
,
size_t
size
);
size_t
appendStringArray
(
std
::
vector
<
std
::
string
*>&
sa
);
size_t
appendStringArray
(
const
char
**
sa
,
size_t
size
);
void
setHead
(
size_t
size
);
void
copyHead
(
const
char
*
head
,
size_t
size
);
void
froceSetHeadSize
(
size_t
size
);
const
char
*
getString
(
size_t
*
size
);
size_t
appendDataArray
(
std
::
vector
<
long
>&
sa
);
size_t
appendDataArray
(
uint8_t
*
sa
,
size_t
size
);
private:
inline
void
checkBuf
(
size_t
size
,
char
*&
pos
,
uint32_t
*&
s
,
char
*&
head
);
private:
char
*
buf
;
size_t
bufSize
;
size_t
bufPos
;
char
*
defaultBuf
;
size_t
avg_size
;
};
}
// namespace logmessage
}
// namespace oceanbase
include/LogRecord.h
浏览文件 @
8e3b1d96
...
...
@@ -15,6 +15,7 @@ See the Mulan PSL v2 for more details. */
#include <cstdint>
#include "UserData.h"
#include "BinLogBuf.h"
#include "LogMsgBuf.h"
namespace
oceanbase
{
namespace
logmessage
{
...
...
@@ -234,7 +235,7 @@ public:
* serialize
* @return serialized ptr
*/
virtual
const
char
*
toString
(
size_t
*
size
,
bool
reserveMemory
=
false
)
=
0
;
virtual
const
char
*
toString
(
size_t
*
size
,
LogMsgBuf
*
lmb
=
NULL
,
bool
reserveMemory
=
false
)
=
0
;
/**
* @return serialized ptr
...
...
@@ -272,7 +273,7 @@ class LogRecordImpl : public ILogRecord {
public:
LogRecordImpl
(
time_t
timestamp
,
ITableMeta
*
tblMeta
);
LogRecordImpl
(
const
void
*
ptr
,
size_t
size
);
LogRecordImpl
(
bool
creating
=
true
,
bool
use
D
MB
=
false
);
LogRecordImpl
(
bool
creating
=
true
,
bool
use
L
MB
=
false
);
virtual
~
LogRecordImpl
();
public:
...
...
@@ -403,7 +404,7 @@ public:
virtual
size_t
getRealSize
();
virtual
const
char
*
toString
(
size_t
*
size
,
bool
reserveMemory
=
false
);
virtual
const
char
*
toString
(
size_t
*
size
,
LogMsgBuf
*
lmb
=
NULL
,
bool
reserveMemory
=
false
);
virtual
const
char
*
getFormatedString
(
size_t
*
size
);
...
...
src/CMakeLists.txt
浏览文件 @
8e3b1d96
...
...
@@ -21,7 +21,6 @@ foreach(T IN ITEMS oblogmsg_shared oblogmsg_static)
target_include_directories
(
${
T
}
PRIVATE
${
CMAKE_CURRENT_SOURCE_DIR
}
PUBLIC $<BUILD_INTERFACE:
${
CMAKE_CURRENT_SOURCE_DIR
}
/../include>
)
endforeach
()
target_compile_definitions
(
oblogmsg_static PRIVATE $<$<BOOL:
${
HIDDEN_DMB_SYMBOLS
}
>:_HIDDEN_DMB_SYMBOLS>
)
# ensure that the build results can be run on systems with lower libstdc++ version than the build system
target_link_libraries
(
oblogmsg_shared PRIVATE -static-libstdc++
)
...
...
src/LogMsgBuf.cpp
浏览文件 @
8e3b1d96
...
...
@@ -19,161 +19,107 @@ See the Mulan PSL v2 for more details. */
namespace
oceanbase
{
namespace
logmessage
{
#ifdef _HIDDEN_DMB_SYMBOLS
#define VISIBILITY_HIDDEN __attribute__((visibility("hidden")))
#else
#define VISIBILITY_HIDDEN
#endif
typedef
struct
_LogMsgBuf
{
char
*
buf
;
size_t
bufSize
;
size_t
bufPos
;
char
*
defaultBuf
;
size_t
avg_size
;
}
LogMsgBuf
;
#define LogMsgHeadSize (sizeof(MsgHeader) + sizeof(COUNT_TYPE))
#define DefaultLogMsgBufSize 1024 * 1024 * 32
#define LOG_MSG_MAX_TAIL_SIZE 1024
static
LogMsgBuf
lmb_global
=
{
NULL
,
0
,
0
,
NULL
,
0
};
static
__thread
LogMsgBuf
*
lmb
=
&
lmb_global
;
static
inline
void
lm_check_buf
(
LogMsgBuf
*
lmbuf
,
size_t
size
,
char
*&
pos
,
STRLEN_TYPE
*&
s
,
char
*&
head
)
{
if
(
lmbuf
->
bufSize
<
size
+
(
pos
-
lmbuf
->
buf
)
+
LOG_MSG_MAX_TAIL_SIZE
)
{
char
*
tmp
=
new
char
[
lmbuf
->
bufSize
=
(
pos
-
lmbuf
->
buf
)
+
2
*
(
size
)
+
LOG_MSG_MAX_TAIL_SIZE
];
memcpy
(
tmp
,
lmbuf
->
buf
,
pos
-
lmbuf
->
buf
);
pos
=
tmp
+
(
pos
-
lmbuf
->
buf
);
s
=
(
STRLEN_TYPE
*
)(
tmp
+
((
char
*
)
s
-
lmbuf
->
buf
));
head
=
tmp
+
((
char
*
)(
head
)
-
lmbuf
->
buf
);
if
(
lmbuf
->
buf
!=
lmbuf
->
defaultBuf
)
delete
[]
lmbuf
->
buf
;
lmbuf
->
buf
=
tmp
;
}
}
VISIBILITY_HIDDEN
int
LogMsgLocalInit
()
inline
void
LogMsgBuf
::
checkBuf
(
size_t
size
,
char
*&
pos
,
STRLEN_TYPE
*&
s
,
char
*&
head
)
{
LogMsgLocalDestroy
();
if
(
NULL
==
(
lmb
=
new
LogMsgBuf
))
return
-
1
;
if
(
NULL
==
(
lmb
->
buf
=
new
char
[
lmb
->
bufSize
=
DefaultLogMsgBufSize
]))
{
delete
lmb
;
lmb
=
&
lmb_global
;
return
-
1
;
if
(
bufSize
<
size
+
(
pos
-
buf
)
+
LOG_MSG_MAX_TAIL_SIZE
)
{
char
*
tmp
=
new
char
[
bufSize
=
(
pos
-
buf
)
+
2
*
(
size
)
+
LOG_MSG_MAX_TAIL_SIZE
];
memcpy
(
tmp
,
buf
,
pos
-
buf
);
pos
=
tmp
+
(
pos
-
buf
);
s
=
(
STRLEN_TYPE
*
)(
tmp
+
((
char
*
)
s
-
buf
));
head
=
tmp
+
((
char
*
)(
head
)
-
buf
);
if
(
buf
!=
defaultBuf
)
delete
[]
buf
;
buf
=
tmp
;
}
lmb
->
defaultBuf
=
lmb
->
buf
;
lmb
->
bufPos
=
0
;
return
0
;
}
VISIBILITY_HIDDEN
void
LogMsgLocalDestroy
()
LogMsgBuf
::
LogMsgBuf
()
{
if
(
lmb
==
&
lmb_global
)
return
;
if
(
lmb
!=
NULL
)
{
if
(
lmb
->
buf
!=
NULL
)
delete
[]
lmb
->
buf
;
if
(
lmb
->
defaultBuf
!=
lmb
->
buf
&&
lmb
->
defaultBuf
!=
NULL
)
delete
[]
lmb
->
defaultBuf
;
delete
lmb
;
lmb
=
&
lmb_global
;
}
}
VISIBILITY_HIDDEN
int
LogMsgInit
()
{
if
(
lmb
!=
&
lmb_global
)
{
LogMsgLocalDestroy
();
lmb
=
&
lmb_global
;
}
LogMsgDestroy
();
if
(
NULL
==
(
lmb_global
.
buf
=
new
char
[
lmb_global
.
bufSize
=
DefaultLogMsgBufSize
]))
return
-
1
;
lmb_global
.
defaultBuf
=
lmb_global
.
buf
;
lmb_global
.
bufPos
=
0
;
return
0
;
buf
=
new
char
[
bufSize
=
DefaultLogMsgBufSize
];
defaultBuf
=
buf
;
bufPos
=
0
;
}
VISIBILITY_HIDDEN
void
LogMsgDestroy
()
LogMsgBuf
::~
LogMsgBuf
()
{
if
(
lmb
!=
&
lmb_global
)
return
;
if
(
lmb
->
buf
!=
NULL
)
delete
[]
lmb
->
b
uf
;
if
(
lmb
->
defaultBuf
!=
lmb
->
buf
&&
lmb
->
defaultBuf
!=
NULL
)
delete
[]
lmb
->
defaultBuf
;
lmb
->
buf
=
lmb
->
defaultBuf
=
NULL
;
if
(
buf
!=
NULL
)
delete
[]
buf
;
if
(
defaultBuf
!=
buf
&&
defaultBuf
!=
NULL
)
delete
[]
defaultB
uf
;
buf
=
NULL
;
defaultBuf
=
NULL
;
bufPos
=
0
;
}
VISIBILITY_HIDDEN
const
char
*
LogMsgG
etValueByOffset
(
size_t
offset
)
const
char
*
LogMsgBuf
::
g
etValueByOffset
(
size_t
offset
)
{
return
lmb
->
buf
+
offset
+
LogMsgHeadSize
+
sizeof
(
DT_TYPE
)
+
sizeof
(
COUNT_TYPE
);
return
buf
+
offset
+
LogMsgHeadSize
+
sizeof
(
DT_TYPE
)
+
sizeof
(
COUNT_TYPE
);
}
VISIBILITY_HIDDEN
size_t
LogMsgA
ppendString
(
const
char
*
string
,
size_t
size
)
size_t
LogMsgBuf
::
a
ppendString
(
const
char
*
string
,
size_t
size
)
{
size_t
offset
=
lmb
->
bufPos
-
LogMsgHeadSize
;
*
(
DT_TYPE
*
)(
lmb
->
buf
+
lmb
->
bufPos
)
=
(
DT_TYPE
)(
DT_STRING
);
size_t
offset
=
bufPos
-
LogMsgHeadSize
;
*
(
DT_TYPE
*
)(
buf
+
bufPos
)
=
(
DT_TYPE
)(
DT_STRING
);
if
(
string
==
NULL
)
{
(
*
(
DT_TYPE
*
)(
lmb
->
buf
+
lmb
->
bufPos
))
|=
DC_NULL
;
return
(
lmb
->
bufPos
+=
sizeof
(
DT_TYPE
));
(
*
(
DT_TYPE
*
)(
buf
+
bufPos
))
|=
DC_NULL
;
return
(
bufPos
+=
sizeof
(
DT_TYPE
));
}
*
(
STRLEN_TYPE
*
)(
lmb
->
buf
+
lmb
->
bufPos
+
sizeof
(
DT_TYPE
))
=
size
+
1
;
toLeEndian
(
lmb
->
buf
+
lmb
->
bufPos
+
sizeof
(
DT_TYPE
),
sizeof
(
STRLEN_TYPE
));
memcpy
(
lmb
->
buf
+
lmb
->
bufPos
+
sizeof
(
DT_TYPE
)
+
sizeof
(
STRLEN_TYPE
),
string
,
size
);
lmb
->
bufPos
+=
(
sizeof
(
DT_TYPE
)
+
sizeof
(
STRLEN_TYPE
)
+
size
)
+
1
;
lmb
->
buf
[
lmb
->
bufPos
-
1
]
=
0
;
*
(
STRLEN_TYPE
*
)(
buf
+
bufPos
+
sizeof
(
DT_TYPE
))
=
size
+
1
;
toLeEndian
(
buf
+
bufPos
+
sizeof
(
DT_TYPE
),
sizeof
(
STRLEN_TYPE
));
memcpy
(
buf
+
bufPos
+
sizeof
(
DT_TYPE
)
+
sizeof
(
STRLEN_TYPE
),
string
,
size
);
bufPos
+=
(
sizeof
(
DT_TYPE
)
+
sizeof
(
STRLEN_TYPE
)
+
size
)
+
1
;
buf
[
bufPos
-
1
]
=
0
;
return
offset
;
}
VISIBILITY_HIDDEN
size_t
LogMsgA
ppendString
(
const
std
::
string
&
string
)
size_t
LogMsgBuf
::
a
ppendString
(
const
std
::
string
&
string
)
{
size_t
offset
=
lmb
->
bufPos
-
LogMsgHeadSize
,
size
=
string
.
size
();
*
(
DT_TYPE
*
)(
lmb
->
buf
+
lmb
->
bufPos
)
=
(
DT_TYPE
)(
DT_STRING
);
size_t
offset
=
bufPos
-
LogMsgHeadSize
,
size
=
string
.
size
();
*
(
DT_TYPE
*
)(
buf
+
bufPos
)
=
(
DT_TYPE
)(
DT_STRING
);
if
(
size
==
0
)
{
(
*
(
DT_TYPE
*
)(
lmb
->
buf
+
lmb
->
bufPos
))
|=
DC_NULL
;
return
(
lmb
->
bufPos
+=
sizeof
(
DT_TYPE
));
(
*
(
DT_TYPE
*
)(
buf
+
bufPos
))
|=
DC_NULL
;
return
(
bufPos
+=
sizeof
(
DT_TYPE
));
}
*
(
STRLEN_TYPE
*
)(
lmb
->
buf
+
lmb
->
bufPos
+
sizeof
(
DT_TYPE
))
=
size
+
1
;
toLeEndian
(
lmb
->
buf
+
lmb
->
bufPos
+
sizeof
(
DT_TYPE
),
sizeof
(
STRLEN_TYPE
));
strncpy
(
lmb
->
buf
+
lmb
->
bufPos
+
sizeof
(
DT_TYPE
)
+
sizeof
(
STRLEN_TYPE
),
string
.
c_str
(),
size
+
1
);
lmb
->
bufPos
+=
(
sizeof
(
DT_TYPE
)
+
sizeof
(
STRLEN_TYPE
)
+
size
+
1
);
*
(
STRLEN_TYPE
*
)(
buf
+
bufPos
+
sizeof
(
DT_TYPE
))
=
size
+
1
;
toLeEndian
(
buf
+
bufPos
+
sizeof
(
DT_TYPE
),
sizeof
(
STRLEN_TYPE
));
strncpy
(
buf
+
bufPos
+
sizeof
(
DT_TYPE
)
+
sizeof
(
STRLEN_TYPE
),
string
.
c_str
(),
size
+
1
);
bufPos
+=
(
sizeof
(
DT_TYPE
)
+
sizeof
(
STRLEN_TYPE
)
+
size
+
1
);
return
offset
;
}
VISIBILITY_HIDDEN
size_t
LogMsgA
ppendBuf
(
const
char
*
data
,
size_t
size
)
size_t
LogMsgBuf
::
a
ppendBuf
(
const
char
*
data
,
size_t
size
)
{
size_t
offset
=
lmb
->
bufPos
-
LogMsgHeadSize
;
memcpy
(
lmb
->
buf
+
lmb
->
bufPos
,
data
,
size
);
lmb
->
bufPos
+=
size
;
size_t
offset
=
bufPos
-
LogMsgHeadSize
;
memcpy
(
buf
+
bufPos
,
data
,
size
);
bufPos
+=
size
;
return
offset
;
}
VISIBILITY_HIDDEN
size_t
LogMsgA
ppendBuf
(
const
std
::
string
&
string
)
size_t
LogMsgBuf
::
a
ppendBuf
(
const
std
::
string
&
string
)
{
size_t
offset
=
lmb
->
bufPos
-
LogMsgHeadSize
;
memcpy
(
lmb
->
buf
+
lmb
->
bufPos
,
string
.
c_str
(),
string
.
size
());
lmb
->
bufPos
+=
string
.
size
();
size_t
offset
=
bufPos
-
LogMsgHeadSize
;
memcpy
(
buf
+
bufPos
,
string
.
c_str
(),
string
.
size
());
bufPos
+=
string
.
size
();
return
offset
;
}
VISIBILITY_HIDDEN
size_t
LogMsgA
ppendBuf
(
const
BinLogBuf
*
sa
,
size_t
size
)
size_t
LogMsgBuf
::
a
ppendBuf
(
const
BinLogBuf
*
sa
,
size_t
size
)
{
size_t
offset
=
lmb
->
bufPos
-
LogMsgHeadSize
;
*
(
DT_TYPE
*
)(
lmb
->
buf
+
lmb
->
bufPos
)
=
(
DT_TYPE
)(
DT_STRING
|
DC_ARRAY
);
lmb
->
bufPos
+=
sizeof
(
DT_TYPE
);
size_t
offset
=
bufPos
-
LogMsgHeadSize
;
*
(
DT_TYPE
*
)(
buf
+
bufPos
)
=
(
DT_TYPE
)(
DT_STRING
|
DC_ARRAY
);
bufPos
+=
sizeof
(
DT_TYPE
);
if
(
sa
==
NULL
||
size
==
0
)
{
*
(
COUNT_TYPE
*
)(
lmb
->
buf
+
lmb
->
bufPos
)
=
(
COUNT_TYPE
)(
0
);
toLeEndian
(
lmb
->
buf
+
lmb
->
bufPos
,
sizeof
(
COUNT_TYPE
));
lmb
->
bufPos
+=
sizeof
(
COUNT_TYPE
);
*
(
COUNT_TYPE
*
)(
buf
+
bufPos
)
=
(
COUNT_TYPE
)(
0
);
toLeEndian
(
buf
+
bufPos
,
sizeof
(
COUNT_TYPE
));
bufPos
+=
sizeof
(
COUNT_TYPE
);
return
offset
;
}
*
(
COUNT_TYPE
*
)(
lmb
->
buf
+
lmb
->
bufPos
)
=
(
COUNT_TYPE
)(
size
);
toLeEndian
(
lmb
->
buf
+
lmb
->
bufPos
,
sizeof
(
COUNT_TYPE
));
lmb
->
bufPos
+=
sizeof
(
COUNT_TYPE
);
*
(
COUNT_TYPE
*
)(
buf
+
bufPos
)
=
(
COUNT_TYPE
)(
size
);
toLeEndian
(
buf
+
bufPos
,
sizeof
(
COUNT_TYPE
));
bufPos
+=
sizeof
(
COUNT_TYPE
);
COUNT_TYPE
i
=
0
;
char
*
pos
=
lmb
->
buf
+
lmb
->
bufPos
,
*
head
;
char
*
pos
=
buf
+
bufPos
,
*
head
;
STRLEN_TYPE
*
s
=
(
STRLEN_TYPE
*
)
pos
;
pos
+=
sizeof
(
STRLEN_TYPE
)
*
(
size
+
1
);
head
=
pos
;
...
...
@@ -181,7 +127,7 @@ VISIBILITY_HIDDEN size_t LogMsgAppendBuf(const BinLogBuf* sa, size_t size)
s
[
i
]
=
pos
-
head
;
toLeEndian
(
&
(
s
[
i
]),
sizeof
(
STRLEN_TYPE
));
if
(
sa
[
i
].
buf
!=
NULL
)
{
lm_check_buf
(
lmb
,
sa
[
i
].
buf_used_size
,
pos
,
s
,
head
);
checkBuf
(
sa
[
i
].
buf_used_size
,
pos
,
s
,
head
);
memcpy
(
pos
,
sa
[
i
].
buf
,
sa
[
i
].
buf_used_size
);
pos
[
sa
[
i
].
buf_used_size
]
=
0
;
pos
+=
(
sa
[
i
].
buf_used_size
+
1
);
...
...
@@ -189,24 +135,24 @@ VISIBILITY_HIDDEN size_t LogMsgAppendBuf(const BinLogBuf* sa, size_t size)
}
s
[
i
]
=
pos
-
head
;
toLeEndian
(
&
(
s
[
i
]),
sizeof
(
STRLEN_TYPE
));
lmb
->
bufPos
=
pos
-
lmb
->
buf
;
bufPos
=
pos
-
buf
;
return
offset
;
}
VISIBILITY_HIDDEN
size_t
LogMsgA
ppendStringArray
(
std
::
vector
<
std
::
string
*>&
sa
)
size_t
LogMsgBuf
::
a
ppendStringArray
(
std
::
vector
<
std
::
string
*>&
sa
)
{
size_t
offset
=
lmb
->
bufPos
-
LogMsgHeadSize
,
size
=
sa
.
size
();
*
(
DT_TYPE
*
)(
lmb
->
buf
+
lmb
->
bufPos
)
=
(
DT_TYPE
)(
DT_STRING
|
DC_ARRAY
);
lmb
->
bufPos
+=
sizeof
(
DT_TYPE
);
*
(
COUNT_TYPE
*
)(
lmb
->
buf
+
lmb
->
bufPos
)
=
(
COUNT_TYPE
)(
sa
.
size
());
toLeEndian
(
lmb
->
buf
+
lmb
->
bufPos
,
sizeof
(
COUNT_TYPE
));
size_t
offset
=
bufPos
-
LogMsgHeadSize
,
size
=
sa
.
size
();
*
(
DT_TYPE
*
)(
buf
+
bufPos
)
=
(
DT_TYPE
)(
DT_STRING
|
DC_ARRAY
);
bufPos
+=
sizeof
(
DT_TYPE
);
*
(
COUNT_TYPE
*
)(
buf
+
bufPos
)
=
(
COUNT_TYPE
)(
sa
.
size
());
toLeEndian
(
buf
+
bufPos
,
sizeof
(
COUNT_TYPE
));
if
((
COUNT_TYPE
)(
sa
.
size
())
==
0
)
{
lmb
->
bufPos
+=
sizeof
(
COUNT_TYPE
);
bufPos
+=
sizeof
(
COUNT_TYPE
);
return
offset
;
}
lmb
->
bufPos
+=
sizeof
(
COUNT_TYPE
);
bufPos
+=
sizeof
(
COUNT_TYPE
);
STRLEN_TYPE
len
;
COUNT_TYPE
i
=
0
;
char
*
pos
=
lmb
->
buf
+
lmb
->
bufPos
,
*
head
;
char
*
pos
=
buf
+
bufPos
,
*
head
;
STRLEN_TYPE
*
s
=
(
STRLEN_TYPE
*
)
pos
;
pos
+=
sizeof
(
STRLEN_TYPE
)
*
(
size
+
1
);
head
=
pos
;
...
...
@@ -215,7 +161,7 @@ VISIBILITY_HIDDEN size_t LogMsgAppendStringArray(std::vector<std::string*>& sa)
toLeEndian
(
&
(
s
[
i
]),
sizeof
(
STRLEN_TYPE
));
if
(
sa
[
i
]
!=
NULL
)
{
len
=
sa
[
i
]
->
size
();
lm_check_buf
(
lmb
,
len
,
pos
,
s
,
head
);
checkBuf
(
len
,
pos
,
s
,
head
);
memcpy
(
pos
,
sa
[
i
]
->
c_str
(),
len
);
pos
[
len
]
=
0
;
pos
+=
(
len
+
1
);
...
...
@@ -223,24 +169,24 @@ VISIBILITY_HIDDEN size_t LogMsgAppendStringArray(std::vector<std::string*>& sa)
}
s
[
i
]
=
pos
-
head
;
toLeEndian
(
&
(
s
[
i
]),
sizeof
(
STRLEN_TYPE
));
lmb
->
bufPos
=
pos
-
lmb
->
buf
;
bufPos
=
pos
-
buf
;
return
offset
;
}
VISIBILITY_HIDDEN
size_t
LogMsgA
ppendStringArray
(
const
char
**
sa
,
size_t
size
)
size_t
LogMsgBuf
::
a
ppendStringArray
(
const
char
**
sa
,
size_t
size
)
{
size_t
offset
=
lmb
->
bufPos
-
LogMsgHeadSize
;
*
(
DT_TYPE
*
)(
lmb
->
buf
+
lmb
->
bufPos
)
=
(
DT_TYPE
)(
DT_STRING
|
DC_ARRAY
);
lmb
->
bufPos
+=
sizeof
(
DT_TYPE
);
*
(
COUNT_TYPE
*
)(
lmb
->
buf
+
lmb
->
bufPos
)
=
(
COUNT_TYPE
)(
size
);
toLeEndian
(
lmb
->
buf
+
lmb
->
bufPos
,
sizeof
(
COUNT_TYPE
));
size_t
offset
=
bufPos
-
LogMsgHeadSize
;
*
(
DT_TYPE
*
)(
buf
+
bufPos
)
=
(
DT_TYPE
)(
DT_STRING
|
DC_ARRAY
);
bufPos
+=
sizeof
(
DT_TYPE
);
*
(
COUNT_TYPE
*
)(
buf
+
bufPos
)
=
(
COUNT_TYPE
)(
size
);
toLeEndian
(
buf
+
bufPos
,
sizeof
(
COUNT_TYPE
));
if
((
COUNT_TYPE
)(
size
)
==
0
)
{
lmb
->
bufPos
+=
sizeof
(
COUNT_TYPE
);
bufPos
+=
sizeof
(
COUNT_TYPE
);
return
offset
;
}
lmb
->
bufPos
+=
sizeof
(
COUNT_TYPE
);
bufPos
+=
sizeof
(
COUNT_TYPE
);
STRLEN_TYPE
len
;
COUNT_TYPE
i
=
0
;
char
*
pos
=
lmb
->
buf
+
lmb
->
bufPos
,
*
head
;
char
*
pos
=
buf
+
bufPos
,
*
head
;
STRLEN_TYPE
*
s
=
(
STRLEN_TYPE
*
)
pos
;
pos
+=
sizeof
(
STRLEN_TYPE
)
*
(
size
+
1
);
head
=
pos
;
...
...
@@ -249,104 +195,104 @@ VISIBILITY_HIDDEN size_t LogMsgAppendStringArray(const char** sa, size_t size)
toLeEndian
(
&
(
s
[
i
]),
sizeof
(
STRLEN_TYPE
));
if
(
sa
[
i
]
!=
NULL
)
{
len
=
strlen
(
sa
[
i
])
+
1
;
lm_check_buf
(
lmb
,
len
,
pos
,
s
,
head
);
checkBuf
(
len
,
pos
,
s
,
head
);
memcpy
(
pos
,
sa
[
i
],
len
);
pos
+=
len
;
}
}
s
[
i
]
=
pos
-
head
;
toLeEndian
(
&
(
s
[
i
]),
sizeof
(
STRLEN_TYPE
));
lmb
->
bufPos
=
pos
-
lmb
->
buf
;
bufPos
=
pos
-
buf
;
return
offset
;
}
VISIBILITY_HIDDEN
size_t
LogMsgA
ppendDataArray
(
std
::
vector
<
long
>&
sa
)
size_t
LogMsgBuf
::
a
ppendDataArray
(
std
::
vector
<
long
>&
sa
)
{
size_t
offset
=
lmb
->
bufPos
-
LogMsgHeadSize
;
*
(
DT_TYPE
*
)(
lmb
->
buf
+
lmb
->
bufPos
)
=
(
DT_TYPE
)(
DT_INT64
|
DC_ARRAY
);
lmb
->
bufPos
+=
sizeof
(
DT_TYPE
);
*
(
COUNT_TYPE
*
)(
lmb
->
buf
+
lmb
->
bufPos
)
=
(
COUNT_TYPE
)(
sa
.
size
());
toLeEndian
(
lmb
->
buf
+
lmb
->
bufPos
,
sizeof
(
COUNT_TYPE
));
size_t
offset
=
bufPos
-
LogMsgHeadSize
;
*
(
DT_TYPE
*
)(
buf
+
bufPos
)
=
(
DT_TYPE
)(
DT_INT64
|
DC_ARRAY
);
bufPos
+=
sizeof
(
DT_TYPE
);
*
(
COUNT_TYPE
*
)(
buf
+
bufPos
)
=
(
COUNT_TYPE
)(
sa
.
size
());
toLeEndian
(
buf
+
bufPos
,
sizeof
(
COUNT_TYPE
));
if
((
COUNT_TYPE
)(
sa
.
size
())
==
0
)
{
lmb
->
bufPos
+=
sizeof
(
COUNT_TYPE
);
bufPos
+=
sizeof
(
COUNT_TYPE
);
return
offset
;
}
lmb
->
bufPos
+=
sizeof
(
COUNT_TYPE
);
bufPos
+=
sizeof
(
COUNT_TYPE
);
COUNT_TYPE
i
=
0
,
j
=
sa
.
size
();
char
*
pos
=
lmb
->
buf
+
lmb
->
bufPos
;
char
*
pos
=
buf
+
bufPos
;
pos
+=
sizeof
(
STRLEN_TYPE
)
*
i
;
for
(
i
=
0
;
i
<
j
;
++
i
)
{
*
(
long
*
)
pos
=
sa
[
i
];
toLeEndian
(
pos
,
sizeof
(
long
));
pos
+=
sizeof
(
long
);
}
lmb
->
bufPos
=
pos
-
lmb
->
buf
;
bufPos
=
pos
-
buf
;
return
offset
;
}
VISIBILITY_HIDDEN
size_t
LogMsgA
ppendDataArray
(
uint8_t
*
sa
,
size_t
size
)
size_t
LogMsgBuf
::
a
ppendDataArray
(
uint8_t
*
sa
,
size_t
size
)
{
size_t
offset
=
lmb
->
bufPos
-
LogMsgHeadSize
;
*
(
DT_TYPE
*
)(
lmb
->
buf
+
lmb
->
bufPos
)
=
(
DT_TYPE
)(
DT_UINT8
|
DC_ARRAY
);
lmb
->
bufPos
+=
sizeof
(
DT_TYPE
);
*
(
COUNT_TYPE
*
)(
lmb
->
buf
+
lmb
->
bufPos
)
=
(
COUNT_TYPE
)(
size
);
toLeEndian
(
lmb
->
buf
+
lmb
->
bufPos
,
sizeof
(
COUNT_TYPE
));
size_t
offset
=
bufPos
-
LogMsgHeadSize
;
*
(
DT_TYPE
*
)(
buf
+
bufPos
)
=
(
DT_TYPE
)(
DT_UINT8
|
DC_ARRAY
);
bufPos
+=
sizeof
(
DT_TYPE
);
*
(
COUNT_TYPE
*
)(
buf
+
bufPos
)
=
(
COUNT_TYPE
)(
size
);
toLeEndian
(
buf
+
bufPos
,
sizeof
(
COUNT_TYPE
));
if
((
COUNT_TYPE
)(
size
)
==
0
||
sa
==
NULL
)
{
lmb
->
bufPos
+=
sizeof
(
COUNT_TYPE
);
bufPos
+=
sizeof
(
COUNT_TYPE
);
return
offset
;
}
lmb
->
bufPos
+=
sizeof
(
COUNT_TYPE
);
memcpy
(
lmb
->
buf
+
lmb
->
bufPos
,
sa
,
size
);
lmb
->
bufPos
+=
size
;
bufPos
+=
sizeof
(
COUNT_TYPE
);
memcpy
(
buf
+
bufPos
,
sa
,
size
);
bufPos
+=
size
;
return
offset
;
}
VISIBILITY_HIDDEN
void
LogMsgS
etHead
(
size_t
size
)
void
LogMsgBuf
::
s
etHead
(
size_t
size
)
{
lmb
->
bufPos
=
size
+
LogMsgHeadSize
+
sizeof
(
DT_TYPE
)
+
sizeof
(
COUNT_TYPE
);
if
(
lmb
->
buf
!=
lmb
->
defaultBuf
)
{
if
(
lmb
->
avg_size
>
DefaultLogMsgBufSize
)
{
if
(
lmb
->
avg_size
<
((
lmb
->
bufSize
+
DefaultLogMsgBufSize
)
>>
1
))
{
delete
[]
lmb
->
buf
;
lmb
->
buf
=
new
char
[
lmb
->
bufSize
=
(
lmb
->
bufSize
+
DefaultLogMsgBufSize
)
>>
1
];
bufPos
=
size
+
LogMsgHeadSize
+
sizeof
(
DT_TYPE
)
+
sizeof
(
COUNT_TYPE
);
if
(
buf
!=
defaultBuf
)
{
if
(
avg_size
>
DefaultLogMsgBufSize
)
{
if
(
avg_size
<
((
bufSize
+
DefaultLogMsgBufSize
)
>>
1
))
{
delete
[]
buf
;
buf
=
new
char
[
bufSize
=
(
bufSize
+
DefaultLogMsgBufSize
)
>>
1
];
}
}
else
{
delete
[]
lmb
->
buf
;
lmb
->
buf
=
lmb
->
defaultBuf
;
lmb
->
bufSize
=
DefaultLogMsgBufSize
;
delete
[]
buf
;
buf
=
defaultBuf
;
bufSize
=
DefaultLogMsgBufSize
;
}
}
}
VISIBILITY_HIDDEN
void
LogMsgC
opyHead
(
const
char
*
head
,
size_t
size
)
void
LogMsgBuf
::
c
opyHead
(
const
char
*
head
,
size_t
size
)
{
((
struct
MsgHeader
*
)
lmb
->
buf
)
->
m_msgType
=
MT_VAR
;
toLeEndian
(
&
(((
struct
MsgHeader
*
)
lmb
->
buf
)
->
m_msgType
),
sizeof
(
uint16_t
));
((
struct
MsgHeader
*
)
lmb
->
buf
)
->
m_version
=
1
;
toLeEndian
(
&
(((
struct
MsgHeader
*
)
lmb
->
buf
)
->
m_version
),
sizeof
(
uint16_t
));
((
struct
MsgHeader
*
)
lmb
->
buf
)
->
m_size
=
lmb
->
bufPos
-
(
sizeof
(
struct
MsgHeader
));
toLeEndian
(
&
(((
struct
MsgHeader
*
)
lmb
->
buf
)
->
m_size
),
sizeof
(
uint32_t
));
((
struct
MsgHeader
*
)
buf
)
->
m_msgType
=
MT_VAR
;
toLeEndian
(
&
(((
struct
MsgHeader
*
)
buf
)
->
m_msgType
),
sizeof
(
uint16_t
));
((
struct
MsgHeader
*
)
buf
)
->
m_version
=
1
;
toLeEndian
(
&
(((
struct
MsgHeader
*
)
buf
)
->
m_version
),
sizeof
(
uint16_t
));
((
struct
MsgHeader
*
)
buf
)
->
m_size
=
bufPos
-
(
sizeof
(
struct
MsgHeader
));
toLeEndian
(
&
(((
struct
MsgHeader
*
)
buf
)
->
m_size
),
sizeof
(
uint32_t
));
*
(
COUNT_TYPE
*
)(
lmb
->
buf
+
sizeof
(
struct
MsgHeader
))
=
0
;
toLeEndian
(
lmb
->
buf
+
sizeof
(
struct
MsgHeader
),
sizeof
(
COUNT_TYPE
));
*
(
lmb
->
buf
+
LogMsgHeadSize
)
=
(
DT_TYPE
)(
DT_UINT8
|
DC_ARRAY
);
toLeEndian
(
lmb
->
buf
+
LogMsgHeadSize
,
sizeof
(
DT_TYPE
));
*
(
COUNT_TYPE
*
)(
lmb
->
buf
+
LogMsgHeadSize
+
sizeof
(
DT_TYPE
))
=
size
;
toLeEndian
(
lmb
->
buf
+
LogMsgHeadSize
+
sizeof
(
DT_TYPE
),
sizeof
(
COUNT_TYPE
));
memcpy
(
lmb
->
buf
+
LogMsgHeadSize
+
sizeof
(
DT_TYPE
)
+
sizeof
(
COUNT_TYPE
),
head
,
size
);
*
(
COUNT_TYPE
*
)(
buf
+
sizeof
(
struct
MsgHeader
))
=
0
;
toLeEndian
(
buf
+
sizeof
(
struct
MsgHeader
),
sizeof
(
COUNT_TYPE
));
*
(
buf
+
LogMsgHeadSize
)
=
(
DT_TYPE
)(
DT_UINT8
|
DC_ARRAY
);
toLeEndian
(
buf
+
LogMsgHeadSize
,
sizeof
(
DT_TYPE
));
*
(
COUNT_TYPE
*
)(
buf
+
LogMsgHeadSize
+
sizeof
(
DT_TYPE
))
=
size
;
toLeEndian
(
buf
+
LogMsgHeadSize
+
sizeof
(
DT_TYPE
),
sizeof
(
COUNT_TYPE
));
memcpy
(
buf
+
LogMsgHeadSize
+
sizeof
(
DT_TYPE
)
+
sizeof
(
COUNT_TYPE
),
head
,
size
);
}
VISIBILITY_HIDDEN
void
LogMsgF
roceSetHeadSize
(
size_t
size
)
void
LogMsgBuf
::
f
roceSetHeadSize
(
size_t
size
)
{
*
(
COUNT_TYPE
*
)(
lmb
->
buf
+
LogMsgHeadSize
+
sizeof
(
DT_TYPE
))
=
size
;
toLeEndian
(
lmb
->
buf
+
LogMsgHeadSize
+
sizeof
(
DT_TYPE
),
sizeof
(
COUNT_TYPE
));
*
(
COUNT_TYPE
*
)(
buf
+
LogMsgHeadSize
+
sizeof
(
DT_TYPE
))
=
size
;
toLeEndian
(
buf
+
LogMsgHeadSize
+
sizeof
(
DT_TYPE
),
sizeof
(
COUNT_TYPE
));
}
VISIBILITY_HIDDEN
const
char
*
LogMsgG
etString
(
size_t
*
size
)
const
char
*
LogMsgBuf
::
g
etString
(
size_t
*
size
)
{
*
size
=
lmb
->
bufPos
;
if
(
lmb
->
buf
!=
lmb
->
defaultBuf
&&
lmb
->
bufPos
>
DefaultLogMsgBufSize
)
lmb
->
avg_size
=
((((
long
)
lmb
->
avg_size
>>
1
)
+
(
long
)
lmb
->
bufPos
)
>>
1
)
+
(
lmb
->
bufPos
>>
2
);
*
size
=
bufPos
;
if
(
buf
!=
defaultBuf
&&
bufPos
>
DefaultLogMsgBufSize
)
avg_size
=
((((
long
)
avg_size
>>
1
)
+
(
long
)
bufPos
)
>>
1
)
+
(
bufPos
>>
2
);
else
lmb
->
avg_size
=
(((
long
)
lmb
->
avg_size
+
(
long
)
lmb
->
bufPos
)
>>
1
);
return
lmb
->
buf
;
avg_size
=
(((
long
)
avg_size
+
(
long
)
bufPos
)
>>
1
);
return
buf
;
}
}
// namespace logmessage
...
...
src/LogRecord.cpp
浏览文件 @
8e3b1d96
...
...
@@ -140,7 +140,7 @@ struct LogRecInfo {
string
m_instance
;
string
m_encoding
;
string
m_ob_trace_info
;
bool
useDMB
;
bool
useLMB
;
bool
m_reservedMemory
;
LogRecInfo
(
time_t
timestamp
,
ITableMeta
*
tblMeta
)
:
m_creatingMode
(
true
),
...
...
@@ -152,7 +152,7 @@ struct LogRecInfo {
m_tblMeta
(
tblMeta
),
m_dbMeta
(
NULL
),
m_expiredMetaDataCollections
(
NULL
),
use
D
MB
(
false
),
use
L
MB
(
false
),
m_reservedMemory
(
false
)
{
m_posInfo
=
new
PosOfLogMsg_vc
;
...
...
@@ -187,7 +187,7 @@ struct LogRecInfo {
m_tblMeta
(
NULL
),
m_dbMeta
(
NULL
),
m_expiredMetaDataCollections
(
NULL
),
use
D
MB
(
false
),
use
L
MB
(
false
),
m_reservedMemory
(
false
)
{
m_lrDataArea
=
new
MsgVarArea
(
false
);
...
...
@@ -201,7 +201,7 @@ struct LogRecInfo {
m_filter_max_count
=
FILTER_SIZE
;
}
LogRecInfo
(
bool
creating
,
bool
use
D
MB
=
false
)
LogRecInfo
(
bool
creating
,
bool
use
L
MB
=
false
)
:
m_creatingMode
(
creating
),
m_parsedOK
(
false
),
m_tailParseOK
(
false
),
...
...
@@ -224,9 +224,9 @@ struct LogRecInfo {
m_posInfo
->
m_id
=
LOGREC_INVALID_ID
;
m_posInfo
->
m_srcType
=
SRC_MYSQL
;
m_posInfo
->
m_srcCategory
=
SRC_FULL_RECORDED
;
this
->
use
DMB
=
useD
MB
;
this
->
use
LMB
=
useL
MB
;
}
else
{
this
->
use
DMB
=
false
;
this
->
use
LMB
=
false
;
m_lrDataArea
=
new
MsgVarArea
(
false
);
}
m_reservedMemory
=
false
;
...
...
@@ -259,7 +259,7 @@ struct LogRecInfo {
void
clear
()
{
if
(
m_creatingMode
)
{
if
(
!
use
D
MB
)
{
if
(
!
use
L
MB
)
{
m_lrDataArea
->
clear
();
m_lrDataArea
->
appendArray
((
uint8_t
*
)
m_posInfo
,
sizeof
(
PosOfLogMsg_vc
));
}
else
{
...
...
@@ -845,7 +845,7 @@ struct LogRecInfo {
void
setInstance
(
const
char
*
instance
)
{
if
(
use
D
MB
)
{
if
(
use
L
MB
)
{
SET_OR_CLEAR_STRING
(
m_instance
,
instance
);
}
else
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfInstance
=
m_lrDataArea
->
appendString
(
instance
);
...
...
@@ -853,7 +853,7 @@ struct LogRecInfo {
const
char
*
instance
()
{
if
(
use
D
MB
)
if
(
use
L
MB
)
return
m_instance
.
c_str
();
size_t
offset
=
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfInstance
;
return
m_lrDataArea
->
getString
(
offset
);
...
...
@@ -861,7 +861,7 @@ struct LogRecInfo {
void
setDbname
(
const
char
*
dbname
)
{
if
(
use
D
MB
)
{
if
(
use
L
MB
)
{
SET_OR_CLEAR_STRING
(
m_dbName
,
dbname
);
}
else
{
// when m_creatingMode is false,before call function parse,m_posInfo maybe null
...
...
@@ -873,7 +873,7 @@ struct LogRecInfo {
const
char
*
dbname
()
const
{
if
(
use
D
MB
)
if
(
use
L
MB
)
return
m_dbName
.
c_str
();
size_t
offset
=
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfDbName
;
return
m_lrDataArea
->
getString
(
offset
);
...
...
@@ -881,7 +881,7 @@ struct LogRecInfo {
void
setTbname
(
const
char
*
tbname
)
{
if
(
use
D
MB
)
{
if
(
use
L
MB
)
{
SET_OR_CLEAR_STRING
(
m_tbName
,
tbname
);
}
else
{
if
(
m_posInfo
!=
NULL
)
{
...
...
@@ -892,7 +892,7 @@ struct LogRecInfo {
const
char
*
tbname
()
const
{
if
(
use
D
MB
)
if
(
use
L
MB
)
return
m_tbName
.
c_str
();
size_t
offset
=
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfTbName
;
return
m_lrDataArea
->
getString
(
offset
);
...
...
@@ -978,7 +978,7 @@ struct LogRecInfo {
void
setRecordEncoding
(
const
char
*
encoding
)
{
if
(
use
D
MB
)
if
(
use
L
MB
)
SET_OR_CLEAR_STRING
(
m_encoding
,
encoding
);
else
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_encoding
=
m_lrDataArea
->
appendString
(
encoding
);
...
...
@@ -1001,7 +1001,7 @@ struct LogRecInfo {
void
setObTraceInfo
(
const
char
*
ob_trace_info
)
{
if
(
use
D
MB
)
{
if
(
use
L
MB
)
{
SET_OR_CLEAR_STRING
(
m_ob_trace_info
,
ob_trace_info
);
}
else
{
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfObTraceInfo
=
m_lrDataArea
->
appendString
(
ob_trace_info
);
...
...
@@ -1011,7 +1011,7 @@ struct LogRecInfo {
const
char
*
obTraceInfo
()
{
if
(
m_creatingMode
||
m_parsedOK
)
{
if
(
use
D
MB
)
{
if
(
use
L
MB
)
{
return
m_ob_trace_info
.
c_str
();
}
else
{
if
(
GET_LOGREC_SUB_VERSION
(
m_posInfo
->
m_id
)
>=
LOGREC_SUB_VERSION
)
{
...
...
@@ -1251,16 +1251,17 @@ struct LogRecInfo {
*
* @return the pointer to the serialized string, NULL is returned if failed
*/
const
char
*
toString
(
size_t
*
size
,
bool
reserveMemory
=
false
)
const
char
*
toString
(
size_t
*
size
,
LogMsgBuf
*
lmb
=
NULL
,
bool
reserveMemory
=
false
)
{
if
(
!
m_creatingMode
)
{
return
getSerializedString
(
size
);
}
/* Always use the latest version to do the serialization */
int
colCount
=
0
;
uint8_t
op
=
m_posInfo
->
m_op
;
if
(
use
D
MB
)
LogMsgS
etHead
(
sizeof
(
PosOfLogMsg_vc
));
if
(
use
L
MB
)
lmb
->
s
etHead
(
sizeof
(
PosOfLogMsg_vc
));
switch
(
op
)
{
case
EINSERT
:
case
EDELETE
:
...
...
@@ -1282,19 +1283,19 @@ struct LogRecInfo {
*/
m_tblMeta
->
trySerializeMetaDataAsMsgArea
(
m_extra_infos
);
if
(
use
D
MB
)
{
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfColNames
=
LogMsgA
ppendBuf
(
m_tblMeta
->
getNameData
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfColEncoding
=
LogMsgA
ppendBuf
(
m_tblMeta
->
getEncodingData
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfPkKeys
=
LogMsgA
ppendBuf
(
m_tblMeta
->
getPkData
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfUkKeys
=
LogMsgA
ppendBuf
(
m_tblMeta
->
getUkData
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfPkVal
=
LogMsgA
ppendBuf
(
m_tblMeta
->
getkeyData
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfColTypes
=
LogMsgA
ppendBuf
(
m_tblMeta
->
getcolTypeData
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfColFlag
=
LogMsgA
ppendBuf
(
m_tblMeta
->
getColumnFlagData
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfColNotNull
=
LogMsgA
ppendBuf
(
m_tblMeta
->
getNotNullData
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfColSigned
=
LogMsgA
ppendBuf
(
m_tblMeta
->
getSignedData
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfColDecimals
=
LogMsgA
ppendBuf
(
m_tblMeta
->
getDecimalsData
());
if
(
use
L
MB
)
{
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfColNames
=
lmb
->
a
ppendBuf
(
m_tblMeta
->
getNameData
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfColEncoding
=
lmb
->
a
ppendBuf
(
m_tblMeta
->
getEncodingData
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfPkKeys
=
lmb
->
a
ppendBuf
(
m_tblMeta
->
getPkData
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfUkKeys
=
lmb
->
a
ppendBuf
(
m_tblMeta
->
getUkData
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfPkVal
=
lmb
->
a
ppendBuf
(
m_tblMeta
->
getkeyData
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfColTypes
=
lmb
->
a
ppendBuf
(
m_tblMeta
->
getcolTypeData
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfColFlag
=
lmb
->
a
ppendBuf
(
m_tblMeta
->
getColumnFlagData
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfColNotNull
=
lmb
->
a
ppendBuf
(
m_tblMeta
->
getNotNullData
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfColSigned
=
lmb
->
a
ppendBuf
(
m_tblMeta
->
getSignedData
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfColDecimals
=
lmb
->
a
ppendBuf
(
m_tblMeta
->
getDecimalsData
());
if
(
!
m_timemarks
.
empty
())
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfTimemark
=
LogMsgA
ppendDataArray
(
m_timemarks
);
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfTimemark
=
lmb
->
a
ppendDataArray
(
m_timemarks
);
}
else
{
setColNames
(
m_tblMeta
->
getNameData
());
setColEncoding
(
m_tblMeta
->
getEncodingData
());
...
...
@@ -1316,29 +1317,29 @@ struct LogRecInfo {
break
;
}
case
EDDL
:
if
((
int
)((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_encoding
==
-
1
&&
!
(
use
D
MB
&&
!
m_encoding
.
empty
()))
if
((
int
)((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_encoding
==
-
1
&&
!
(
use
L
MB
&&
!
m_encoding
.
empty
()))
setRecordEncoding
(
"US-ASCII"
);
colCount
=
m_new_count
>
0
?
m_new_count
:
m_new_cols
.
size
();
if
(
!
use
D
MB
)
{
if
(
!
use
L
MB
)
{
setColNames
(
ddlName
,
colCount
);
setColTypes
(
ddlType
,
colCount
);
/* Not know the actual encoding, dangerous */
}
else
{
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfColNames
=
LogMsgA
ppendStringArray
(
ddlName
,
colCount
);
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfColTypes
=
LogMsgA
ppendDataArray
(
ddlType
,
colCount
);
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfColNames
=
lmb
->
a
ppendStringArray
(
ddlName
,
colCount
);
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfColTypes
=
lmb
->
a
ppendDataArray
(
ddlType
,
colCount
);
}
break
;
case
EDML
:
if
((
int
)((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_encoding
==
-
1
&&
!
(
use
D
MB
&&
!
m_encoding
.
empty
()))
if
((
int
)((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_encoding
==
-
1
&&
!
(
use
L
MB
&&
!
m_encoding
.
empty
()))
setRecordEncoding
(
"US-ASCII"
);
if
(
!
use
D
MB
)
{
if
(
!
use
L
MB
)
{
setColNames
(
&
dmlName
,
1
);
setColTypes
(
dmlType
,
1
);
/* Not know the actual encoding, dangerous */
}
else
{
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfColNames
=
LogMsgA
ppendStringArray
(
&
dmlName
,
1
);
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfColTypes
=
LogMsgA
ppendDataArray
(
dmlType
,
1
);
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfColNames
=
lmb
->
a
ppendStringArray
(
&
dmlName
,
1
);
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfColTypes
=
lmb
->
a
ppendDataArray
(
dmlType
,
1
);
}
break
;
default:
...
...
@@ -1357,7 +1358,7 @@ struct LogRecInfo {
* For insert type, no old values, in a similar way, delete-type
* record has no new values. Updating record has both values.
*/
if
(
!
use
D
MB
)
{
if
(
!
use
L
MB
)
{
if
(
m_old_count
==
0
&&
m_new_count
==
0
&&
(
m_new_cols
.
size
()
>
0
||
m_old_cols
.
size
()
>
0
))
{
setColValuesBeforeImage
();
setColValuesAfterImage
();
...
...
@@ -1402,48 +1403,48 @@ struct LogRecInfo {
}
else
{
if
((
int
)((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_encoding
==
-
1
)
{
if
(
m_encoding
.
empty
())
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_encoding
=
LogMsgA
ppendString
(
m_tblMeta
->
getEncoding
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_encoding
=
lmb
->
a
ppendString
(
m_tblMeta
->
getEncoding
());
else
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_encoding
=
LogMsgA
ppendString
(
m_encoding
);
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_encoding
=
lmb
->
a
ppendString
(
m_encoding
);
}
if
(
m_old_count
==
0
&&
m_new_count
==
0
&&
(
m_new_cols
.
size
()
>
0
||
m_old_cols
.
size
()
>
0
))
{
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfOldCols
=
LogMsgA
ppendStringArray
(
m_old_cols
);
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfNewCols
=
LogMsgA
ppendStringArray
(
m_new_cols
);
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfOldCols
=
lmb
->
a
ppendStringArray
(
m_old_cols
);
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfNewCols
=
lmb
->
a
ppendStringArray
(
m_new_cols
);
}
else
{
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfOldCols
=
LogMsgA
ppendBuf
(
m_old_clum
,
m_old_count
);
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfNewCols
=
LogMsgA
ppendBuf
(
m_new_clum
,
m_new_count
);
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfOldCols
=
lmb
->
a
ppendBuf
(
m_old_clum
,
m_old_count
);
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfNewCols
=
lmb
->
a
ppendBuf
(
m_new_clum
,
m_new_count
);
}
if
(
m_dbName
.
size
())
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfDbName
=
LogMsgA
ppendString
(
m_dbName
.
c_str
(),
m_dbName
.
size
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfDbName
=
lmb
->
a
ppendString
(
m_dbName
.
c_str
(),
m_dbName
.
size
());
if
(
m_tbName
.
size
())
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfTbName
=
LogMsgA
ppendString
(
m_tbName
.
c_str
(),
m_tbName
.
size
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfInstance
=
LogMsgA
ppendString
(
m_instance
.
c_str
(),
m_instance
.
size
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfFilterRuleVal
=
LogMsgA
ppendBuf
(
m_filter_value
,
m_filter_count
);
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfTbName
=
lmb
->
a
ppendString
(
m_tbName
.
c_str
(),
m_tbName
.
size
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfInstance
=
lmb
->
a
ppendString
(
m_instance
.
c_str
(),
m_instance
.
size
());
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfFilterRuleVal
=
lmb
->
a
ppendBuf
(
m_filter_value
,
m_filter_count
);
if
(
m_endInfo
!=
NULL
)
{
unsigned
char
*
endInfoToLe
=
new
unsigned
char
[
sizeof
(
EndOfLogMsg
)];
memcpy
(
endInfoToLe
,
(
unsigned
char
*
)
m_endInfo
,
sizeof
(
EndOfLogMsg
));
exchangeEndInfoToLe
(
endInfoToLe
,
sizeof
(
EndOfLogMsg
));
((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfEndInfo
=
LogMsgA
ppendDataArray
((
unsigned
char
*
)
endInfoToLe
,
sizeof
(
EndOfLogMsg
));
lmb
->
a
ppendDataArray
((
unsigned
char
*
)
endInfoToLe
,
sizeof
(
EndOfLogMsg
));
delete
[]
endInfoToLe
;
}
char
*
posInfoToLe
=
new
char
[
sizeof
(
PosOfLogMsg_vc
)];
memcpy
(
posInfoToLe
,
(
const
char
*
)
m_posInfo
,
sizeof
(
PosOfLogMsg_vc
));
exchangePosInfoToLe
(
posInfoToLe
,
sizeof
(
PosOfLogMsg_vc
));
LogMsgC
opyHead
(
posInfoToLe
,
sizeof
(
PosOfLogMsg_vc
));
LogMsgF
roceSetHeadSize
(
sizeof
(
PosOfLogMsg_v3
));
lmb
->
c
opyHead
(
posInfoToLe
,
sizeof
(
PosOfLogMsg_vc
));
lmb
->
f
roceSetHeadSize
(
sizeof
(
PosOfLogMsg_v3
));
delete
[]
posInfoToLe
;
const
char
*
msg
=
LogMsgG
etString
(
size
);
const
char
*
msg
=
lmb
->
g
etString
(
size
);
if
(
LOGREC_CRC
)
{
EndOfLogMsg
*
tail
=
(
EndOfLogMsg
*
)
LogMsgGetValueByOffset
(((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfEndInfo
);
EndOfLogMsg
*
tail
=
(
EndOfLogMsg
*
)
(
lmb
->
getValueByOffset
(((
PosOfLogMsg_vc
*
)
m_posInfo
)
->
m_posOfEndInfo
)
);
tail
->
m_crc
=
toLeEndianByType
((
uint32_t
)
crc32_fast
(
msg
,
(
char
*
)
tail
-
msg
+
offsetof
(
EndOfLogMsg
,
m_crc
)));
}
/* Serialize the header */
if
(
reserveMemory
)
{
m_reservedMemory
=
true
;
/* Only when use
D
MB is true, the memory of dmb should be copied */
/* Only when use
L
MB is true, the memory of dmb should be copied */
if
(
m_lrDataArea
->
copy
(
msg
,
*
size
)
!=
0
)
{
std
::
cout
<<
"LOGMESSAGE: toString return 3"
<<
std
::
endl
;
return
NULL
;
...
...
@@ -1478,9 +1479,9 @@ LogRecordImpl::LogRecordImpl(const void* ptr, size_t size)
m_userData
=
NULL
;
}
LogRecordImpl
::
LogRecordImpl
(
bool
creating
,
bool
use
D
MB
)
LogRecordImpl
::
LogRecordImpl
(
bool
creating
,
bool
use
L
MB
)
{
m_lr
=
new
LogRecInfo
(
creating
,
use
D
MB
);
m_lr
=
new
LogRecInfo
(
creating
,
use
L
MB
);
m_timemarked
=
false
;
m_userData
=
NULL
;
}
...
...
@@ -1652,9 +1653,9 @@ const char* LogRecordImpl::getSerializedString(size_t* size)
return
m_lr
->
getSerializedString
(
size
);
}
const
char
*
LogRecordImpl
::
toString
(
size_t
*
size
,
bool
reserveMemory
)
const
char
*
LogRecordImpl
::
toString
(
size_t
*
size
,
LogMsgBuf
*
lmb
,
bool
reserveMemory
)
{
return
m_lr
->
toString
(
size
,
reserveMemory
);
return
m_lr
->
toString
(
size
,
lmb
,
reserveMemory
);
}
const
char
*
LogRecordImpl
::
getFormatedString
(
size_t
*
size
)
...
...
unittest/faTest.cpp
浏览文件 @
8e3b1d96
...
...
@@ -19,7 +19,7 @@ TEST(LogMsgFactory, LogMsgFactoryAPI)
IMetaDataCollections
*
meta
=
LogMsgFactory
::
createMetaDataCollections
();
ASSERT_NE
((
void
*
)
NULL
,
(
void
*
)
meta
);
ILogRecord
*
record
=
LogMsgFactory
::
createLogRecord
();
ILogRecord
*
record
=
LogMsgFactory
::
createLogRecord
(
"LogRecordImpl"
,
true
);
ASSERT_NE
((
void
*
)
NULL
,
(
void
*
)
record
);
LogMsgFactory
::
destroy
(
colMeta
);
...
...
unittest/lrTest.cpp
浏览文件 @
8e3b1d96
...
...
@@ -110,14 +110,14 @@ typedef struct _TestThreadInfo {
void
*
create
(
void
*
argv
)
{
LogMsg
LocalInit
();
LogMsg
Buf
*
lmb
=
new
LogMsgBuf
();
TestThreadInfo
*
info
=
(
TestThreadInfo
*
)
argv
;
long
matched
=
0
;
long
mismatched
=
0
;
while
(
*
(
info
->
quit
)
==
false
)
{
ILogRecord
*
sample
=
createLogRecord
();
size_t
pre_toString_size
;
sample
->
toString
(
&
pre_toString_size
,
true
);
sample
->
toString
(
&
pre_toString_size
,
lmb
,
true
);
size_t
sample_msg_size
;
const
char
*
sample_msg_content
=
sample
->
getFormatedString
(
&
sample_msg_size
);
...
...
@@ -137,7 +137,7 @@ void* create(void* argv)
LogMsgFactory
::
destroy
(
sample
);
}
std
::
cout
<<
"matched "
<<
matched
<<
", mismatched "
<<
mismatched
<<
std
::
endl
;
LogMsgLocalDestroy
()
;
delete
lmb
;
return
NULL
;
}
...
...
@@ -147,10 +147,10 @@ TEST(LogRecordImpl, ConcurrencyToString)
{
bool
quit
=
false
;
/* Create one sample for copmare */
LogMsg
Init
();
LogMsg
Buf
*
lmb
=
new
LogMsgBuf
();
ILogRecord
*
sample
=
createLogRecord
();
size_t
sample_msg_size
;
const
char
*
sample_msg_content
=
sample
->
toString
(
&
sample_msg_size
);
const
char
*
sample_msg_content
=
sample
->
toString
(
&
sample_msg_size
,
lmb
);
/* ToString in multi-pthreads */
...
...
@@ -172,7 +172,7 @@ TEST(LogRecordImpl, ConcurrencyToString)
for
(
int
i
=
0
;
i
<
Concurrency
;
i
++
)
pthread_join
(
*
(
testThreads
+
i
),
NULL
);
delete
[]
testThreads
;
LogMsgDestroy
()
;
delete
lmb
;
}
/*
TEST(LogRecordImpl, ParseAndGet) {
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录