Skip to content

Commit e97d63f

Browse files
added name of leader to each slot
1 parent c6a6605 commit e97d63f

File tree

1 file changed

+56
-5
lines changed

1 file changed

+56
-5
lines changed

pctest/test_slot.cpp

Lines changed: 56 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,69 @@
55

66
using namespace pc;
77

8-
class manager_slot : public manager
8+
#define PC_LEADER_MAX 256
9+
#define PC_LEADER_MIN 32
10+
11+
class manager_slot : public manager,
12+
public rpc_sub_i<rpc::get_slot_leaders>
913
{
1014
public:
15+
manager_slot();
1116
void on_response( rpc::slot_subscribe * ) override;
17+
void on_response( rpc::get_slot_leaders * ) override;
18+
private:
19+
rpc::get_slot_leaders ldr_[1];
20+
uint64_t last_;
1221
};
1322

23+
manager_slot::manager_slot()
24+
: last_( 0L )
25+
{
26+
ldr_->set_sub( this );
27+
ldr_->set_limit( PC_LEADER_MAX );
28+
}
29+
1430
void manager_slot::on_response( rpc::slot_subscribe *res )
1531
{
1632
manager::on_response( res );
17-
std::cout << get_curr_time()
18-
<< ','
19-
<< res->get_slot()
20-
<< std::endl;
33+
uint64_t slot = get_slot();
34+
if ( slot != last_ ) {
35+
// request next slot leader schedule
36+
if ( PC_UNLIKELY( ldr_->get_is_recv() &&
37+
slot > ldr_->get_last_slot() - PC_LEADER_MIN ) ) {
38+
ldr_->set_slot( slot );
39+
get_rpc_client()->send( ldr_ );
40+
}
41+
42+
// ignore first time
43+
if ( !last_ ) {
44+
last_ = slot;
45+
return;
46+
}
47+
48+
// get leader for this slot
49+
std::string pstr;
50+
pub_key *pkey = ldr_->get_leader( slot );
51+
if ( pkey ) {
52+
pkey->enc_base58( pstr );
53+
}
54+
std::cout << get_curr_time()
55+
<< ','
56+
<< slot
57+
<< ','
58+
<< pstr
59+
<< std::endl;
60+
last_ = slot;
61+
}
62+
}
63+
64+
void manager_slot::on_response( rpc::get_slot_leaders *m )
65+
{
66+
if ( m->get_is_err() ) {
67+
set_err_msg( "failed to get slot leaders ["
68+
+ m->get_err_msg() + "]" );
69+
return;
70+
}
2171
}
2272

2373
std::string get_rpc_host()
@@ -66,6 +116,7 @@ int main( int argc, char **argv )
66116
mgr.set_rpc_host( rpc_host );
67117
mgr.set_dir( key_dir );
68118
mgr.set_do_tx( false );
119+
std::cout << "recv_time,slot,leader" << std::endl;
69120
if ( !mgr.init() || !mgr.bootstrap() ) {
70121
std::cerr << "test_slot: " << mgr.get_err_msg() << std::endl;
71122
return 1;

0 commit comments

Comments
 (0)