Skip to content
This repository has been archived by the owner on Aug 2, 2022. It is now read-only.

Commit

Permalink
Merge pull request #1980 from brianjohnson5972/398-delayed-signed-txn…
Browse files Browse the repository at this point in the history
…-p2p-2

Moved template function into cpp file. GH #1022
  • Loading branch information
b1bart authored Mar 30, 2018
2 parents c721c31 + e733b33 commit 38b43a9
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 46 deletions.
48 changes: 48 additions & 0 deletions libraries/chain/chain_controller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@
#include <boost/range/adaptor/transformed.hpp>
#include <boost/range/adaptor/map.hpp>
#include <boost/range/algorithm/sort.hpp>
#include <boost/range/algorithm/find.hpp>
#include <boost/range/algorithm/remove_if.hpp>
#include <boost/range/algorithm/equal.hpp>

#include <fstream>
Expand Down Expand Up @@ -1877,4 +1879,50 @@ const apply_handler* chain_controller::find_apply_handler( account_name receiver
return nullptr;
}

template<typename TransactionProcessing>
transaction_trace chain_controller::wrap_transaction_processing( transaction_metadata&& data, TransactionProcessing trx_processing )
{ try {
FC_ASSERT( _pending_block, " block not started" );

if (_limits.max_push_transaction_us.count() > 0) {
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();

auto temp_session = _db.start_undo_session(true);

// for now apply the transaction serially but schedule it according to those invariants
validate_referenced_accounts(trx);

auto result = trx_processing(data);

auto& bcycle = _pending_block->regions.back().cycles_summary.back();
auto& bshard = bcycle.front();

record_locks_for_data_access(result.action_traces, bshard.read_locks, bshard.write_locks);

fc::deduplicate(bshard.read_locks);
fc::deduplicate(bshard.write_locks);
auto newend = boost::remove_if( bshard.read_locks,
[&]( const auto& l ){
return boost::find( bshard.write_locks, l ) != bshard.write_locks.end();
});
bshard.read_locks.erase( newend, bshard.read_locks.end() );

bshard.transactions.emplace_back( result );

_pending_cycle_trace->shard_traces.at(0).append(result);

// The transaction applied successfully. Merge its changes into the pending block session.
temp_session.squash();

_pending_transaction_metas.emplace_back(std::forward<transaction_metadata>(data));

return result;
} FC_CAPTURE_AND_RETHROW() }

} } /// eosio::chain
47 changes: 1 addition & 46 deletions libraries/chain/include/eosio/chain/chain_controller.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@
#include <chainbase/chainbase.hpp>
#include <fc/scoped_exit.hpp>

#include <boost/range/algorithm/find.hpp>
#include <boost/range/algorithm/remove_if.hpp>
#include <boost/signals2/signal.hpp>

#include <eosio/chain/protocol.hpp>
Expand Down Expand Up @@ -320,50 +318,7 @@ namespace eosio { namespace chain {
vector<transaction_trace> _push_deferred_transactions( bool flush = false );

template<typename TransactionProcessing>
transaction_trace wrap_transaction_processing( transaction_metadata&& data, TransactionProcessing trx_processing )
{ try {
FC_ASSERT( _pending_block, " block not started" );

if (_limits.max_push_transaction_us.count() > 0) {
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();

auto temp_session = _db.start_undo_session(true);

// for now apply the transaction serially but schedule it according to those invariants
validate_referenced_accounts(trx);

auto result = trx_processing(data);

auto& bcycle = _pending_block->regions.back().cycles_summary.back();
auto& bshard = bcycle.front();

record_locks_for_data_access(result.action_traces, bshard.read_locks, bshard.write_locks);

fc::deduplicate(bshard.read_locks);
fc::deduplicate(bshard.write_locks);
auto newend = boost::remove_if( bshard.read_locks,
[&]( const auto& l ){
return boost::find( bshard.write_locks, l ) != bshard.write_locks.end();
});
bshard.read_locks.erase( newend, bshard.read_locks.end() );

bshard.transactions.emplace_back( result );

_pending_cycle_trace->shard_traces.at(0).append(result);

// The transaction applied successfully. Merge its changes into the pending block session.
temp_session.squash();

_pending_transaction_metas.emplace_back(std::forward<transaction_metadata>(data));

return result;
} FC_CAPTURE_AND_RETHROW() }
transaction_trace wrap_transaction_processing( transaction_metadata&& data, TransactionProcessing trx_processing );

/// Reset the object graph in-memory
void _initialize_indexes();
Expand Down

0 comments on commit 38b43a9

Please sign in to comment.