Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
YottaChain
YTBP
提交
01ad855c
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,发现更多精彩内容 >>
提交
01ad855c
编写于
3月 27, 2018
作者:
A
Anton Perkov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
shcedule deferred transactions (draft) #1853
上级
aae12650
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
24 addition
and
2 deletion
+24
-2
libraries/chain/chain_controller.cpp
libraries/chain/chain_controller.cpp
+16
-2
libraries/chain/include/eosio/chain/transaction_metadata.hpp
libraries/chain/include/eosio/chain/transaction_metadata.hpp
+8
-0
未找到文件。
libraries/chain/chain_controller.cpp
浏览文件 @
01ad855c
...
...
@@ -287,7 +287,10 @@ static void record_locks_for_data_access(const vector<action_trace>& action_trac
transaction_trace
chain_controller
::
_push_transaction
(
transaction_metadata
&&
data
)
{
try
{
if
(
_limits
.
max_push_transaction_us
.
count
()
>
0
)
{
data
.
processing_deadline
=
fc
::
time_point
::
now
()
+
_limits
.
max_push_transaction_us
;
auto
newval
=
fc
::
time_point
::
now
()
+
_limits
.
max_push_transaction_us
;
if
(
!
data
.
processing_deadline
||
newval
<
*
data
.
processing_deadline
)
{
data
.
processing_deadline
=
newval
;
}
}
const
transaction
&
trx
=
data
.
trx
();
...
...
@@ -353,9 +356,16 @@ void chain_controller::_start_pending_block()
_pending_block_session
=
_db
.
start_undo_session
(
true
);
_pending_block
->
regions
.
resize
(
1
);
_pending_block_trace
->
region_traces
.
resize
(
1
);
_start_pending_cycle
();
_apply_on_block_transaction
();
_finalize_pending_cycle
();
push_deferred_transactions
(
true
);
//implicitly starts new cycle if there are deferred transactions ready for execution
if
(
_pending_cycle_trace
&&
_pending_cycle_trace
->
shard_traces
.
size
()
>
0
)
{
_finalize_pending_cycle
();
}
_start_pending_cycle
();
}
...
...
@@ -1618,18 +1628,22 @@ vector<transaction_trace> chain_controller::push_deferred_transactions( bool flu
candidates
.
emplace_back
(
&
gtrx
);
}
auto
deferred_transactions_deadline
=
fc
::
time_point
::
now
()
+
fc
::
microseconds
(
20
*
1000
);
vector
<
transaction_trace
>
res
;
for
(
const
auto
*
trx_p
:
candidates
)
{
if
(
!
is_known_transaction
(
trx_p
->
trx_id
))
{
try
{
auto
trx
=
fc
::
raw
::
unpack
<
deferred_transaction
>
(
trx_p
->
packed_trx
.
data
(),
trx_p
->
packed_trx
.
size
());
transaction_metadata
mtrx
(
trx
,
trx_p
->
published
,
trx
.
sender
,
trx
.
sender_id
,
trx_p
->
packed_trx
.
data
(),
trx_p
->
packed_trx
.
size
());
transaction_metadata
mtrx
(
trx
,
trx_p
->
published
,
trx
.
sender
,
trx
.
sender_id
,
trx_p
->
packed_trx
.
data
(),
trx_p
->
packed_trx
.
size
()
,
deferred_transactions_deadline
);
res
.
push_back
(
_push_transaction
(
std
::
move
(
mtrx
))
);
generated_transaction_idx
.
remove
(
*
trx_p
);
}
FC_CAPTURE_AND_LOG
((
trx_p
->
trx_id
)(
trx_p
->
sender
));
}
else
{
generated_transaction_idx
.
remove
(
*
trx_p
);
}
if
(
deferred_transactions_deadline
<=
fc
::
time_point
::
now
()
)
{
break
;
}
}
return
res
;
}
...
...
libraries/chain/include/eosio/chain/transaction_metadata.hpp
浏览文件 @
01ad855c
...
...
@@ -16,6 +16,14 @@ class transaction_metadata {
,
sender
(
sender
),
sender_id
(
sender_id
),
raw_data
(
raw_data
),
raw_size
(
raw_size
),
_trx
(
&
t
)
{}
transaction_metadata
(
const
transaction
&
t
,
const
time_point
&
published
,
const
account_name
&
sender
,
uint32_t
sender_id
,
const
char
*
raw_data
,
size_t
raw_size
,
fc
::
time_point
deadline
)
:
id
(
t
.
id
())
,
published
(
published
)
,
sender
(
sender
),
sender_id
(
sender_id
),
raw_data
(
raw_data
),
raw_size
(
raw_size
)
,
processing_deadline
(
deadline
)
,
_trx
(
&
t
)
{}
transaction_metadata
(
const
packed_transaction
&
t
,
chain_id_type
chainid
,
const
time_point
&
published
);
transaction_metadata
(
transaction_metadata
&&
)
=
default
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录