Skip to content

Commit 0103269

Browse files
refactor: use std::sync::LazyLock instead of lazy_static (#659)
1 parent 5e84f88 commit 0103269

File tree

17 files changed

+247
-206
lines changed

17 files changed

+247
-206
lines changed

Cargo.lock

Lines changed: 0 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ opt-level = 3
1919

2020
[workspace.dependencies]
2121
clap = "4.4.3"
22-
lazy_static = "1.4.0"
2322
axum = { version = "0.7.9", default-features = false, features = [
2423
"tokio",
2524
"http1",

crates/service/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ graphql_client.workspace = true
3131
tracing-subscriber = { workspace = true, features = ["fmt"] }
3232
clap = { workspace = true, features = ["derive"] }
3333
build-info.workspace = true
34-
lazy_static.workspace = true
3534
prost.workspace = true
3635
async-trait.workspace = true
3736
async-graphql = { version = "7.0.11", default-features = false }

crates/service/src/metrics.rs

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,40 @@
11
// Copyright 2023-, Edge & Node, GraphOps, and Semiotic Labs.
22
// SPDX-License-Identifier: Apache-2.0
33

4-
use std::net::SocketAddr;
4+
use std::{net::SocketAddr, sync::LazyLock};
55

66
use axum::{routing::get, serve, Router};
7-
use lazy_static::lazy_static;
87
use prometheus::{
98
register_counter_vec, register_histogram_vec, CounterVec, HistogramVec, TextEncoder,
109
};
1110
use reqwest::StatusCode;
1211
use tokio::net::TcpListener;
1312

14-
lazy_static! {
15-
/// Metric registered in global registry for
16-
/// indexer query handler
17-
///
18-
/// Labels: "deployment", "allocation", "sender"
19-
pub static ref HANDLER_HISTOGRAM: HistogramVec = register_histogram_vec!(
13+
/// Metric registered in global registry for
14+
/// indexer query handler
15+
///
16+
/// Labels: "deployment", "allocation", "sender"
17+
pub static HANDLER_HISTOGRAM: LazyLock<HistogramVec> = LazyLock::new(|| {
18+
register_histogram_vec!(
2019
"indexer_query_handler_seconds",
2120
"Histogram for default indexer query handler",
2221
&["deployment", "allocation", "sender", "status_code"]
23-
).unwrap();
22+
)
23+
.unwrap()
24+
});
2425

25-
/// Metric registered in global registry for
26-
/// Failed receipt checks
27-
///
28-
/// Labels: "deployment", "allocation", "sender"
29-
pub static ref FAILED_RECEIPT: CounterVec = register_counter_vec!(
26+
/// Metric registered in global registry for
27+
/// Failed receipt checks
28+
///
29+
/// Labels: "deployment", "allocation", "sender"
30+
pub static FAILED_RECEIPT: LazyLock<CounterVec> = LazyLock::new(|| {
31+
register_counter_vec!(
3032
"indexer_receipt_failed_total",
3133
"Failed receipt checks",
3234
&["deployment", "allocation", "sender"]
3335
)
34-
.unwrap();
35-
36-
}
36+
.unwrap()
37+
});
3738

3839
pub fn serve_metrics(host_and_port: SocketAddr) {
3940
tracing::info!(address = %host_and_port, "Serving prometheus metrics");

crates/service/src/routes/cost.rs

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
// Copyright 2023-, Edge & Node, GraphOps, and Semiotic Labs.
22
// SPDX-License-Identifier: Apache-2.0
33

4-
use std::str::FromStr;
4+
use std::{str::FromStr, sync::LazyLock};
55

66
use async_graphql::{Context, EmptyMutation, EmptySubscription, Object, Schema, SimpleObject};
7-
use lazy_static::lazy_static;
87
use prometheus::{
98
register_counter, register_counter_vec, register_histogram, register_histogram_vec, Counter,
109
CounterVec, Histogram, HistogramVec,
@@ -16,45 +15,57 @@ use thegraph_core::DeploymentId;
1615

1716
use crate::database::cost_model::{self, CostModel};
1817

19-
lazy_static! {
20-
pub static ref COST_MODEL_METRIC: HistogramVec = register_histogram_vec!(
18+
pub static COST_MODEL_METRIC: LazyLock<HistogramVec> = LazyLock::new(|| {
19+
register_histogram_vec!(
2120
"indexer_cost_model_seconds",
2221
"Histogram metric for single cost model query",
2322
&["deployment"]
2423
)
25-
.unwrap();
26-
pub static ref COST_MODEL_FAILED: CounterVec = register_counter_vec!(
24+
.unwrap()
25+
});
26+
pub static COST_MODEL_FAILED: LazyLock<CounterVec> = LazyLock::new(|| {
27+
register_counter_vec!(
2728
"indexer_cost_model_failed_total",
2829
"Total failed Cost Model query",
2930
&["deployment"]
3031
)
31-
.unwrap();
32-
pub static ref COST_MODEL_INVALID: Counter = register_counter!(
32+
.unwrap()
33+
});
34+
pub static COST_MODEL_INVALID: LazyLock<Counter> = LazyLock::new(|| {
35+
register_counter!(
3336
"indexer_cost_model_invalid_total",
3437
"Cost model queries with invalid deployment id",
3538
)
36-
.unwrap();
37-
pub static ref COST_MODEL_BATCH_METRIC: Histogram = register_histogram!(
39+
.unwrap()
40+
});
41+
pub static COST_MODEL_BATCH_METRIC: LazyLock<Histogram> = LazyLock::new(|| {
42+
register_histogram!(
3843
"indexer_cost_model_batch_seconds",
3944
"Histogram metric for batch cost model query",
4045
)
41-
.unwrap();
42-
pub static ref COST_MODEL_BATCH_SIZE: Histogram = register_histogram!(
46+
.unwrap()
47+
});
48+
pub static COST_MODEL_BATCH_SIZE: LazyLock<Histogram> = LazyLock::new(|| {
49+
register_histogram!(
4350
"indexer_cost_model_batch_size",
4451
"This shows the size of deployment ids cost model batch queries got",
4552
)
46-
.unwrap();
47-
pub static ref COST_MODEL_BATCH_FAILED: Counter = register_counter!(
53+
.unwrap()
54+
});
55+
pub static COST_MODEL_BATCH_FAILED: LazyLock<Counter> = LazyLock::new(|| {
56+
register_counter!(
4857
"indexer_cost_model_batch_failed_total",
4958
"Total failed batch cost model queries",
5059
)
51-
.unwrap();
52-
pub static ref COST_MODEL_BATCH_INVALID: Counter = register_counter!(
60+
.unwrap()
61+
});
62+
pub static COST_MODEL_BATCH_INVALID: LazyLock<Counter> = LazyLock::new(|| {
63+
register_counter!(
5364
"indexer_cost_model_batch_invalid_total",
5465
"Batch cost model queries with invalid deployment ids",
5566
)
56-
.unwrap();
57-
}
67+
.unwrap()
68+
});
5869

5970
#[derive(Clone, Debug, Serialize, Deserialize, SimpleObject)]
6071
pub struct GraphQlCostModel {

crates/service/src/routes/status.rs

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright 2023-, Edge & Node, GraphOps, and Semiotic Labs.
22
// SPDX-License-Identifier: Apache-2.0
33

4-
use std::collections::HashSet;
4+
use std::{collections::HashSet, sync::LazyLock};
55

66
use async_graphql_axum::GraphQLRequest;
77
use axum::{extract::State, response::IntoResponse, Json};
@@ -14,23 +14,24 @@ use thegraph_graphql_http::{
1414

1515
use crate::{error::SubgraphServiceError, service::GraphNodeState};
1616

17-
lazy_static::lazy_static! {
18-
static ref SUPPORTED_ROOT_FIELDS: HashSet<&'static str> =
19-
vec![
20-
"indexingStatuses",
21-
"chains",
22-
"latestBlock",
23-
"earliestBlock",
24-
"publicProofsOfIndexing",
25-
"entityChangesInBlock",
26-
"blockData",
27-
"blockHashFromNumber",
28-
"cachedEthereumCalls",
29-
"subgraphFeatures",
30-
"apiVersions",
31-
"version"
32-
].into_iter().collect();
33-
}
17+
static SUPPORTED_ROOT_FIELDS: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
18+
[
19+
"indexingStatuses",
20+
"chains",
21+
"latestBlock",
22+
"earliestBlock",
23+
"publicProofsOfIndexing",
24+
"entityChangesInBlock",
25+
"blockData",
26+
"blockHashFromNumber",
27+
"cachedEthereumCalls",
28+
"subgraphFeatures",
29+
"apiVersions",
30+
"version",
31+
]
32+
.into_iter()
33+
.collect()
34+
});
3435

3536
struct WrappedGraphQLRequest(async_graphql::Request);
3637

crates/service/src/service/tap_receipt_header.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
// Copyright 2023-, Edge & Node, GraphOps, and Semiotic Labs.
22
// SPDX-License-Identifier: Apache-2.0
33

4+
use std::sync::LazyLock;
5+
46
use axum_extra::headers::{self, Header, HeaderName, HeaderValue};
57
use base64::prelude::*;
6-
use lazy_static::lazy_static;
78
use prometheus::{register_counter, Counter};
89
use prost::Message;
910
use tap_aggregator::grpc;
@@ -14,11 +15,10 @@ use crate::tap::TapReceipt;
1415
#[derive(Debug, PartialEq)]
1516
pub struct TapHeader(pub TapReceipt);
1617

17-
lazy_static! {
18-
static ref TAP_RECEIPT: HeaderName = HeaderName::from_static("tap-receipt");
19-
pub static ref TAP_RECEIPT_INVALID: Counter =
20-
register_counter!("indexer_tap_invalid_total", "Invalid tap receipt decode",).unwrap();
21-
}
18+
static TAP_RECEIPT: LazyLock<HeaderName> = LazyLock::new(|| HeaderName::from_static("tap-receipt"));
19+
pub static TAP_RECEIPT_INVALID: LazyLock<Counter> = LazyLock::new(|| {
20+
register_counter!("indexer_tap_invalid_total", "Invalid tap receipt decode",).unwrap()
21+
});
2222

2323
impl Header for TapHeader {
2424
fn name() -> &'static HeaderName {

crates/tap-agent/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ axum.workspace = true
3232
tap_core.workspace = true
3333
tap_graph.workspace = true
3434
tokio = { workspace = true, features = ["rt-multi-thread"] }
35-
lazy_static.workspace = true
3635
thegraph-core.workspace = true
3736
clap.workspace = true
3837
tracing-subscriber.workspace = true

crates/tap-agent/src/agent/sender_account.rs

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
use std::{
55
collections::{HashMap, HashSet},
66
str::FromStr,
7+
sync::LazyLock,
78
time::Duration,
89
};
910

@@ -16,7 +17,6 @@ use indexer_query::{
1617
unfinalized_transactions, UnfinalizedTransactions,
1718
};
1819
use indexer_watcher::watch_pipe;
19-
use lazy_static::lazy_static;
2020
use prometheus::{register_gauge_vec, register_int_gauge_vec, GaugeVec, IntGaugeVec};
2121
use ractor::{Actor, ActorProcessingErr, ActorRef, MessagingErr, SupervisionEvent};
2222
use reqwest::Url;
@@ -48,52 +48,65 @@ use crate::{
4848
tracker::{SenderFeeTracker, SimpleFeeTracker},
4949
};
5050

51-
lazy_static! {
52-
static ref SENDER_DENIED: IntGaugeVec =
53-
register_int_gauge_vec!("tap_sender_denied", "Sender is denied", &["sender"]).unwrap();
54-
static ref ESCROW_BALANCE: GaugeVec = register_gauge_vec!(
51+
static SENDER_DENIED: LazyLock<IntGaugeVec> = LazyLock::new(|| {
52+
register_int_gauge_vec!("tap_sender_denied", "Sender is denied", &["sender"]).unwrap()
53+
});
54+
static ESCROW_BALANCE: LazyLock<GaugeVec> = LazyLock::new(|| {
55+
register_gauge_vec!(
5556
"tap_sender_escrow_balance_grt_total",
5657
"Sender escrow balance",
5758
&["sender"]
5859
)
59-
.unwrap();
60-
static ref UNAGGREGATED_FEES: GaugeVec = register_gauge_vec!(
60+
.unwrap()
61+
});
62+
static UNAGGREGATED_FEES: LazyLock<GaugeVec> = LazyLock::new(|| {
63+
register_gauge_vec!(
6164
"tap_unaggregated_fees_grt_total",
6265
"Unggregated Fees value",
6366
&["sender", "allocation"]
6467
)
65-
.unwrap();
66-
static ref SENDER_FEE_TRACKER: GaugeVec = register_gauge_vec!(
68+
.unwrap()
69+
});
70+
static SENDER_FEE_TRACKER: LazyLock<GaugeVec> = LazyLock::new(|| {
71+
register_gauge_vec!(
6772
"tap_sender_fee_tracker_grt_total",
6873
"Sender fee tracker metric",
6974
&["sender"]
7075
)
71-
.unwrap();
72-
static ref INVALID_RECEIPT_FEES: GaugeVec = register_gauge_vec!(
76+
.unwrap()
77+
});
78+
static INVALID_RECEIPT_FEES: LazyLock<GaugeVec> = LazyLock::new(|| {
79+
register_gauge_vec!(
7380
"tap_invalid_receipt_fees_grt_total",
7481
"Failed receipt fees",
7582
&["sender", "allocation"]
7683
)
77-
.unwrap();
78-
static ref PENDING_RAV: GaugeVec = register_gauge_vec!(
84+
.unwrap()
85+
});
86+
static PENDING_RAV: LazyLock<GaugeVec> = LazyLock::new(|| {
87+
register_gauge_vec!(
7988
"tap_pending_rav_grt_total",
8089
"Pending ravs values",
8190
&["sender", "allocation"]
8291
)
83-
.unwrap();
84-
static ref MAX_FEE_PER_SENDER: GaugeVec = register_gauge_vec!(
92+
.unwrap()
93+
});
94+
static MAX_FEE_PER_SENDER: LazyLock<GaugeVec> = LazyLock::new(|| {
95+
register_gauge_vec!(
8596
"tap_max_fee_per_sender_grt_total",
8697
"Max fee per sender in the config",
8798
&["sender"]
8899
)
89-
.unwrap();
90-
static ref RAV_REQUEST_TRIGGER_VALUE: GaugeVec = register_gauge_vec!(
100+
.unwrap()
101+
});
102+
static RAV_REQUEST_TRIGGER_VALUE: LazyLock<GaugeVec> = LazyLock::new(|| {
103+
register_gauge_vec!(
91104
"tap_rav_request_trigger_value",
92105
"RAV request trigger value divisor",
93106
&["sender"]
94107
)
95-
.unwrap();
96-
}
108+
.unwrap()
109+
});
97110

98111
const INITIAL_RAV_REQUEST_CONCURRENT: usize = 1;
99112

0 commit comments

Comments
 (0)