Skip to content

Conversation

@marc-sift
Copy link
Contributor

No description provided.

@@ -0,0 +1,21 @@
/// Build descriptor's so that the Black Hole gRPC server can
/// stand up the reflection service.
fn main() -> Result<(), Box<dyn std::error::Error>> {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There shouldn't be a need for you to compile these protos since they're already compiled and available in the sift_rs crate which you can add as a dependency like here:

sift_rs = { workspace = true }

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is just compiling the descriptors since we need that for the reflection service. We could either move this to sift_rs and create this when generating the protos, or keep it in the build step for sift_cli.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I updated the build to generate these, we're pulling it from sift_rs now: 0861724

use crate::cmd::test_server::metrics_streaming_client::Metrics;

pub async fn run(ctx: Context, args: TestServerArgs) -> Result<ExitCode> {
let local_address = args.local_address.unwrap_or("127.0.0.1:50051".into());
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would prefer 0.0.0.0 since it's more user-friendly. Allows it to be reached inside of a docker network for example. Also as a note of good practice:

local_address = args.local_address.unwrap_or_else(|| "127.0.0.1:50051".to_string())

for lazy evaluation of the fallback rather than immediate

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


pub async fn run(ctx: Context, args: TestServerArgs) -> Result<ExitCode> {
let local_address = args.local_address.unwrap_or("127.0.0.1:50051".into());
let addr = local_address.parse()?;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Generally helpful to include contextual information with errors for better traceability:

use anyhow::{Result, Context};

let addr = local_address.parse().context("foobar")?;

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same for all other places.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

// Initialize streaming client.
let mut streaming_client =
MetricsStreamingClient::build(ctx, &args.stream_metrics, &args.metrics_asset_name)?;
if streaming_client.is_some() {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Prefer:

if let Some(client) = streaming_client.as_mut() {
    client.initialize.await.context("failed to initialize client").await?;
}

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


// Start task to ingest metrics to Sift.
let ingest_metrics_task = tokio::spawn(async move {
if streaming_client.is_none() {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Prefer:

let Some(mut client) = streaming_client else {
    return;
};

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

return;
}

let mut client = streaming_client.unwrap();
Copy link
Collaborator

@solidiquis solidiquis Dec 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

see:

let Some(mut client) = streaming_client else {
    return;
};

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Collaborator

@solidiquis solidiquis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Definitely run: cargo fmt and cargo clippy. The latter will give you a lot of good feedback.

last_total_num_messages = current_total_num_messages;

// Clear terminal and print metrics.
stdout()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Calling stdout() repeatedly is bad for performance because it will repeatedly get a handle and lock stdout. See this method to acquire the handle/lock once: https://doc.rust-lang.org/std/io/struct.Stdout.html#method.lock

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

#[derive(Default)]
pub struct TestServer {
/// Total number of streams created.
total_num_streams: AtomicU32,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do these need to be atomics?

Copy link
Contributor Author

@marc-sift marc-sift Dec 31, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They're modified in the the grpc handlers, so they need to be some type of synchronized struct.

#[tonic::async_trait]
impl PingService for TestServer {
async fn ping(&self, _request: Request<PingRequest>) -> Result<Response<PingResponse>, Status> {
let resp = PingResponse {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You might be able to just do PingResponse::default().

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@marc-sift marc-sift marked this pull request as ready for review January 14, 2026 20:15
@marc-sift marc-sift requested a review from tsift January 14, 2026 20:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants