|
|
@@ -20,6 +20,7 @@
|
|
|
//! ```
|
|
|
|
|
|
use std::collections::HashMap;
|
|
|
+use std::fmt::Debug;
|
|
|
use std::sync::Arc;
|
|
|
use std::time::{Duration, Instant};
|
|
|
|
|
|
@@ -38,8 +39,6 @@ use worker::MessageToWorker;
|
|
|
mod scheduler;
|
|
|
mod worker;
|
|
|
|
|
|
-#[cfg(feature = "auth")]
|
|
|
-use super::AuthMintConnector;
|
|
|
use crate::nuts::Id;
|
|
|
#[cfg(feature = "auth")]
|
|
|
use crate::wallet::AuthHttpClient;
|
|
|
@@ -97,17 +96,10 @@ impl MintKeyCache {
|
|
|
/// Shared worker state for a mint
|
|
|
///
|
|
|
/// One worker per mint_url, shared across all KeyManager instances for that mint.
|
|
|
-#[allow(dead_code)]
|
|
|
struct SharedWorker {
|
|
|
/// Mint URL
|
|
|
mint_url: MintUrl,
|
|
|
|
|
|
- /// Client for HTTP requests (shared across all instances)
|
|
|
- client: Arc<dyn MintConnector + Send + Sync>,
|
|
|
-
|
|
|
- #[cfg(feature = "auth")]
|
|
|
- auth_client: Arc<dyn AuthMintConnector + Send + Sync>,
|
|
|
-
|
|
|
/// All storages registered for this mint
|
|
|
storages:
|
|
|
Arc<ParkingLotRwLock<Vec<Arc<dyn WalletDatabase<Err = database::Error> + Send + Sync>>>>,
|
|
|
@@ -122,6 +114,17 @@ struct SharedWorker {
|
|
|
task: Option<JoinHandle<()>>,
|
|
|
}
|
|
|
|
|
|
+impl Debug for SharedWorker {
|
|
|
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
|
+ f.debug_struct("SharedWorker")
|
|
|
+ .field("mint_url", &self.mint_url)
|
|
|
+ .field("storages", &self.storages.read().len().to_string())
|
|
|
+ .field("tx", &self.tx.is_closed())
|
|
|
+ .field("cache", &self.cache)
|
|
|
+ .finish()
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
impl Drop for SharedWorker {
|
|
|
fn drop(&mut self) {
|
|
|
tracing::debug!("Dropping SharedWorker for {}", self.mint_url);
|
|
|
@@ -187,7 +190,10 @@ impl KeyManager {
|
|
|
// Reuse existing worker
|
|
|
tracing::debug!("Reusing existing worker for {}", mint_url);
|
|
|
existing_worker.storages.write().push(storage.clone());
|
|
|
- let _ = existing_worker.tx.send(MessageToWorker::SyncDb(storage));
|
|
|
+ let _ = existing_worker
|
|
|
+ .tx
|
|
|
+ .send(MessageToWorker::SyncDb(storage))
|
|
|
+ .expect("sss");
|
|
|
existing_worker.clone()
|
|
|
} else {
|
|
|
let mut registry = WORKER_REGISTRY.write();
|
|
|
@@ -225,21 +231,18 @@ impl KeyManager {
|
|
|
refresh_interval,
|
|
|
))
|
|
|
};
|
|
|
+ //
|
|
|
+ // Trigger initial sync
|
|
|
+ let _ = tx.send(MessageToWorker::FetchMint).expect("send");
|
|
|
|
|
|
let worker = Arc::new(SharedWorker {
|
|
|
mint_url: mint_url.clone(),
|
|
|
- client,
|
|
|
- #[cfg(feature = "auth")]
|
|
|
- auth_client,
|
|
|
storages,
|
|
|
cache,
|
|
|
- tx: tx.clone(),
|
|
|
+ tx,
|
|
|
task: Some(task),
|
|
|
});
|
|
|
|
|
|
- // Trigger initial sync
|
|
|
- let _ = tx.send(MessageToWorker::FetchMint);
|
|
|
-
|
|
|
worker
|
|
|
})
|
|
|
.clone()
|
|
|
@@ -259,7 +262,8 @@ impl KeyManager {
|
|
|
.worker
|
|
|
.tx
|
|
|
.send(msg)
|
|
|
- .inspect_err(|e| tracing::error!("Failed to send message to refresh task: {}", e));
|
|
|
+ .inspect_err(|e| tracing::error!("Failed to send message to refresh task: {}", e))
|
|
|
+ .expect(&format!("send {}", self.worker.tx.is_closed()));
|
|
|
}
|
|
|
|
|
|
/// Get keys for a keyset (cache-first with automatic refresh)
|
|
|
@@ -351,7 +355,6 @@ impl KeyManager {
|
|
|
for _ in 0..MAX_RETRY {
|
|
|
if let Some(keysets) = {
|
|
|
let cache = shared_cache.load();
|
|
|
- println!("{:?}", cache);
|
|
|
if last_version > 0 || cache.refresh_version > 0 {
|
|
|
Some(
|
|
|
cache
|