Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
YottaChain
YTBP
提交
7601fd83
Y
YTBP
项目概览
YottaChain
/
YTBP
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Y
YTBP
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7601fd83
编写于
5月 16, 2018
作者:
D
Daniel Larimer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix #3140 - log reversable blocks to shared mem and replay them on --replay
上级
ac9b2f95
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
79 addition
and
10 deletion
+79
-10
libraries/chain/controller.cpp
libraries/chain/controller.cpp
+30
-10
libraries/chain/include/eosio/chain/unconfirmed_block_object.hpp
...es/chain/include/eosio/chain/unconfirmed_block_object.hpp
+49
-0
未找到文件。
libraries/chain/controller.cpp
浏览文件 @
7601fd83
...
...
@@ -72,11 +72,8 @@ struct controller_impl {
auto
prev
=
fork_db
.
get_block
(
head
->
header
.
previous
);
FC_ASSERT
(
prev
,
"attempt to pop beyond last irreversible block"
);
const
auto
&
ubi
=
unconfirmed_blocks
.
get_index
<
unconfirmed_block_index
,
by_num
>
();
auto
objitr
=
ubi
.
find
(
head
->
block_num
);
if
(
objitr
!=
ubi
.
end
()
)
{
unconfirmed_blocks
.
remove
(
*
objitr
);
}
if
(
const
auto
*
b
=
unconfirmed_blocks
.
find
<
unconfirmed_block_object
,
by_num
>
(
head
->
block_num
)
)
unconfirmed_blocks
.
remove
(
*
b
);
for
(
const
auto
&
t
:
head
->
trxs
)
unapplied_transactions
[
t
->
signed_id
]
=
t
;
...
...
@@ -97,7 +94,7 @@ struct controller_impl {
cfg
.
shared_memory_size
),
unconfirmed_blocks
(
cfg
.
block_log_dir
/
"unconfirmed"
,
cfg
.
read_only
?
database
::
read_only
:
database
::
read_write
,
1024
*
1024
*
1024ll
),
/// 1GB should store 1000 1MB blocks + overhead
std
::
min
<
uint64_t
>
(
cfg
.
shared_memory_size
,
128
*
1024
*
1024ll
)
),
/// 1GB should store 1000 1MB blocks + overhead
blog
(
cfg
.
block_log_dir
),
fork_db
(
cfg
.
shared_memory_dir
),
wasmif
(
cfg
.
wasm_runtime
),
...
...
@@ -203,8 +200,12 @@ struct controller_impl {
FC_ASSERT
(
db
.
revision
()
==
head
->
block_num
,
"fork database is inconsistent with shared memory"
,
(
"db"
,
db
.
revision
())(
"head"
,
head
->
block_num
)(
"unconfimed"
,
unconf_blocknum
)
);
edump
((
unconf_blocknum
));
/*
FC_ASSERT( head->block_num == unconf_blocknum, "unconfirmed block database out of sync",
("db",db.revision())("head",head->block_num)("unconfimed",unconf_blocknum) );
*/
/**
* The undoable state contains state transitions from blocks
...
...
@@ -223,6 +224,7 @@ struct controller_impl {
edump
((
db
.
revision
())(
head
->
block_num
)(
blog
.
read_head
()
->
block_num
()));
db
.
flush
();
unconfirmed_blocks
.
flush
();
}
void
add_indices
()
{
...
...
@@ -296,9 +298,19 @@ struct controller_impl {
std
::
cerr
<<
std
::
setw
(
10
)
<<
next
->
block_num
()
<<
" of "
<<
end
->
block_num
()
<<
"
\r
"
;
}
}
int
unconf
=
0
;
while
(
auto
obj
=
unconfirmed_blocks
.
find
<
unconfirmed_block_object
,
by_num
>
(
head
->
block_num
+
1
)
)
{
++
unconf
;
self
.
push_block
(
obj
->
get_block
(),
true
);
}
std
::
cerr
<<
"
\n
"
;
ilog
(
"${n} unconfirmed blocks replayed"
,
(
"n"
,
unconf
)
);
auto
end
=
fc
::
time_point
::
now
();
ilog
(
"replayed blocks in ${n} seconds, ${spb} spb"
,
(
"n"
,
(
end
-
start
).
count
()
/
1000000.0
)(
"spb"
,
((
end
-
start
).
count
()
/
1000000.0
)
/
head
->
block_num
)
);
ilog
(
"replayed blocks in ${n} seconds, ${spb} spb"
,
(
"n"
,
head
->
block_num
)(
"spb"
,
((
end
-
start
).
count
()
/
1000000.0
)
/
head
->
block_num
)
);
std
::
cerr
<<
"
\n
"
;
replaying
=
false
;
}
else
if
(
!
end
)
{
...
...
@@ -386,11 +398,19 @@ struct controller_impl {
head
=
fork_db
.
head
();
FC_ASSERT
(
new_bsp
==
head
,
"committed block did not become the new head in fork database"
);
unconfirmed_blocks
.
create
<
unconfirmed_block_object
>
(
[
&
](
auto
&
ubo
)
{
ubo
.
blocknum
=
head
->
block_num
;
});
}
if
(
!
replaying
)
{
auto
itr
=
unconfirmed_blocks
.
find
<
unconfirmed_block_object
,
by_num
>
(
head
->
block_num
);
if
(
!
itr
)
{
unconfirmed_blocks
.
create
<
unconfirmed_block_object
>
(
[
&
](
auto
&
ubo
)
{
ubo
.
blocknum
=
head
->
block_num
;
ubo
.
set_block
(
head
->
block
);
});
}
}
// ilog((fc::json::to_pretty_string(*pending->_pending_block_state->block)));
emit
(
self
.
accepted_block
,
pending
->
_pending_block_state
);
pending
->
push
();
...
...
libraries/chain/include/eosio/chain/unconfirmed_block_object.hpp
0 → 100644
浏览文件 @
7601fd83
/**
* @file
* @copyright defined in eos/LICENSE.txt
*/
#pragma once
#include <eosio/chain/types.hpp>
#include <eosio/chain/authority.hpp>
#include <eosio/chain/block_timestamp.hpp>
#include <eosio/chain/contract_types.hpp>
#include "multi_index_includes.hpp"
namespace
eosio
{
namespace
chain
{
class
unconfirmed_block_object
:
public
chainbase
::
object
<
unconfirmed_block_object_type
,
unconfirmed_block_object
>
{
OBJECT_CTOR
(
unconfirmed_block_object
,(
packedblock
)
)
id_type
id
;
uint32_t
blocknum
=
0
;
shared_string
packedblock
;
void
set_block
(
const
signed_block_ptr
&
b
)
{
packedblock
.
resize
(
fc
::
raw
::
pack_size
(
*
b
)
);
fc
::
datastream
<
char
*>
ds
(
packedblock
.
data
(),
packedblock
.
size
()
);
fc
::
raw
::
pack
(
ds
,
*
b
);
}
signed_block_ptr
get_block
()
const
{
fc
::
datastream
<
const
char
*>
ds
(
packedblock
.
data
(),
packedblock
.
size
()
);
auto
result
=
std
::
make_shared
<
signed_block
>
();
fc
::
raw
::
unpack
(
ds
,
*
result
);
return
result
;
}
};
struct
by_num
;
using
unconfirmed_block_index
=
chainbase
::
shared_multi_index_container
<
unconfirmed_block_object
,
indexed_by
<
ordered_unique
<
tag
<
by_id
>
,
member
<
unconfirmed_block_object
,
unconfirmed_block_object
::
id_type
,
&
unconfirmed_block_object
::
id
>>
,
ordered_unique
<
tag
<
by_num
>
,
member
<
unconfirmed_block_object
,
uint32_t
,
&
unconfirmed_block_object
::
blocknum
>>
>
>
;
}
}
// eosio::chain
CHAINBASE_SET_INDEX_TYPE
(
eosio
::
chain
::
unconfirmed_block_object
,
eosio
::
chain
::
unconfirmed_block_index
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录