use std::time::Duration;
use crate::control::security::buses::{SessionInvalidated, SessionInvalidationReason};
use crate::control::state::SharedState;
use crate::types::{DatabaseId, TenantId};
use nodedb_types::NodeDbError;
pub async fn run(
state: &SharedState,
tenant_id: TenantId,
_source_db_id: DatabaseId,
timeout: Duration,
) -> Result<(), NodeDbError> {
state.session_invalidation_bus.publish(SessionInvalidated {
user_id: tenant_id.as_u64(),
reason: SessionInvalidationReason::UserDeactivated,
});
let deadline = tokio::time::Instant::now() + timeout;
loop {
let depth = state.tracker.in_flight();
if depth == 0 {
return Ok(());
}
if tokio::time::Instant::now() >= deadline {
return Err(NodeDbError::move_tenant_drain_timeout(
tenant_id.as_u64().to_string(),
_source_db_id.as_u64().to_string(),
));
}
tokio::time::sleep(Duration::from_millis(50)).await;
}
}
pub fn release(_state: &SharedState, _tenant_id: TenantId, _source_db_id: DatabaseId) {
}