mirror of
https://github.com/kanidm/kanidm.git
synced 2025-02-23 12:37:00 +01:00
Add interval for purge recycled
This commit is contained in:
parent
9c0aaa072a
commit
6c283164cb
|
@ -284,15 +284,28 @@ impl AuthResult {
|
|||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct PurgeEvent {}
|
||||
pub struct PurgeTombstoneEvent {}
|
||||
|
||||
impl Message for PurgeEvent {
|
||||
impl Message for PurgeTombstoneEvent {
|
||||
type Result = ();
|
||||
}
|
||||
|
||||
impl PurgeEvent {
|
||||
impl PurgeTombstoneEvent {
|
||||
pub fn new() -> Self {
|
||||
PurgeEvent {}
|
||||
PurgeTombstoneEvent {}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct PurgeRecycledEvent {}
|
||||
|
||||
impl Message for PurgeRecycledEvent {
|
||||
type Result = ();
|
||||
}
|
||||
|
||||
impl PurgeRecycledEvent {
|
||||
pub fn new() -> Self {
|
||||
PurgeRecycledEvent {}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ use actix::prelude::*;
|
|||
use std::time::Duration;
|
||||
|
||||
use constants::PURGE_TIMEOUT;
|
||||
use event::PurgeEvent;
|
||||
use event::{PurgeTombstoneEvent, PurgeRecycledEvent};
|
||||
use server::QueryServer;
|
||||
|
||||
pub struct IntervalActor {
|
||||
|
@ -18,7 +18,12 @@ impl IntervalActor {
|
|||
// Define new events here
|
||||
fn purge_tombstones(&mut self) {
|
||||
// Make a purge request ...
|
||||
let pe = PurgeEvent::new();
|
||||
let pe = PurgeTombstoneEvent::new();
|
||||
self.server.do_send(pe)
|
||||
}
|
||||
|
||||
fn purge_recycled(&mut self) {
|
||||
let pe = PurgeRecycledEvent::new();
|
||||
self.server.do_send(pe)
|
||||
}
|
||||
}
|
||||
|
@ -27,6 +32,10 @@ impl Actor for IntervalActor {
|
|||
type Context = actix::Context<Self>;
|
||||
|
||||
fn started(&mut self, ctx: &mut Self::Context) {
|
||||
// TODO: This timeout could be configurable from config?
|
||||
ctx.run_interval(Duration::from_secs(PURGE_TIMEOUT), move |act, _ctx| {
|
||||
act.purge_recycled();
|
||||
});
|
||||
ctx.run_interval(Duration::from_secs(PURGE_TIMEOUT), move |act, _ctx| {
|
||||
act.purge_tombstones();
|
||||
});
|
||||
|
|
|
@ -14,7 +14,7 @@ use entry::{Entry, EntryCommitted, EntryInvalid, EntryNew, EntryValid};
|
|||
use error::{OperationError, SchemaError};
|
||||
use event::{
|
||||
AuthEvent, AuthResult, CreateEvent, DeleteEvent, ExistsEvent, ModifyEvent, OpResult,
|
||||
PurgeEvent, ReviveRecycledEvent, SearchEvent, SearchResult,
|
||||
PurgeTombstoneEvent, PurgeRecycledEvent, ReviveRecycledEvent, SearchEvent, SearchResult,
|
||||
};
|
||||
use filter::{Filter, FilterInvalid};
|
||||
use log::EventLog;
|
||||
|
@ -1052,10 +1052,10 @@ impl Handler<AuthEvent> for QueryServer {
|
|||
}
|
||||
}
|
||||
|
||||
impl Handler<PurgeEvent> for QueryServer {
|
||||
impl Handler<PurgeTombstoneEvent> for QueryServer {
|
||||
type Result = ();
|
||||
|
||||
fn handle(&mut self, msg: PurgeEvent, _: &mut Self::Context) -> Self::Result {
|
||||
fn handle(&mut self, msg: PurgeTombstoneEvent, _: &mut Self::Context) -> Self::Result {
|
||||
let mut audit = AuditScope::new("purge tombstones");
|
||||
let res = audit_segment!(&mut audit, || {
|
||||
audit_log!(audit, "Begin purge tombstone event {:?}", msg);
|
||||
|
@ -1073,6 +1073,27 @@ impl Handler<PurgeEvent> for QueryServer {
|
|||
}
|
||||
}
|
||||
|
||||
impl Handler<PurgeRecycledEvent> for QueryServer {
|
||||
type Result = ();
|
||||
|
||||
fn handle(&mut self, msg: PurgeRecycledEvent, _: &mut Self::Context) -> Self::Result {
|
||||
let mut audit = AuditScope::new("purge recycled");
|
||||
let res = audit_segment!(&mut audit, || {
|
||||
audit_log!(audit, "Begin purge recycled event {:?}", msg);
|
||||
let qs_write = self.write();
|
||||
|
||||
let res = qs_write
|
||||
.purge_recycled(&mut audit)
|
||||
.map(|_| qs_write.commit(&mut audit).map(|_| OpResult {}));
|
||||
audit_log!(audit, "Purge recycled result: {:?}", res);
|
||||
res.expect("Invalid Server State");
|
||||
});
|
||||
// At the end of the event we send it for logging.
|
||||
self.log.do_send(audit);
|
||||
res
|
||||
}
|
||||
}
|
||||
|
||||
// Auth requests? How do we structure these ...
|
||||
|
||||
#[cfg(test)]
|
||||
|
|
Loading…
Reference in a new issue