Skip to content

Commit

Permalink
Merge branch 'staging' v0.12.0
Browse files Browse the repository at this point in the history
  • Loading branch information
Michael Vandeberg committed Jul 21, 2016
2 parents f002ba9 + 927e11f commit 5c7378e
Show file tree
Hide file tree
Showing 35 changed files with 1,477 additions and 230 deletions.
18 changes: 16 additions & 2 deletions libraries/app/application.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,7 @@ namespace detail {

application_impl(application* self)
: _self(self),
_pending_trx_db(std::make_shared<graphene::db::object_database>()),
_chain_db(std::make_shared<chain::database>())
{
}
Expand All @@ -232,6 +233,7 @@ namespace detail {
{ try {
bool clean = !fc::exists(_data_dir / "blockchain/dblock");
fc::create_directories(_data_dir / "blockchain/dblock");
fc::create_directories(_data_dir / "node/transaction_history");

register_builtin_apis();

Expand Down Expand Up @@ -299,6 +301,7 @@ namespace detail {
wlog("Detected unclean shutdown. Replaying blockchain...");
_chain_db->reindex(_data_dir / "blockchain" );
}
_pending_trx_db->open(_data_dir / "node/transaction_history" );

if( _options->count("force-validate") )
{
Expand Down Expand Up @@ -787,8 +790,9 @@ namespace detail {
const bpo::variables_map* _options = nullptr;
api_access _apiaccess;

std::shared_ptr<steemit::chain::database> _chain_db;
std::shared_ptr<graphene::net::node> _p2p_network;
std::shared_ptr<graphene::db::object_database> _pending_trx_db;
std::shared_ptr<steemit::chain::database> _chain_db;
std::shared_ptr<graphene::net::node> _p2p_network;
std::shared_ptr<fc::http::websocket_server> _websocket_server;
std::shared_ptr<fc::http::websocket_tls_server> _websocket_tls_server;

Expand Down Expand Up @@ -818,6 +822,10 @@ application::~application()
{
my->_chain_db->close();
}
if( my->_pending_trx_db )
{
my->_pending_trx_db->close();
}
}

void application::set_program_options(boost::program_options::options_description& command_line_options,
Expand Down Expand Up @@ -890,6 +898,10 @@ std::shared_ptr<chain::database> application::chain_database() const
{
return my->_chain_db;
}
std::shared_ptr<graphene::db::object_database> application::pending_trx_database() const
{
return my->_pending_trx_db;
}

void application::set_block_production(bool producing_blocks)
{
Expand Down Expand Up @@ -933,6 +945,8 @@ void application::shutdown()
my->_p2p_network->close();
if( my->_chain_db )
my->_chain_db->close();
if( my->_pending_trx_db )
my->_pending_trx_db->close();
}

void application::register_abstract_plugin( std::shared_ptr< abstract_plugin > plug )
Expand Down
91 changes: 31 additions & 60 deletions libraries/app/database_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -417,6 +417,35 @@ uint64_t database_api_impl::get_account_count()const
return _db.get_index_type<account_index>().indices().size();
}

vector< owner_authority_history_object > database_api::get_owner_history( string account )const
{
vector< owner_authority_history_object > results;

const auto& hist_idx = my->_db.get_index_type< owner_authority_history_index >().indices().get< by_account >();
auto itr = hist_idx.lower_bound( account );

while( itr != hist_idx.end() && itr->account == account )
{
results.push_back( *itr );
++itr;
}

return results;
}

optional< account_recovery_request_object > database_api::get_recovery_request( string account )const
{
optional< account_recovery_request_object > result;

const auto& rec_idx = my->_db.get_index_type< account_recovery_request_index >().indices().get< by_account >();
auto req = rec_idx.find( account );

if( req != rec_idx.end() )
result = *req;

return result;
}

//////////////////////////////////////////////////////////////////////
// //
// Witnesses //
Expand Down Expand Up @@ -1237,16 +1266,7 @@ state database_api::get_state( string path )const
auto acnt = part[0].substr(1);
_state.accounts[acnt] = my->_db.get_account(acnt);
auto& eacnt = _state.accounts[acnt];
if( part[1] == "recommended" ) {
auto discussions = get_recommended_for( acnt, 50 );
eacnt.recommended = vector<string>();
for( const auto& d : discussions ) {
auto ref = d.author+"/"+d.permlink;
_state.content[ ref ] = d;
eacnt.recommended->push_back( ref );
}
}
else if( part[1] == "transfers" ) {
if( part[1] == "transfers" ) {
auto history = get_account_history( acnt, uint64_t(-1), 1000 );
for( auto& item : history ) {
switch( item.second.op.which() ) {
Expand Down Expand Up @@ -1317,7 +1337,7 @@ state database_api::get_state( string path )const
} else if( part[1].size() == 0 || part[1] == "feed" ) {
const auto& fidxs = my->_db.get_index_type<follow::feed_index>().indices();
const auto& fidx = fidxs.get<steemit::follow::by_account>();

auto itr = fidx.lower_bound( eacnt.id );
int count = 0;
while( itr != fidx.end() && itr->account == eacnt.id && count < 100 ) {
Expand Down Expand Up @@ -1474,54 +1494,5 @@ annotated_signed_transaction database_api::get_transaction( transaction_id_type
FC_ASSERT( false, "Unknown Transaction ${t}", ("t",id));
}

vector<discussion> database_api::get_recommended_for( const string& u, uint32_t limit )const {
FC_ASSERT( limit <= 1000 );
auto start_time = fc::time_point::now();

const auto& user = my->_db.get_account(u);
const auto& rank_idx = my->_db.get_index_type<tags::peer_stats_index>().indices().get<tags::by_rank>();
const auto& vote_idx = my->_db.get_index_type<comment_vote_index>().indices().get<by_voter_last_update>();

map<comment_id_type,float> stage;

auto max_age = my->_db.head_block_time() - fc::days(1);

auto itr = rank_idx.lower_bound( boost::make_tuple( user.get_id(), std::numeric_limits<float>::max() ) );
while( itr != rank_idx.end() && itr->voter == user.id && stage.size() < 1000 && itr->rank > 0 ) {
auto vitr = vote_idx.lower_bound( boost::make_tuple( itr->peer, fc::time_point_sec::maximum() ) );
int32_t max_votes_per_peer = 50;
while( max_votes_per_peer && vitr->voter == itr->peer && vitr->last_update >= max_age ) {
const auto& c = vitr->comment(my->_db);
if( c.parent_author.size() == 0 && c.created > max_age && c.author != u && c.net_rshares > 0 )
{
auto agediscount = float((c.created - max_age).count())/fc::days(1).count();
stage[vitr->comment] += agediscount * itr->rank * vitr->vote_percent;
max_votes_per_peer--;
}
++vitr;
}
++itr;
}
auto vitr = vote_idx.lower_bound( boost::make_tuple( user.get_id(), fc::time_point_sec::maximum() ) );
while( vitr != vote_idx.end() && vitr->voter == user.get_id() && vitr->last_update > max_age ) {
stage.erase( vitr->comment );
++vitr;
}

vector< pair<float,comment_id_type> > result;
result.reserve(stage.size());
for( const auto& item : stage ) result.push_back({item.second,item.first});
std::sort( result.begin(), result.end(), std::greater<pair<float,comment_id_type>>() );

vector<discussion> dresult; dresult.reserve(limit);
for( const auto& item : result ) {
dresult.push_back( get_discussion( item.second ) );
if( dresult.size() == limit ) break;
}
auto end_time = fc::time_point::now();
idump((start_time-end_time));

return dresult;
}

} } // steemit::app
15 changes: 15 additions & 0 deletions libraries/app/impacted.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,21 @@ struct get_impacted_account_visitor
_impacted.insert( s );
}

void operator()( const request_account_recovery_operation& op )
{
_impacted.insert( op.account_to_recover );
}

void operator()( const recover_account_operation& op )
{
_impacted.insert( op.account_to_recover );
}

void operator()( const change_recovery_account_operation& op )
{
_impacted.insert( op.account_to_recover );
}

//void operator()( const operation& op ){}
};

Expand Down
1 change: 1 addition & 0 deletions libraries/app/include/steemit/app/application.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ namespace steemit { namespace app {

graphene::net::node_ptr p2p_node();
std::shared_ptr<chain::database> chain_database()const;
std::shared_ptr<graphene::db::object_database> pending_trx_database() const;

void set_block_production(bool producing_blocks);
fc::optional< api_access_info > get_api_access_info( const string& username )const;
Expand Down
9 changes: 6 additions & 3 deletions libraries/app/include/steemit/app/database_api.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ struct liquidity_balance
fc::uint128_t weight;
};


class database_api_impl;

/**
Expand Down Expand Up @@ -196,6 +195,10 @@ class database_api
*/
uint64_t get_account_count()const;

vector< owner_authority_history_object > get_owner_history( string account )const;

optional< account_recovery_request_object > get_recovery_request( string account ) const;

///////////////
// Witnesses //
///////////////
Expand Down Expand Up @@ -307,7 +310,6 @@ class database_api
vector<discussion> get_discussions_by_children( const discussion_query& query )const;
vector<discussion> get_discussions_by_hot( const discussion_query& query )const;

vector<discussion> get_recommended_for( const string& user, uint32_t limit )const;

///@}

Expand Down Expand Up @@ -406,7 +408,6 @@ FC_API(steemit::app::database_api,
(get_discussions_by_votes)
(get_discussions_by_children)
(get_discussions_by_hot)
(get_recommended_for)

// Blocks and transactions
(get_block_header)
Expand Down Expand Up @@ -438,6 +439,8 @@ FC_API(steemit::app::database_api,
(get_account_count)
(get_conversion_requests)
(get_account_history)
(get_owner_history)
(get_recovery_request)

// Market
(get_order_book)
Expand Down

0 comments on commit 5c7378e

Please sign in to comment.