nsmcp::AccessRecordStoreSQLite method pruneAge (protected)
<instance of nsmcp::AccessRecordStoreSQLite> pruneAge
Defined in /usr/local/ns/tcl/nsmcp/log-traffic-record-store.tcl
- Testcases:
- No testcase defined.
Source code: set now [clock seconds]; set cutoff [expr {wide(floor(($now-[dict get ${:settings} retention])/60.0))*60}] set cutoff [expr {max($cutoff,[:stateGet retentionFloor 0])}] set peerCutoff [expr {$now-[dict get ${:settings} peerRetention]}] ${:db} transaction { :statePut retentionFloor $cutoff set deleted [lindex [${:db} execute {SELECT count(*) AS n,coalesce(min(t),0) AS first,coalesce(max(t),0) AS last FROM nsmcp_records.rows WHERE rowid IN(SELECT rowid FROM nsmcp_records.rows WHERE kind=0 AND t<$cutoff LIMIT 10000)}] 0] ${:db} execute {DELETE FROM nsmcp_records.rows WHERE rowid IN(SELECT rowid FROM nsmcp_records.rows WHERE kind=0 AND t<$cutoff LIMIT 10000); DELETE FROM nsmcp_records.rows WHERE rowid IN(SELECT rowid FROM nsmcp_records.rows WHERE kind<>0 AND completed<$cutoff LIMIT 10000); DELETE FROM nsmcp_records.minutes WHERE slot<$cutoff; DELETE FROM nsmcp_records.peer_addresses WHERE rowid IN(SELECT rowid FROM nsmcp_records.peer_addresses WHERE seen<$peerCutoff LIMIT 10000)} if {[dict get $deleted n]>0} { set first [dict get $deleted first]; set last [dict get $deleted last]; set count [dict get $deleted n] ${:db} execute {INSERT INTO nsmcp_records.evictions(dropped_at,first_time,last_time,rows,reason) VALUES($now,$first,$last,$count,'age'); DELETE FROM nsmcp_records.evictions WHERE id NOT IN(SELECT id FROM nsmcp_records.evictions ORDER BY id DESC LIMIT 64)} } :statePut droppedThrough [expr {$cutoff-1}] :statePut lastEvictionAt $now } # Keep committed ranges as ingestion watermarks after expiry, preventing # the continuous backfill from resurrecting deliberately expired rows.XQL Not present: Generic, PostgreSQL, Oracle
![[i]](/resources/acs-subsite/ZoomIn16.gif)