Monorepo for Tangled
0

Configure Feed

Select the types of activity you want to include in your feed.

appview/db: pending records w/ TTL eviction

Lewis: May this revision serve well! <lewis@tangled.org>

authored by

Lewis and committed by
Tangled
(Jul 7, 2026, 2:27 PM +0300) 4f8c1e23 151ab96e

+26 -12
+22 -8
appview/db/entity_state.go
··· 124 124 return err 125 125 } 126 126 127 - func DistinctPendingStateSubjects(e Execer) ([]syntax.ATURI, error) { 128 - rows, err := e.Query(`select distinct subject from pending_state_records order by subject asc`) 127 + func distinctPendingSubjects(e Execer, nsid string) ([]syntax.ATURI, error) { 128 + query := `select distinct subject from pending_state_records` 129 + var args []any 130 + if nsid != "" { 131 + query += ` where nsid = ?` 132 + args = append(args, nsid) 133 + } 134 + query += ` order by subject asc` 135 + 136 + rows, err := e.Query(query, args...) 129 137 if err != nil { 130 138 return nil, err 131 139 } ··· 142 150 return subjects, rows.Err() 143 151 } 144 152 153 + func DistinctPendingStateSubjects(e Execer) ([]syntax.ATURI, error) { 154 + return distinctPendingSubjects(e, "") 155 + } 156 + 157 + func PendingStateSubjectsForNsid(e Execer, nsid string) ([]syntax.ATURI, error) { 158 + return distinctPendingSubjects(e, nsid) 159 + } 160 + 145 161 func EvictStalePendingStateRecords(e Execer, before string) (int64, error) { 146 - res, err := e.Exec(` 147 - delete from pending_state_records 148 - where created < ? 149 - and not exists (select 1 from issues where at_uri = pending_state_records.subject) 150 - and not exists (select 1 from pulls where at_uri = pending_state_records.subject) 151 - `, before) 162 + res, err := e.Exec( 163 + `delete from pending_state_records where created < ?`, 164 + before, 165 + ) 152 166 if err != nil { 153 167 return 0, err 154 168 }
+4 -4
appview/db/entity_state_test.go
··· 415 415 if err != nil { 416 416 t.Fatalf("EvictStalePendingStateRecords: %v", err) 417 417 } 418 - if evicted != 1 { 419 - t.Fatalf("only the stale orphan must be evicted, got %d want 1", evicted) 418 + if evicted != 2 { 419 + t.Fatalf("both stale rows must be evicted regardless of subject presence, got %d want 2", evicted) 420 420 } 421 421 422 422 var remaining int 423 423 if err := d.QueryRow(`select count(*) from pending_state_records`).Scan(&remaining); err != nil { 424 424 t.Fatalf("count: %v", err) 425 425 } 426 - if remaining != 2 { 427 - t.Fatalf("the fresh orphan and the stale row with a live subject must survive, got %d want 2", remaining) 426 + if remaining != 1 { 427 + t.Fatalf("only the fresh row must survive the TTL sweep, got %d want 1", remaining) 428 428 } 429 429 }