Skip to content

Commit 4723f32

Browse files
committed
refactor: move wait_for_server() into client
1 parent 42cb5d8 commit 4723f32

File tree

3 files changed

+40
-34
lines changed

3 files changed

+40
-34
lines changed

aw-client-rust/src/blocking.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,4 +79,8 @@ impl AwClient {
7979
proxy_method!(delete_event, (), bucketname: &str, event_id: i64);
8080
proxy_method!(get_event_count, i64, bucketname: &str);
8181
proxy_method!(get_info, aw_models::Info,);
82+
83+
pub fn wait_for_server(&self) -> Result<(), Box<dyn Error>> {
84+
self.client.wait_for_server()
85+
}
8286
}

aw-client-rust/src/lib.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ use std::{collections::HashMap, error::Error};
1111

1212
use chrono::{DateTime, Utc};
1313
use serde_json::{json, Map};
14+
use std::net::TcpStream;
15+
use std::time::Duration;
1416

1517
pub use aw_models::{Bucket, BucketMetadata, Event};
1618

@@ -221,4 +223,37 @@ impl AwClient {
221223
let url = format!("{}/api/0/info", self.baseurl);
222224
self.client.get(url).send().await?.json().await
223225
}
226+
227+
// TODO: make async
228+
pub fn wait_for_server(&self) -> Result<(), Box<dyn Error>> {
229+
let socket_addrs = self.baseurl.socket_addrs(|| None)?;
230+
let socket_addr = socket_addrs.first()
231+
.ok_or("Unable to resolve baseurl into socket address")?;
232+
233+
// Check if server is running with exponential backoff
234+
let mut retry_delay = Duration::from_millis(100);
235+
let max_wait = Duration::from_secs(10);
236+
let mut total_wait = Duration::from_secs(0);
237+
238+
while total_wait < max_wait {
239+
match TcpStream::connect_timeout(socket_addr, retry_delay) {
240+
Ok(_) => break,
241+
Err(_) => {
242+
std::thread::sleep(retry_delay);
243+
total_wait += retry_delay;
244+
retry_delay *= 2;
245+
}
246+
}
247+
}
248+
249+
if total_wait >= max_wait {
250+
return Err(format!(
251+
"Local server {} not running after 10 seconds of retrying",
252+
socket_addr
253+
)
254+
.into());
255+
}
256+
257+
Ok(())
258+
}
224259
}

aw-sync/src/sync_wrapper.rs

Lines changed: 1 addition & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -14,41 +14,8 @@ pub fn pull_all(client: &AwClient) -> Result<(), Box<dyn Error>> {
1414
Ok(())
1515
}
1616

17-
fn wait_for_server(socket_addr: &std::net::SocketAddr) -> Result<(), Box<dyn Error>> {
18-
// Check if server is running with exponential backoff
19-
let mut retry_delay = Duration::from_millis(100);
20-
let max_wait = Duration::from_secs(10);
21-
let mut total_wait = Duration::from_secs(0);
22-
23-
while total_wait < max_wait {
24-
match TcpStream::connect_timeout(socket_addr, retry_delay) {
25-
Ok(_) => break,
26-
Err(_) => {
27-
std::thread::sleep(retry_delay);
28-
total_wait += retry_delay;
29-
retry_delay *= 2;
30-
}
31-
}
32-
}
33-
34-
if total_wait >= max_wait {
35-
return Err(format!(
36-
"Local server {} not running after 10 seconds of retrying",
37-
socket_addr
38-
)
39-
.into());
40-
}
41-
42-
Ok(())
43-
}
44-
4517
pub fn pull(host: &str, client: &AwClient) -> Result<(), Box<dyn Error>> {
46-
let socket_addrs = client.baseurl.socket_addrs(|| None)?;
47-
let socket_addr = socket_addrs
48-
.get(0)
49-
.ok_or("Unable to resolve baseurl into socket address")?;
50-
51-
wait_for_server(socket_addr)?;
18+
client.wait_for_server()?;
5219

5320
// Path to the sync folder
5421
// Sync folder is structured ./{hostname}/{device_id}/test.db

0 commit comments

Comments
 (0)