mirror of
https://github.com/scsibug/nostr-rs-relay.git
synced 2024-11-25 10:09:08 -05:00
improvement: move reader mutex closer to DB connection acquisition
This commit is contained in:
parent
d2adddaee4
commit
27902bc5f4
|
@ -762,9 +762,14 @@ pub async fn db_query(
|
||||||
pool: SqlitePool,
|
pool: SqlitePool,
|
||||||
query_tx: tokio::sync::mpsc::Sender<QueryResult>,
|
query_tx: tokio::sync::mpsc::Sender<QueryResult>,
|
||||||
mut abandon_query_rx: tokio::sync::oneshot::Receiver<()>,
|
mut abandon_query_rx: tokio::sync::oneshot::Receiver<()>,
|
||||||
|
safe_to_read: Arc<Mutex<u64>>,
|
||||||
) {
|
) {
|
||||||
let pre_spawn_start = Instant::now();
|
let pre_spawn_start = Instant::now();
|
||||||
task::spawn_blocking(move || {
|
task::spawn_blocking(move || {
|
||||||
|
{
|
||||||
|
// if we are waiting on a checkpoint, stop until it is complete
|
||||||
|
let _ = safe_to_read.blocking_lock();
|
||||||
|
}
|
||||||
let db_queue_time = pre_spawn_start.elapsed();
|
let db_queue_time = pre_spawn_start.elapsed();
|
||||||
// if the queue time was very long (>5 seconds), spare the DB and abort.
|
// if the queue time was very long (>5 seconds), spare the DB and abort.
|
||||||
if db_queue_time > Duration::from_secs(5) {
|
if db_queue_time > Duration::from_secs(5) {
|
||||||
|
|
|
@ -687,13 +687,8 @@ async fn nostr_server(
|
||||||
previous_query.send(()).ok();
|
previous_query.send(()).ok();
|
||||||
}
|
}
|
||||||
if s.needs_historical_events() {
|
if s.needs_historical_events() {
|
||||||
{
|
|
||||||
// acquire and immediately release lock; this ensures we do not start new queries during a wal checkpoint.
|
|
||||||
let _ = safe_to_read.lock().await;
|
|
||||||
trace!("passed safe_to_read lock");
|
|
||||||
}
|
|
||||||
// start a database query. this spawns a blocking database query on a worker thread.
|
// start a database query. this spawns a blocking database query on a worker thread.
|
||||||
db::db_query(s, cid.to_owned(), pool.clone(), query_tx.clone(), abandon_query_rx).await;
|
db::db_query(s, cid.to_owned(), pool.clone(), query_tx.clone(), abandon_query_rx,safe_to_read.clone()).await;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user