Skip to content

Commit b5d9cbe

Browse files
authored
Merge pull request #411 from namada-net/shared-http-client
use shared http client
2 parents c1f622c + f989256 commit b5d9cbe

13 files changed

Lines changed: 220 additions & 196 deletions

File tree

Cargo.lock

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

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,3 +102,4 @@ tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
102102
validator = { version = "0.16.0", features = ["derive"] }
103103
vergen = "8.0.0"
104104
bech32 = "0.11.0"
105+
reqwest = { version = "0.11.27", features = ["json", "cookies"] }

chain/src/main.rs

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ use shared::balance::TokenSupply;
2828
use shared::block::Block;
2929
use shared::block_result::BlockResult;
3030
use shared::checksums::Checksums;
31+
use shared::client::Client;
3132
use shared::crawler::crawl;
3233
use shared::crawler_state::ChainCrawlerState;
3334
use shared::error::{
@@ -39,7 +40,6 @@ use shared::token::Token;
3940
use shared::utils::BalanceChange;
4041
use shared::validator::ValidatorSet;
4142
use tendermint_rpc::HttpClient;
42-
use tendermint_rpc::client::CompatMode;
4343
use tendermint_rpc::endpoint::block::Response as TendermintBlockResponse;
4444
use tokio::sync::Mutex;
4545
use tokio::time::Instant;
@@ -50,13 +50,9 @@ use tokio_retry::strategy::{ExponentialBackoff, jitter};
5050
async fn main() -> Result<(), MainError> {
5151
let config = AppConfig::parse();
5252

53-
let client =
54-
HttpClient::builder(config.tendermint_url.as_str().parse().unwrap())
55-
.compat_mode(CompatMode::V0_37)
56-
.build()
57-
.unwrap();
53+
let client = Client::new(&config.tendermint_url);
5854

59-
let chain_id = tendermint_service::query_status(&client)
55+
let chain_id = tendermint_service::query_status(client.as_ref())
6056
.await
6157
.into_rpc_error()?
6258
.node_info
@@ -65,12 +61,11 @@ async fn main() -> Result<(), MainError> {
6561

6662
tracing::info!("Network chain id: {}", chain_id);
6763

68-
let checksums = Arc::new(Mutex::new(query_checksums(&client).await));
64+
let checksums =
65+
Arc::new(Mutex::new(query_checksums(client.as_ref()).await));
6966

7067
config.log.init();
7168

72-
let client = Arc::new(client);
73-
7469
let app_state = AppState::new(config.database_url).into_db_error()?;
7570
let conn = Arc::new(app_state.get_db_connection().await.into_db_error()?);
7671

@@ -83,7 +78,7 @@ async fn main() -> Result<(), MainError> {
8378
rlimit::increase_nofile_limit(10240).unwrap();
8479
rlimit::increase_nofile_limit(u64::MAX).unwrap();
8580

86-
let last_block_height = namada_service::get_last_block(&client)
81+
let last_block_height = namada_service::get_last_block(client.as_ref())
8782
.await
8883
.into_rpc_error()?;
8984
let crawler_state = db_service::try_get_chain_crawler_state(&conn)
@@ -117,7 +112,7 @@ async fn main() -> Result<(), MainError> {
117112
// Try to run crawler_fn with the last processed block
118113
let crawl_result = crawling_fn(
119114
crawler_state.last_processed_block,
120-
client.clone(),
115+
Arc::new(client.get()),
121116
conn.clone(),
122117
checksums.clone(),
123118
true,
@@ -179,7 +174,7 @@ async fn main() -> Result<(), MainError> {
179174
Some(state) => {
180175
if config.reindex_bonds {
181176
let (bonds, unbonds) =
182-
query_all_bonds_and_unbonds(&client, None, None)
177+
query_all_bonds_and_unbonds(client.as_ref(), None, None)
183178
.await
184179
.into_rpc_error()?;
185180
conn.interact(move |conn| {
@@ -208,7 +203,7 @@ async fn main() -> Result<(), MainError> {
208203
None => {
209204
let checksums = checksums.lock().await;
210205
initial_query(
211-
&client,
206+
client.as_ref(),
212207
&conn,
213208
&checksums,
214209
config.initial_query_retry_time,
@@ -226,7 +221,7 @@ async fn main() -> Result<(), MainError> {
226221
move |block_height| {
227222
crawling_fn(
228223
block_height,
229-
client.clone(),
224+
Arc::new(client.get()),
230225
conn.clone(),
231226
checksums.clone(),
232227
config.backfill_from.is_none(),

governance/src/main.rs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@ use namada_governance::storage::proposal::{AddRemove, PGFAction, PGFTarget};
1616
use namada_sdk::time::DateTimeUtc;
1717
use orm::migrations::CustomMigrationSource;
1818
use shared::balance::Amount as NamadaAmount;
19+
use shared::client::Client;
1920
use shared::crawler;
2021
use shared::crawler_state::{CrawlerName, IntervalCrawlerState};
2122
use shared::error::{AsDbError, AsRpcError, ContextDbInteractError, MainError};
2223
use shared::id::Id;
2324
use shared::pgf::{PaymentKind, PaymentRecurrence, PgfAction, PgfPayment};
2425
use shared::proposal::GovernanceProposalResult;
2526
use tendermint_rpc::HttpClient;
26-
use tendermint_rpc::client::CompatMode;
2727
use tokio::sync::{Mutex, MutexGuard};
2828
use tokio::time::Instant;
2929

@@ -35,14 +35,9 @@ async fn main() -> Result<(), MainError> {
3535

3636
tracing::info!("version: {}", env!("VERGEN_GIT_SHA").to_string());
3737

38-
let client = Arc::new(
39-
HttpClient::builder(config.tendermint_url.as_str().parse().unwrap())
40-
.compat_mode(CompatMode::V0_37)
41-
.build()
42-
.unwrap(),
43-
);
38+
let client = Client::new(&config.tendermint_url);
4439

45-
let chain_id = tendermint_service::query_status(&client)
40+
let chain_id = tendermint_service::query_status(client.as_ref())
4641
.await
4742
.into_rpc_error()?
4843
.node_info
@@ -73,7 +68,7 @@ async fn main() -> Result<(), MainError> {
7368
move |_| {
7469
crawling_fn(
7570
conn.clone(),
76-
client.clone(),
71+
Arc::new(client.get()),
7772
instant.clone(),
7873
config.sleep_for,
7974
)

parameters/src/main.rs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,21 @@ use parameters::repository;
1515
use parameters::services::{
1616
namada as namada_service, tendermint as tendermint_service,
1717
};
18+
use shared::client::Client;
1819
use shared::crawler;
1920
use shared::crawler_state::{CrawlerName, IntervalCrawlerState};
2021
use shared::error::{AsDbError, AsRpcError, ContextDbInteractError, MainError};
2122
use tendermint_rpc::HttpClient;
22-
use tendermint_rpc::client::CompatMode;
2323

2424
#[tokio::main]
2525
async fn main() -> Result<(), MainError> {
2626
let config = AppConfig::parse();
2727

2828
config.log.init();
2929

30-
let client = Arc::new(
31-
HttpClient::builder(config.tendermint_url.as_str().parse().unwrap())
32-
.compat_mode(CompatMode::V0_37)
33-
.build()
34-
.unwrap(),
35-
);
30+
let client = Client::new(&config.tendermint_url);
3631

37-
let chain_id = tendermint_service::query_status(&client)
32+
let chain_id = tendermint_service::query_status(client.as_ref())
3833
.await
3934
.into_rpc_error()?
4035
.node_info
@@ -52,12 +47,12 @@ async fn main() -> Result<(), MainError> {
5247
.await
5348
.expect("Should be able to run migrations");
5449

55-
let current_epoch = namada_service::get_current_epoch(&client.clone())
50+
let current_epoch = namada_service::get_current_epoch(client.as_ref())
5651
.await
5752
.into_rpc_error()?;
5853

5954
crawler::crawl(
60-
move |epoch| crawling_fn(epoch, conn.clone(), client.clone()),
55+
move |epoch| crawling_fn(epoch, conn.clone(), Arc::new(client.get())),
6156
current_epoch,
6257
None,
6358
)

pos/src/main.rs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,21 @@ use pos::repository::{self};
1414
use pos::services::{
1515
namada as namada_service, tendermint as tendermint_service,
1616
};
17+
use shared::client::Client;
1718
use shared::crawler;
1819
use shared::crawler_state::{CrawlerName, EpochCrawlerState};
1920
use shared::error::{AsDbError, AsRpcError, ContextDbInteractError, MainError};
2021
use tendermint_rpc::HttpClient;
21-
use tendermint_rpc::client::CompatMode;
2222

2323
#[tokio::main]
2424
async fn main() -> Result<(), MainError> {
2525
let config = AppConfig::parse();
2626

2727
config.log.init();
2828

29-
let client = Arc::new(
30-
HttpClient::builder(config.tendermint_url.as_str().parse().unwrap())
31-
.compat_mode(CompatMode::V0_37)
32-
.build()
33-
.unwrap(),
34-
);
29+
let client = Client::new(&config.tendermint_url);
3530

36-
let chain_id = tendermint_service::query_status(&client)
31+
let chain_id = tendermint_service::query_status(client.as_ref())
3732
.await
3833
.into_rpc_error()?
3934
.node_info
@@ -52,12 +47,12 @@ async fn main() -> Result<(), MainError> {
5247
.expect("Should be able to run migrations");
5348

5449
// We always start from the current epoch
55-
let next_epoch = namada_service::get_current_epoch(&client.clone())
50+
let next_epoch = namada_service::get_current_epoch(client.as_ref())
5651
.await
5752
.into_rpc_error()?;
5853

5954
crawler::crawl(
60-
move |epoch| crawling_fn(epoch, conn.clone(), client.clone()),
55+
move |epoch| crawling_fn(epoch, conn.clone(), Arc::new(client.get())),
6156
next_epoch,
6257
None,
6358
)

rewards/src/main.rs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ use rewards::services::{
1313
namada as namada_service, tendermint as tendermint_service,
1414
};
1515
use rewards::state::AppState;
16+
use shared::client::Client;
1617
use shared::crawler;
1718
use shared::crawler_state::{CrawlerName, IntervalCrawlerState};
1819
use shared::error::{AsDbError, AsRpcError, ContextDbInteractError, MainError};
1920
use tendermint_rpc::HttpClient;
20-
use tendermint_rpc::client::CompatMode;
2121
use tokio::time::sleep;
2222

2323
#[tokio::main]
@@ -28,14 +28,9 @@ async fn main() -> Result<(), MainError> {
2828

2929
tracing::info!("version: {}", env!("VERGEN_GIT_SHA").to_string());
3030

31-
let client = Arc::new(
32-
HttpClient::builder(config.tendermint_url.as_str().parse().unwrap())
33-
.compat_mode(CompatMode::V0_37)
34-
.build()
35-
.unwrap(),
36-
);
31+
let client = Client::new(&config.tendermint_url);
3732

38-
let chain_id = tendermint_service::query_status(&client)
33+
let chain_id = tendermint_service::query_status(client.as_ref())
3934
.await
4035
.into_rpc_error()?
4136
.node_info
@@ -61,7 +56,7 @@ async fn main() -> Result<(), MainError> {
6156
if epoch.is_none() {
6257
loop {
6358
epoch = Some(
64-
namada_service::get_current_epoch(&client)
59+
namada_service::get_current_epoch(client.as_ref())
6560
.await
6661
.into_rpc_error()?,
6762
);
@@ -76,7 +71,7 @@ async fn main() -> Result<(), MainError> {
7671
}
7772

7873
crawler::crawl(
79-
move |epoch| crawling_fn(conn.clone(), client.clone(), epoch),
74+
move |epoch| crawling_fn(conn.clone(), Arc::new(client.get()), epoch),
8075
epoch.unwrap_or(0),
8176
None,
8277
)

shared/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,5 @@ tokio.workspace = true
4242
tokio-retry.workspace = true
4343
tracing.workspace = true
4444
tracing-subscriber.workspace = true
45-
bech32.workspace = true
45+
bech32.workspace = true
46+
reqwest.workspace = true

shared/src/client.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
use tendermint_rpc::HttpClient;
2+
3+
#[derive(Clone, Debug)]
4+
pub struct Client {
5+
inner: HttpClient,
6+
}
7+
8+
impl Client {
9+
pub fn new(ur: &str) -> Self {
10+
let url = ur.parse().expect("Invalid URL");
11+
let inner = reqwest::Client::builder()
12+
.cookie_store(true)
13+
.build()
14+
.expect("Failed to create HTTP client");
15+
let http_client = HttpClient::new_from_parts(
16+
inner,
17+
url,
18+
tendermint_rpc::client::CompatMode::V0_37,
19+
);
20+
Client { inner: http_client }
21+
}
22+
23+
pub fn get(&self) -> HttpClient {
24+
self.inner.clone()
25+
}
26+
}
27+
28+
impl AsRef<HttpClient> for Client {
29+
fn as_ref(&self) -> &HttpClient {
30+
&self.inner
31+
}
32+
}

shared/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ pub mod balance;
22
pub mod block;
33
pub mod block_result;
44
pub mod checksums;
5+
pub mod client;
56
pub mod crawler;
67
pub mod crawler_state;
78
pub mod error;

0 commit comments

Comments
 (0)