# HG changeset patch # User Ted Unangst # Date 1717450362 14400 # Mon Jun 03 17:32:42 2024 -0400 # Node ID 2963f5fa2a131aac88d15e0fb3db80bc42c6099b # Parent d38120c759a29288f0892f8485ceca94fd46852a clean up all the xonkers from time to time diff --git a/activity.go b/activity.go --- a/activity.go +++ b/activity.go @@ -436,7 +436,7 @@ return b, true } return nil, false -}}) +}, Invalidator: &xonkInvalidator}) var gettergate = gate.NewLimiter(1) @@ -1900,16 +1900,12 @@ rel, _ := l.GetString("rel") t, _ := l.GetString("type") if rel == "self" && friendorfoe(t) { - when := time.Now().UTC().Format(dbtimeformat) - _, err := stmtSaveXonker.Exec(name, href, "fishname", when) - if err != nil { - elog.Printf("error saving fishname: %s", err) - } + savexonker(name, href, "fishname") return href, true } } return href, true -}, Duration: 1 * time.Minute}) +}, Invalidator: &xonkInvalidator}) func gofish(name string) string { if name[0] == '@' { @@ -1997,11 +1993,7 @@ ingesthandle(origin, obj) chatkey, ok := obj.GetString(chatKeyProp) if ok { - when := time.Now().UTC().Format(dbtimeformat) - _, err := stmtSaveXonker.Exec(ident, chatkey, chatKeyProp, when) - if err != nil { - elog.Printf("error saving chatkey: %s", err) - } + savexonker(ident, chatkey, chatKeyProp) } } @@ -2067,12 +2059,8 @@ outbox, _ := obj.GetString("outbox") sbox, _ := obj.GetString("endpoints", "sharedInbox") if inbox != "" { - when := time.Now().UTC().Format(dbtimeformat) m := strings.Join([]string{inbox, outbox, sbox}, " ") - _, err = stmtSaveXonker.Exec(ident, m, "boxes", when) - if err != nil { - elog.Printf("error saving boxes: %s", err) - } + savexonker(ident, m, "boxes") } } @@ -2092,11 +2080,7 @@ } handle, _ = obj.GetString("preferredUsername") if handle != "" { - when := time.Now().UTC().Format(dbtimeformat) - _, err = stmtSaveXonker.Exec(xid, handle, "handle", when) - if err != nil { - elog.Printf("error saving handle: %s", err) - } + savexonker(xid, handle, "handle") } } diff --git a/database.go b/database.go --- a/database.go +++ b/database.go @@ -987,8 +987,12 @@ return res } -func savexonker(what, value, flav, when string) { - stmtSaveXonker.Exec(what, value, flav, when) +func savexonker(what, value, flav string) { + when := time.Now().UTC().Format(dbtimeformat) + _, err := stmtSaveXonker.Exec(what, value, flav, when) + if err != nil { + elog.Printf("error saving xonker: %s", err) + } } func savehonker(user *WhatAbout, url, name, flavor, combos, mj string) (int64, string, error) { @@ -1190,7 +1194,7 @@ stmtGetXonker = preparetodie(db, "select info from xonkers where name = ? and flavor = ?") stmtSaveXonker = preparetodie(db, "insert into xonkers (name, info, flavor, dt) values (?, ?, ?, ?)") stmtDeleteXonker = preparetodie(db, "delete from xonkers where name = ? and flavor = ? and dt < ?") - stmtDeleteOldXonkers = preparetodie(db, "delete from xonkers where flavor = ? and dt < ?") + stmtDeleteOldXonkers = preparetodie(db, "delete from xonkers where dt < ?") stmtRecentHonkers = preparetodie(db, "select distinct(honker) from honks where userid = ? and honker not in (select xid from honkers where userid = ? and flavor = 'sub') order by honkid desc limit 100") stmtUpdateFlags = preparetodie(db, "update honks set flags = flags | ? where honkid = ?") stmtClearFlags = preparetodie(db, "update honks set flags = flags & ~ ? where honkid = ?") diff --git a/encrypt.go b/encrypt.go --- a/encrypt.go +++ b/encrypt.go @@ -22,7 +22,6 @@ "fmt" "io" "strings" - "time" "golang.org/x/crypto/nacl/box" "humungus.tedunangst.com/r/webs/gencache" @@ -104,16 +103,14 @@ j, err := GetJunk(readyLuserOne, xonker) if err != nil { ilog.Printf("error getting %s: %s", xonker, err) - when := time.Now().UTC().Format(dbtimeformat) - stmtSaveXonker.Exec(xonker, "failed", chatKeyProp, when) + savexonker(xonker, "failed", chatKeyProp) return boxPubKey{}, true } allinjest(originate(xonker), j) data = getxonker(xonker, chatKeyProp) if data == "" { ilog.Printf("key not found after ingesting") - when := time.Now().UTC().Format(dbtimeformat) - stmtSaveXonker.Exec(xonker, "failed", chatKeyProp, when) + savexonker(xonker, "failed", chatKeyProp) return boxPubKey{}, true } } diff --git a/fun.go b/fun.go --- a/fun.go +++ b/fun.go @@ -633,6 +633,8 @@ return "" } +var xonkInvalidator gencache.Invalidator[string] + var allhandles = gencache.New(gencache.Options[string, string]{Fill: func(xid string) (string, bool) { handle := getxonker(xid, "handle") if handle == "" { @@ -646,14 +648,13 @@ } else { handle = xid } - when := time.Now().UTC().Format(dbtimeformat) - savexonker(xid, handle, "handle", when) + savexonker(xid, handle, "handle") } else { handle = info.Name } } return handle, true -}}) +}, Invalidator: &xonkInvalidator}) // handle, handle@host func handles(xid string) (string, string) { @@ -730,16 +731,14 @@ j, err := GetJunk(readyLuserOne, keyname) if err != nil { ilog.Printf("error getting %s pubkey: %s", keyname, err) - when := time.Now().UTC().Format(dbtimeformat) - stmtSaveXonker.Exec(keyname, "failed", "pubkey", when) + savexonker(keyname, "failed", "pubkey") return httpsig.PublicKey{}, true } allinjest(originate(keyname), j) data = getxonker(keyname, "pubkey") if data == "" { ilog.Printf("key not found after ingesting") - when := time.Now().UTC().Format(dbtimeformat) - stmtSaveXonker.Exec(keyname, "failed", "pubkey", when) + savexonker(keyname, "failed", "pubkey") return httpsig.PublicKey{}, true } } @@ -753,7 +752,7 @@ return key, true } return key, true -}, Limit: 512}) +}, Limit: 4096, Invalidator: &xonkInvalidator}) func zaggy(keyname string) (httpsig.PublicKey, error) { key, _ := zaggies.Get(keyname) diff --git a/web.go b/web.go --- a/web.go +++ b/web.go @@ -2962,13 +2962,13 @@ func bgmonitor() { for { - when := time.Now().Add(-3 * 24 * time.Hour).UTC().Format(dbtimeformat) - _, err := stmtDeleteOldXonkers.Exec("pubkey", when) + when := time.Now().Add(-2 * 24 * time.Hour).UTC().Format(dbtimeformat) + _, err := stmtDeleteOldXonkers.Exec(when) if err != nil { elog.Printf("error deleting old xonkers: %s", err) } - zaggies.Flush() - time.Sleep(50 * time.Minute) + xonkInvalidator.Flush() + time.Sleep(150 * time.Minute) } }