summaryrefslogtreecommitdiff
path: root/internal/cache/db.go
diff options
context:
space:
mode:
authorLibravatar nicole mikołajczyk <git@mkljczk.pl>2025-08-12 14:05:15 +0200
committerLibravatar kim <gruf@noreply.codeberg.org>2025-08-12 14:05:15 +0200
commit660cf2c94ce6a87ac33d704ab1f68b2d4a258d92 (patch)
tree03eeab55b2f3bc2f3fc7667d245ed3b561a4f1a4 /internal/cache/db.go
parent[docs] Revamp trusted proxies warning a bit (#4365) (diff)
downloadgotosocial-660cf2c94ce6a87ac33d704ab1f68b2d4a258d92.tar.xz
[feature] scheduled statuses (#4274)
An implementation of [`scheduled_statuses`](https://docs.joinmastodon.org/methods/scheduled_statuses/). Will fix #1006. this is heavily WIP and I need to reorganize some of the code, working on this made me somehow familiar with the codebase and led to my other recent contributions i told some fops on fedi i'd work on this so i have no choice but to complete it 🤷‍♀️ btw iirc my avatar presents me working on this branch Signed-off-by: nicole mikołajczyk <git@mkljczk.pl> Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4274 Co-authored-by: nicole mikołajczyk <git@mkljczk.pl> Co-committed-by: nicole mikołajczyk <git@mkljczk.pl>
Diffstat (limited to 'internal/cache/db.go')
-rw-r--r--internal/cache/db.go37
1 files changed, 37 insertions, 0 deletions
diff --git a/internal/cache/db.go b/internal/cache/db.go
index d31017ccd..385c5bcbb 100644
--- a/internal/cache/db.go
+++ b/internal/cache/db.go
@@ -219,6 +219,9 @@ type DBCaches struct {
// Report provides access to the gtsmodel Report database cache.
Report StructCache[*gtsmodel.Report]
+ // ScheduledStatus provides access to the gtsmodel ScheduledStatus database cache.
+ ScheduledStatus StructCache[*gtsmodel.ScheduledStatus]
+
// SinBinStatus provides access to the gtsmodel SinBinStatus database cache.
SinBinStatus StructCache[*gtsmodel.SinBinStatus]
@@ -1287,6 +1290,40 @@ func (c *Caches) initReport() {
})
}
+func (c *Caches) initScheduledStatus() {
+ // Calculate maximum cache size.
+ cap := calculateResultCacheMax(
+ sizeofScheduledStatus(), // model in-mem size.
+ config.GetCacheScheduledStatusMemRatio(),
+ )
+
+ log.Infof(nil, "cache size = %d", cap)
+
+ copyF := func(s1 *gtsmodel.ScheduledStatus) *gtsmodel.ScheduledStatus {
+ s2 := new(gtsmodel.ScheduledStatus)
+ *s2 = *s1
+
+ // Don't include ptr fields that
+ // will be populated separately.
+ s2.Account = nil
+ s2.Application = nil
+ s2.MediaAttachments = nil
+
+ return s2
+ }
+
+ c.DB.ScheduledStatus.Init(structr.CacheConfig[*gtsmodel.ScheduledStatus]{
+ Indices: []structr.IndexConfig{
+ {Fields: "ID"},
+ {Fields: "AccountID", Multiple: true},
+ },
+ MaxSize: cap,
+ IgnoreErr: ignoreErrors,
+ Copy: copyF,
+ Invalidate: c.OnInvalidateScheduledStatus,
+ })
+}
+
func (c *Caches) initSinBinStatus() {
// Calculate maximum cache size.
cap := calculateResultCacheMax(