Fixing plugin bugs

This commit is contained in:
Godmode Galactus 2024-05-15 15:25:55 +02:00
parent f1b1e1be68
commit 9703e7e8f9
No known key found for this signature in database
GPG Key ID: 22DA4A30887FDA3C
7 changed files with 213 additions and 24 deletions

89
Cargo.lock generated
View File

@ -691,6 +691,18 @@ dependencies = [
"thiserror",
]
[[package]]
name = "cargo-lock"
version = "9.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e11c675378efb449ed3ce8de78d75d0d80542fc98487c26aba28eb3b82feac72"
dependencies = [
"semver",
"serde",
"toml 0.7.8",
"url",
]
[[package]]
name = "cc"
version = "1.0.97"
@ -1399,6 +1411,26 @@ version = "0.28.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
[[package]]
name = "git-version"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ad568aa3db0fcbc81f2f116137f263d7304f512a1209b35b85150d3ef88ad19"
dependencies = [
"git-version-macro",
]
[[package]]
name = "git-version-macro"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53010ccb100b96a67bc32c0175f0ed1426b31b655d562898e57325f81c023ac0"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.63",
]
[[package]]
name = "goblin"
version = "0.5.4"
@ -2137,6 +2169,15 @@ dependencies = [
"syn 2.0.63",
]
[[package]]
name = "num_threads"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9"
dependencies = [
"libc",
]
[[package]]
name = "number_prefix"
version = "0.4.0"
@ -2337,7 +2378,7 @@ version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785"
dependencies = [
"toml",
"toml 0.5.11",
]
[[package]]
@ -2451,7 +2492,9 @@ version = "0.1.0"
dependencies = [
"agave-geyser-plugin-interface",
"anyhow",
"cargo-lock",
"clap",
"git-version",
"log",
"quic-geyser-common",
"quinn",
@ -2460,6 +2503,7 @@ dependencies = [
"solana-sdk",
"thiserror",
"tokio",
"vergen",
]
[[package]]
@ -2900,6 +2944,9 @@ name = "semver"
version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
dependencies = [
"serde",
]
[[package]]
name = "serde"
@ -2941,6 +2988,15 @@ dependencies = [
"serde",
]
[[package]]
name = "serde_spanned"
version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1"
dependencies = [
"serde",
]
[[package]]
name = "serde_urlencoded"
version = "0.7.1"
@ -3941,7 +3997,9 @@ checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
dependencies = [
"deranged",
"itoa",
"libc",
"num-conv",
"num_threads",
"powerfmt",
"serde",
"time-core",
@ -4060,11 +4118,26 @@ dependencies = [
"serde",
]
[[package]]
name = "toml"
version = "0.7.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257"
dependencies = [
"serde",
"serde_spanned",
"toml_datetime",
"toml_edit 0.19.15",
]
[[package]]
name = "toml_datetime"
version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
dependencies = [
"serde",
]
[[package]]
name = "toml_edit"
@ -4073,6 +4146,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
dependencies = [
"indexmap 2.2.6",
"serde",
"serde_spanned",
"toml_datetime",
"winnow",
]
@ -4223,6 +4298,18 @@ dependencies = [
"percent-encoding",
]
[[package]]
name = "vergen"
version = "8.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e27d6bdd219887a9eadd19e1c34f32e47fa332301184935c6d9bca26f3cca525"
dependencies = [
"anyhow",
"rustc_version",
"rustversion",
"time",
]
[[package]]
name = "version_check"
version = "0.9.4"

View File

@ -49,6 +49,15 @@ pem = "1.1.1"
lz4 = "1.24.0"
async-stream = "0.3.5"
cargo-lock = "9.0.0"
git-version = "0.3.5"
vergen = "8.2.1"
quic-geyser-common = {path = "common", version="0.1.0"}
quic-geyser-client = {path = "client", version="0.1.0"}
quic-geyser-plugin = {path = "plugin", version="0.1.0"}
quic-geyser-plugin = {path = "plugin", version="0.1.0"}
[profile.release]
debug = true
lto = true
codegen-units = 1

View File

@ -1,3 +1,17 @@
{
"libpath": "target/debug/libquic_geyser_plugin.so"
"libpath": "target/debug/libquic_geyser_plugin.so",
"quic_plugin": {
"address": "0.0.0.0:10800",
"compression_parameters": {
"compression_type": {
"Lz4Fast": 8
}
},
"number_of_retries": 100,
"quic_parameters": {
"connection_timeout": 600,
"max_number_of_streams_per_client": 1024,
"recieve_window_size": 1000000
}
}
}

View File

@ -24,4 +24,13 @@ quinn = { workspace = "true" }
log = { workspace = "true" }
thiserror = {workspace = "true"}
quic-geyser-common = { path = "../common" }
quic-geyser-common = { path = "../common" }
[build-dependencies]
anyhow = { workspace = true }
cargo-lock = { workspace = true }
git-version = { workspace = true }
vergen = { workspace = true, features = ["build", "rustc"] }
[package.metadata.docs.rs]
targets = ["x86_64-unknown-linux-gnu"]

34
plugin/build.rs Normal file
View File

@ -0,0 +1,34 @@
use {cargo_lock::Lockfile, std::collections::HashSet};
fn main() -> anyhow::Result<()> {
let mut envs = vergen::EmitBuilder::builder();
envs.all_build().all_rustc();
envs.emit()?;
// vergen git version does not looks cool
println!(
"cargo:rustc-env=GIT_VERSION={}",
git_version::git_version!()
);
// Extract packages version
let lockfile = Lockfile::load("../Cargo.lock")?;
println!(
"cargo:rustc-env=SOLANA_SDK_VERSION={}",
get_pkg_version(&lockfile, "solana-sdk")
);
Ok(())
}
fn get_pkg_version(lockfile: &Lockfile, pkg_name: &str) -> String {
lockfile
.packages
.iter()
.filter(|pkg| pkg.name.as_str() == pkg_name)
.map(|pkg| pkg.version.to_string())
.collect::<HashSet<_>>()
.into_iter()
.collect::<Vec<_>>()
.join(",")
}

View File

@ -1,6 +1,9 @@
use std::{
net::{IpAddr, Ipv4Addr, UdpSocket},
sync::Arc,
sync::{
atomic::{AtomicUsize, Ordering},
Arc,
},
};
use agave_geyser_plugin_interface::geyser_plugin_interface::{GeyserPluginError, Result};
@ -19,7 +22,10 @@ use solana_sdk::{
account::Account, clock::Slot, commitment_config::CommitmentLevel, pubkey::Pubkey,
signature::Keypair,
};
use tokio::sync::mpsc::UnboundedSender;
use tokio::{
runtime::{Builder, Runtime},
sync::mpsc::UnboundedSender,
};
use crate::{config::Config, plugin_error::QuicGeyserError};
@ -37,6 +43,7 @@ pub enum ChannelMessage {
#[derive(Debug)]
pub struct QuicServer {
runtime: Runtime,
_quic_connection_manager: ConnectionManager,
data_channel_sender: UnboundedSender<ChannelMessage>,
}
@ -61,7 +68,15 @@ impl QuicServer {
Some(server_config),
socket,
Arc::new(TokioRuntime),
)?;
);
let endpoint = match endpoint {
Ok(e) => e,
Err(e) => {
let s = e.to_string();
log::info!("{}", s);
panic!("todo")
}
};
let retry_count = config.quic_plugin.number_of_retries;
let (quic_connection_manager, _jh) = ConnectionManager::new(
@ -110,6 +125,7 @@ impl QuicServer {
Ok(QuicServer {
_quic_connection_manager: quic_connection_manager,
data_channel_sender,
runtime,
})
}

View File

@ -1,4 +1,5 @@
use std::{
net::{Ipv4Addr, SocketAddrV4},
sync::{atomic::AtomicU64, Arc},
time::Duration,
};
@ -8,6 +9,8 @@ use cli::Args;
use futures::StreamExt;
use quic_geyser_client::{client::Client, DEFAULT_MAX_STREAM};
use quic_geyser_common::filters::{AccountFilter, Filter};
use quic_geyser_plugin::config::{CompressionParameters, Config, ConfigQuicPlugin, QuicParameters};
use serde_json::json;
use solana_rpc_client::nonblocking::rpc_client::RpcClient;
use solana_sdk::{commitment_config::CommitmentConfig, pubkey::Pubkey, signature::Keypair};
use tokio::pin;
@ -15,26 +18,43 @@ use tokio::pin;
pub mod cli;
// to create a config json
// let config = Config {
// libpath: "temp".to_string(),
// quic_plugin: ConfigQuicPlugin {
// address: std::net::SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::LOCALHOST, 10800)),
// quic_parameters: QuicParameters {
// max_number_of_streams_per_client: 1024,
// recieve_window_size: 1_000_000,
// connection_timeout: 600,
// },
// compression_parameters: CompressionParameters {
// compression_type: quic_geyser_common::compression::CompressionType::Lz4Fast(8),
// },
// number_of_retries: 100,
// },
// };
// let config_json = json!(config);
//println!("{}", config_json);
// let config = Config {
// libpath: "temp".to_string(),
// quic_plugin: ConfigQuicPlugin {
// address: std::net::SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::LOCALHOST, 10800)),
// quic_parameters: QuicParameters {
// max_number_of_streams_per_client: 1024,
// recieve_window_size: 1_000_000,
// connection_timeout: 600,
// },
// compression_parameters: CompressionParameters {
// compression_type: quic_geyser_common::compression::CompressionType::Lz4Fast(8),
// },
// number_of_retries: 100,
// },
// };
// let config_json = json!(config);
//println!("{}", config_json);
#[tokio::main]
async fn main() {
let config = Config {
libpath: "temp".to_string(),
quic_plugin: ConfigQuicPlugin {
address: std::net::SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::LOCALHOST, 10800)),
quic_parameters: QuicParameters {
max_number_of_streams_per_client: 1024,
recieve_window_size: 1_000_000,
connection_timeout: 600,
},
compression_parameters: CompressionParameters {
compression_type: quic_geyser_common::compression::CompressionType::Lz4Fast(8),
},
number_of_retries: 100,
},
};
let config_json = json!(config);
println!("{}", config_json);
let args = Args::parse();
let client = Client::new(args.url, &Keypair::new(), DEFAULT_MAX_STREAM)