Experimental: use Notify for Debtor credit flow
This commit is contained in:
parent
ff130e9443
commit
2eca2a0cc1
17
src/actor.rs
17
src/actor.rs
|
@ -27,6 +27,7 @@ use std::sync::Weak;
|
||||||
use std::sync::atomic::{AtomicI64, AtomicU64, Ordering};
|
use std::sync::atomic::{AtomicI64, AtomicU64, Ordering};
|
||||||
|
|
||||||
use tokio::select;
|
use tokio::select;
|
||||||
|
use tokio::sync::Notify;
|
||||||
use tokio::sync::mpsc::{unbounded_channel, UnboundedSender, UnboundedReceiver};
|
use tokio::sync::mpsc::{unbounded_channel, UnboundedSender, UnboundedReceiver};
|
||||||
use tokio_util::sync::CancellationToken;
|
use tokio_util::sync::CancellationToken;
|
||||||
|
|
||||||
|
@ -92,7 +93,7 @@ struct EventBuffer {
|
||||||
pub struct Debtor {
|
pub struct Debtor {
|
||||||
id: u64,
|
id: u64,
|
||||||
debt: Arc<AtomicI64>,
|
debt: Arc<AtomicI64>,
|
||||||
// notify: Notify,
|
notify: Notify,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
@ -394,7 +395,7 @@ impl Debtor {
|
||||||
Arc::new(Debtor {
|
Arc::new(Debtor {
|
||||||
id,
|
id,
|
||||||
debt,
|
debt,
|
||||||
// notify: Notify::new(),
|
notify: Notify::new(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -410,17 +411,17 @@ impl Debtor {
|
||||||
pub fn repay(&self, token_count: usize) {
|
pub fn repay(&self, token_count: usize) {
|
||||||
let token_count: i64 = token_count.try_into().expect("manageable token count");
|
let token_count: i64 = token_count.try_into().expect("manageable token count");
|
||||||
let _old_debt = self.debt.fetch_sub(token_count, Ordering::Relaxed);
|
let _old_debt = self.debt.fetch_sub(token_count, Ordering::Relaxed);
|
||||||
// if _old_debt - token_count <= *SYNDICATE_CREDIT {
|
if _old_debt - token_count <= *SYNDICATE_CREDIT {
|
||||||
// self.notify.notify_one();
|
self.notify.notify_one();
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn ensure_clear_funds(&self) {
|
pub async fn ensure_clear_funds(&self) {
|
||||||
let limit = *SYNDICATE_CREDIT;
|
let limit = *SYNDICATE_CREDIT;
|
||||||
tokio::task::yield_now().await;
|
// tokio::task::yield_now().await;
|
||||||
while self.balance() > limit {
|
while self.balance() > limit {
|
||||||
tokio::task::yield_now().await;
|
// tokio::task::yield_now().await;
|
||||||
// self.notify.notified().await;
|
self.notify.notified().await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue