implements cursor for gossip crds table queries (#16952)
VersionedCrdsValue.insert_timestamp is used for fetching crds values inserted since last query: https://github.com/solana-labs/solana/blob/ec37a843a/core/src/cluster_info.rs#L1197-L1215 https://github.com/solana-labs/solana/blob/ec37a843a/core/src/cluster_info.rs#L1274-L1298 So it is crucial that insert_timestamp does not go backward in time when new values are inserted into the table. However std::time::SystemTime is not monotonic, or due to workload, lock contention, thread scheduling, etc, ... new values may be inserted with a stalled timestamp way in the past. Additionally, reading system time for the above purpose is inefficient/unnecessary. This commit adds an ordinal index to crds values indicating their insert order. Additionally, it implements a new Cursor type for fetching values inserted since last query.
This commit is contained in:
@ -3,8 +3,11 @@
|
||||
extern crate log;
|
||||
|
||||
use rayon::iter::*;
|
||||
use solana_core::cluster_info::{ClusterInfo, Node};
|
||||
use solana_core::gossip_service::GossipService;
|
||||
use solana_core::{
|
||||
cluster_info::{ClusterInfo, Node},
|
||||
crds::Cursor,
|
||||
gossip_service::GossipService,
|
||||
};
|
||||
use solana_runtime::bank_forks::BankForks;
|
||||
|
||||
use solana_perf::packet::Packet;
|
||||
@ -305,12 +308,11 @@ pub fn cluster_info_scale() {
|
||||
let mut num_push_total = 0;
|
||||
let mut num_pushes = 0;
|
||||
let mut num_pulls = 0;
|
||||
let mut num_inserts = 0;
|
||||
for node in nodes.iter() {
|
||||
//if node.0.get_votes(0).1.len() != (num_nodes * num_votes) {
|
||||
let has_tx = node
|
||||
.0
|
||||
.get_votes(0)
|
||||
.get_votes(&mut Cursor::default())
|
||||
.1
|
||||
.iter()
|
||||
.filter(|v| v.message.account_keys == tx.message.account_keys)
|
||||
@ -319,7 +321,6 @@ pub fn cluster_info_scale() {
|
||||
num_push_total += node.0.gossip.read().unwrap().push.num_total;
|
||||
num_pushes += node.0.gossip.read().unwrap().push.num_pushes;
|
||||
num_pulls += node.0.gossip.read().unwrap().pull.num_pulls;
|
||||
num_inserts += node.0.gossip.read().unwrap().crds.num_inserts;
|
||||
if has_tx == 0 {
|
||||
not_done += 1;
|
||||
}
|
||||
@ -329,7 +330,6 @@ pub fn cluster_info_scale() {
|
||||
warn!("num_push_total: {}", num_push_total);
|
||||
warn!("num_pushes: {}", num_pushes);
|
||||
warn!("num_pulls: {}", num_pulls);
|
||||
warn!("num_inserts: {}", num_inserts);
|
||||
success = not_done < (nodes.len() / 20);
|
||||
if success {
|
||||
break;
|
||||
@ -347,7 +347,6 @@ pub fn cluster_info_scale() {
|
||||
node.0.gossip.write().unwrap().push.num_total = 0;
|
||||
node.0.gossip.write().unwrap().push.num_pushes = 0;
|
||||
node.0.gossip.write().unwrap().pull.num_pulls = 0;
|
||||
node.0.gossip.write().unwrap().crds.num_inserts = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user