nsmcp::AccessRecordStoreSQLite method pruneAge (protected)

 <instance of nsmcp::AccessRecordStoreSQLite[i]> 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
[ hide source ] | [ make this the default ]
Show another procedure: