mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2024-11-10 06:54:16 +00:00
[chore] renames the GTS
caches to DB
caches (#3127)
* renames the `GTS` caches to `DB` caches, as it better references what they are * change remaining Caches.GTS uses to Caches.DB
This commit is contained in:
parent
325b4a2b4a
commit
63fc9b6c3e
39 changed files with 376 additions and 378 deletions
118
internal/cache/cache.go
vendored
118
internal/cache/cache.go
vendored
|
@ -20,15 +20,17 @@ package cache
|
||||||
import (
|
import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"codeberg.org/gruf/go-cache/v3/ttl"
|
||||||
"github.com/superseriousbusiness/gotosocial/internal/cache/headerfilter"
|
"github.com/superseriousbusiness/gotosocial/internal/cache/headerfilter"
|
||||||
|
"github.com/superseriousbusiness/gotosocial/internal/config"
|
||||||
"github.com/superseriousbusiness/gotosocial/internal/log"
|
"github.com/superseriousbusiness/gotosocial/internal/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Caches struct {
|
type Caches struct {
|
||||||
|
|
||||||
// GTS provides access to the collection of
|
// DB provides access to the collection of
|
||||||
// gtsmodel object caches. (used by the database).
|
// gtsmodel object caches. (used by the database).
|
||||||
GTS GTSCaches
|
DB DBCaches
|
||||||
|
|
||||||
// AllowHeaderFilters provides access to
|
// AllowHeaderFilters provides access to
|
||||||
// the allow []headerfilter.Filter cache.
|
// the allow []headerfilter.Filter cache.
|
||||||
|
@ -42,6 +44,9 @@ type Caches struct {
|
||||||
// cache. (used by the visibility filter).
|
// cache. (used by the visibility filter).
|
||||||
Visibility VisibilityCache
|
Visibility VisibilityCache
|
||||||
|
|
||||||
|
// Webfinger provides access to the webfinger URL cache.
|
||||||
|
Webfinger *ttl.Cache[string, string] // TTL=24hr, sweep=5min
|
||||||
|
|
||||||
// prevent pass-by-value.
|
// prevent pass-by-value.
|
||||||
_ nocopy
|
_ nocopy
|
||||||
}
|
}
|
||||||
|
@ -109,7 +114,7 @@ func (c *Caches) Start() {
|
||||||
log.Infof(nil, "start: %p", c)
|
log.Infof(nil, "start: %p", c)
|
||||||
|
|
||||||
tryUntil("starting webfinger cache", 5, func() bool {
|
tryUntil("starting webfinger cache", 5, func() bool {
|
||||||
return c.GTS.Webfinger.Start(5 * time.Minute)
|
return c.Webfinger.Start(5 * time.Minute)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,7 +123,7 @@ func (c *Caches) Start() {
|
||||||
func (c *Caches) Stop() {
|
func (c *Caches) Stop() {
|
||||||
log.Infof(nil, "stop: %p", c)
|
log.Infof(nil, "stop: %p", c)
|
||||||
|
|
||||||
tryUntil("stopping webfinger cache", 5, c.GTS.Webfinger.Stop)
|
tryUntil("stopping webfinger cache", 5, c.Webfinger.Stop)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sweep will sweep all the available caches to ensure none
|
// Sweep will sweep all the available caches to ensure none
|
||||||
|
@ -128,49 +133,66 @@ func (c *Caches) Stop() {
|
||||||
// require an eviction on every single write, which adds
|
// require an eviction on every single write, which adds
|
||||||
// significant overhead to all cache writes.
|
// significant overhead to all cache writes.
|
||||||
func (c *Caches) Sweep(threshold float64) {
|
func (c *Caches) Sweep(threshold float64) {
|
||||||
c.GTS.Account.Trim(threshold)
|
c.DB.Account.Trim(threshold)
|
||||||
c.GTS.AccountNote.Trim(threshold)
|
c.DB.AccountNote.Trim(threshold)
|
||||||
c.GTS.AccountSettings.Trim(threshold)
|
c.DB.AccountSettings.Trim(threshold)
|
||||||
c.GTS.AccountStats.Trim(threshold)
|
c.DB.AccountStats.Trim(threshold)
|
||||||
c.GTS.Application.Trim(threshold)
|
c.DB.Application.Trim(threshold)
|
||||||
c.GTS.Block.Trim(threshold)
|
c.DB.Block.Trim(threshold)
|
||||||
c.GTS.BlockIDs.Trim(threshold)
|
c.DB.BlockIDs.Trim(threshold)
|
||||||
c.GTS.BoostOfIDs.Trim(threshold)
|
c.DB.BoostOfIDs.Trim(threshold)
|
||||||
c.GTS.Client.Trim(threshold)
|
c.DB.Client.Trim(threshold)
|
||||||
c.GTS.Emoji.Trim(threshold)
|
c.DB.Emoji.Trim(threshold)
|
||||||
c.GTS.EmojiCategory.Trim(threshold)
|
c.DB.EmojiCategory.Trim(threshold)
|
||||||
c.GTS.Filter.Trim(threshold)
|
c.DB.Filter.Trim(threshold)
|
||||||
c.GTS.FilterKeyword.Trim(threshold)
|
c.DB.FilterKeyword.Trim(threshold)
|
||||||
c.GTS.FilterStatus.Trim(threshold)
|
c.DB.FilterStatus.Trim(threshold)
|
||||||
c.GTS.Follow.Trim(threshold)
|
c.DB.Follow.Trim(threshold)
|
||||||
c.GTS.FollowIDs.Trim(threshold)
|
c.DB.FollowIDs.Trim(threshold)
|
||||||
c.GTS.FollowRequest.Trim(threshold)
|
c.DB.FollowRequest.Trim(threshold)
|
||||||
c.GTS.FollowRequestIDs.Trim(threshold)
|
c.DB.FollowRequestIDs.Trim(threshold)
|
||||||
c.GTS.InReplyToIDs.Trim(threshold)
|
c.DB.InReplyToIDs.Trim(threshold)
|
||||||
c.GTS.Instance.Trim(threshold)
|
c.DB.Instance.Trim(threshold)
|
||||||
c.GTS.InteractionApproval.Trim(threshold)
|
c.DB.InteractionApproval.Trim(threshold)
|
||||||
c.GTS.List.Trim(threshold)
|
c.DB.List.Trim(threshold)
|
||||||
c.GTS.ListEntry.Trim(threshold)
|
c.DB.ListEntry.Trim(threshold)
|
||||||
c.GTS.Marker.Trim(threshold)
|
c.DB.Marker.Trim(threshold)
|
||||||
c.GTS.Media.Trim(threshold)
|
c.DB.Media.Trim(threshold)
|
||||||
c.GTS.Mention.Trim(threshold)
|
c.DB.Mention.Trim(threshold)
|
||||||
c.GTS.Move.Trim(threshold)
|
c.DB.Move.Trim(threshold)
|
||||||
c.GTS.Notification.Trim(threshold)
|
c.DB.Notification.Trim(threshold)
|
||||||
c.GTS.Poll.Trim(threshold)
|
c.DB.Poll.Trim(threshold)
|
||||||
c.GTS.PollVote.Trim(threshold)
|
c.DB.PollVote.Trim(threshold)
|
||||||
c.GTS.PollVoteIDs.Trim(threshold)
|
c.DB.PollVoteIDs.Trim(threshold)
|
||||||
c.GTS.Report.Trim(threshold)
|
c.DB.Report.Trim(threshold)
|
||||||
c.GTS.Status.Trim(threshold)
|
c.DB.Status.Trim(threshold)
|
||||||
c.GTS.StatusBookmark.Trim(threshold)
|
c.DB.StatusBookmark.Trim(threshold)
|
||||||
c.GTS.StatusBookmarkIDs.Trim(threshold)
|
c.DB.StatusBookmarkIDs.Trim(threshold)
|
||||||
c.GTS.StatusFave.Trim(threshold)
|
c.DB.StatusFave.Trim(threshold)
|
||||||
c.GTS.StatusFaveIDs.Trim(threshold)
|
c.DB.StatusFaveIDs.Trim(threshold)
|
||||||
c.GTS.Tag.Trim(threshold)
|
c.DB.Tag.Trim(threshold)
|
||||||
c.GTS.ThreadMute.Trim(threshold)
|
c.DB.ThreadMute.Trim(threshold)
|
||||||
c.GTS.Token.Trim(threshold)
|
c.DB.Token.Trim(threshold)
|
||||||
c.GTS.Tombstone.Trim(threshold)
|
c.DB.Tombstone.Trim(threshold)
|
||||||
c.GTS.User.Trim(threshold)
|
c.DB.User.Trim(threshold)
|
||||||
c.GTS.UserMute.Trim(threshold)
|
c.DB.UserMute.Trim(threshold)
|
||||||
c.GTS.UserMuteIDs.Trim(threshold)
|
c.DB.UserMuteIDs.Trim(threshold)
|
||||||
c.Visibility.Trim(threshold)
|
c.Visibility.Trim(threshold)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Caches) initWebfinger() {
|
||||||
|
// Calculate maximum cache size.
|
||||||
|
cap := calculateCacheMax(
|
||||||
|
sizeofURIStr, sizeofURIStr,
|
||||||
|
config.GetCacheWebfingerMemRatio(),
|
||||||
|
)
|
||||||
|
|
||||||
|
log.Infof(nil, "cache size = %d", cap)
|
||||||
|
|
||||||
|
c.Webfinger = new(ttl.Cache[string, string])
|
||||||
|
c.Webfinger.Init(
|
||||||
|
0,
|
||||||
|
cap,
|
||||||
|
24*time.Hour,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
122
internal/cache/db.go
vendored
122
internal/cache/db.go
vendored
|
@ -18,9 +18,6 @@
|
||||||
package cache
|
package cache
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"time"
|
|
||||||
|
|
||||||
"codeberg.org/gruf/go-cache/v3/ttl"
|
|
||||||
"codeberg.org/gruf/go-structr"
|
"codeberg.org/gruf/go-structr"
|
||||||
"github.com/superseriousbusiness/gotosocial/internal/cache/domain"
|
"github.com/superseriousbusiness/gotosocial/internal/cache/domain"
|
||||||
"github.com/superseriousbusiness/gotosocial/internal/config"
|
"github.com/superseriousbusiness/gotosocial/internal/config"
|
||||||
|
@ -28,7 +25,7 @@ import (
|
||||||
"github.com/superseriousbusiness/gotosocial/internal/log"
|
"github.com/superseriousbusiness/gotosocial/internal/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
type GTSCaches struct {
|
type DBCaches struct {
|
||||||
// Account provides access to the gtsmodel Account database cache.
|
// Account provides access to the gtsmodel Account database cache.
|
||||||
Account StructCache[*gtsmodel.Account]
|
Account StructCache[*gtsmodel.Account]
|
||||||
|
|
||||||
|
@ -180,10 +177,6 @@ type GTSCaches struct {
|
||||||
|
|
||||||
// UserMuteIDs provides access to the user mute IDs database cache.
|
// UserMuteIDs provides access to the user mute IDs database cache.
|
||||||
UserMuteIDs SliceCache[string]
|
UserMuteIDs SliceCache[string]
|
||||||
|
|
||||||
// Webfinger provides access to the webfinger URL cache.
|
|
||||||
// TODO: move out of GTS caches since unrelated to DB.
|
|
||||||
Webfinger *ttl.Cache[string, string] // TTL=24hr, sweep=5min
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE:
|
// NOTE:
|
||||||
|
@ -222,7 +215,7 @@ func (c *Caches) initAccount() {
|
||||||
return a2
|
return a2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.Account.Init(structr.CacheConfig[*gtsmodel.Account]{
|
c.DB.Account.Init(structr.CacheConfig[*gtsmodel.Account]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "URI"},
|
{Fields: "URI"},
|
||||||
|
@ -263,7 +256,7 @@ func (c *Caches) initAccountNote() {
|
||||||
return n2
|
return n2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.AccountNote.Init(structr.CacheConfig[*gtsmodel.AccountNote]{
|
c.DB.AccountNote.Init(structr.CacheConfig[*gtsmodel.AccountNote]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "AccountID,TargetAccountID"},
|
{Fields: "AccountID,TargetAccountID"},
|
||||||
|
@ -283,7 +276,7 @@ func (c *Caches) initAccountSettings() {
|
||||||
|
|
||||||
log.Infof(nil, "cache size = %d", cap)
|
log.Infof(nil, "cache size = %d", cap)
|
||||||
|
|
||||||
c.GTS.AccountSettings.Init(structr.CacheConfig[*gtsmodel.AccountSettings]{
|
c.DB.AccountSettings.Init(structr.CacheConfig[*gtsmodel.AccountSettings]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "AccountID"},
|
{Fields: "AccountID"},
|
||||||
},
|
},
|
||||||
|
@ -306,7 +299,7 @@ func (c *Caches) initAccountStats() {
|
||||||
|
|
||||||
log.Infof(nil, "cache size = %d", cap)
|
log.Infof(nil, "cache size = %d", cap)
|
||||||
|
|
||||||
c.GTS.AccountStats.Init(structr.CacheConfig[*gtsmodel.AccountStats]{
|
c.DB.AccountStats.Init(structr.CacheConfig[*gtsmodel.AccountStats]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "AccountID"},
|
{Fields: "AccountID"},
|
||||||
},
|
},
|
||||||
|
@ -335,7 +328,7 @@ func (c *Caches) initApplication() {
|
||||||
return a2
|
return a2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.Application.Init(structr.CacheConfig[*gtsmodel.Application]{
|
c.DB.Application.Init(structr.CacheConfig[*gtsmodel.Application]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "ClientID"},
|
{Fields: "ClientID"},
|
||||||
|
@ -369,7 +362,7 @@ func (c *Caches) initBlock() {
|
||||||
return b2
|
return b2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.Block.Init(structr.CacheConfig[*gtsmodel.Block]{
|
c.DB.Block.Init(structr.CacheConfig[*gtsmodel.Block]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "URI"},
|
{Fields: "URI"},
|
||||||
|
@ -392,7 +385,7 @@ func (c *Caches) initBlockIDs() {
|
||||||
|
|
||||||
log.Infof(nil, "cache size = %d", cap)
|
log.Infof(nil, "cache size = %d", cap)
|
||||||
|
|
||||||
c.GTS.BlockIDs.Init(0, cap)
|
c.DB.BlockIDs.Init(0, cap)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) initBoostOfIDs() {
|
func (c *Caches) initBoostOfIDs() {
|
||||||
|
@ -403,7 +396,7 @@ func (c *Caches) initBoostOfIDs() {
|
||||||
|
|
||||||
log.Infof(nil, "cache size = %d", cap)
|
log.Infof(nil, "cache size = %d", cap)
|
||||||
|
|
||||||
c.GTS.BoostOfIDs.Init(0, cap)
|
c.DB.BoostOfIDs.Init(0, cap)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) initClient() {
|
func (c *Caches) initClient() {
|
||||||
|
@ -421,7 +414,7 @@ func (c *Caches) initClient() {
|
||||||
return c2
|
return c2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.Client.Init(structr.CacheConfig[*gtsmodel.Client]{
|
c.DB.Client.Init(structr.CacheConfig[*gtsmodel.Client]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
},
|
},
|
||||||
|
@ -454,7 +447,7 @@ func (c *Caches) initConversation() {
|
||||||
return c2
|
return c2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.Conversation.Init(structr.CacheConfig[*gtsmodel.Conversation]{
|
c.DB.Conversation.Init(structr.CacheConfig[*gtsmodel.Conversation]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "ThreadID,AccountID,OtherAccountsKey"},
|
{Fields: "ThreadID,AccountID,OtherAccountsKey"},
|
||||||
|
@ -475,15 +468,15 @@ func (c *Caches) initConversationLastStatusIDs() {
|
||||||
|
|
||||||
log.Infof(nil, "cache size = %d", cap)
|
log.Infof(nil, "cache size = %d", cap)
|
||||||
|
|
||||||
c.GTS.ConversationLastStatusIDs.Init(0, cap)
|
c.DB.ConversationLastStatusIDs.Init(0, cap)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) initDomainAllow() {
|
func (c *Caches) initDomainAllow() {
|
||||||
c.GTS.DomainAllow = new(domain.Cache)
|
c.DB.DomainAllow = new(domain.Cache)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) initDomainBlock() {
|
func (c *Caches) initDomainBlock() {
|
||||||
c.GTS.DomainBlock = new(domain.Cache)
|
c.DB.DomainBlock = new(domain.Cache)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) initEmoji() {
|
func (c *Caches) initEmoji() {
|
||||||
|
@ -507,7 +500,7 @@ func (c *Caches) initEmoji() {
|
||||||
return e2
|
return e2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.Emoji.Init(structr.CacheConfig[*gtsmodel.Emoji]{
|
c.DB.Emoji.Init(structr.CacheConfig[*gtsmodel.Emoji]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "URI"},
|
{Fields: "URI"},
|
||||||
|
@ -536,7 +529,7 @@ func (c *Caches) initEmojiCategory() {
|
||||||
return c2
|
return c2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.EmojiCategory.Init(structr.CacheConfig[*gtsmodel.EmojiCategory]{
|
c.DB.EmojiCategory.Init(structr.CacheConfig[*gtsmodel.EmojiCategory]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "Name"},
|
{Fields: "Name"},
|
||||||
|
@ -570,7 +563,7 @@ func (c *Caches) initFilter() {
|
||||||
return filter2
|
return filter2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.Filter.Init(structr.CacheConfig[*gtsmodel.Filter]{
|
c.DB.Filter.Init(structr.CacheConfig[*gtsmodel.Filter]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "AccountID", Multiple: true},
|
{Fields: "AccountID", Multiple: true},
|
||||||
|
@ -607,7 +600,7 @@ func (c *Caches) initFilterKeyword() {
|
||||||
return filterKeyword2
|
return filterKeyword2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.FilterKeyword.Init(structr.CacheConfig[*gtsmodel.FilterKeyword]{
|
c.DB.FilterKeyword.Init(structr.CacheConfig[*gtsmodel.FilterKeyword]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "AccountID", Multiple: true},
|
{Fields: "AccountID", Multiple: true},
|
||||||
|
@ -640,7 +633,7 @@ func (c *Caches) initFilterStatus() {
|
||||||
return filterStatus2
|
return filterStatus2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.FilterStatus.Init(structr.CacheConfig[*gtsmodel.FilterStatus]{
|
c.DB.FilterStatus.Init(structr.CacheConfig[*gtsmodel.FilterStatus]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "AccountID", Multiple: true},
|
{Fields: "AccountID", Multiple: true},
|
||||||
|
@ -674,7 +667,7 @@ func (c *Caches) initFollow() {
|
||||||
return f2
|
return f2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.Follow.Init(structr.CacheConfig[*gtsmodel.Follow]{
|
c.DB.Follow.Init(structr.CacheConfig[*gtsmodel.Follow]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "URI"},
|
{Fields: "URI"},
|
||||||
|
@ -697,7 +690,7 @@ func (c *Caches) initFollowIDs() {
|
||||||
|
|
||||||
log.Infof(nil, "cache size = %d", cap)
|
log.Infof(nil, "cache size = %d", cap)
|
||||||
|
|
||||||
c.GTS.FollowIDs.Init(0, cap)
|
c.DB.FollowIDs.Init(0, cap)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) initFollowRequest() {
|
func (c *Caches) initFollowRequest() {
|
||||||
|
@ -722,7 +715,7 @@ func (c *Caches) initFollowRequest() {
|
||||||
return f2
|
return f2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.FollowRequest.Init(structr.CacheConfig[*gtsmodel.FollowRequest]{
|
c.DB.FollowRequest.Init(structr.CacheConfig[*gtsmodel.FollowRequest]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "URI"},
|
{Fields: "URI"},
|
||||||
|
@ -745,7 +738,7 @@ func (c *Caches) initFollowRequestIDs() {
|
||||||
|
|
||||||
log.Infof(nil, "cache size = %d", cap)
|
log.Infof(nil, "cache size = %d", cap)
|
||||||
|
|
||||||
c.GTS.FollowRequestIDs.Init(0, cap)
|
c.DB.FollowRequestIDs.Init(0, cap)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) initInReplyToIDs() {
|
func (c *Caches) initInReplyToIDs() {
|
||||||
|
@ -756,7 +749,7 @@ func (c *Caches) initInReplyToIDs() {
|
||||||
|
|
||||||
log.Infof(nil, "cache size = %d", cap)
|
log.Infof(nil, "cache size = %d", cap)
|
||||||
|
|
||||||
c.GTS.InReplyToIDs.Init(0, cap)
|
c.DB.InReplyToIDs.Init(0, cap)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) initInstance() {
|
func (c *Caches) initInstance() {
|
||||||
|
@ -781,7 +774,7 @@ func (c *Caches) initInstance() {
|
||||||
return i2
|
return i2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.Instance.Init(structr.CacheConfig[*gtsmodel.Instance]{
|
c.DB.Instance.Init(structr.CacheConfig[*gtsmodel.Instance]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "Domain"},
|
{Fields: "Domain"},
|
||||||
|
@ -814,7 +807,7 @@ func (c *Caches) initInteractionApproval() {
|
||||||
return i2
|
return i2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.InteractionApproval.Init(structr.CacheConfig[*gtsmodel.InteractionApproval]{
|
c.DB.InteractionApproval.Init(structr.CacheConfig[*gtsmodel.InteractionApproval]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "URI"},
|
{Fields: "URI"},
|
||||||
|
@ -847,7 +840,7 @@ func (c *Caches) initList() {
|
||||||
return l2
|
return l2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.List.Init(structr.CacheConfig[*gtsmodel.List]{
|
c.DB.List.Init(structr.CacheConfig[*gtsmodel.List]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
},
|
},
|
||||||
|
@ -879,7 +872,7 @@ func (c *Caches) initListEntry() {
|
||||||
return l2
|
return l2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.ListEntry.Init(structr.CacheConfig[*gtsmodel.ListEntry]{
|
c.DB.ListEntry.Init(structr.CacheConfig[*gtsmodel.ListEntry]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "ListID", Multiple: true},
|
{Fields: "ListID", Multiple: true},
|
||||||
|
@ -906,7 +899,7 @@ func (c *Caches) initMarker() {
|
||||||
return m2
|
return m2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.Marker.Init(structr.CacheConfig[*gtsmodel.Marker]{
|
c.DB.Marker.Init(structr.CacheConfig[*gtsmodel.Marker]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "AccountID,Name"},
|
{Fields: "AccountID,Name"},
|
||||||
},
|
},
|
||||||
|
@ -931,7 +924,7 @@ func (c *Caches) initMedia() {
|
||||||
return m2
|
return m2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.Media.Init(structr.CacheConfig[*gtsmodel.MediaAttachment]{
|
c.DB.Media.Init(structr.CacheConfig[*gtsmodel.MediaAttachment]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
},
|
},
|
||||||
|
@ -965,7 +958,7 @@ func (c *Caches) initMention() {
|
||||||
return m2
|
return m2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.Mention.Init(structr.CacheConfig[*gtsmodel.Mention]{
|
c.DB.Mention.Init(structr.CacheConfig[*gtsmodel.Mention]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
},
|
},
|
||||||
|
@ -984,7 +977,7 @@ func (c *Caches) initMove() {
|
||||||
|
|
||||||
log.Infof(nil, "cache size = %d", cap)
|
log.Infof(nil, "cache size = %d", cap)
|
||||||
|
|
||||||
c.GTS.Move.Init(structr.CacheConfig[*gtsmodel.Move]{
|
c.DB.Move.Init(structr.CacheConfig[*gtsmodel.Move]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "URI"},
|
{Fields: "URI"},
|
||||||
|
@ -1025,7 +1018,7 @@ func (c *Caches) initNotification() {
|
||||||
return n2
|
return n2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.Notification.Init(structr.CacheConfig[*gtsmodel.Notification]{
|
c.DB.Notification.Init(structr.CacheConfig[*gtsmodel.Notification]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "NotificationType,TargetAccountID,OriginAccountID,StatusID", AllowZero: true},
|
{Fields: "NotificationType,TargetAccountID,OriginAccountID,StatusID", AllowZero: true},
|
||||||
|
@ -1062,7 +1055,7 @@ func (c *Caches) initPoll() {
|
||||||
return p2
|
return p2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.Poll.Init(structr.CacheConfig[*gtsmodel.Poll]{
|
c.DB.Poll.Init(structr.CacheConfig[*gtsmodel.Poll]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "StatusID"},
|
{Fields: "StatusID"},
|
||||||
|
@ -1096,7 +1089,7 @@ func (c *Caches) initPollVote() {
|
||||||
return v2
|
return v2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.PollVote.Init(structr.CacheConfig[*gtsmodel.PollVote]{
|
c.DB.PollVote.Init(structr.CacheConfig[*gtsmodel.PollVote]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "PollID", Multiple: true},
|
{Fields: "PollID", Multiple: true},
|
||||||
|
@ -1117,7 +1110,7 @@ func (c *Caches) initPollVoteIDs() {
|
||||||
|
|
||||||
log.Infof(nil, "cache size = %d", cap)
|
log.Infof(nil, "cache size = %d", cap)
|
||||||
|
|
||||||
c.GTS.PollVoteIDs.Init(0, cap)
|
c.DB.PollVoteIDs.Init(0, cap)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) initReport() {
|
func (c *Caches) initReport() {
|
||||||
|
@ -1145,7 +1138,7 @@ func (c *Caches) initReport() {
|
||||||
return r2
|
return r2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.Report.Init(structr.CacheConfig[*gtsmodel.Report]{
|
c.DB.Report.Init(structr.CacheConfig[*gtsmodel.Report]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
},
|
},
|
||||||
|
@ -1186,7 +1179,7 @@ func (c *Caches) initStatus() {
|
||||||
return s2
|
return s2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.Status.Init(structr.CacheConfig[*gtsmodel.Status]{
|
c.DB.Status.Init(structr.CacheConfig[*gtsmodel.Status]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "URI"},
|
{Fields: "URI"},
|
||||||
|
@ -1224,7 +1217,7 @@ func (c *Caches) initStatusBookmark() {
|
||||||
return s2
|
return s2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.StatusBookmark.Init(structr.CacheConfig[*gtsmodel.StatusBookmark]{
|
c.DB.StatusBookmark.Init(structr.CacheConfig[*gtsmodel.StatusBookmark]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "AccountID,StatusID"},
|
{Fields: "AccountID,StatusID"},
|
||||||
|
@ -1247,7 +1240,7 @@ func (c *Caches) initStatusBookmarkIDs() {
|
||||||
|
|
||||||
log.Infof(nil, "cache size = %d", cap)
|
log.Infof(nil, "cache size = %d", cap)
|
||||||
|
|
||||||
c.GTS.StatusBookmarkIDs.Init(0, cap)
|
c.DB.StatusBookmarkIDs.Init(0, cap)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) initStatusFave() {
|
func (c *Caches) initStatusFave() {
|
||||||
|
@ -1273,7 +1266,7 @@ func (c *Caches) initStatusFave() {
|
||||||
return f2
|
return f2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.StatusFave.Init(structr.CacheConfig[*gtsmodel.StatusFave]{
|
c.DB.StatusFave.Init(structr.CacheConfig[*gtsmodel.StatusFave]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "URI"},
|
{Fields: "URI"},
|
||||||
|
@ -1295,7 +1288,7 @@ func (c *Caches) initStatusFaveIDs() {
|
||||||
|
|
||||||
log.Infof(nil, "cache size = %d", cap)
|
log.Infof(nil, "cache size = %d", cap)
|
||||||
|
|
||||||
c.GTS.StatusFaveIDs.Init(0, cap)
|
c.DB.StatusFaveIDs.Init(0, cap)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) initTag() {
|
func (c *Caches) initTag() {
|
||||||
|
@ -1313,7 +1306,7 @@ func (c *Caches) initTag() {
|
||||||
return m2
|
return m2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.Tag.Init(structr.CacheConfig[*gtsmodel.Tag]{
|
c.DB.Tag.Init(structr.CacheConfig[*gtsmodel.Tag]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "Name"},
|
{Fields: "Name"},
|
||||||
|
@ -1338,7 +1331,7 @@ func (c *Caches) initThreadMute() {
|
||||||
return t2
|
return t2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.ThreadMute.Init(structr.CacheConfig[*gtsmodel.ThreadMute]{
|
c.DB.ThreadMute.Init(structr.CacheConfig[*gtsmodel.ThreadMute]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "ThreadID", Multiple: true},
|
{Fields: "ThreadID", Multiple: true},
|
||||||
|
@ -1366,7 +1359,7 @@ func (c *Caches) initToken() {
|
||||||
return t2
|
return t2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.Token.Init(structr.CacheConfig[*gtsmodel.Token]{
|
c.DB.Token.Init(structr.CacheConfig[*gtsmodel.Token]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "Code"},
|
{Fields: "Code"},
|
||||||
|
@ -1395,7 +1388,7 @@ func (c *Caches) initTombstone() {
|
||||||
return t2
|
return t2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.Tombstone.Init(structr.CacheConfig[*gtsmodel.Tombstone]{
|
c.DB.Tombstone.Init(structr.CacheConfig[*gtsmodel.Tombstone]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "URI"},
|
{Fields: "URI"},
|
||||||
|
@ -1427,7 +1420,7 @@ func (c *Caches) initUser() {
|
||||||
return u2
|
return u2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.User.Init(structr.CacheConfig[*gtsmodel.User]{
|
c.DB.User.Init(structr.CacheConfig[*gtsmodel.User]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "AccountID"},
|
{Fields: "AccountID"},
|
||||||
|
@ -1463,7 +1456,7 @@ func (c *Caches) initUserMute() {
|
||||||
return u2
|
return u2
|
||||||
}
|
}
|
||||||
|
|
||||||
c.GTS.UserMute.Init(structr.CacheConfig[*gtsmodel.UserMute]{
|
c.DB.UserMute.Init(structr.CacheConfig[*gtsmodel.UserMute]{
|
||||||
Indices: []structr.IndexConfig{
|
Indices: []structr.IndexConfig{
|
||||||
{Fields: "ID"},
|
{Fields: "ID"},
|
||||||
{Fields: "AccountID,TargetAccountID"},
|
{Fields: "AccountID,TargetAccountID"},
|
||||||
|
@ -1484,22 +1477,5 @@ func (c *Caches) initUserMuteIDs() {
|
||||||
|
|
||||||
log.Infof(nil, "cache size = %d", cap)
|
log.Infof(nil, "cache size = %d", cap)
|
||||||
|
|
||||||
c.GTS.UserMuteIDs.Init(0, cap)
|
c.DB.UserMuteIDs.Init(0, cap)
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Caches) initWebfinger() {
|
|
||||||
// Calculate maximum cache size.
|
|
||||||
cap := calculateCacheMax(
|
|
||||||
sizeofURIStr, sizeofURIStr,
|
|
||||||
config.GetCacheWebfingerMemRatio(),
|
|
||||||
)
|
|
||||||
|
|
||||||
log.Infof(nil, "cache size = %d", cap)
|
|
||||||
|
|
||||||
c.GTS.Webfinger = new(ttl.Cache[string, string])
|
|
||||||
c.GTS.Webfinger.Init(
|
|
||||||
0,
|
|
||||||
cap,
|
|
||||||
24*time.Hour,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
64
internal/cache/invalidate.go
vendored
64
internal/cache/invalidate.go
vendored
|
@ -28,7 +28,7 @@ import (
|
||||||
|
|
||||||
func (c *Caches) OnInvalidateAccount(account *gtsmodel.Account) {
|
func (c *Caches) OnInvalidateAccount(account *gtsmodel.Account) {
|
||||||
// Invalidate stats for this account.
|
// Invalidate stats for this account.
|
||||||
c.GTS.AccountStats.Invalidate("AccountID", account.ID)
|
c.DB.AccountStats.Invalidate("AccountID", account.ID)
|
||||||
|
|
||||||
// Invalidate account ID cached visibility.
|
// Invalidate account ID cached visibility.
|
||||||
c.Visibility.Invalidate("ItemID", account.ID)
|
c.Visibility.Invalidate("ItemID", account.ID)
|
||||||
|
@ -37,7 +37,7 @@ func (c *Caches) OnInvalidateAccount(account *gtsmodel.Account) {
|
||||||
// Invalidate this account's
|
// Invalidate this account's
|
||||||
// following / follower lists.
|
// following / follower lists.
|
||||||
// (see FollowIDs() comment for details).
|
// (see FollowIDs() comment for details).
|
||||||
c.GTS.FollowIDs.Invalidate(
|
c.DB.FollowIDs.Invalidate(
|
||||||
">"+account.ID,
|
">"+account.ID,
|
||||||
"l>"+account.ID,
|
"l>"+account.ID,
|
||||||
"<"+account.ID,
|
"<"+account.ID,
|
||||||
|
@ -47,22 +47,22 @@ func (c *Caches) OnInvalidateAccount(account *gtsmodel.Account) {
|
||||||
// Invalidate this account's
|
// Invalidate this account's
|
||||||
// follow requesting / request lists.
|
// follow requesting / request lists.
|
||||||
// (see FollowRequestIDs() comment for details).
|
// (see FollowRequestIDs() comment for details).
|
||||||
c.GTS.FollowRequestIDs.Invalidate(
|
c.DB.FollowRequestIDs.Invalidate(
|
||||||
">"+account.ID,
|
">"+account.ID,
|
||||||
"<"+account.ID,
|
"<"+account.ID,
|
||||||
)
|
)
|
||||||
|
|
||||||
// Invalidate this account's block lists.
|
// Invalidate this account's block lists.
|
||||||
c.GTS.BlockIDs.Invalidate(account.ID)
|
c.DB.BlockIDs.Invalidate(account.ID)
|
||||||
|
|
||||||
// Invalidate this account's Move(s).
|
// Invalidate this account's Move(s).
|
||||||
c.GTS.Move.Invalidate("OriginURI", account.URI)
|
c.DB.Move.Invalidate("OriginURI", account.URI)
|
||||||
c.GTS.Move.Invalidate("TargetURI", account.URI)
|
c.DB.Move.Invalidate("TargetURI", account.URI)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) OnInvalidateApplication(app *gtsmodel.Application) {
|
func (c *Caches) OnInvalidateApplication(app *gtsmodel.Application) {
|
||||||
// Invalidate cached client of this application.
|
// Invalidate cached client of this application.
|
||||||
c.GTS.Client.Invalidate("ID", app.ClientID)
|
c.DB.Client.Invalidate("ID", app.ClientID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) OnInvalidateBlock(block *gtsmodel.Block) {
|
func (c *Caches) OnInvalidateBlock(block *gtsmodel.Block) {
|
||||||
|
@ -75,30 +75,30 @@ func (c *Caches) OnInvalidateBlock(block *gtsmodel.Block) {
|
||||||
c.Visibility.Invalidate("RequesterID", block.TargetAccountID)
|
c.Visibility.Invalidate("RequesterID", block.TargetAccountID)
|
||||||
|
|
||||||
// Invalidate source account's block lists.
|
// Invalidate source account's block lists.
|
||||||
c.GTS.BlockIDs.Invalidate(block.AccountID)
|
c.DB.BlockIDs.Invalidate(block.AccountID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) OnInvalidateClient(client *gtsmodel.Client) {
|
func (c *Caches) OnInvalidateClient(client *gtsmodel.Client) {
|
||||||
// Invalidate any tokens under this client.
|
// Invalidate any tokens under this client.
|
||||||
c.GTS.Token.Invalidate("ClientID", client.ID)
|
c.DB.Token.Invalidate("ClientID", client.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) OnInvalidateConversation(conversation *gtsmodel.Conversation) {
|
func (c *Caches) OnInvalidateConversation(conversation *gtsmodel.Conversation) {
|
||||||
// Invalidate owning account's conversation list.
|
// Invalidate owning account's conversation list.
|
||||||
c.GTS.ConversationLastStatusIDs.Invalidate(conversation.AccountID)
|
c.DB.ConversationLastStatusIDs.Invalidate(conversation.AccountID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) OnInvalidateEmojiCategory(category *gtsmodel.EmojiCategory) {
|
func (c *Caches) OnInvalidateEmojiCategory(category *gtsmodel.EmojiCategory) {
|
||||||
// Invalidate any emoji in this category.
|
// Invalidate any emoji in this category.
|
||||||
c.GTS.Emoji.Invalidate("CategoryID", category.ID)
|
c.DB.Emoji.Invalidate("CategoryID", category.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) OnInvalidateFollow(follow *gtsmodel.Follow) {
|
func (c *Caches) OnInvalidateFollow(follow *gtsmodel.Follow) {
|
||||||
// Invalidate follow request with this same ID.
|
// Invalidate follow request with this same ID.
|
||||||
c.GTS.FollowRequest.Invalidate("ID", follow.ID)
|
c.DB.FollowRequest.Invalidate("ID", follow.ID)
|
||||||
|
|
||||||
// Invalidate any related list entries.
|
// Invalidate any related list entries.
|
||||||
c.GTS.ListEntry.Invalidate("FollowID", follow.ID)
|
c.DB.ListEntry.Invalidate("FollowID", follow.ID)
|
||||||
|
|
||||||
// Invalidate follow origin account ID cached visibility.
|
// Invalidate follow origin account ID cached visibility.
|
||||||
c.Visibility.Invalidate("ItemID", follow.AccountID)
|
c.Visibility.Invalidate("ItemID", follow.AccountID)
|
||||||
|
@ -111,7 +111,7 @@ func (c *Caches) OnInvalidateFollow(follow *gtsmodel.Follow) {
|
||||||
// Invalidate source account's following
|
// Invalidate source account's following
|
||||||
// lists, and destination's follwer lists.
|
// lists, and destination's follwer lists.
|
||||||
// (see FollowIDs() comment for details).
|
// (see FollowIDs() comment for details).
|
||||||
c.GTS.FollowIDs.Invalidate(
|
c.DB.FollowIDs.Invalidate(
|
||||||
">"+follow.AccountID,
|
">"+follow.AccountID,
|
||||||
"l>"+follow.AccountID,
|
"l>"+follow.AccountID,
|
||||||
"<"+follow.AccountID,
|
"<"+follow.AccountID,
|
||||||
|
@ -125,12 +125,12 @@ func (c *Caches) OnInvalidateFollow(follow *gtsmodel.Follow) {
|
||||||
|
|
||||||
func (c *Caches) OnInvalidateFollowRequest(followReq *gtsmodel.FollowRequest) {
|
func (c *Caches) OnInvalidateFollowRequest(followReq *gtsmodel.FollowRequest) {
|
||||||
// Invalidate follow with this same ID.
|
// Invalidate follow with this same ID.
|
||||||
c.GTS.Follow.Invalidate("ID", followReq.ID)
|
c.DB.Follow.Invalidate("ID", followReq.ID)
|
||||||
|
|
||||||
// Invalidate source account's followreq
|
// Invalidate source account's followreq
|
||||||
// lists, and destinations follow req lists.
|
// lists, and destinations follow req lists.
|
||||||
// (see FollowRequestIDs() comment for details).
|
// (see FollowRequestIDs() comment for details).
|
||||||
c.GTS.FollowRequestIDs.Invalidate(
|
c.DB.FollowRequestIDs.Invalidate(
|
||||||
">"+followReq.AccountID,
|
">"+followReq.AccountID,
|
||||||
"<"+followReq.AccountID,
|
"<"+followReq.AccountID,
|
||||||
">"+followReq.TargetAccountID,
|
">"+followReq.TargetAccountID,
|
||||||
|
@ -140,41 +140,41 @@ func (c *Caches) OnInvalidateFollowRequest(followReq *gtsmodel.FollowRequest) {
|
||||||
|
|
||||||
func (c *Caches) OnInvalidateList(list *gtsmodel.List) {
|
func (c *Caches) OnInvalidateList(list *gtsmodel.List) {
|
||||||
// Invalidate all cached entries of this list.
|
// Invalidate all cached entries of this list.
|
||||||
c.GTS.ListEntry.Invalidate("ListID", list.ID)
|
c.DB.ListEntry.Invalidate("ListID", list.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) OnInvalidateMedia(media *gtsmodel.MediaAttachment) {
|
func (c *Caches) OnInvalidateMedia(media *gtsmodel.MediaAttachment) {
|
||||||
if (media.Avatar != nil && *media.Avatar) ||
|
if (media.Avatar != nil && *media.Avatar) ||
|
||||||
(media.Header != nil && *media.Header) {
|
(media.Header != nil && *media.Header) {
|
||||||
// Invalidate cache of attaching account.
|
// Invalidate cache of attaching account.
|
||||||
c.GTS.Account.Invalidate("ID", media.AccountID)
|
c.DB.Account.Invalidate("ID", media.AccountID)
|
||||||
}
|
}
|
||||||
|
|
||||||
if media.StatusID != "" {
|
if media.StatusID != "" {
|
||||||
// Invalidate cache of attaching status.
|
// Invalidate cache of attaching status.
|
||||||
c.GTS.Status.Invalidate("ID", media.StatusID)
|
c.DB.Status.Invalidate("ID", media.StatusID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) OnInvalidatePoll(poll *gtsmodel.Poll) {
|
func (c *Caches) OnInvalidatePoll(poll *gtsmodel.Poll) {
|
||||||
// Invalidate all cached votes of this poll.
|
// Invalidate all cached votes of this poll.
|
||||||
c.GTS.PollVote.Invalidate("PollID", poll.ID)
|
c.DB.PollVote.Invalidate("PollID", poll.ID)
|
||||||
|
|
||||||
// Invalidate cache of poll vote IDs.
|
// Invalidate cache of poll vote IDs.
|
||||||
c.GTS.PollVoteIDs.Invalidate(poll.ID)
|
c.DB.PollVoteIDs.Invalidate(poll.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) OnInvalidatePollVote(vote *gtsmodel.PollVote) {
|
func (c *Caches) OnInvalidatePollVote(vote *gtsmodel.PollVote) {
|
||||||
// Invalidate cached poll (contains no. votes).
|
// Invalidate cached poll (contains no. votes).
|
||||||
c.GTS.Poll.Invalidate("ID", vote.PollID)
|
c.DB.Poll.Invalidate("ID", vote.PollID)
|
||||||
|
|
||||||
// Invalidate cache of poll vote IDs.
|
// Invalidate cache of poll vote IDs.
|
||||||
c.GTS.PollVoteIDs.Invalidate(vote.PollID)
|
c.DB.PollVoteIDs.Invalidate(vote.PollID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) OnInvalidateStatus(status *gtsmodel.Status) {
|
func (c *Caches) OnInvalidateStatus(status *gtsmodel.Status) {
|
||||||
// Invalidate stats for this account.
|
// Invalidate stats for this account.
|
||||||
c.GTS.AccountStats.Invalidate("AccountID", status.AccountID)
|
c.DB.AccountStats.Invalidate("AccountID", status.AccountID)
|
||||||
|
|
||||||
// Invalidate status ID cached visibility.
|
// Invalidate status ID cached visibility.
|
||||||
c.Visibility.Invalidate("ItemID", status.ID)
|
c.Visibility.Invalidate("ItemID", status.ID)
|
||||||
|
@ -184,33 +184,33 @@ func (c *Caches) OnInvalidateStatus(status *gtsmodel.Status) {
|
||||||
// the media IDs in use before the media table is
|
// the media IDs in use before the media table is
|
||||||
// aware of the status ID they are linked to.
|
// aware of the status ID they are linked to.
|
||||||
//
|
//
|
||||||
// c.GTS.Media().Invalidate("StatusID") will not work.
|
// c.DB.Media().Invalidate("StatusID") will not work.
|
||||||
c.GTS.Media.InvalidateIDs("ID", status.AttachmentIDs)
|
c.DB.Media.InvalidateIDs("ID", status.AttachmentIDs)
|
||||||
|
|
||||||
if status.BoostOfID != "" {
|
if status.BoostOfID != "" {
|
||||||
// Invalidate boost ID list of the original status.
|
// Invalidate boost ID list of the original status.
|
||||||
c.GTS.BoostOfIDs.Invalidate(status.BoostOfID)
|
c.DB.BoostOfIDs.Invalidate(status.BoostOfID)
|
||||||
}
|
}
|
||||||
|
|
||||||
if status.InReplyToID != "" {
|
if status.InReplyToID != "" {
|
||||||
// Invalidate in reply to ID list of original status.
|
// Invalidate in reply to ID list of original status.
|
||||||
c.GTS.InReplyToIDs.Invalidate(status.InReplyToID)
|
c.DB.InReplyToIDs.Invalidate(status.InReplyToID)
|
||||||
}
|
}
|
||||||
|
|
||||||
if status.PollID != "" {
|
if status.PollID != "" {
|
||||||
// Invalidate cache of attached poll ID.
|
// Invalidate cache of attached poll ID.
|
||||||
c.GTS.Poll.Invalidate("ID", status.PollID)
|
c.DB.Poll.Invalidate("ID", status.PollID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) OnInvalidateStatusBookmark(bookmark *gtsmodel.StatusBookmark) {
|
func (c *Caches) OnInvalidateStatusBookmark(bookmark *gtsmodel.StatusBookmark) {
|
||||||
// Invalidate status bookmark ID list for this status.
|
// Invalidate status bookmark ID list for this status.
|
||||||
c.GTS.StatusBookmarkIDs.Invalidate(bookmark.StatusID)
|
c.DB.StatusBookmarkIDs.Invalidate(bookmark.StatusID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) OnInvalidateStatusFave(fave *gtsmodel.StatusFave) {
|
func (c *Caches) OnInvalidateStatusFave(fave *gtsmodel.StatusFave) {
|
||||||
// Invalidate status fave ID list for this status.
|
// Invalidate status fave ID list for this status.
|
||||||
c.GTS.StatusFaveIDs.Invalidate(fave.StatusID)
|
c.DB.StatusFaveIDs.Invalidate(fave.StatusID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Caches) OnInvalidateUser(user *gtsmodel.User) {
|
func (c *Caches) OnInvalidateUser(user *gtsmodel.User) {
|
||||||
|
@ -221,5 +221,5 @@ func (c *Caches) OnInvalidateUser(user *gtsmodel.User) {
|
||||||
|
|
||||||
func (c *Caches) OnInvalidateUserMute(mute *gtsmodel.UserMute) {
|
func (c *Caches) OnInvalidateUserMute(mute *gtsmodel.UserMute) {
|
||||||
// Invalidate source account's user mute lists.
|
// Invalidate source account's user mute lists.
|
||||||
c.GTS.UserMuteIDs.Invalidate(mute.AccountID)
|
c.DB.UserMuteIDs.Invalidate(mute.AccountID)
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,7 +61,7 @@ func (a *accountDB) GetAccountByID(ctx context.Context, id string) (*gtsmodel.Ac
|
||||||
|
|
||||||
func (a *accountDB) GetAccountsByIDs(ctx context.Context, ids []string) ([]*gtsmodel.Account, error) {
|
func (a *accountDB) GetAccountsByIDs(ctx context.Context, ids []string) ([]*gtsmodel.Account, error) {
|
||||||
// Load all input account IDs via cache loader callback.
|
// Load all input account IDs via cache loader callback.
|
||||||
accounts, err := a.state.Caches.GTS.Account.LoadIDs("ID",
|
accounts, err := a.state.Caches.DB.Account.LoadIDs("ID",
|
||||||
ids,
|
ids,
|
||||||
func(uncached []string) ([]*gtsmodel.Account, error) {
|
func(uncached []string) ([]*gtsmodel.Account, error) {
|
||||||
// Preallocate expected length of uncached accounts.
|
// Preallocate expected length of uncached accounts.
|
||||||
|
@ -587,7 +587,7 @@ func (a *accountDB) GetAccounts(
|
||||||
|
|
||||||
func (a *accountDB) getAccount(ctx context.Context, lookup string, dbQuery func(*gtsmodel.Account) error, keyParts ...any) (*gtsmodel.Account, error) {
|
func (a *accountDB) getAccount(ctx context.Context, lookup string, dbQuery func(*gtsmodel.Account) error, keyParts ...any) (*gtsmodel.Account, error) {
|
||||||
// Fetch account from database cache with loader callback
|
// Fetch account from database cache with loader callback
|
||||||
account, err := a.state.Caches.GTS.Account.LoadOne(lookup, func() (*gtsmodel.Account, error) {
|
account, err := a.state.Caches.DB.Account.LoadOne(lookup, func() (*gtsmodel.Account, error) {
|
||||||
var account gtsmodel.Account
|
var account gtsmodel.Account
|
||||||
|
|
||||||
// Not cached! Perform database query
|
// Not cached! Perform database query
|
||||||
|
@ -723,7 +723,7 @@ func (a *accountDB) PopulateAccount(ctx context.Context, account *gtsmodel.Accou
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *accountDB) PutAccount(ctx context.Context, account *gtsmodel.Account) error {
|
func (a *accountDB) PutAccount(ctx context.Context, account *gtsmodel.Account) error {
|
||||||
return a.state.Caches.GTS.Account.Store(account, func() error {
|
return a.state.Caches.DB.Account.Store(account, func() error {
|
||||||
// It is safe to run this database transaction within cache.Store
|
// It is safe to run this database transaction within cache.Store
|
||||||
// as the cache does not attempt a mutex lock until AFTER hook.
|
// as the cache does not attempt a mutex lock until AFTER hook.
|
||||||
//
|
//
|
||||||
|
@ -752,7 +752,7 @@ func (a *accountDB) UpdateAccount(ctx context.Context, account *gtsmodel.Account
|
||||||
columns = append(columns, "updated_at")
|
columns = append(columns, "updated_at")
|
||||||
}
|
}
|
||||||
|
|
||||||
return a.state.Caches.GTS.Account.Store(account, func() error {
|
return a.state.Caches.DB.Account.Store(account, func() error {
|
||||||
// It is safe to run this database transaction within cache.Store
|
// It is safe to run this database transaction within cache.Store
|
||||||
// as the cache does not attempt a mutex lock until AFTER hook.
|
// as the cache does not attempt a mutex lock until AFTER hook.
|
||||||
//
|
//
|
||||||
|
@ -791,7 +791,7 @@ func (a *accountDB) UpdateAccount(ctx context.Context, account *gtsmodel.Account
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *accountDB) DeleteAccount(ctx context.Context, id string) error {
|
func (a *accountDB) DeleteAccount(ctx context.Context, id string) error {
|
||||||
defer a.state.Caches.GTS.Account.Invalidate("ID", id)
|
defer a.state.Caches.DB.Account.Invalidate("ID", id)
|
||||||
|
|
||||||
// Load account into cache before attempting a delete,
|
// Load account into cache before attempting a delete,
|
||||||
// as we need it cached in order to trigger the invalidate
|
// as we need it cached in order to trigger the invalidate
|
||||||
|
@ -1099,7 +1099,7 @@ func (a *accountDB) GetAccountSettings(
|
||||||
accountID string,
|
accountID string,
|
||||||
) (*gtsmodel.AccountSettings, error) {
|
) (*gtsmodel.AccountSettings, error) {
|
||||||
// Fetch settings from db cache with loader callback.
|
// Fetch settings from db cache with loader callback.
|
||||||
return a.state.Caches.GTS.AccountSettings.LoadOne(
|
return a.state.Caches.DB.AccountSettings.LoadOne(
|
||||||
"AccountID",
|
"AccountID",
|
||||||
func() (*gtsmodel.AccountSettings, error) {
|
func() (*gtsmodel.AccountSettings, error) {
|
||||||
// Not cached! Perform database query.
|
// Not cached! Perform database query.
|
||||||
|
@ -1121,7 +1121,7 @@ func (a *accountDB) PutAccountSettings(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
settings *gtsmodel.AccountSettings,
|
settings *gtsmodel.AccountSettings,
|
||||||
) error {
|
) error {
|
||||||
return a.state.Caches.GTS.AccountSettings.Store(settings, func() error {
|
return a.state.Caches.DB.AccountSettings.Store(settings, func() error {
|
||||||
if _, err := a.db.
|
if _, err := a.db.
|
||||||
NewInsert().
|
NewInsert().
|
||||||
Model(settings).
|
Model(settings).
|
||||||
|
@ -1138,7 +1138,7 @@ func (a *accountDB) UpdateAccountSettings(
|
||||||
settings *gtsmodel.AccountSettings,
|
settings *gtsmodel.AccountSettings,
|
||||||
columns ...string,
|
columns ...string,
|
||||||
) error {
|
) error {
|
||||||
return a.state.Caches.GTS.AccountSettings.Store(settings, func() error {
|
return a.state.Caches.DB.AccountSettings.Store(settings, func() error {
|
||||||
settings.UpdatedAt = time.Now()
|
settings.UpdatedAt = time.Now()
|
||||||
if len(columns) > 0 {
|
if len(columns) > 0 {
|
||||||
// If we're updating by column,
|
// If we're updating by column,
|
||||||
|
@ -1161,7 +1161,7 @@ func (a *accountDB) UpdateAccountSettings(
|
||||||
|
|
||||||
func (a *accountDB) PopulateAccountStats(ctx context.Context, account *gtsmodel.Account) error {
|
func (a *accountDB) PopulateAccountStats(ctx context.Context, account *gtsmodel.Account) error {
|
||||||
// Fetch stats from db cache with loader callback.
|
// Fetch stats from db cache with loader callback.
|
||||||
stats, err := a.state.Caches.GTS.AccountStats.LoadOne(
|
stats, err := a.state.Caches.DB.AccountStats.LoadOne(
|
||||||
"AccountID",
|
"AccountID",
|
||||||
func() (*gtsmodel.AccountStats, error) {
|
func() (*gtsmodel.AccountStats, error) {
|
||||||
// Not cached! Perform database query.
|
// Not cached! Perform database query.
|
||||||
|
@ -1230,7 +1230,7 @@ func (a *accountDB) StubAccountStats(ctx context.Context, account *gtsmodel.Acco
|
||||||
|
|
||||||
// Upsert this stats in case a race
|
// Upsert this stats in case a race
|
||||||
// meant someone else inserted it first.
|
// meant someone else inserted it first.
|
||||||
if err := a.state.Caches.GTS.AccountStats.Store(stats, func() error {
|
if err := a.state.Caches.DB.AccountStats.Store(stats, func() error {
|
||||||
if _, err := NewUpsert(a.db).
|
if _, err := NewUpsert(a.db).
|
||||||
Model(stats).
|
Model(stats).
|
||||||
Constraint("account_id").
|
Constraint("account_id").
|
||||||
|
@ -1325,7 +1325,7 @@ func (a *accountDB) RegenerateAccountStats(ctx context.Context, account *gtsmode
|
||||||
|
|
||||||
// Upsert this stats in case a race
|
// Upsert this stats in case a race
|
||||||
// meant someone else inserted it first.
|
// meant someone else inserted it first.
|
||||||
if err := a.state.Caches.GTS.AccountStats.Store(stats, func() error {
|
if err := a.state.Caches.DB.AccountStats.Store(stats, func() error {
|
||||||
if _, err := NewUpsert(a.db).
|
if _, err := NewUpsert(a.db).
|
||||||
Model(stats).
|
Model(stats).
|
||||||
Constraint("account_id").
|
Constraint("account_id").
|
||||||
|
@ -1342,7 +1342,7 @@ func (a *accountDB) RegenerateAccountStats(ctx context.Context, account *gtsmode
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *accountDB) UpdateAccountStats(ctx context.Context, stats *gtsmodel.AccountStats, columns ...string) error {
|
func (a *accountDB) UpdateAccountStats(ctx context.Context, stats *gtsmodel.AccountStats, columns ...string) error {
|
||||||
return a.state.Caches.GTS.AccountStats.Store(stats, func() error {
|
return a.state.Caches.DB.AccountStats.Store(stats, func() error {
|
||||||
if _, err := a.db.
|
if _, err := a.db.
|
||||||
NewUpdate().
|
NewUpdate().
|
||||||
Model(stats).
|
Model(stats).
|
||||||
|
@ -1357,7 +1357,7 @@ func (a *accountDB) UpdateAccountStats(ctx context.Context, stats *gtsmodel.Acco
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *accountDB) DeleteAccountStats(ctx context.Context, accountID string) error {
|
func (a *accountDB) DeleteAccountStats(ctx context.Context, accountID string) error {
|
||||||
defer a.state.Caches.GTS.AccountStats.Invalidate("AccountID", accountID)
|
defer a.state.Caches.DB.AccountStats.Invalidate("AccountID", accountID)
|
||||||
|
|
||||||
if _, err := a.db.
|
if _, err := a.db.
|
||||||
NewDelete().
|
NewDelete().
|
||||||
|
|
|
@ -54,7 +54,7 @@ func (a *applicationDB) GetApplicationByClientID(ctx context.Context, clientID s
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *applicationDB) getApplication(ctx context.Context, lookup string, dbQuery func(*gtsmodel.Application) error, keyParts ...any) (*gtsmodel.Application, error) {
|
func (a *applicationDB) getApplication(ctx context.Context, lookup string, dbQuery func(*gtsmodel.Application) error, keyParts ...any) (*gtsmodel.Application, error) {
|
||||||
return a.state.Caches.GTS.Application.LoadOne(lookup, func() (*gtsmodel.Application, error) {
|
return a.state.Caches.DB.Application.LoadOne(lookup, func() (*gtsmodel.Application, error) {
|
||||||
var app gtsmodel.Application
|
var app gtsmodel.Application
|
||||||
|
|
||||||
// Not cached! Perform database query.
|
// Not cached! Perform database query.
|
||||||
|
@ -67,7 +67,7 @@ func (a *applicationDB) getApplication(ctx context.Context, lookup string, dbQue
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *applicationDB) PutApplication(ctx context.Context, app *gtsmodel.Application) error {
|
func (a *applicationDB) PutApplication(ctx context.Context, app *gtsmodel.Application) error {
|
||||||
return a.state.Caches.GTS.Application.Store(app, func() error {
|
return a.state.Caches.DB.Application.Store(app, func() error {
|
||||||
_, err := a.db.NewInsert().Model(app).Exec(ctx)
|
_, err := a.db.NewInsert().Model(app).Exec(ctx)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
|
@ -92,13 +92,13 @@ func (a *applicationDB) DeleteApplicationByClientID(ctx context.Context, clientI
|
||||||
//
|
//
|
||||||
|
|
||||||
// Clear application from the cache.
|
// Clear application from the cache.
|
||||||
a.state.Caches.GTS.Application.Invalidate("ClientID", clientID)
|
a.state.Caches.DB.Application.Invalidate("ClientID", clientID)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *applicationDB) GetClientByID(ctx context.Context, id string) (*gtsmodel.Client, error) {
|
func (a *applicationDB) GetClientByID(ctx context.Context, id string) (*gtsmodel.Client, error) {
|
||||||
return a.state.Caches.GTS.Client.LoadOne("ID", func() (*gtsmodel.Client, error) {
|
return a.state.Caches.DB.Client.LoadOne("ID", func() (*gtsmodel.Client, error) {
|
||||||
var client gtsmodel.Client
|
var client gtsmodel.Client
|
||||||
|
|
||||||
if err := a.db.NewSelect().
|
if err := a.db.NewSelect().
|
||||||
|
@ -113,7 +113,7 @@ func (a *applicationDB) GetClientByID(ctx context.Context, id string) (*gtsmodel
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *applicationDB) PutClient(ctx context.Context, client *gtsmodel.Client) error {
|
func (a *applicationDB) PutClient(ctx context.Context, client *gtsmodel.Client) error {
|
||||||
return a.state.Caches.GTS.Client.Store(client, func() error {
|
return a.state.Caches.DB.Client.Store(client, func() error {
|
||||||
_, err := a.db.NewInsert().Model(client).Exec(ctx)
|
_, err := a.db.NewInsert().Model(client).Exec(ctx)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
|
@ -128,7 +128,7 @@ func (a *applicationDB) DeleteClientByID(ctx context.Context, id string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
a.state.Caches.GTS.Client.Invalidate("ID", id)
|
a.state.Caches.DB.Client.Invalidate("ID", id)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -144,7 +144,7 @@ func (a *applicationDB) GetAllTokens(ctx context.Context) ([]*gtsmodel.Token, er
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load all input token IDs via cache loader callback.
|
// Load all input token IDs via cache loader callback.
|
||||||
tokens, err := a.state.Caches.GTS.Token.LoadIDs("ID",
|
tokens, err := a.state.Caches.DB.Token.LoadIDs("ID",
|
||||||
tokenIDs,
|
tokenIDs,
|
||||||
func(uncached []string) ([]*gtsmodel.Token, error) {
|
func(uncached []string) ([]*gtsmodel.Token, error) {
|
||||||
// Preallocate expected length of uncached tokens.
|
// Preallocate expected length of uncached tokens.
|
||||||
|
@ -205,7 +205,7 @@ func (a *applicationDB) GetTokenByRefresh(ctx context.Context, refresh string) (
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *applicationDB) getTokenBy(lookup string, dbQuery func(*gtsmodel.Token) error, keyParts ...any) (*gtsmodel.Token, error) {
|
func (a *applicationDB) getTokenBy(lookup string, dbQuery func(*gtsmodel.Token) error, keyParts ...any) (*gtsmodel.Token, error) {
|
||||||
return a.state.Caches.GTS.Token.LoadOne(lookup, func() (*gtsmodel.Token, error) {
|
return a.state.Caches.DB.Token.LoadOne(lookup, func() (*gtsmodel.Token, error) {
|
||||||
var token gtsmodel.Token
|
var token gtsmodel.Token
|
||||||
|
|
||||||
if err := dbQuery(&token); err != nil {
|
if err := dbQuery(&token); err != nil {
|
||||||
|
@ -217,7 +217,7 @@ func (a *applicationDB) getTokenBy(lookup string, dbQuery func(*gtsmodel.Token)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *applicationDB) PutToken(ctx context.Context, token *gtsmodel.Token) error {
|
func (a *applicationDB) PutToken(ctx context.Context, token *gtsmodel.Token) error {
|
||||||
return a.state.Caches.GTS.Token.Store(token, func() error {
|
return a.state.Caches.DB.Token.Store(token, func() error {
|
||||||
_, err := a.db.NewInsert().Model(token).Exec(ctx)
|
_, err := a.db.NewInsert().Model(token).Exec(ctx)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
|
@ -232,7 +232,7 @@ func (a *applicationDB) DeleteTokenByID(ctx context.Context, id string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
a.state.Caches.GTS.Token.Invalidate("ID", id)
|
a.state.Caches.DB.Token.Invalidate("ID", id)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -245,7 +245,7 @@ func (a *applicationDB) DeleteTokenByCode(ctx context.Context, code string) erro
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
a.state.Caches.GTS.Token.Invalidate("Code", code)
|
a.state.Caches.DB.Token.Invalidate("Code", code)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -258,7 +258,7 @@ func (a *applicationDB) DeleteTokenByAccess(ctx context.Context, access string)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
a.state.Caches.GTS.Token.Invalidate("Access", access)
|
a.state.Caches.DB.Token.Invalidate("Access", access)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -271,6 +271,6 @@ func (a *applicationDB) DeleteTokenByRefresh(ctx context.Context, refresh string
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
a.state.Caches.GTS.Token.Invalidate("Refresh", refresh)
|
a.state.Caches.DB.Token.Invalidate("Refresh", refresh)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,7 +82,7 @@ func (c *conversationDB) getConversation(
|
||||||
keyParts ...any,
|
keyParts ...any,
|
||||||
) (*gtsmodel.Conversation, error) {
|
) (*gtsmodel.Conversation, error) {
|
||||||
// Fetch conversation from cache with loader callback
|
// Fetch conversation from cache with loader callback
|
||||||
conversation, err := c.state.Caches.GTS.Conversation.LoadOne(lookup, func() (*gtsmodel.Conversation, error) {
|
conversation, err := c.state.Caches.DB.Conversation.LoadOne(lookup, func() (*gtsmodel.Conversation, error) {
|
||||||
var conversation gtsmodel.Conversation
|
var conversation gtsmodel.Conversation
|
||||||
|
|
||||||
// Not cached! Perform database query
|
// Not cached! Perform database query
|
||||||
|
@ -157,7 +157,7 @@ func (c *conversationDB) GetConversationsByOwnerAccountID(ctx context.Context, a
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *conversationDB) getAccountConversationLastStatusIDs(ctx context.Context, accountID string, page *paging.Page) ([]string, error) {
|
func (c *conversationDB) getAccountConversationLastStatusIDs(ctx context.Context, accountID string, page *paging.Page) ([]string, error) {
|
||||||
return loadPagedIDs(&c.state.Caches.GTS.ConversationLastStatusIDs, accountID, page, func() ([]string, error) {
|
return loadPagedIDs(&c.state.Caches.DB.ConversationLastStatusIDs, accountID, page, func() ([]string, error) {
|
||||||
var conversationLastStatusIDs []string
|
var conversationLastStatusIDs []string
|
||||||
|
|
||||||
// Conversation last status IDs not in cache. Perform DB query.
|
// Conversation last status IDs not in cache. Perform DB query.
|
||||||
|
@ -182,7 +182,7 @@ func (c *conversationDB) getConversationsByLastStatusIDs(
|
||||||
conversationLastStatusIDs []string,
|
conversationLastStatusIDs []string,
|
||||||
) ([]*gtsmodel.Conversation, error) {
|
) ([]*gtsmodel.Conversation, error) {
|
||||||
// Load all conversation IDs via cache loader callbacks.
|
// Load all conversation IDs via cache loader callbacks.
|
||||||
conversations, err := c.state.Caches.GTS.Conversation.LoadIDs2Part(
|
conversations, err := c.state.Caches.DB.Conversation.LoadIDs2Part(
|
||||||
"AccountID,LastStatusID",
|
"AccountID,LastStatusID",
|
||||||
accountID,
|
accountID,
|
||||||
conversationLastStatusIDs,
|
conversationLastStatusIDs,
|
||||||
|
@ -233,7 +233,7 @@ func (c *conversationDB) UpsertConversation(ctx context.Context, conversation *g
|
||||||
columns = append(columns, "updated_at")
|
columns = append(columns, "updated_at")
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.state.Caches.GTS.Conversation.Store(conversation, func() error {
|
return c.state.Caches.DB.Conversation.Store(conversation, func() error {
|
||||||
_, err := NewUpsert(c.db).
|
_, err := NewUpsert(c.db).
|
||||||
Model(conversation).
|
Model(conversation).
|
||||||
Constraint("id").
|
Constraint("id").
|
||||||
|
@ -272,7 +272,7 @@ func (c *conversationDB) DeleteConversationByID(ctx context.Context, id string)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Drop this now-cached conversation on return after delete.
|
// Drop this now-cached conversation on return after delete.
|
||||||
defer c.state.Caches.GTS.Conversation.Invalidate("ID", id)
|
defer c.state.Caches.DB.Conversation.Invalidate("ID", id)
|
||||||
|
|
||||||
// Finally delete conversation from DB.
|
// Finally delete conversation from DB.
|
||||||
_, err = c.db.NewDelete().
|
_, err = c.db.NewDelete().
|
||||||
|
@ -288,10 +288,10 @@ func (c *conversationDB) DeleteConversationsByOwnerAccountID(ctx context.Context
|
||||||
// Conversation invalidate hooks only invalidate the conversation ID cache,
|
// Conversation invalidate hooks only invalidate the conversation ID cache,
|
||||||
// so we don't need to load all conversations into the cache to run invalidation hooks,
|
// so we don't need to load all conversations into the cache to run invalidation hooks,
|
||||||
// as with some other object types (blocks, for example).
|
// as with some other object types (blocks, for example).
|
||||||
c.state.Caches.GTS.Conversation.Invalidate("AccountID", accountID)
|
c.state.Caches.DB.Conversation.Invalidate("AccountID", accountID)
|
||||||
// In case there were no cached conversations,
|
// In case there were no cached conversations,
|
||||||
// explicitly invalidate the user's conversation last status ID cache.
|
// explicitly invalidate the user's conversation last status ID cache.
|
||||||
c.state.Caches.GTS.ConversationLastStatusIDs.Invalidate(accountID)
|
c.state.Caches.DB.ConversationLastStatusIDs.Invalidate(accountID)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
return c.db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error {
|
return c.db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error {
|
||||||
|
@ -488,7 +488,7 @@ func (c *conversationDB) DeleteStatusFromConversations(ctx context.Context, stat
|
||||||
}
|
}
|
||||||
|
|
||||||
updatedConversationIDs = append(updatedConversationIDs, deletedConversationIDs...)
|
updatedConversationIDs = append(updatedConversationIDs, deletedConversationIDs...)
|
||||||
c.state.Caches.GTS.Conversation.InvalidateIDs("ID", updatedConversationIDs)
|
c.state.Caches.DB.Conversation.InvalidateIDs("ID", updatedConversationIDs)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,7 +51,7 @@ func (d *domainDB) CreateDomainAllow(ctx context.Context, allow *gtsmodel.Domain
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear the domain allow cache (for later reload)
|
// Clear the domain allow cache (for later reload)
|
||||||
d.state.Caches.GTS.DomainAllow.Clear()
|
d.state.Caches.DB.DomainAllow.Clear()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -126,7 +126,7 @@ func (d *domainDB) DeleteDomainAllow(ctx context.Context, domain string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear the domain allow cache (for later reload)
|
// Clear the domain allow cache (for later reload)
|
||||||
d.state.Caches.GTS.DomainAllow.Clear()
|
d.state.Caches.DB.DomainAllow.Clear()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -147,7 +147,7 @@ func (d *domainDB) CreateDomainBlock(ctx context.Context, block *gtsmodel.Domain
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear the domain block cache (for later reload)
|
// Clear the domain block cache (for later reload)
|
||||||
d.state.Caches.GTS.DomainBlock.Clear()
|
d.state.Caches.DB.DomainBlock.Clear()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -222,7 +222,7 @@ func (d *domainDB) DeleteDomainBlock(ctx context.Context, domain string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear the domain block cache (for later reload)
|
// Clear the domain block cache (for later reload)
|
||||||
d.state.Caches.GTS.DomainBlock.Clear()
|
d.state.Caches.DB.DomainBlock.Clear()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -241,7 +241,7 @@ func (d *domainDB) IsDomainBlocked(ctx context.Context, domain string) (bool, er
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check the cache for an explicit domain allow (hydrating the cache with callback if necessary).
|
// Check the cache for an explicit domain allow (hydrating the cache with callback if necessary).
|
||||||
explicitAllow, err := d.state.Caches.GTS.DomainAllow.Matches(domain, func() ([]string, error) {
|
explicitAllow, err := d.state.Caches.DB.DomainAllow.Matches(domain, func() ([]string, error) {
|
||||||
var domains []string
|
var domains []string
|
||||||
|
|
||||||
// Scan list of all explicitly allowed domains from DB
|
// Scan list of all explicitly allowed domains from DB
|
||||||
|
@ -259,7 +259,7 @@ func (d *domainDB) IsDomainBlocked(ctx context.Context, domain string) (bool, er
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check the cache for a domain block (hydrating the cache with callback if necessary)
|
// Check the cache for a domain block (hydrating the cache with callback if necessary)
|
||||||
explicitBlock, err := d.state.Caches.GTS.DomainBlock.Matches(domain, func() ([]string, error) {
|
explicitBlock, err := d.state.Caches.DB.DomainBlock.Matches(domain, func() ([]string, error) {
|
||||||
var domains []string
|
var domains []string
|
||||||
|
|
||||||
// Scan list of all blocked domains from DB
|
// Scan list of all blocked domains from DB
|
||||||
|
|
|
@ -43,7 +43,7 @@ type emojiDB struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *emojiDB) PutEmoji(ctx context.Context, emoji *gtsmodel.Emoji) error {
|
func (e *emojiDB) PutEmoji(ctx context.Context, emoji *gtsmodel.Emoji) error {
|
||||||
return e.state.Caches.GTS.Emoji.Store(emoji, func() error {
|
return e.state.Caches.DB.Emoji.Store(emoji, func() error {
|
||||||
_, err := e.db.NewInsert().Model(emoji).Exec(ctx)
|
_, err := e.db.NewInsert().Model(emoji).Exec(ctx)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
|
@ -57,7 +57,7 @@ func (e *emojiDB) UpdateEmoji(ctx context.Context, emoji *gtsmodel.Emoji, column
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the emoji model in the database.
|
// Update the emoji model in the database.
|
||||||
return e.state.Caches.GTS.Emoji.Store(emoji, func() error {
|
return e.state.Caches.DB.Emoji.Store(emoji, func() error {
|
||||||
_, err := e.db.
|
_, err := e.db.
|
||||||
NewUpdate().
|
NewUpdate().
|
||||||
Model(emoji).
|
Model(emoji).
|
||||||
|
@ -76,11 +76,11 @@ func (e *emojiDB) DeleteEmojiByID(ctx context.Context, id string) error {
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
// Invalidate cached emoji.
|
// Invalidate cached emoji.
|
||||||
e.state.Caches.GTS.Emoji.Invalidate("ID", id)
|
e.state.Caches.DB.Emoji.Invalidate("ID", id)
|
||||||
|
|
||||||
// Invalidate cached account and status IDs.
|
// Invalidate cached account and status IDs.
|
||||||
e.state.Caches.GTS.Account.InvalidateIDs("ID", accountIDs)
|
e.state.Caches.DB.Account.InvalidateIDs("ID", accountIDs)
|
||||||
e.state.Caches.GTS.Status.InvalidateIDs("ID", statusIDs)
|
e.state.Caches.DB.Status.InvalidateIDs("ID", statusIDs)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
// Load emoji into cache before attempting a delete,
|
// Load emoji into cache before attempting a delete,
|
||||||
|
@ -477,7 +477,7 @@ func (e *emojiDB) GetEmojiByStaticURL(ctx context.Context, imageStaticURL string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *emojiDB) PutEmojiCategory(ctx context.Context, emojiCategory *gtsmodel.EmojiCategory) error {
|
func (e *emojiDB) PutEmojiCategory(ctx context.Context, emojiCategory *gtsmodel.EmojiCategory) error {
|
||||||
return e.state.Caches.GTS.EmojiCategory.Store(emojiCategory, func() error {
|
return e.state.Caches.DB.EmojiCategory.Store(emojiCategory, func() error {
|
||||||
_, err := e.db.NewInsert().Model(emojiCategory).Exec(ctx)
|
_, err := e.db.NewInsert().Model(emojiCategory).Exec(ctx)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
|
@ -529,7 +529,7 @@ func (e *emojiDB) GetEmojiCategoryByName(ctx context.Context, name string) (*gts
|
||||||
|
|
||||||
func (e *emojiDB) getEmoji(ctx context.Context, lookup string, dbQuery func(*gtsmodel.Emoji) error, keyParts ...any) (*gtsmodel.Emoji, error) {
|
func (e *emojiDB) getEmoji(ctx context.Context, lookup string, dbQuery func(*gtsmodel.Emoji) error, keyParts ...any) (*gtsmodel.Emoji, error) {
|
||||||
// Fetch emoji from database cache with loader callback
|
// Fetch emoji from database cache with loader callback
|
||||||
emoji, err := e.state.Caches.GTS.Emoji.LoadOne(lookup, func() (*gtsmodel.Emoji, error) {
|
emoji, err := e.state.Caches.DB.Emoji.LoadOne(lookup, func() (*gtsmodel.Emoji, error) {
|
||||||
var emoji gtsmodel.Emoji
|
var emoji gtsmodel.Emoji
|
||||||
|
|
||||||
// Not cached! Perform database query
|
// Not cached! Perform database query
|
||||||
|
@ -583,7 +583,7 @@ func (e *emojiDB) GetEmojisByIDs(ctx context.Context, ids []string) ([]*gtsmodel
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load all emoji IDs via cache loader callbacks.
|
// Load all emoji IDs via cache loader callbacks.
|
||||||
emojis, err := e.state.Caches.GTS.Emoji.LoadIDs("ID",
|
emojis, err := e.state.Caches.DB.Emoji.LoadIDs("ID",
|
||||||
ids,
|
ids,
|
||||||
func(uncached []string) ([]*gtsmodel.Emoji, error) {
|
func(uncached []string) ([]*gtsmodel.Emoji, error) {
|
||||||
// Preallocate expected length of uncached emojis.
|
// Preallocate expected length of uncached emojis.
|
||||||
|
@ -629,7 +629,7 @@ func (e *emojiDB) GetEmojisByIDs(ctx context.Context, ids []string) ([]*gtsmodel
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *emojiDB) getEmojiCategory(ctx context.Context, lookup string, dbQuery func(*gtsmodel.EmojiCategory) error, keyParts ...any) (*gtsmodel.EmojiCategory, error) {
|
func (e *emojiDB) getEmojiCategory(ctx context.Context, lookup string, dbQuery func(*gtsmodel.EmojiCategory) error, keyParts ...any) (*gtsmodel.EmojiCategory, error) {
|
||||||
return e.state.Caches.GTS.EmojiCategory.LoadOne(lookup, func() (*gtsmodel.EmojiCategory, error) {
|
return e.state.Caches.DB.EmojiCategory.LoadOne(lookup, func() (*gtsmodel.EmojiCategory, error) {
|
||||||
var category gtsmodel.EmojiCategory
|
var category gtsmodel.EmojiCategory
|
||||||
|
|
||||||
// Not cached! Perform database query
|
// Not cached! Perform database query
|
||||||
|
@ -647,7 +647,7 @@ func (e *emojiDB) GetEmojiCategoriesByIDs(ctx context.Context, ids []string) ([]
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load all category IDs via cache loader callbacks.
|
// Load all category IDs via cache loader callbacks.
|
||||||
categories, err := e.state.Caches.GTS.EmojiCategory.LoadIDs("ID",
|
categories, err := e.state.Caches.DB.EmojiCategory.LoadIDs("ID",
|
||||||
ids,
|
ids,
|
||||||
func(uncached []string) ([]*gtsmodel.EmojiCategory, error) {
|
func(uncached []string) ([]*gtsmodel.EmojiCategory, error) {
|
||||||
// Preallocate expected length of uncached categories.
|
// Preallocate expected length of uncached categories.
|
||||||
|
|
|
@ -37,7 +37,7 @@ type filterDB struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *filterDB) GetFilterByID(ctx context.Context, id string) (*gtsmodel.Filter, error) {
|
func (f *filterDB) GetFilterByID(ctx context.Context, id string) (*gtsmodel.Filter, error) {
|
||||||
filter, err := f.state.Caches.GTS.Filter.LoadOne(
|
filter, err := f.state.Caches.DB.Filter.LoadOne(
|
||||||
"ID",
|
"ID",
|
||||||
func() (*gtsmodel.Filter, error) {
|
func() (*gtsmodel.Filter, error) {
|
||||||
var filter gtsmodel.Filter
|
var filter gtsmodel.Filter
|
||||||
|
@ -80,7 +80,7 @@ func (f *filterDB) GetFiltersForAccountID(ctx context.Context, accountID string)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get each filter by ID from the cache or DB.
|
// Get each filter by ID from the cache or DB.
|
||||||
filters, err := f.state.Caches.GTS.Filter.LoadIDs("ID",
|
filters, err := f.state.Caches.DB.Filter.LoadIDs("ID",
|
||||||
filterIDs,
|
filterIDs,
|
||||||
func(uncachedFilterIDs []string) ([]*gtsmodel.Filter, error) {
|
func(uncachedFilterIDs []string) ([]*gtsmodel.Filter, error) {
|
||||||
uncachedFilters := make([]*gtsmodel.Filter, 0, len(uncachedFilterIDs))
|
uncachedFilters := make([]*gtsmodel.Filter, 0, len(uncachedFilterIDs))
|
||||||
|
@ -194,9 +194,9 @@ func (f *filterDB) PutFilter(ctx context.Context, filter *gtsmodel.Filter) error
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update cache.
|
// Update cache.
|
||||||
f.state.Caches.GTS.Filter.Put(filter)
|
f.state.Caches.DB.Filter.Put(filter)
|
||||||
f.state.Caches.GTS.FilterKeyword.Put(filter.Keywords...)
|
f.state.Caches.DB.FilterKeyword.Put(filter.Keywords...)
|
||||||
f.state.Caches.GTS.FilterStatus.Put(filter.Statuses...)
|
f.state.Caches.DB.FilterStatus.Put(filter.Statuses...)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -296,15 +296,15 @@ func (f *filterDB) UpdateFilter(
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update cache.
|
// Update cache.
|
||||||
f.state.Caches.GTS.Filter.Put(filter)
|
f.state.Caches.DB.Filter.Put(filter)
|
||||||
f.state.Caches.GTS.FilterKeyword.Put(filter.Keywords...)
|
f.state.Caches.DB.FilterKeyword.Put(filter.Keywords...)
|
||||||
f.state.Caches.GTS.FilterStatus.Put(filter.Statuses...)
|
f.state.Caches.DB.FilterStatus.Put(filter.Statuses...)
|
||||||
// TODO: (Vyr) replace with cache multi-invalidate call
|
// TODO: (Vyr) replace with cache multi-invalidate call
|
||||||
for _, id := range deleteFilterKeywordIDs {
|
for _, id := range deleteFilterKeywordIDs {
|
||||||
f.state.Caches.GTS.FilterKeyword.Invalidate("ID", id)
|
f.state.Caches.DB.FilterKeyword.Invalidate("ID", id)
|
||||||
}
|
}
|
||||||
for _, id := range deleteFilterStatusIDs {
|
for _, id := range deleteFilterStatusIDs {
|
||||||
f.state.Caches.GTS.FilterStatus.Invalidate("ID", id)
|
f.state.Caches.DB.FilterStatus.Invalidate("ID", id)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -342,11 +342,11 @@ func (f *filterDB) DeleteFilterByID(ctx context.Context, id string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Invalidate this filter.
|
// Invalidate this filter.
|
||||||
f.state.Caches.GTS.Filter.Invalidate("ID", id)
|
f.state.Caches.DB.Filter.Invalidate("ID", id)
|
||||||
|
|
||||||
// Invalidate all keywords and statuses for this filter.
|
// Invalidate all keywords and statuses for this filter.
|
||||||
f.state.Caches.GTS.FilterKeyword.Invalidate("FilterID", id)
|
f.state.Caches.DB.FilterKeyword.Invalidate("FilterID", id)
|
||||||
f.state.Caches.GTS.FilterStatus.Invalidate("FilterID", id)
|
f.state.Caches.DB.FilterStatus.Invalidate("FilterID", id)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func (f *filterDB) GetFilterKeywordByID(ctx context.Context, id string) (*gtsmodel.FilterKeyword, error) {
|
func (f *filterDB) GetFilterKeywordByID(ctx context.Context, id string) (*gtsmodel.FilterKeyword, error) {
|
||||||
filterKeyword, err := f.state.Caches.GTS.FilterKeyword.LoadOne(
|
filterKeyword, err := f.state.Caches.DB.FilterKeyword.LoadOne(
|
||||||
"ID",
|
"ID",
|
||||||
func() (*gtsmodel.FilterKeyword, error) {
|
func() (*gtsmodel.FilterKeyword, error) {
|
||||||
var filterKeyword gtsmodel.FilterKeyword
|
var filterKeyword gtsmodel.FilterKeyword
|
||||||
|
@ -110,7 +110,7 @@ func (f *filterDB) getFilterKeywords(ctx context.Context, idColumn string, id st
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get each filter keyword by ID from the cache or DB.
|
// Get each filter keyword by ID from the cache or DB.
|
||||||
filterKeywords, err := f.state.Caches.GTS.FilterKeyword.LoadIDs("ID",
|
filterKeywords, err := f.state.Caches.DB.FilterKeyword.LoadIDs("ID",
|
||||||
filterKeywordIDs,
|
filterKeywordIDs,
|
||||||
func(uncachedFilterKeywordIDs []string) ([]*gtsmodel.FilterKeyword, error) {
|
func(uncachedFilterKeywordIDs []string) ([]*gtsmodel.FilterKeyword, error) {
|
||||||
uncachedFilterKeywords := make([]*gtsmodel.FilterKeyword, 0, len(uncachedFilterKeywordIDs))
|
uncachedFilterKeywords := make([]*gtsmodel.FilterKeyword, 0, len(uncachedFilterKeywordIDs))
|
||||||
|
@ -170,7 +170,7 @@ func (f *filterDB) PutFilterKeyword(ctx context.Context, filterKeyword *gtsmodel
|
||||||
return gtserror.Newf("error compiling filter keyword regex: %w", err)
|
return gtserror.Newf("error compiling filter keyword regex: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return f.state.Caches.GTS.FilterKeyword.Store(filterKeyword, func() error {
|
return f.state.Caches.DB.FilterKeyword.Store(filterKeyword, func() error {
|
||||||
_, err := f.db.
|
_, err := f.db.
|
||||||
NewInsert().
|
NewInsert().
|
||||||
Model(filterKeyword).
|
Model(filterKeyword).
|
||||||
|
@ -192,7 +192,7 @@ func (f *filterDB) UpdateFilterKeyword(ctx context.Context, filterKeyword *gtsmo
|
||||||
return gtserror.Newf("error compiling filter keyword regex: %w", err)
|
return gtserror.Newf("error compiling filter keyword regex: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return f.state.Caches.GTS.FilterKeyword.Store(filterKeyword, func() error {
|
return f.state.Caches.DB.FilterKeyword.Store(filterKeyword, func() error {
|
||||||
_, err := f.db.
|
_, err := f.db.
|
||||||
NewUpdate().
|
NewUpdate().
|
||||||
Model(filterKeyword).
|
Model(filterKeyword).
|
||||||
|
@ -212,7 +212,7 @@ func (f *filterDB) DeleteFilterKeywordByID(ctx context.Context, id string) error
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
f.state.Caches.GTS.FilterKeyword.Invalidate("ID", id)
|
f.state.Caches.DB.FilterKeyword.Invalidate("ID", id)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func (f *filterDB) GetFilterStatusByID(ctx context.Context, id string) (*gtsmodel.FilterStatus, error) {
|
func (f *filterDB) GetFilterStatusByID(ctx context.Context, id string) (*gtsmodel.FilterStatus, error) {
|
||||||
filterStatus, err := f.state.Caches.GTS.FilterStatus.LoadOne(
|
filterStatus, err := f.state.Caches.DB.FilterStatus.LoadOne(
|
||||||
"ID",
|
"ID",
|
||||||
func() (*gtsmodel.FilterStatus, error) {
|
func() (*gtsmodel.FilterStatus, error) {
|
||||||
var filterStatus gtsmodel.FilterStatus
|
var filterStatus gtsmodel.FilterStatus
|
||||||
|
@ -97,7 +97,7 @@ func (f *filterDB) getFilterStatuses(ctx context.Context, idColumn string, id st
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get each filter status by ID from the cache or DB.
|
// Get each filter status by ID from the cache or DB.
|
||||||
filterStatuses, err := f.state.Caches.GTS.FilterStatus.LoadIDs("ID",
|
filterStatuses, err := f.state.Caches.DB.FilterStatus.LoadIDs("ID",
|
||||||
filterStatusIDs,
|
filterStatusIDs,
|
||||||
func(uncachedFilterStatusIDs []string) ([]*gtsmodel.FilterStatus, error) {
|
func(uncachedFilterStatusIDs []string) ([]*gtsmodel.FilterStatus, error) {
|
||||||
uncachedFilterStatuses := make([]*gtsmodel.FilterStatus, 0, len(uncachedFilterStatusIDs))
|
uncachedFilterStatuses := make([]*gtsmodel.FilterStatus, 0, len(uncachedFilterStatusIDs))
|
||||||
|
@ -142,7 +142,7 @@ func (f *filterDB) getFilterStatuses(ctx context.Context, idColumn string, id st
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *filterDB) PutFilterStatus(ctx context.Context, filterStatus *gtsmodel.FilterStatus) error {
|
func (f *filterDB) PutFilterStatus(ctx context.Context, filterStatus *gtsmodel.FilterStatus) error {
|
||||||
return f.state.Caches.GTS.FilterStatus.Store(filterStatus, func() error {
|
return f.state.Caches.DB.FilterStatus.Store(filterStatus, func() error {
|
||||||
_, err := f.db.
|
_, err := f.db.
|
||||||
NewInsert().
|
NewInsert().
|
||||||
Model(filterStatus).
|
Model(filterStatus).
|
||||||
|
@ -157,7 +157,7 @@ func (f *filterDB) UpdateFilterStatus(ctx context.Context, filterStatus *gtsmode
|
||||||
columns = append(columns, "updated_at")
|
columns = append(columns, "updated_at")
|
||||||
}
|
}
|
||||||
|
|
||||||
return f.state.Caches.GTS.FilterStatus.Store(filterStatus, func() error {
|
return f.state.Caches.DB.FilterStatus.Store(filterStatus, func() error {
|
||||||
_, err := f.db.
|
_, err := f.db.
|
||||||
NewUpdate().
|
NewUpdate().
|
||||||
Model(filterStatus).
|
Model(filterStatus).
|
||||||
|
@ -177,7 +177,7 @@ func (f *filterDB) DeleteFilterStatusByID(ctx context.Context, id string) error
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
f.state.Caches.GTS.FilterStatus.Invalidate("ID", id)
|
f.state.Caches.DB.FilterStatus.Invalidate("ID", id)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -143,7 +143,7 @@ func (i *instanceDB) GetInstanceByID(ctx context.Context, id string) (*gtsmodel.
|
||||||
|
|
||||||
func (i *instanceDB) getInstance(ctx context.Context, lookup string, dbQuery func(*gtsmodel.Instance) error, keyParts ...any) (*gtsmodel.Instance, error) {
|
func (i *instanceDB) getInstance(ctx context.Context, lookup string, dbQuery func(*gtsmodel.Instance) error, keyParts ...any) (*gtsmodel.Instance, error) {
|
||||||
// Fetch instance from database cache with loader callback
|
// Fetch instance from database cache with loader callback
|
||||||
instance, err := i.state.Caches.GTS.Instance.LoadOne(lookup, func() (*gtsmodel.Instance, error) {
|
instance, err := i.state.Caches.DB.Instance.LoadOne(lookup, func() (*gtsmodel.Instance, error) {
|
||||||
var instance gtsmodel.Instance
|
var instance gtsmodel.Instance
|
||||||
|
|
||||||
// Not cached! Perform database query.
|
// Not cached! Perform database query.
|
||||||
|
@ -219,7 +219,7 @@ func (i *instanceDB) PutInstance(ctx context.Context, instance *gtsmodel.Instanc
|
||||||
return gtserror.Newf("error punifying domain %s: %w", instance.Domain, err)
|
return gtserror.Newf("error punifying domain %s: %w", instance.Domain, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return i.state.Caches.GTS.Instance.Store(instance, func() error {
|
return i.state.Caches.DB.Instance.Store(instance, func() error {
|
||||||
_, err := i.db.NewInsert().Model(instance).Exec(ctx)
|
_, err := i.db.NewInsert().Model(instance).Exec(ctx)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
|
@ -239,7 +239,7 @@ func (i *instanceDB) UpdateInstance(ctx context.Context, instance *gtsmodel.Inst
|
||||||
columns = append(columns, "updated_at")
|
columns = append(columns, "updated_at")
|
||||||
}
|
}
|
||||||
|
|
||||||
return i.state.Caches.GTS.Instance.Store(instance, func() error {
|
return i.state.Caches.DB.Instance.Store(instance, func() error {
|
||||||
_, err := i.db.
|
_, err := i.db.
|
||||||
NewUpdate().
|
NewUpdate().
|
||||||
Model(instance).
|
Model(instance).
|
||||||
|
|
|
@ -73,7 +73,7 @@ func (r *interactionDB) getInteractionApproval(
|
||||||
keyParts ...any,
|
keyParts ...any,
|
||||||
) (*gtsmodel.InteractionApproval, error) {
|
) (*gtsmodel.InteractionApproval, error) {
|
||||||
// Fetch approval from database cache with loader callback
|
// Fetch approval from database cache with loader callback
|
||||||
approval, err := r.state.Caches.GTS.InteractionApproval.LoadOne(lookup, func() (*gtsmodel.InteractionApproval, error) {
|
approval, err := r.state.Caches.DB.InteractionApproval.LoadOne(lookup, func() (*gtsmodel.InteractionApproval, error) {
|
||||||
var approval gtsmodel.InteractionApproval
|
var approval gtsmodel.InteractionApproval
|
||||||
|
|
||||||
// Not cached! Perform database query
|
// Not cached! Perform database query
|
||||||
|
@ -132,14 +132,14 @@ func (r *interactionDB) PopulateInteractionApproval(ctx context.Context, approva
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *interactionDB) PutInteractionApproval(ctx context.Context, approval *gtsmodel.InteractionApproval) error {
|
func (r *interactionDB) PutInteractionApproval(ctx context.Context, approval *gtsmodel.InteractionApproval) error {
|
||||||
return r.state.Caches.GTS.InteractionApproval.Store(approval, func() error {
|
return r.state.Caches.DB.InteractionApproval.Store(approval, func() error {
|
||||||
_, err := r.db.NewInsert().Model(approval).Exec(ctx)
|
_, err := r.db.NewInsert().Model(approval).Exec(ctx)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *interactionDB) DeleteInteractionApprovalByID(ctx context.Context, id string) error {
|
func (r *interactionDB) DeleteInteractionApprovalByID(ctx context.Context, id string) error {
|
||||||
defer r.state.Caches.GTS.InteractionApproval.Invalidate("ID", id)
|
defer r.state.Caches.DB.InteractionApproval.Invalidate("ID", id)
|
||||||
|
|
||||||
_, err := r.db.NewDelete().
|
_, err := r.db.NewDelete().
|
||||||
TableExpr("? AS ?", bun.Ident("interaction_approvals"), bun.Ident("interaction_approval")).
|
TableExpr("? AS ?", bun.Ident("interaction_approvals"), bun.Ident("interaction_approval")).
|
||||||
|
|
|
@ -58,7 +58,7 @@ func (l *listDB) GetListByID(ctx context.Context, id string) (*gtsmodel.List, er
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *listDB) getList(ctx context.Context, lookup string, dbQuery func(*gtsmodel.List) error, keyParts ...any) (*gtsmodel.List, error) {
|
func (l *listDB) getList(ctx context.Context, lookup string, dbQuery func(*gtsmodel.List) error, keyParts ...any) (*gtsmodel.List, error) {
|
||||||
list, err := l.state.Caches.GTS.List.LoadOne(lookup, func() (*gtsmodel.List, error) {
|
list, err := l.state.Caches.DB.List.LoadOne(lookup, func() (*gtsmodel.List, error) {
|
||||||
var list gtsmodel.List
|
var list gtsmodel.List
|
||||||
|
|
||||||
// Not cached! Perform database query.
|
// Not cached! Perform database query.
|
||||||
|
@ -139,7 +139,7 @@ func (l *listDB) PopulateList(ctx context.Context, list *gtsmodel.List) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *listDB) PutList(ctx context.Context, list *gtsmodel.List) error {
|
func (l *listDB) PutList(ctx context.Context, list *gtsmodel.List) error {
|
||||||
return l.state.Caches.GTS.List.Store(list, func() error {
|
return l.state.Caches.DB.List.Store(list, func() error {
|
||||||
_, err := l.db.NewInsert().Model(list).Exec(ctx)
|
_, err := l.db.NewInsert().Model(list).Exec(ctx)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
|
@ -154,7 +154,7 @@ func (l *listDB) UpdateList(ctx context.Context, list *gtsmodel.List, columns ..
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
// Invalidate all entries for this list ID.
|
// Invalidate all entries for this list ID.
|
||||||
l.state.Caches.GTS.ListEntry.Invalidate("ListID", list.ID)
|
l.state.Caches.DB.ListEntry.Invalidate("ListID", list.ID)
|
||||||
|
|
||||||
// Invalidate this entire list's timeline.
|
// Invalidate this entire list's timeline.
|
||||||
if err := l.state.Timelines.List.RemoveTimeline(ctx, list.ID); err != nil {
|
if err := l.state.Timelines.List.RemoveTimeline(ctx, list.ID); err != nil {
|
||||||
|
@ -162,7 +162,7 @@ func (l *listDB) UpdateList(ctx context.Context, list *gtsmodel.List, columns ..
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
return l.state.Caches.GTS.List.Store(list, func() error {
|
return l.state.Caches.DB.List.Store(list, func() error {
|
||||||
_, err := l.db.NewUpdate().
|
_, err := l.db.NewUpdate().
|
||||||
Model(list).
|
Model(list).
|
||||||
Where("? = ?", bun.Ident("list.id"), list.ID).
|
Where("? = ?", bun.Ident("list.id"), list.ID).
|
||||||
|
@ -190,7 +190,7 @@ func (l *listDB) DeleteListByID(ctx context.Context, id string) error {
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
// Invalidate this list from cache.
|
// Invalidate this list from cache.
|
||||||
l.state.Caches.GTS.List.Invalidate("ID", id)
|
l.state.Caches.DB.List.Invalidate("ID", id)
|
||||||
|
|
||||||
// Invalidate this entire list's timeline.
|
// Invalidate this entire list's timeline.
|
||||||
if err := l.state.Timelines.List.RemoveTimeline(ctx, id); err != nil {
|
if err := l.state.Timelines.List.RemoveTimeline(ctx, id); err != nil {
|
||||||
|
@ -235,7 +235,7 @@ func (l *listDB) GetListEntryByID(ctx context.Context, id string) (*gtsmodel.Lis
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *listDB) getListEntry(ctx context.Context, lookup string, dbQuery func(*gtsmodel.ListEntry) error, keyParts ...any) (*gtsmodel.ListEntry, error) {
|
func (l *listDB) getListEntry(ctx context.Context, lookup string, dbQuery func(*gtsmodel.ListEntry) error, keyParts ...any) (*gtsmodel.ListEntry, error) {
|
||||||
listEntry, err := l.state.Caches.GTS.ListEntry.LoadOne(lookup, func() (*gtsmodel.ListEntry, error) {
|
listEntry, err := l.state.Caches.DB.ListEntry.LoadOne(lookup, func() (*gtsmodel.ListEntry, error) {
|
||||||
var listEntry gtsmodel.ListEntry
|
var listEntry gtsmodel.ListEntry
|
||||||
|
|
||||||
// Not cached! Perform database query.
|
// Not cached! Perform database query.
|
||||||
|
@ -342,7 +342,7 @@ func (l *listDB) GetListEntries(ctx context.Context,
|
||||||
|
|
||||||
func (l *listDB) GetListsByIDs(ctx context.Context, ids []string) ([]*gtsmodel.List, error) {
|
func (l *listDB) GetListsByIDs(ctx context.Context, ids []string) ([]*gtsmodel.List, error) {
|
||||||
// Load all list IDs via cache loader callbacks.
|
// Load all list IDs via cache loader callbacks.
|
||||||
lists, err := l.state.Caches.GTS.List.LoadIDs("ID",
|
lists, err := l.state.Caches.DB.List.LoadIDs("ID",
|
||||||
ids,
|
ids,
|
||||||
func(uncached []string) ([]*gtsmodel.List, error) {
|
func(uncached []string) ([]*gtsmodel.List, error) {
|
||||||
// Preallocate expected length of uncached lists.
|
// Preallocate expected length of uncached lists.
|
||||||
|
@ -389,7 +389,7 @@ func (l *listDB) GetListsByIDs(ctx context.Context, ids []string) ([]*gtsmodel.L
|
||||||
|
|
||||||
func (l *listDB) GetListEntriesByIDs(ctx context.Context, ids []string) ([]*gtsmodel.ListEntry, error) {
|
func (l *listDB) GetListEntriesByIDs(ctx context.Context, ids []string) ([]*gtsmodel.ListEntry, error) {
|
||||||
// Load all entry IDs via cache loader callbacks.
|
// Load all entry IDs via cache loader callbacks.
|
||||||
entries, err := l.state.Caches.GTS.ListEntry.LoadIDs("ID",
|
entries, err := l.state.Caches.DB.ListEntry.LoadIDs("ID",
|
||||||
ids,
|
ids,
|
||||||
func(uncached []string) ([]*gtsmodel.ListEntry, error) {
|
func(uncached []string) ([]*gtsmodel.ListEntry, error) {
|
||||||
// Preallocate expected length of uncached entries.
|
// Preallocate expected length of uncached entries.
|
||||||
|
@ -492,7 +492,7 @@ func (l *listDB) PutListEntries(ctx context.Context, entries []*gtsmodel.ListEnt
|
||||||
return l.db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error {
|
return l.db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error {
|
||||||
for _, entry := range entries {
|
for _, entry := range entries {
|
||||||
entry := entry // rescope
|
entry := entry // rescope
|
||||||
if err := l.state.Caches.GTS.ListEntry.Store(entry, func() error {
|
if err := l.state.Caches.DB.ListEntry.Store(entry, func() error {
|
||||||
_, err := tx.
|
_, err := tx.
|
||||||
NewInsert().
|
NewInsert().
|
||||||
Model(entry).
|
Model(entry).
|
||||||
|
@ -525,7 +525,7 @@ func (l *listDB) DeleteListEntry(ctx context.Context, id string) error {
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
// Invalidate this list entry upon delete.
|
// Invalidate this list entry upon delete.
|
||||||
l.state.Caches.GTS.ListEntry.Invalidate("ID", id)
|
l.state.Caches.DB.ListEntry.Invalidate("ID", id)
|
||||||
|
|
||||||
// Invalidate the timeline for the list this entry belongs to.
|
// Invalidate the timeline for the list this entry belongs to.
|
||||||
if err := l.state.Timelines.List.RemoveTimeline(ctx, entry.ListID); err != nil {
|
if err := l.state.Timelines.List.RemoveTimeline(ctx, entry.ListID); err != nil {
|
||||||
|
|
|
@ -39,7 +39,7 @@ type markerDB struct {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
func (m *markerDB) GetMarker(ctx context.Context, accountID string, name gtsmodel.MarkerName) (*gtsmodel.Marker, error) {
|
func (m *markerDB) GetMarker(ctx context.Context, accountID string, name gtsmodel.MarkerName) (*gtsmodel.Marker, error) {
|
||||||
marker, err := m.state.Caches.GTS.Marker.LoadOne(
|
marker, err := m.state.Caches.DB.Marker.LoadOne(
|
||||||
"AccountID,Name",
|
"AccountID,Name",
|
||||||
func() (*gtsmodel.Marker, error) {
|
func() (*gtsmodel.Marker, error) {
|
||||||
var marker gtsmodel.Marker
|
var marker gtsmodel.Marker
|
||||||
|
@ -72,7 +72,7 @@ func (m *markerDB) UpdateMarker(ctx context.Context, marker *gtsmodel.Marker) er
|
||||||
marker.Version = prevMarker.Version + 1
|
marker.Version = prevMarker.Version + 1
|
||||||
}
|
}
|
||||||
|
|
||||||
return m.state.Caches.GTS.Marker.Store(marker, func() error {
|
return m.state.Caches.DB.Marker.Store(marker, func() error {
|
||||||
if prevMarker == nil {
|
if prevMarker == nil {
|
||||||
if _, err := m.db.NewInsert().
|
if _, err := m.db.NewInsert().
|
||||||
Model(marker).
|
Model(marker).
|
||||||
|
|
|
@ -54,7 +54,7 @@ func (m *mediaDB) GetAttachmentByID(ctx context.Context, id string) (*gtsmodel.M
|
||||||
|
|
||||||
func (m *mediaDB) GetAttachmentsByIDs(ctx context.Context, ids []string) ([]*gtsmodel.MediaAttachment, error) {
|
func (m *mediaDB) GetAttachmentsByIDs(ctx context.Context, ids []string) ([]*gtsmodel.MediaAttachment, error) {
|
||||||
// Load all media IDs via cache loader callbacks.
|
// Load all media IDs via cache loader callbacks.
|
||||||
media, err := m.state.Caches.GTS.Media.LoadIDs("ID",
|
media, err := m.state.Caches.DB.Media.LoadIDs("ID",
|
||||||
ids,
|
ids,
|
||||||
func(uncached []string) ([]*gtsmodel.MediaAttachment, error) {
|
func(uncached []string) ([]*gtsmodel.MediaAttachment, error) {
|
||||||
// Preallocate expected length of uncached media attachments.
|
// Preallocate expected length of uncached media attachments.
|
||||||
|
@ -85,7 +85,7 @@ func (m *mediaDB) GetAttachmentsByIDs(ctx context.Context, ids []string) ([]*gts
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *mediaDB) getAttachment(ctx context.Context, lookup string, dbQuery func(*gtsmodel.MediaAttachment) error, keyParts ...any) (*gtsmodel.MediaAttachment, error) {
|
func (m *mediaDB) getAttachment(ctx context.Context, lookup string, dbQuery func(*gtsmodel.MediaAttachment) error, keyParts ...any) (*gtsmodel.MediaAttachment, error) {
|
||||||
return m.state.Caches.GTS.Media.LoadOne(lookup, func() (*gtsmodel.MediaAttachment, error) {
|
return m.state.Caches.DB.Media.LoadOne(lookup, func() (*gtsmodel.MediaAttachment, error) {
|
||||||
var attachment gtsmodel.MediaAttachment
|
var attachment gtsmodel.MediaAttachment
|
||||||
|
|
||||||
// Not cached! Perform database query
|
// Not cached! Perform database query
|
||||||
|
@ -98,7 +98,7 @@ func (m *mediaDB) getAttachment(ctx context.Context, lookup string, dbQuery func
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *mediaDB) PutAttachment(ctx context.Context, media *gtsmodel.MediaAttachment) error {
|
func (m *mediaDB) PutAttachment(ctx context.Context, media *gtsmodel.MediaAttachment) error {
|
||||||
return m.state.Caches.GTS.Media.Store(media, func() error {
|
return m.state.Caches.DB.Media.Store(media, func() error {
|
||||||
_, err := m.db.NewInsert().Model(media).Exec(ctx)
|
_, err := m.db.NewInsert().Model(media).Exec(ctx)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
|
@ -111,7 +111,7 @@ func (m *mediaDB) UpdateAttachment(ctx context.Context, media *gtsmodel.MediaAtt
|
||||||
columns = append(columns, "updated_at")
|
columns = append(columns, "updated_at")
|
||||||
}
|
}
|
||||||
|
|
||||||
return m.state.Caches.GTS.Media.Store(media, func() error {
|
return m.state.Caches.DB.Media.Store(media, func() error {
|
||||||
_, err := m.db.NewUpdate().
|
_, err := m.db.NewUpdate().
|
||||||
Model(media).
|
Model(media).
|
||||||
Where("? = ?", bun.Ident("media_attachment.id"), media.ID).
|
Where("? = ?", bun.Ident("media_attachment.id"), media.ID).
|
||||||
|
@ -135,7 +135,7 @@ func (m *mediaDB) DeleteAttachment(ctx context.Context, id string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// On return, ensure that media with ID is invalidated.
|
// On return, ensure that media with ID is invalidated.
|
||||||
defer m.state.Caches.GTS.Media.Invalidate("ID", id)
|
defer m.state.Caches.DB.Media.Invalidate("ID", id)
|
||||||
|
|
||||||
// Delete media attachment in new transaction.
|
// Delete media attachment in new transaction.
|
||||||
err = m.db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error {
|
err = m.db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error {
|
||||||
|
|
|
@ -38,7 +38,7 @@ type mentionDB struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *mentionDB) GetMention(ctx context.Context, id string) (*gtsmodel.Mention, error) {
|
func (m *mentionDB) GetMention(ctx context.Context, id string) (*gtsmodel.Mention, error) {
|
||||||
mention, err := m.state.Caches.GTS.Mention.LoadOne("ID", func() (*gtsmodel.Mention, error) {
|
mention, err := m.state.Caches.DB.Mention.LoadOne("ID", func() (*gtsmodel.Mention, error) {
|
||||||
var mention gtsmodel.Mention
|
var mention gtsmodel.Mention
|
||||||
|
|
||||||
q := m.db.
|
q := m.db.
|
||||||
|
@ -66,7 +66,7 @@ func (m *mentionDB) GetMention(ctx context.Context, id string) (*gtsmodel.Mentio
|
||||||
|
|
||||||
func (m *mentionDB) GetMentions(ctx context.Context, ids []string) ([]*gtsmodel.Mention, error) {
|
func (m *mentionDB) GetMentions(ctx context.Context, ids []string) ([]*gtsmodel.Mention, error) {
|
||||||
// Load all mention IDs via cache loader callbacks.
|
// Load all mention IDs via cache loader callbacks.
|
||||||
mentions, err := m.state.Caches.GTS.Mention.LoadIDs("ID",
|
mentions, err := m.state.Caches.DB.Mention.LoadIDs("ID",
|
||||||
ids,
|
ids,
|
||||||
func(uncached []string) ([]*gtsmodel.Mention, error) {
|
func(uncached []string) ([]*gtsmodel.Mention, error) {
|
||||||
// Preallocate expected length of uncached mentions.
|
// Preallocate expected length of uncached mentions.
|
||||||
|
@ -152,14 +152,14 @@ func (m *mentionDB) PopulateMention(ctx context.Context, mention *gtsmodel.Menti
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *mentionDB) PutMention(ctx context.Context, mention *gtsmodel.Mention) error {
|
func (m *mentionDB) PutMention(ctx context.Context, mention *gtsmodel.Mention) error {
|
||||||
return m.state.Caches.GTS.Mention.Store(mention, func() error {
|
return m.state.Caches.DB.Mention.Store(mention, func() error {
|
||||||
_, err := m.db.NewInsert().Model(mention).Exec(ctx)
|
_, err := m.db.NewInsert().Model(mention).Exec(ctx)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *mentionDB) DeleteMentionByID(ctx context.Context, id string) error {
|
func (m *mentionDB) DeleteMentionByID(ctx context.Context, id string) error {
|
||||||
defer m.state.Caches.GTS.Mention.Invalidate("ID", id)
|
defer m.state.Caches.DB.Mention.Invalidate("ID", id)
|
||||||
|
|
||||||
// Load mention into cache before attempting a delete,
|
// Load mention into cache before attempting a delete,
|
||||||
// as we need it cached in order to trigger the invalidate
|
// as we need it cached in order to trigger the invalidate
|
||||||
|
|
|
@ -158,7 +158,7 @@ func (m *moveDB) getMove(
|
||||||
dbQuery func(*gtsmodel.Move) error,
|
dbQuery func(*gtsmodel.Move) error,
|
||||||
keyParts ...any,
|
keyParts ...any,
|
||||||
) (*gtsmodel.Move, error) {
|
) (*gtsmodel.Move, error) {
|
||||||
move, err := m.state.Caches.GTS.Move.LoadOne(lookup, func() (*gtsmodel.Move, error) {
|
move, err := m.state.Caches.DB.Move.LoadOne(lookup, func() (*gtsmodel.Move, error) {
|
||||||
var move gtsmodel.Move
|
var move gtsmodel.Move
|
||||||
|
|
||||||
// Not cached! Perform database query.
|
// Not cached! Perform database query.
|
||||||
|
@ -205,7 +205,7 @@ func (m *moveDB) PopulateMove(ctx context.Context, move *gtsmodel.Move) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *moveDB) PutMove(ctx context.Context, move *gtsmodel.Move) error {
|
func (m *moveDB) PutMove(ctx context.Context, move *gtsmodel.Move) error {
|
||||||
return m.state.Caches.GTS.Move.Store(move, func() error {
|
return m.state.Caches.DB.Move.Store(move, func() error {
|
||||||
_, err := m.db.
|
_, err := m.db.
|
||||||
NewInsert().
|
NewInsert().
|
||||||
Model(move).
|
Model(move).
|
||||||
|
@ -222,7 +222,7 @@ func (m *moveDB) UpdateMove(ctx context.Context, move *gtsmodel.Move, columns ..
|
||||||
columns = append(columns, "updated_at")
|
columns = append(columns, "updated_at")
|
||||||
}
|
}
|
||||||
|
|
||||||
return m.state.Caches.GTS.Move.Store(move, func() error {
|
return m.state.Caches.DB.Move.Store(move, func() error {
|
||||||
_, err := m.db.
|
_, err := m.db.
|
||||||
NewUpdate().
|
NewUpdate().
|
||||||
Model(move).
|
Model(move).
|
||||||
|
@ -234,7 +234,7 @@ func (m *moveDB) UpdateMove(ctx context.Context, move *gtsmodel.Move, columns ..
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *moveDB) DeleteMoveByID(ctx context.Context, id string) error {
|
func (m *moveDB) DeleteMoveByID(ctx context.Context, id string) error {
|
||||||
defer m.state.Caches.GTS.Move.Invalidate("ID", id)
|
defer m.state.Caches.DB.Move.Invalidate("ID", id)
|
||||||
|
|
||||||
_, err := m.db.
|
_, err := m.db.
|
||||||
NewDelete().
|
NewDelete().
|
||||||
|
|
|
@ -76,7 +76,7 @@ func (n *notificationDB) GetNotification(
|
||||||
|
|
||||||
func (n *notificationDB) getNotification(ctx context.Context, lookup string, dbQuery func(*gtsmodel.Notification) error, keyParts ...any) (*gtsmodel.Notification, error) {
|
func (n *notificationDB) getNotification(ctx context.Context, lookup string, dbQuery func(*gtsmodel.Notification) error, keyParts ...any) (*gtsmodel.Notification, error) {
|
||||||
// Fetch notification from cache with loader callback
|
// Fetch notification from cache with loader callback
|
||||||
notif, err := n.state.Caches.GTS.Notification.LoadOne(lookup, func() (*gtsmodel.Notification, error) {
|
notif, err := n.state.Caches.DB.Notification.LoadOne(lookup, func() (*gtsmodel.Notification, error) {
|
||||||
var notif gtsmodel.Notification
|
var notif gtsmodel.Notification
|
||||||
|
|
||||||
// Not cached! Perform database query
|
// Not cached! Perform database query
|
||||||
|
@ -104,7 +104,7 @@ func (n *notificationDB) getNotification(ctx context.Context, lookup string, dbQ
|
||||||
|
|
||||||
func (n *notificationDB) GetNotificationsByIDs(ctx context.Context, ids []string) ([]*gtsmodel.Notification, error) {
|
func (n *notificationDB) GetNotificationsByIDs(ctx context.Context, ids []string) ([]*gtsmodel.Notification, error) {
|
||||||
// Load all notif IDs via cache loader callbacks.
|
// Load all notif IDs via cache loader callbacks.
|
||||||
notifs, err := n.state.Caches.GTS.Notification.LoadIDs("ID",
|
notifs, err := n.state.Caches.DB.Notification.LoadIDs("ID",
|
||||||
ids,
|
ids,
|
||||||
func(uncached []string) ([]*gtsmodel.Notification, error) {
|
func(uncached []string) ([]*gtsmodel.Notification, error) {
|
||||||
// Skip query if everything was cached.
|
// Skip query if everything was cached.
|
||||||
|
@ -285,7 +285,7 @@ func (n *notificationDB) GetAccountNotifications(
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *notificationDB) PutNotification(ctx context.Context, notif *gtsmodel.Notification) error {
|
func (n *notificationDB) PutNotification(ctx context.Context, notif *gtsmodel.Notification) error {
|
||||||
return n.state.Caches.GTS.Notification.Store(notif, func() error {
|
return n.state.Caches.DB.Notification.Store(notif, func() error {
|
||||||
_, err := n.db.NewInsert().Model(notif).Exec(ctx)
|
_, err := n.db.NewInsert().Model(notif).Exec(ctx)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
|
@ -302,7 +302,7 @@ func (n *notificationDB) DeleteNotificationByID(ctx context.Context, id string)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Invalidate deleted notification by ID.
|
// Invalidate deleted notification by ID.
|
||||||
n.state.Caches.GTS.Notification.Invalidate("ID", id)
|
n.state.Caches.DB.Notification.Invalidate("ID", id)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -337,7 +337,7 @@ func (n *notificationDB) DeleteNotifications(ctx context.Context, types []string
|
||||||
}
|
}
|
||||||
|
|
||||||
// Invalidate all deleted notifications by IDs.
|
// Invalidate all deleted notifications by IDs.
|
||||||
n.state.Caches.GTS.Notification.InvalidateIDs("ID", notifIDs)
|
n.state.Caches.DB.Notification.InvalidateIDs("ID", notifIDs)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -354,6 +354,6 @@ func (n *notificationDB) DeleteNotificationsForStatus(ctx context.Context, statu
|
||||||
}
|
}
|
||||||
|
|
||||||
// Invalidate all deleted notifications by IDs.
|
// Invalidate all deleted notifications by IDs.
|
||||||
n.state.Caches.GTS.Notification.InvalidateIDs("ID", notifIDs)
|
n.state.Caches.DB.Notification.InvalidateIDs("ID", notifIDs)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,7 +54,7 @@ func (p *pollDB) GetPollByID(ctx context.Context, id string) (*gtsmodel.Poll, er
|
||||||
|
|
||||||
func (p *pollDB) getPoll(ctx context.Context, lookup string, dbQuery func(*gtsmodel.Poll) error, keyParts ...any) (*gtsmodel.Poll, error) {
|
func (p *pollDB) getPoll(ctx context.Context, lookup string, dbQuery func(*gtsmodel.Poll) error, keyParts ...any) (*gtsmodel.Poll, error) {
|
||||||
// Fetch poll from database cache with loader callback
|
// Fetch poll from database cache with loader callback
|
||||||
poll, err := p.state.Caches.GTS.Poll.LoadOne(lookup, func() (*gtsmodel.Poll, error) {
|
poll, err := p.state.Caches.DB.Poll.LoadOne(lookup, func() (*gtsmodel.Poll, error) {
|
||||||
var poll gtsmodel.Poll
|
var poll gtsmodel.Poll
|
||||||
|
|
||||||
// Not cached! Perform database query.
|
// Not cached! Perform database query.
|
||||||
|
@ -142,7 +142,7 @@ func (p *pollDB) PutPoll(ctx context.Context, poll *gtsmodel.Poll) error {
|
||||||
// is non nil and set.
|
// is non nil and set.
|
||||||
poll.CheckVotes()
|
poll.CheckVotes()
|
||||||
|
|
||||||
return p.state.Caches.GTS.Poll.Store(poll, func() error {
|
return p.state.Caches.DB.Poll.Store(poll, func() error {
|
||||||
_, err := p.db.NewInsert().Model(poll).Exec(ctx)
|
_, err := p.db.NewInsert().Model(poll).Exec(ctx)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
|
@ -153,7 +153,7 @@ func (p *pollDB) UpdatePoll(ctx context.Context, poll *gtsmodel.Poll, cols ...st
|
||||||
// is non nil and set.
|
// is non nil and set.
|
||||||
poll.CheckVotes()
|
poll.CheckVotes()
|
||||||
|
|
||||||
return p.state.Caches.GTS.Poll.Store(poll, func() error {
|
return p.state.Caches.DB.Poll.Store(poll, func() error {
|
||||||
return p.db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error {
|
return p.db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error {
|
||||||
// Update the status' "updated_at" field.
|
// Update the status' "updated_at" field.
|
||||||
if _, err := tx.NewUpdate().
|
if _, err := tx.NewUpdate().
|
||||||
|
@ -186,8 +186,8 @@ func (p *pollDB) DeletePollByID(ctx context.Context, id string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Invalidate poll by ID from cache.
|
// Invalidate poll by ID from cache.
|
||||||
p.state.Caches.GTS.Poll.Invalidate("ID", id)
|
p.state.Caches.DB.Poll.Invalidate("ID", id)
|
||||||
p.state.Caches.GTS.PollVoteIDs.Invalidate(id)
|
p.state.Caches.DB.PollVoteIDs.Invalidate(id)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -224,7 +224,7 @@ func (p *pollDB) GetPollVoteBy(ctx context.Context, pollID string, accountID str
|
||||||
|
|
||||||
func (p *pollDB) getPollVote(ctx context.Context, lookup string, dbQuery func(*gtsmodel.PollVote) error, keyParts ...any) (*gtsmodel.PollVote, error) {
|
func (p *pollDB) getPollVote(ctx context.Context, lookup string, dbQuery func(*gtsmodel.PollVote) error, keyParts ...any) (*gtsmodel.PollVote, error) {
|
||||||
// Fetch vote from database cache with loader callback
|
// Fetch vote from database cache with loader callback
|
||||||
vote, err := p.state.Caches.GTS.PollVote.LoadOne(lookup, func() (*gtsmodel.PollVote, error) {
|
vote, err := p.state.Caches.DB.PollVote.LoadOne(lookup, func() (*gtsmodel.PollVote, error) {
|
||||||
var vote gtsmodel.PollVote
|
var vote gtsmodel.PollVote
|
||||||
|
|
||||||
// Not cached! Perform database query.
|
// Not cached! Perform database query.
|
||||||
|
@ -254,7 +254,7 @@ func (p *pollDB) getPollVote(ctx context.Context, lookup string, dbQuery func(*g
|
||||||
func (p *pollDB) GetPollVotes(ctx context.Context, pollID string) ([]*gtsmodel.PollVote, error) {
|
func (p *pollDB) GetPollVotes(ctx context.Context, pollID string) ([]*gtsmodel.PollVote, error) {
|
||||||
|
|
||||||
// Load vote IDs known for given poll ID using loader callback.
|
// Load vote IDs known for given poll ID using loader callback.
|
||||||
voteIDs, err := p.state.Caches.GTS.PollVoteIDs.Load(pollID, func() ([]string, error) {
|
voteIDs, err := p.state.Caches.DB.PollVoteIDs.Load(pollID, func() ([]string, error) {
|
||||||
var voteIDs []string
|
var voteIDs []string
|
||||||
|
|
||||||
// Vote IDs not in cache, perform DB query!
|
// Vote IDs not in cache, perform DB query!
|
||||||
|
@ -271,7 +271,7 @@ func (p *pollDB) GetPollVotes(ctx context.Context, pollID string) ([]*gtsmodel.P
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load all votes from IDs via cache loader callbacks.
|
// Load all votes from IDs via cache loader callbacks.
|
||||||
votes, err := p.state.Caches.GTS.PollVote.LoadIDs("ID",
|
votes, err := p.state.Caches.DB.PollVote.LoadIDs("ID",
|
||||||
voteIDs,
|
voteIDs,
|
||||||
func(uncached []string) ([]*gtsmodel.PollVote, error) {
|
func(uncached []string) ([]*gtsmodel.PollVote, error) {
|
||||||
// Preallocate expected length of uncached votes.
|
// Preallocate expected length of uncached votes.
|
||||||
|
@ -348,7 +348,7 @@ func (p *pollDB) PopulatePollVote(ctx context.Context, vote *gtsmodel.PollVote)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *pollDB) PutPollVote(ctx context.Context, vote *gtsmodel.PollVote) error {
|
func (p *pollDB) PutPollVote(ctx context.Context, vote *gtsmodel.PollVote) error {
|
||||||
return p.state.Caches.GTS.PollVote.Store(vote, func() error {
|
return p.state.Caches.DB.PollVote.Store(vote, func() error {
|
||||||
return p.db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error {
|
return p.db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error {
|
||||||
// Try insert vote into database.
|
// Try insert vote into database.
|
||||||
if _, err := tx.NewInsert().
|
if _, err := tx.NewInsert().
|
||||||
|
@ -448,9 +448,9 @@ func (p *pollDB) DeletePollVotes(ctx context.Context, pollID string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Invalidate poll vote and poll entry from caches.
|
// Invalidate poll vote and poll entry from caches.
|
||||||
p.state.Caches.GTS.Poll.Invalidate("ID", pollID)
|
p.state.Caches.DB.Poll.Invalidate("ID", pollID)
|
||||||
p.state.Caches.GTS.PollVote.Invalidate("PollID", pollID)
|
p.state.Caches.DB.PollVote.Invalidate("PollID", pollID)
|
||||||
p.state.Caches.GTS.PollVoteIDs.Invalidate(pollID)
|
p.state.Caches.DB.PollVoteIDs.Invalidate(pollID)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -523,9 +523,9 @@ func (p *pollDB) DeletePollVoteBy(ctx context.Context, pollID string, accountID
|
||||||
}
|
}
|
||||||
|
|
||||||
// Invalidate poll vote and poll entry from caches.
|
// Invalidate poll vote and poll entry from caches.
|
||||||
p.state.Caches.GTS.Poll.Invalidate("ID", pollID)
|
p.state.Caches.DB.Poll.Invalidate("ID", pollID)
|
||||||
p.state.Caches.GTS.PollVote.Invalidate("PollID,AccountID", pollID, accountID)
|
p.state.Caches.DB.PollVote.Invalidate("PollID,AccountID", pollID, accountID)
|
||||||
p.state.Caches.GTS.PollVoteIDs.Invalidate(pollID)
|
p.state.Caches.DB.PollVoteIDs.Invalidate(pollID)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -179,7 +179,7 @@ func (r *relationshipDB) GetAccountBlocks(ctx context.Context, accountID string,
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *relationshipDB) GetAccountFollowIDs(ctx context.Context, accountID string, page *paging.Page) ([]string, error) {
|
func (r *relationshipDB) GetAccountFollowIDs(ctx context.Context, accountID string, page *paging.Page) ([]string, error) {
|
||||||
return loadPagedIDs(&r.state.Caches.GTS.FollowIDs, ">"+accountID, page, func() ([]string, error) {
|
return loadPagedIDs(&r.state.Caches.DB.FollowIDs, ">"+accountID, page, func() ([]string, error) {
|
||||||
var followIDs []string
|
var followIDs []string
|
||||||
|
|
||||||
// Follow IDs not in cache, perform DB query!
|
// Follow IDs not in cache, perform DB query!
|
||||||
|
@ -194,7 +194,7 @@ func (r *relationshipDB) GetAccountFollowIDs(ctx context.Context, accountID stri
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *relationshipDB) GetAccountLocalFollowIDs(ctx context.Context, accountID string) ([]string, error) {
|
func (r *relationshipDB) GetAccountLocalFollowIDs(ctx context.Context, accountID string) ([]string, error) {
|
||||||
return r.state.Caches.GTS.FollowIDs.Load("l>"+accountID, func() ([]string, error) {
|
return r.state.Caches.DB.FollowIDs.Load("l>"+accountID, func() ([]string, error) {
|
||||||
var followIDs []string
|
var followIDs []string
|
||||||
|
|
||||||
// Follow IDs not in cache, perform DB query!
|
// Follow IDs not in cache, perform DB query!
|
||||||
|
@ -209,7 +209,7 @@ func (r *relationshipDB) GetAccountLocalFollowIDs(ctx context.Context, accountID
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *relationshipDB) GetAccountFollowerIDs(ctx context.Context, accountID string, page *paging.Page) ([]string, error) {
|
func (r *relationshipDB) GetAccountFollowerIDs(ctx context.Context, accountID string, page *paging.Page) ([]string, error) {
|
||||||
return loadPagedIDs(&r.state.Caches.GTS.FollowIDs, "<"+accountID, page, func() ([]string, error) {
|
return loadPagedIDs(&r.state.Caches.DB.FollowIDs, "<"+accountID, page, func() ([]string, error) {
|
||||||
var followIDs []string
|
var followIDs []string
|
||||||
|
|
||||||
// Follow IDs not in cache, perform DB query!
|
// Follow IDs not in cache, perform DB query!
|
||||||
|
@ -224,7 +224,7 @@ func (r *relationshipDB) GetAccountFollowerIDs(ctx context.Context, accountID st
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *relationshipDB) GetAccountLocalFollowerIDs(ctx context.Context, accountID string) ([]string, error) {
|
func (r *relationshipDB) GetAccountLocalFollowerIDs(ctx context.Context, accountID string) ([]string, error) {
|
||||||
return r.state.Caches.GTS.FollowIDs.Load("l<"+accountID, func() ([]string, error) {
|
return r.state.Caches.DB.FollowIDs.Load("l<"+accountID, func() ([]string, error) {
|
||||||
var followIDs []string
|
var followIDs []string
|
||||||
|
|
||||||
// Follow IDs not in cache, perform DB query!
|
// Follow IDs not in cache, perform DB query!
|
||||||
|
@ -239,7 +239,7 @@ func (r *relationshipDB) GetAccountLocalFollowerIDs(ctx context.Context, account
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *relationshipDB) GetAccountFollowRequestIDs(ctx context.Context, accountID string, page *paging.Page) ([]string, error) {
|
func (r *relationshipDB) GetAccountFollowRequestIDs(ctx context.Context, accountID string, page *paging.Page) ([]string, error) {
|
||||||
return loadPagedIDs(&r.state.Caches.GTS.FollowRequestIDs, ">"+accountID, page, func() ([]string, error) {
|
return loadPagedIDs(&r.state.Caches.DB.FollowRequestIDs, ">"+accountID, page, func() ([]string, error) {
|
||||||
var followReqIDs []string
|
var followReqIDs []string
|
||||||
|
|
||||||
// Follow request IDs not in cache, perform DB query!
|
// Follow request IDs not in cache, perform DB query!
|
||||||
|
@ -254,7 +254,7 @@ func (r *relationshipDB) GetAccountFollowRequestIDs(ctx context.Context, account
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *relationshipDB) GetAccountFollowRequestingIDs(ctx context.Context, accountID string, page *paging.Page) ([]string, error) {
|
func (r *relationshipDB) GetAccountFollowRequestingIDs(ctx context.Context, accountID string, page *paging.Page) ([]string, error) {
|
||||||
return loadPagedIDs(&r.state.Caches.GTS.FollowRequestIDs, "<"+accountID, page, func() ([]string, error) {
|
return loadPagedIDs(&r.state.Caches.DB.FollowRequestIDs, "<"+accountID, page, func() ([]string, error) {
|
||||||
var followReqIDs []string
|
var followReqIDs []string
|
||||||
|
|
||||||
// Follow request IDs not in cache, perform DB query!
|
// Follow request IDs not in cache, perform DB query!
|
||||||
|
@ -269,7 +269,7 @@ func (r *relationshipDB) GetAccountFollowRequestingIDs(ctx context.Context, acco
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *relationshipDB) GetAccountBlockIDs(ctx context.Context, accountID string, page *paging.Page) ([]string, error) {
|
func (r *relationshipDB) GetAccountBlockIDs(ctx context.Context, accountID string, page *paging.Page) ([]string, error) {
|
||||||
return loadPagedIDs(&r.state.Caches.GTS.BlockIDs, accountID, page, func() ([]string, error) {
|
return loadPagedIDs(&r.state.Caches.DB.BlockIDs, accountID, page, func() ([]string, error) {
|
||||||
var blockIDs []string
|
var blockIDs []string
|
||||||
|
|
||||||
// Block IDs not in cache, perform DB query!
|
// Block IDs not in cache, perform DB query!
|
||||||
|
|
|
@ -102,7 +102,7 @@ func (r *relationshipDB) GetBlock(ctx context.Context, sourceAccountID string, t
|
||||||
|
|
||||||
func (r *relationshipDB) GetBlocksByIDs(ctx context.Context, ids []string) ([]*gtsmodel.Block, error) {
|
func (r *relationshipDB) GetBlocksByIDs(ctx context.Context, ids []string) ([]*gtsmodel.Block, error) {
|
||||||
// Load all blocks IDs via cache loader callbacks.
|
// Load all blocks IDs via cache loader callbacks.
|
||||||
blocks, err := r.state.Caches.GTS.Block.LoadIDs("ID",
|
blocks, err := r.state.Caches.DB.Block.LoadIDs("ID",
|
||||||
ids,
|
ids,
|
||||||
func(uncached []string) ([]*gtsmodel.Block, error) {
|
func(uncached []string) ([]*gtsmodel.Block, error) {
|
||||||
// Preallocate expected length of uncached blocks.
|
// Preallocate expected length of uncached blocks.
|
||||||
|
@ -149,7 +149,7 @@ func (r *relationshipDB) GetBlocksByIDs(ctx context.Context, ids []string) ([]*g
|
||||||
|
|
||||||
func (r *relationshipDB) getBlock(ctx context.Context, lookup string, dbQuery func(*gtsmodel.Block) error, keyParts ...any) (*gtsmodel.Block, error) {
|
func (r *relationshipDB) getBlock(ctx context.Context, lookup string, dbQuery func(*gtsmodel.Block) error, keyParts ...any) (*gtsmodel.Block, error) {
|
||||||
// Fetch block from cache with loader callback
|
// Fetch block from cache with loader callback
|
||||||
block, err := r.state.Caches.GTS.Block.LoadOne(lookup, func() (*gtsmodel.Block, error) {
|
block, err := r.state.Caches.DB.Block.LoadOne(lookup, func() (*gtsmodel.Block, error) {
|
||||||
var block gtsmodel.Block
|
var block gtsmodel.Block
|
||||||
|
|
||||||
// Not cached! Perform database query
|
// Not cached! Perform database query
|
||||||
|
@ -208,7 +208,7 @@ func (r *relationshipDB) PopulateBlock(ctx context.Context, block *gtsmodel.Bloc
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *relationshipDB) PutBlock(ctx context.Context, block *gtsmodel.Block) error {
|
func (r *relationshipDB) PutBlock(ctx context.Context, block *gtsmodel.Block) error {
|
||||||
return r.state.Caches.GTS.Block.Store(block, func() error {
|
return r.state.Caches.DB.Block.Store(block, func() error {
|
||||||
_, err := r.db.NewInsert().Model(block).Exec(ctx)
|
_, err := r.db.NewInsert().Model(block).Exec(ctx)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
|
@ -228,7 +228,7 @@ func (r *relationshipDB) DeleteBlockByID(ctx context.Context, id string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Drop this now-cached block on return after delete.
|
// Drop this now-cached block on return after delete.
|
||||||
defer r.state.Caches.GTS.Block.Invalidate("ID", id)
|
defer r.state.Caches.DB.Block.Invalidate("ID", id)
|
||||||
|
|
||||||
// Finally delete block from DB.
|
// Finally delete block from DB.
|
||||||
_, err = r.db.NewDelete().
|
_, err = r.db.NewDelete().
|
||||||
|
@ -252,7 +252,7 @@ func (r *relationshipDB) DeleteBlockByURI(ctx context.Context, uri string) error
|
||||||
}
|
}
|
||||||
|
|
||||||
// Drop this now-cached block on return after delete.
|
// Drop this now-cached block on return after delete.
|
||||||
defer r.state.Caches.GTS.Block.Invalidate("URI", uri)
|
defer r.state.Caches.DB.Block.Invalidate("URI", uri)
|
||||||
|
|
||||||
// Finally delete block from DB.
|
// Finally delete block from DB.
|
||||||
_, err = r.db.NewDelete().
|
_, err = r.db.NewDelete().
|
||||||
|
@ -281,8 +281,8 @@ func (r *relationshipDB) DeleteAccountBlocks(ctx context.Context, accountID stri
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
// Invalidate all account's incoming / outoing blocks on return.
|
// Invalidate all account's incoming / outoing blocks on return.
|
||||||
r.state.Caches.GTS.Block.Invalidate("AccountID", accountID)
|
r.state.Caches.DB.Block.Invalidate("AccountID", accountID)
|
||||||
r.state.Caches.GTS.Block.Invalidate("TargetAccountID", accountID)
|
r.state.Caches.DB.Block.Invalidate("TargetAccountID", accountID)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
// Load all blocks into cache, this *really* isn't great
|
// Load all blocks into cache, this *really* isn't great
|
||||||
|
|
|
@ -79,7 +79,7 @@ func (r *relationshipDB) GetFollow(ctx context.Context, sourceAccountID string,
|
||||||
|
|
||||||
func (r *relationshipDB) GetFollowsByIDs(ctx context.Context, ids []string) ([]*gtsmodel.Follow, error) {
|
func (r *relationshipDB) GetFollowsByIDs(ctx context.Context, ids []string) ([]*gtsmodel.Follow, error) {
|
||||||
// Load all follow IDs via cache loader callbacks.
|
// Load all follow IDs via cache loader callbacks.
|
||||||
follows, err := r.state.Caches.GTS.Follow.LoadIDs("ID",
|
follows, err := r.state.Caches.DB.Follow.LoadIDs("ID",
|
||||||
ids,
|
ids,
|
||||||
func(uncached []string) ([]*gtsmodel.Follow, error) {
|
func(uncached []string) ([]*gtsmodel.Follow, error) {
|
||||||
// Preallocate expected length of uncached follows.
|
// Preallocate expected length of uncached follows.
|
||||||
|
@ -160,7 +160,7 @@ func (r *relationshipDB) IsMutualFollowing(ctx context.Context, accountID1 strin
|
||||||
|
|
||||||
func (r *relationshipDB) getFollow(ctx context.Context, lookup string, dbQuery func(*gtsmodel.Follow) error, keyParts ...any) (*gtsmodel.Follow, error) {
|
func (r *relationshipDB) getFollow(ctx context.Context, lookup string, dbQuery func(*gtsmodel.Follow) error, keyParts ...any) (*gtsmodel.Follow, error) {
|
||||||
// Fetch follow from database cache with loader callback
|
// Fetch follow from database cache with loader callback
|
||||||
follow, err := r.state.Caches.GTS.Follow.LoadOne(lookup, func() (*gtsmodel.Follow, error) {
|
follow, err := r.state.Caches.DB.Follow.LoadOne(lookup, func() (*gtsmodel.Follow, error) {
|
||||||
var follow gtsmodel.Follow
|
var follow gtsmodel.Follow
|
||||||
|
|
||||||
// Not cached! Perform database query
|
// Not cached! Perform database query
|
||||||
|
@ -219,7 +219,7 @@ func (r *relationshipDB) PopulateFollow(ctx context.Context, follow *gtsmodel.Fo
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *relationshipDB) PutFollow(ctx context.Context, follow *gtsmodel.Follow) error {
|
func (r *relationshipDB) PutFollow(ctx context.Context, follow *gtsmodel.Follow) error {
|
||||||
return r.state.Caches.GTS.Follow.Store(follow, func() error {
|
return r.state.Caches.DB.Follow.Store(follow, func() error {
|
||||||
_, err := r.db.NewInsert().Model(follow).Exec(ctx)
|
_, err := r.db.NewInsert().Model(follow).Exec(ctx)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
|
@ -232,7 +232,7 @@ func (r *relationshipDB) UpdateFollow(ctx context.Context, follow *gtsmodel.Foll
|
||||||
columns = append(columns, "updated_at")
|
columns = append(columns, "updated_at")
|
||||||
}
|
}
|
||||||
|
|
||||||
return r.state.Caches.GTS.Follow.Store(follow, func() error {
|
return r.state.Caches.DB.Follow.Store(follow, func() error {
|
||||||
if _, err := r.db.NewUpdate().
|
if _, err := r.db.NewUpdate().
|
||||||
Model(follow).
|
Model(follow).
|
||||||
Where("? = ?", bun.Ident("follow.id"), follow.ID).
|
Where("? = ?", bun.Ident("follow.id"), follow.ID).
|
||||||
|
@ -280,7 +280,7 @@ func (r *relationshipDB) DeleteFollow(ctx context.Context, sourceAccountID strin
|
||||||
}
|
}
|
||||||
|
|
||||||
// Drop this now-cached follow on return after delete.
|
// Drop this now-cached follow on return after delete.
|
||||||
defer r.state.Caches.GTS.Follow.Invalidate("AccountID,TargetAccountID", sourceAccountID, targetAccountID)
|
defer r.state.Caches.DB.Follow.Invalidate("AccountID,TargetAccountID", sourceAccountID, targetAccountID)
|
||||||
|
|
||||||
// Finally delete follow from DB.
|
// Finally delete follow from DB.
|
||||||
return r.deleteFollow(ctx, follow.ID)
|
return r.deleteFollow(ctx, follow.ID)
|
||||||
|
@ -300,7 +300,7 @@ func (r *relationshipDB) DeleteFollowByID(ctx context.Context, id string) error
|
||||||
}
|
}
|
||||||
|
|
||||||
// Drop this now-cached follow on return after delete.
|
// Drop this now-cached follow on return after delete.
|
||||||
defer r.state.Caches.GTS.Follow.Invalidate("ID", id)
|
defer r.state.Caches.DB.Follow.Invalidate("ID", id)
|
||||||
|
|
||||||
// Finally delete follow from DB.
|
// Finally delete follow from DB.
|
||||||
return r.deleteFollow(ctx, follow.ID)
|
return r.deleteFollow(ctx, follow.ID)
|
||||||
|
@ -320,7 +320,7 @@ func (r *relationshipDB) DeleteFollowByURI(ctx context.Context, uri string) erro
|
||||||
}
|
}
|
||||||
|
|
||||||
// Drop this now-cached follow on return after delete.
|
// Drop this now-cached follow on return after delete.
|
||||||
defer r.state.Caches.GTS.Follow.Invalidate("URI", uri)
|
defer r.state.Caches.DB.Follow.Invalidate("URI", uri)
|
||||||
|
|
||||||
// Finally delete follow from DB.
|
// Finally delete follow from DB.
|
||||||
return r.deleteFollow(ctx, follow.ID)
|
return r.deleteFollow(ctx, follow.ID)
|
||||||
|
@ -346,8 +346,8 @@ func (r *relationshipDB) DeleteAccountFollows(ctx context.Context, accountID str
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
// Invalidate all account's incoming / outoing follows on return.
|
// Invalidate all account's incoming / outoing follows on return.
|
||||||
r.state.Caches.GTS.Follow.Invalidate("AccountID", accountID)
|
r.state.Caches.DB.Follow.Invalidate("AccountID", accountID)
|
||||||
r.state.Caches.GTS.Follow.Invalidate("TargetAccountID", accountID)
|
r.state.Caches.DB.Follow.Invalidate("TargetAccountID", accountID)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
// Load all follows into cache, this *really* isn't great
|
// Load all follows into cache, this *really* isn't great
|
||||||
|
|
|
@ -78,7 +78,7 @@ func (r *relationshipDB) GetFollowRequest(ctx context.Context, sourceAccountID s
|
||||||
|
|
||||||
func (r *relationshipDB) GetFollowRequestsByIDs(ctx context.Context, ids []string) ([]*gtsmodel.FollowRequest, error) {
|
func (r *relationshipDB) GetFollowRequestsByIDs(ctx context.Context, ids []string) ([]*gtsmodel.FollowRequest, error) {
|
||||||
// Load all follow IDs via cache loader callbacks.
|
// Load all follow IDs via cache loader callbacks.
|
||||||
follows, err := r.state.Caches.GTS.FollowRequest.LoadIDs("ID",
|
follows, err := r.state.Caches.DB.FollowRequest.LoadIDs("ID",
|
||||||
ids,
|
ids,
|
||||||
func(uncached []string) ([]*gtsmodel.FollowRequest, error) {
|
func(uncached []string) ([]*gtsmodel.FollowRequest, error) {
|
||||||
// Preallocate expected length of uncached followReqs.
|
// Preallocate expected length of uncached followReqs.
|
||||||
|
@ -137,7 +137,7 @@ func (r *relationshipDB) IsFollowRequested(ctx context.Context, sourceAccountID
|
||||||
|
|
||||||
func (r *relationshipDB) getFollowRequest(ctx context.Context, lookup string, dbQuery func(*gtsmodel.FollowRequest) error, keyParts ...any) (*gtsmodel.FollowRequest, error) {
|
func (r *relationshipDB) getFollowRequest(ctx context.Context, lookup string, dbQuery func(*gtsmodel.FollowRequest) error, keyParts ...any) (*gtsmodel.FollowRequest, error) {
|
||||||
// Fetch follow request from database cache with loader callback
|
// Fetch follow request from database cache with loader callback
|
||||||
followReq, err := r.state.Caches.GTS.FollowRequest.LoadOne(lookup, func() (*gtsmodel.FollowRequest, error) {
|
followReq, err := r.state.Caches.DB.FollowRequest.LoadOne(lookup, func() (*gtsmodel.FollowRequest, error) {
|
||||||
var followReq gtsmodel.FollowRequest
|
var followReq gtsmodel.FollowRequest
|
||||||
|
|
||||||
// Not cached! Perform database query
|
// Not cached! Perform database query
|
||||||
|
@ -196,7 +196,7 @@ func (r *relationshipDB) PopulateFollowRequest(ctx context.Context, follow *gtsm
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *relationshipDB) PutFollowRequest(ctx context.Context, follow *gtsmodel.FollowRequest) error {
|
func (r *relationshipDB) PutFollowRequest(ctx context.Context, follow *gtsmodel.FollowRequest) error {
|
||||||
return r.state.Caches.GTS.FollowRequest.Store(follow, func() error {
|
return r.state.Caches.DB.FollowRequest.Store(follow, func() error {
|
||||||
_, err := r.db.NewInsert().Model(follow).Exec(ctx)
|
_, err := r.db.NewInsert().Model(follow).Exec(ctx)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
|
@ -209,7 +209,7 @@ func (r *relationshipDB) UpdateFollowRequest(ctx context.Context, followRequest
|
||||||
columns = append(columns, "updated_at")
|
columns = append(columns, "updated_at")
|
||||||
}
|
}
|
||||||
|
|
||||||
return r.state.Caches.GTS.FollowRequest.Store(followRequest, func() error {
|
return r.state.Caches.DB.FollowRequest.Store(followRequest, func() error {
|
||||||
if _, err := r.db.NewUpdate().
|
if _, err := r.db.NewUpdate().
|
||||||
Model(followRequest).
|
Model(followRequest).
|
||||||
Where("? = ?", bun.Ident("follow_request.id"), followRequest.ID).
|
Where("? = ?", bun.Ident("follow_request.id"), followRequest.ID).
|
||||||
|
@ -242,7 +242,7 @@ func (r *relationshipDB) AcceptFollowRequest(ctx context.Context, sourceAccountI
|
||||||
Notify: followReq.Notify,
|
Notify: followReq.Notify,
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := r.state.Caches.GTS.Follow.Store(follow, func() error {
|
if err := r.state.Caches.DB.Follow.Store(follow, func() error {
|
||||||
// If the follow already exists, just
|
// If the follow already exists, just
|
||||||
// replace the URI with the new one.
|
// replace the URI with the new one.
|
||||||
_, err := r.db.
|
_, err := r.db.
|
||||||
|
@ -304,7 +304,7 @@ func (r *relationshipDB) DeleteFollowRequest(ctx context.Context, sourceAccountI
|
||||||
}
|
}
|
||||||
|
|
||||||
// Drop this now-cached follow request on return after delete.
|
// Drop this now-cached follow request on return after delete.
|
||||||
defer r.state.Caches.GTS.FollowRequest.Invalidate("AccountID,TargetAccountID", sourceAccountID, targetAccountID)
|
defer r.state.Caches.DB.FollowRequest.Invalidate("AccountID,TargetAccountID", sourceAccountID, targetAccountID)
|
||||||
|
|
||||||
// Finally delete followreq from DB.
|
// Finally delete followreq from DB.
|
||||||
_, err = r.db.NewDelete().
|
_, err = r.db.NewDelete().
|
||||||
|
@ -328,7 +328,7 @@ func (r *relationshipDB) DeleteFollowRequestByID(ctx context.Context, id string)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Drop this now-cached follow request on return after delete.
|
// Drop this now-cached follow request on return after delete.
|
||||||
defer r.state.Caches.GTS.FollowRequest.Invalidate("ID", id)
|
defer r.state.Caches.DB.FollowRequest.Invalidate("ID", id)
|
||||||
|
|
||||||
// Finally delete followreq from DB.
|
// Finally delete followreq from DB.
|
||||||
_, err = r.db.NewDelete().
|
_, err = r.db.NewDelete().
|
||||||
|
@ -352,7 +352,7 @@ func (r *relationshipDB) DeleteFollowRequestByURI(ctx context.Context, uri strin
|
||||||
}
|
}
|
||||||
|
|
||||||
// Drop this now-cached follow request on return after delete.
|
// Drop this now-cached follow request on return after delete.
|
||||||
defer r.state.Caches.GTS.FollowRequest.Invalidate("URI", uri)
|
defer r.state.Caches.DB.FollowRequest.Invalidate("URI", uri)
|
||||||
|
|
||||||
// Finally delete followreq from DB.
|
// Finally delete followreq from DB.
|
||||||
_, err = r.db.NewDelete().
|
_, err = r.db.NewDelete().
|
||||||
|
@ -382,8 +382,8 @@ func (r *relationshipDB) DeleteAccountFollowRequests(ctx context.Context, accoun
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
// Invalidate all account's incoming / outoing follow requests on return.
|
// Invalidate all account's incoming / outoing follow requests on return.
|
||||||
r.state.Caches.GTS.FollowRequest.Invalidate("AccountID", accountID)
|
r.state.Caches.DB.FollowRequest.Invalidate("AccountID", accountID)
|
||||||
r.state.Caches.GTS.FollowRequest.Invalidate("TargetAccountID", accountID)
|
r.state.Caches.DB.FollowRequest.Invalidate("TargetAccountID", accountID)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
// Load all followreqs into cache, this *really* isn't
|
// Load all followreqs into cache, this *really* isn't
|
||||||
|
|
|
@ -79,7 +79,7 @@ func (r *relationshipDB) GetMute(
|
||||||
|
|
||||||
func (r *relationshipDB) getMutesByIDs(ctx context.Context, ids []string) ([]*gtsmodel.UserMute, error) {
|
func (r *relationshipDB) getMutesByIDs(ctx context.Context, ids []string) ([]*gtsmodel.UserMute, error) {
|
||||||
// Load all mutes IDs via cache loader callbacks.
|
// Load all mutes IDs via cache loader callbacks.
|
||||||
mutes, err := r.state.Caches.GTS.UserMute.LoadIDs("ID",
|
mutes, err := r.state.Caches.DB.UserMute.LoadIDs("ID",
|
||||||
ids,
|
ids,
|
||||||
func(uncached []string) ([]*gtsmodel.UserMute, error) {
|
func(uncached []string) ([]*gtsmodel.UserMute, error) {
|
||||||
// Preallocate expected length of uncached mutes.
|
// Preallocate expected length of uncached mutes.
|
||||||
|
@ -131,7 +131,7 @@ func (r *relationshipDB) getMute(
|
||||||
keyParts ...any,
|
keyParts ...any,
|
||||||
) (*gtsmodel.UserMute, error) {
|
) (*gtsmodel.UserMute, error) {
|
||||||
// Fetch mute from cache with loader callback
|
// Fetch mute from cache with loader callback
|
||||||
mute, err := r.state.Caches.GTS.UserMute.LoadOne(lookup, func() (*gtsmodel.UserMute, error) {
|
mute, err := r.state.Caches.DB.UserMute.LoadOne(lookup, func() (*gtsmodel.UserMute, error) {
|
||||||
var mute gtsmodel.UserMute
|
var mute gtsmodel.UserMute
|
||||||
|
|
||||||
// Not cached! Perform database query
|
// Not cached! Perform database query
|
||||||
|
@ -190,7 +190,7 @@ func (r *relationshipDB) populateMute(ctx context.Context, mute *gtsmodel.UserMu
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *relationshipDB) PutMute(ctx context.Context, mute *gtsmodel.UserMute) error {
|
func (r *relationshipDB) PutMute(ctx context.Context, mute *gtsmodel.UserMute) error {
|
||||||
return r.state.Caches.GTS.UserMute.Store(mute, func() error {
|
return r.state.Caches.DB.UserMute.Store(mute, func() error {
|
||||||
_, err := NewUpsert(r.db).Model(mute).Constraint("id").Exec(ctx)
|
_, err := NewUpsert(r.db).Model(mute).Constraint("id").Exec(ctx)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
|
@ -210,7 +210,7 @@ func (r *relationshipDB) DeleteMuteByID(ctx context.Context, id string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Drop this now-cached mute on return after delete.
|
// Drop this now-cached mute on return after delete.
|
||||||
defer r.state.Caches.GTS.UserMute.Invalidate("ID", id)
|
defer r.state.Caches.DB.UserMute.Invalidate("ID", id)
|
||||||
|
|
||||||
// Finally delete mute from DB.
|
// Finally delete mute from DB.
|
||||||
_, err = r.db.NewDelete().
|
_, err = r.db.NewDelete().
|
||||||
|
@ -239,8 +239,8 @@ func (r *relationshipDB) DeleteAccountMutes(ctx context.Context, accountID strin
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
// Invalidate all account's incoming / outoing mutes on return.
|
// Invalidate all account's incoming / outoing mutes on return.
|
||||||
r.state.Caches.GTS.UserMute.Invalidate("AccountID", accountID)
|
r.state.Caches.DB.UserMute.Invalidate("AccountID", accountID)
|
||||||
r.state.Caches.GTS.UserMute.Invalidate("TargetAccountID", accountID)
|
r.state.Caches.DB.UserMute.Invalidate("TargetAccountID", accountID)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
// Load all mutes into cache, this *really* isn't great
|
// Load all mutes into cache, this *really* isn't great
|
||||||
|
@ -272,7 +272,7 @@ func (r *relationshipDB) GetAccountMutes(
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *relationshipDB) getAccountMuteIDs(ctx context.Context, accountID string, page *paging.Page) ([]string, error) {
|
func (r *relationshipDB) getAccountMuteIDs(ctx context.Context, accountID string, page *paging.Page) ([]string, error) {
|
||||||
return loadPagedIDs(&r.state.Caches.GTS.UserMuteIDs, accountID, page, func() ([]string, error) {
|
return loadPagedIDs(&r.state.Caches.DB.UserMuteIDs, accountID, page, func() ([]string, error) {
|
||||||
var muteIDs []string
|
var muteIDs []string
|
||||||
|
|
||||||
// Mute IDs not in cache. Perform DB query.
|
// Mute IDs not in cache. Perform DB query.
|
||||||
|
|
|
@ -44,7 +44,7 @@ func (r *relationshipDB) GetNote(ctx context.Context, sourceAccountID string, ta
|
||||||
|
|
||||||
func (r *relationshipDB) getNote(ctx context.Context, lookup string, dbQuery func(*gtsmodel.AccountNote) error, keyParts ...any) (*gtsmodel.AccountNote, error) {
|
func (r *relationshipDB) getNote(ctx context.Context, lookup string, dbQuery func(*gtsmodel.AccountNote) error, keyParts ...any) (*gtsmodel.AccountNote, error) {
|
||||||
// Fetch note from cache with loader callback
|
// Fetch note from cache with loader callback
|
||||||
note, err := r.state.Caches.GTS.AccountNote.LoadOne(lookup, func() (*gtsmodel.AccountNote, error) {
|
note, err := r.state.Caches.DB.AccountNote.LoadOne(lookup, func() (*gtsmodel.AccountNote, error) {
|
||||||
var note gtsmodel.AccountNote
|
var note gtsmodel.AccountNote
|
||||||
|
|
||||||
// Not cached! Perform database query
|
// Not cached! Perform database query
|
||||||
|
@ -105,7 +105,7 @@ func (r *relationshipDB) PopulateNote(ctx context.Context, note *gtsmodel.Accoun
|
||||||
|
|
||||||
func (r *relationshipDB) PutNote(ctx context.Context, note *gtsmodel.AccountNote) error {
|
func (r *relationshipDB) PutNote(ctx context.Context, note *gtsmodel.AccountNote) error {
|
||||||
note.UpdatedAt = time.Now()
|
note.UpdatedAt = time.Now()
|
||||||
return r.state.Caches.GTS.AccountNote.Store(note, func() error {
|
return r.state.Caches.DB.AccountNote.Store(note, func() error {
|
||||||
_, err := r.db.
|
_, err := r.db.
|
||||||
NewInsert().
|
NewInsert().
|
||||||
Model(note).
|
Model(note).
|
||||||
|
|
|
@ -147,7 +147,7 @@ func (r *reportDB) GetReports(ctx context.Context, resolved *bool, accountID str
|
||||||
|
|
||||||
func (r *reportDB) getReport(ctx context.Context, lookup string, dbQuery func(*gtsmodel.Report) error, keyParts ...any) (*gtsmodel.Report, error) {
|
func (r *reportDB) getReport(ctx context.Context, lookup string, dbQuery func(*gtsmodel.Report) error, keyParts ...any) (*gtsmodel.Report, error) {
|
||||||
// Fetch report from database cache with loader callback
|
// Fetch report from database cache with loader callback
|
||||||
report, err := r.state.Caches.GTS.Report.LoadOne(lookup, func() (*gtsmodel.Report, error) {
|
report, err := r.state.Caches.DB.Report.LoadOne(lookup, func() (*gtsmodel.Report, error) {
|
||||||
var report gtsmodel.Report
|
var report gtsmodel.Report
|
||||||
|
|
||||||
// Not cached! Perform database query
|
// Not cached! Perform database query
|
||||||
|
@ -242,7 +242,7 @@ func (r *reportDB) PopulateReport(ctx context.Context, report *gtsmodel.Report)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *reportDB) PutReport(ctx context.Context, report *gtsmodel.Report) error {
|
func (r *reportDB) PutReport(ctx context.Context, report *gtsmodel.Report) error {
|
||||||
return r.state.Caches.GTS.Report.Store(report, func() error {
|
return r.state.Caches.DB.Report.Store(report, func() error {
|
||||||
_, err := r.db.NewInsert().Model(report).Exec(ctx)
|
_, err := r.db.NewInsert().Model(report).Exec(ctx)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
|
@ -264,12 +264,12 @@ func (r *reportDB) UpdateReport(ctx context.Context, report *gtsmodel.Report, co
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
r.state.Caches.GTS.Report.Invalidate("ID", report.ID)
|
r.state.Caches.DB.Report.Invalidate("ID", report.ID)
|
||||||
return report, nil
|
return report, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *reportDB) DeleteReportByID(ctx context.Context, id string) error {
|
func (r *reportDB) DeleteReportByID(ctx context.Context, id string) error {
|
||||||
defer r.state.Caches.GTS.Report.Invalidate("ID", id)
|
defer r.state.Caches.DB.Report.Invalidate("ID", id)
|
||||||
|
|
||||||
// Load status into cache before attempting a delete,
|
// Load status into cache before attempting a delete,
|
||||||
// as we need it cached in order to trigger the invalidate
|
// as we need it cached in order to trigger the invalidate
|
||||||
|
|
|
@ -125,7 +125,7 @@ func (r *ruleDB) PutRule(ctx context.Context, rule *gtsmodel.Rule) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// invalidate cached local instance response, so it gets updated with the new rules
|
// invalidate cached local instance response, so it gets updated with the new rules
|
||||||
r.state.Caches.GTS.Instance.Invalidate("Domain", config.GetHost())
|
r.state.Caches.DB.Instance.Invalidate("Domain", config.GetHost())
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -143,7 +143,7 @@ func (r *ruleDB) UpdateRule(ctx context.Context, rule *gtsmodel.Rule) (*gtsmodel
|
||||||
}
|
}
|
||||||
|
|
||||||
// invalidate cached local instance response, so it gets updated with the new rules
|
// invalidate cached local instance response, so it gets updated with the new rules
|
||||||
r.state.Caches.GTS.Instance.Invalidate("Domain", config.GetHost())
|
r.state.Caches.DB.Instance.Invalidate("Domain", config.GetHost())
|
||||||
|
|
||||||
return rule, nil
|
return rule, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,7 +51,7 @@ func (s *statusDB) GetStatusByID(ctx context.Context, id string) (*gtsmodel.Stat
|
||||||
|
|
||||||
func (s *statusDB) GetStatusesByIDs(ctx context.Context, ids []string) ([]*gtsmodel.Status, error) {
|
func (s *statusDB) GetStatusesByIDs(ctx context.Context, ids []string) ([]*gtsmodel.Status, error) {
|
||||||
// Load all input status IDs via cache loader callback.
|
// Load all input status IDs via cache loader callback.
|
||||||
statuses, err := s.state.Caches.GTS.Status.LoadIDs("ID",
|
statuses, err := s.state.Caches.DB.Status.LoadIDs("ID",
|
||||||
ids,
|
ids,
|
||||||
func(uncached []string) ([]*gtsmodel.Status, error) {
|
func(uncached []string) ([]*gtsmodel.Status, error) {
|
||||||
// Preallocate expected length of uncached statuses.
|
// Preallocate expected length of uncached statuses.
|
||||||
|
@ -151,7 +151,7 @@ func (s *statusDB) GetStatusBoost(ctx context.Context, boostOfID string, byAccou
|
||||||
|
|
||||||
func (s *statusDB) getStatus(ctx context.Context, lookup string, dbQuery func(*gtsmodel.Status) error, keyParts ...any) (*gtsmodel.Status, error) {
|
func (s *statusDB) getStatus(ctx context.Context, lookup string, dbQuery func(*gtsmodel.Status) error, keyParts ...any) (*gtsmodel.Status, error) {
|
||||||
// Fetch status from database cache with loader callback
|
// Fetch status from database cache with loader callback
|
||||||
status, err := s.state.Caches.GTS.Status.LoadOne(lookup, func() (*gtsmodel.Status, error) {
|
status, err := s.state.Caches.DB.Status.LoadOne(lookup, func() (*gtsmodel.Status, error) {
|
||||||
var status gtsmodel.Status
|
var status gtsmodel.Status
|
||||||
|
|
||||||
// Not cached! Perform database query.
|
// Not cached! Perform database query.
|
||||||
|
@ -313,7 +313,7 @@ func (s *statusDB) PopulateStatus(ctx context.Context, status *gtsmodel.Status)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *statusDB) PutStatus(ctx context.Context, status *gtsmodel.Status) error {
|
func (s *statusDB) PutStatus(ctx context.Context, status *gtsmodel.Status) error {
|
||||||
return s.state.Caches.GTS.Status.Store(status, func() error {
|
return s.state.Caches.DB.Status.Store(status, func() error {
|
||||||
// It is safe to run this database transaction within cache.Store
|
// It is safe to run this database transaction within cache.Store
|
||||||
// as the cache does not attempt a mutex lock until AFTER hook.
|
// as the cache does not attempt a mutex lock until AFTER hook.
|
||||||
//
|
//
|
||||||
|
@ -397,7 +397,7 @@ func (s *statusDB) UpdateStatus(ctx context.Context, status *gtsmodel.Status, co
|
||||||
columns = append(columns, "updated_at")
|
columns = append(columns, "updated_at")
|
||||||
}
|
}
|
||||||
|
|
||||||
return s.state.Caches.GTS.Status.Store(status, func() error {
|
return s.state.Caches.DB.Status.Store(status, func() error {
|
||||||
// It is safe to run this database transaction within cache.Store
|
// It is safe to run this database transaction within cache.Store
|
||||||
// as the cache does not attempt a mutex lock until AFTER hook.
|
// as the cache does not attempt a mutex lock until AFTER hook.
|
||||||
//
|
//
|
||||||
|
@ -494,7 +494,7 @@ func (s *statusDB) DeleteStatusByID(ctx context.Context, id string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// On return ensure status invalidated from cache.
|
// On return ensure status invalidated from cache.
|
||||||
defer s.state.Caches.GTS.Status.Invalidate("ID", id)
|
defer s.state.Caches.DB.Status.Invalidate("ID", id)
|
||||||
|
|
||||||
return s.db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error {
|
return s.db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error {
|
||||||
// delete links between this status and any emojis it uses
|
// delete links between this status and any emojis it uses
|
||||||
|
@ -621,7 +621,7 @@ func (s *statusDB) CountStatusReplies(ctx context.Context, statusID string) (int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *statusDB) getStatusReplyIDs(ctx context.Context, statusID string) ([]string, error) {
|
func (s *statusDB) getStatusReplyIDs(ctx context.Context, statusID string) ([]string, error) {
|
||||||
return s.state.Caches.GTS.InReplyToIDs.Load(statusID, func() ([]string, error) {
|
return s.state.Caches.DB.InReplyToIDs.Load(statusID, func() ([]string, error) {
|
||||||
var statusIDs []string
|
var statusIDs []string
|
||||||
|
|
||||||
// Status reply IDs not in cache, perform DB query!
|
// Status reply IDs not in cache, perform DB query!
|
||||||
|
@ -665,7 +665,7 @@ func (s *statusDB) CountStatusBoosts(ctx context.Context, statusID string) (int,
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *statusDB) getStatusBoostIDs(ctx context.Context, statusID string) ([]string, error) {
|
func (s *statusDB) getStatusBoostIDs(ctx context.Context, statusID string) ([]string, error) {
|
||||||
return s.state.Caches.GTS.BoostOfIDs.Load(statusID, func() ([]string, error) {
|
return s.state.Caches.DB.BoostOfIDs.Load(statusID, func() ([]string, error) {
|
||||||
var statusIDs []string
|
var statusIDs []string
|
||||||
|
|
||||||
// Status boost IDs not in cache, perform DB query!
|
// Status boost IDs not in cache, perform DB query!
|
||||||
|
|
|
@ -70,7 +70,7 @@ func (s *statusBookmarkDB) GetStatusBookmark(ctx context.Context, accountID stri
|
||||||
|
|
||||||
func (s *statusBookmarkDB) GetStatusBookmarksByIDs(ctx context.Context, ids []string) ([]*gtsmodel.StatusBookmark, error) {
|
func (s *statusBookmarkDB) GetStatusBookmarksByIDs(ctx context.Context, ids []string) ([]*gtsmodel.StatusBookmark, error) {
|
||||||
// Load all input bookmark IDs via cache loader callback.
|
// Load all input bookmark IDs via cache loader callback.
|
||||||
bookmarks, err := s.state.Caches.GTS.StatusBookmark.LoadIDs("ID",
|
bookmarks, err := s.state.Caches.DB.StatusBookmark.LoadIDs("ID",
|
||||||
ids,
|
ids,
|
||||||
func(uncached []string) ([]*gtsmodel.StatusBookmark, error) {
|
func(uncached []string) ([]*gtsmodel.StatusBookmark, error) {
|
||||||
// Preallocate expected length of uncached bookmarks.
|
// Preallocate expected length of uncached bookmarks.
|
||||||
|
@ -125,7 +125,7 @@ func (s *statusBookmarkDB) IsStatusBookmarkedBy(ctx context.Context, accountID s
|
||||||
|
|
||||||
func (s *statusBookmarkDB) getStatusBookmark(ctx context.Context, lookup string, dbQuery func(*gtsmodel.StatusBookmark) error, keyParts ...any) (*gtsmodel.StatusBookmark, error) {
|
func (s *statusBookmarkDB) getStatusBookmark(ctx context.Context, lookup string, dbQuery func(*gtsmodel.StatusBookmark) error, keyParts ...any) (*gtsmodel.StatusBookmark, error) {
|
||||||
// Fetch bookmark from database cache with loader callback.
|
// Fetch bookmark from database cache with loader callback.
|
||||||
bookmark, err := s.state.Caches.GTS.StatusBookmark.LoadOne(lookup, func() (*gtsmodel.StatusBookmark, error) {
|
bookmark, err := s.state.Caches.DB.StatusBookmark.LoadOne(lookup, func() (*gtsmodel.StatusBookmark, error) {
|
||||||
var bookmark gtsmodel.StatusBookmark
|
var bookmark gtsmodel.StatusBookmark
|
||||||
|
|
||||||
// Not cached! Perform database query.
|
// Not cached! Perform database query.
|
||||||
|
@ -231,7 +231,7 @@ func (s *statusBookmarkDB) GetStatusBookmarks(ctx context.Context, accountID str
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *statusBookmarkDB) getStatusBookmarkIDs(ctx context.Context, statusID string) ([]string, error) {
|
func (s *statusBookmarkDB) getStatusBookmarkIDs(ctx context.Context, statusID string) ([]string, error) {
|
||||||
return s.state.Caches.GTS.StatusBookmarkIDs.Load(statusID, func() ([]string, error) {
|
return s.state.Caches.DB.StatusBookmarkIDs.Load(statusID, func() ([]string, error) {
|
||||||
var bookmarkIDs []string
|
var bookmarkIDs []string
|
||||||
|
|
||||||
// Bookmark IDs not cached,
|
// Bookmark IDs not cached,
|
||||||
|
@ -250,7 +250,7 @@ func (s *statusBookmarkDB) getStatusBookmarkIDs(ctx context.Context, statusID st
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *statusBookmarkDB) PutStatusBookmark(ctx context.Context, bookmark *gtsmodel.StatusBookmark) error {
|
func (s *statusBookmarkDB) PutStatusBookmark(ctx context.Context, bookmark *gtsmodel.StatusBookmark) error {
|
||||||
return s.state.Caches.GTS.StatusBookmark.Store(bookmark, func() error {
|
return s.state.Caches.DB.StatusBookmark.Store(bookmark, func() error {
|
||||||
_, err := s.db.NewInsert().Model(bookmark).Exec(ctx)
|
_, err := s.db.NewInsert().Model(bookmark).Exec(ctx)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
|
@ -265,7 +265,7 @@ func (s *statusBookmarkDB) DeleteStatusBookmarkByID(ctx context.Context, id stri
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
s.state.Caches.GTS.StatusBookmark.Invalidate("ID", id)
|
s.state.Caches.DB.StatusBookmark.Invalidate("ID", id)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -280,12 +280,12 @@ func (s *statusBookmarkDB) DeleteStatusBookmarks(ctx context.Context, targetAcco
|
||||||
|
|
||||||
if targetAccountID != "" {
|
if targetAccountID != "" {
|
||||||
q = q.Where("? = ?", bun.Ident("status_bookmark.target_account_id"), targetAccountID)
|
q = q.Where("? = ?", bun.Ident("status_bookmark.target_account_id"), targetAccountID)
|
||||||
defer s.state.Caches.GTS.StatusBookmark.Invalidate("TargetAccountID", targetAccountID)
|
defer s.state.Caches.DB.StatusBookmark.Invalidate("TargetAccountID", targetAccountID)
|
||||||
}
|
}
|
||||||
|
|
||||||
if originAccountID != "" {
|
if originAccountID != "" {
|
||||||
q = q.Where("? = ?", bun.Ident("status_bookmark.account_id"), originAccountID)
|
q = q.Where("? = ?", bun.Ident("status_bookmark.account_id"), originAccountID)
|
||||||
defer s.state.Caches.GTS.StatusBookmark.Invalidate("AccountID", originAccountID)
|
defer s.state.Caches.DB.StatusBookmark.Invalidate("AccountID", originAccountID)
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := q.Exec(ctx); err != nil {
|
if _, err := q.Exec(ctx); err != nil {
|
||||||
|
@ -293,11 +293,11 @@ func (s *statusBookmarkDB) DeleteStatusBookmarks(ctx context.Context, targetAcco
|
||||||
}
|
}
|
||||||
|
|
||||||
if targetAccountID != "" {
|
if targetAccountID != "" {
|
||||||
s.state.Caches.GTS.StatusBookmark.Invalidate("TargetAccountID", targetAccountID)
|
s.state.Caches.DB.StatusBookmark.Invalidate("TargetAccountID", targetAccountID)
|
||||||
}
|
}
|
||||||
|
|
||||||
if originAccountID != "" {
|
if originAccountID != "" {
|
||||||
s.state.Caches.GTS.StatusBookmark.Invalidate("AccountID", originAccountID)
|
s.state.Caches.DB.StatusBookmark.Invalidate("AccountID", originAccountID)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -311,6 +311,6 @@ func (s *statusBookmarkDB) DeleteStatusBookmarksForStatus(ctx context.Context, s
|
||||||
if _, err := q.Exec(ctx); err != nil {
|
if _, err := q.Exec(ctx); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
s.state.Caches.GTS.StatusBookmark.Invalidate("StatusID", statusID)
|
s.state.Caches.DB.StatusBookmark.Invalidate("StatusID", statusID)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,7 +95,7 @@ func (s *statusFaveDB) GetStatusFaveByURI(ctx context.Context, uri string) (*gts
|
||||||
|
|
||||||
func (s *statusFaveDB) getStatusFave(ctx context.Context, lookup string, dbQuery func(*gtsmodel.StatusFave) error, keyParts ...any) (*gtsmodel.StatusFave, error) {
|
func (s *statusFaveDB) getStatusFave(ctx context.Context, lookup string, dbQuery func(*gtsmodel.StatusFave) error, keyParts ...any) (*gtsmodel.StatusFave, error) {
|
||||||
// Fetch status fave from database cache with loader callback
|
// Fetch status fave from database cache with loader callback
|
||||||
fave, err := s.state.Caches.GTS.StatusFave.LoadOne(lookup, func() (*gtsmodel.StatusFave, error) {
|
fave, err := s.state.Caches.DB.StatusFave.LoadOne(lookup, func() (*gtsmodel.StatusFave, error) {
|
||||||
var fave gtsmodel.StatusFave
|
var fave gtsmodel.StatusFave
|
||||||
|
|
||||||
// Not cached! Perform database query.
|
// Not cached! Perform database query.
|
||||||
|
@ -130,7 +130,7 @@ func (s *statusFaveDB) GetStatusFaves(ctx context.Context, statusID string) ([]*
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load all fave IDs via cache loader callbacks.
|
// Load all fave IDs via cache loader callbacks.
|
||||||
faves, err := s.state.Caches.GTS.StatusFave.LoadIDs("ID",
|
faves, err := s.state.Caches.DB.StatusFave.LoadIDs("ID",
|
||||||
faveIDs,
|
faveIDs,
|
||||||
func(uncached []string) ([]*gtsmodel.StatusFave, error) {
|
func(uncached []string) ([]*gtsmodel.StatusFave, error) {
|
||||||
// Preallocate expected length of uncached faves.
|
// Preallocate expected length of uncached faves.
|
||||||
|
@ -189,7 +189,7 @@ func (s *statusFaveDB) CountStatusFaves(ctx context.Context, statusID string) (i
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *statusFaveDB) getStatusFaveIDs(ctx context.Context, statusID string) ([]string, error) {
|
func (s *statusFaveDB) getStatusFaveIDs(ctx context.Context, statusID string) ([]string, error) {
|
||||||
return s.state.Caches.GTS.StatusFaveIDs.Load(statusID, func() ([]string, error) {
|
return s.state.Caches.DB.StatusFaveIDs.Load(statusID, func() ([]string, error) {
|
||||||
var faveIDs []string
|
var faveIDs []string
|
||||||
|
|
||||||
// Status fave IDs not in cache, perform DB query!
|
// Status fave IDs not in cache, perform DB query!
|
||||||
|
@ -249,7 +249,7 @@ func (s *statusFaveDB) PopulateStatusFave(ctx context.Context, statusFave *gtsmo
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *statusFaveDB) PutStatusFave(ctx context.Context, fave *gtsmodel.StatusFave) error {
|
func (s *statusFaveDB) PutStatusFave(ctx context.Context, fave *gtsmodel.StatusFave) error {
|
||||||
return s.state.Caches.GTS.StatusFave.Store(fave, func() error {
|
return s.state.Caches.DB.StatusFave.Store(fave, func() error {
|
||||||
_, err := s.db.
|
_, err := s.db.
|
||||||
NewInsert().
|
NewInsert().
|
||||||
Model(fave).
|
Model(fave).
|
||||||
|
@ -267,7 +267,7 @@ func (s *statusFaveDB) UpdateStatusFave(ctx context.Context, fave *gtsmodel.Stat
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the status fave model in the database.
|
// Update the status fave model in the database.
|
||||||
return s.state.Caches.GTS.StatusFave.Store(fave, func() error {
|
return s.state.Caches.DB.StatusFave.Store(fave, func() error {
|
||||||
_, err := s.db.
|
_, err := s.db.
|
||||||
NewUpdate().
|
NewUpdate().
|
||||||
Model(fave).
|
Model(fave).
|
||||||
|
@ -298,10 +298,10 @@ func (s *statusFaveDB) DeleteStatusFaveByID(ctx context.Context, id string) erro
|
||||||
|
|
||||||
if statusID != "" {
|
if statusID != "" {
|
||||||
// Invalidate any cached status faves for this status.
|
// Invalidate any cached status faves for this status.
|
||||||
s.state.Caches.GTS.StatusFave.Invalidate("ID", id)
|
s.state.Caches.DB.StatusFave.Invalidate("ID", id)
|
||||||
|
|
||||||
// Invalidate any cached status fave IDs for this status.
|
// Invalidate any cached status fave IDs for this status.
|
||||||
s.state.Caches.GTS.StatusFaveIDs.Invalidate(statusID)
|
s.state.Caches.DB.StatusFaveIDs.Invalidate(statusID)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -342,10 +342,10 @@ func (s *statusFaveDB) DeleteStatusFaves(ctx context.Context, targetAccountID st
|
||||||
statusIDs = util.Deduplicate(statusIDs)
|
statusIDs = util.Deduplicate(statusIDs)
|
||||||
|
|
||||||
// Invalidate any cached status faves for this status ID.
|
// Invalidate any cached status faves for this status ID.
|
||||||
s.state.Caches.GTS.StatusFave.InvalidateIDs("ID", statusIDs)
|
s.state.Caches.DB.StatusFave.InvalidateIDs("ID", statusIDs)
|
||||||
|
|
||||||
// Invalidate any cached status fave IDs for this status ID.
|
// Invalidate any cached status fave IDs for this status ID.
|
||||||
s.state.Caches.GTS.StatusFaveIDs.Invalidate(statusIDs...)
|
s.state.Caches.DB.StatusFaveIDs.Invalidate(statusIDs...)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -360,10 +360,10 @@ func (s *statusFaveDB) DeleteStatusFavesForStatus(ctx context.Context, statusID
|
||||||
}
|
}
|
||||||
|
|
||||||
// Invalidate any cached status faves for this status.
|
// Invalidate any cached status faves for this status.
|
||||||
s.state.Caches.GTS.StatusFave.Invalidate("ID", statusID)
|
s.state.Caches.DB.StatusFave.Invalidate("ID", statusID)
|
||||||
|
|
||||||
// Invalidate any cached status fave IDs for this status.
|
// Invalidate any cached status fave IDs for this status.
|
||||||
s.state.Caches.GTS.StatusFaveIDs.Invalidate(statusID)
|
s.state.Caches.DB.StatusFaveIDs.Invalidate(statusID)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@ type tagDB struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *tagDB) GetTag(ctx context.Context, id string) (*gtsmodel.Tag, error) {
|
func (t *tagDB) GetTag(ctx context.Context, id string) (*gtsmodel.Tag, error) {
|
||||||
return t.state.Caches.GTS.Tag.LoadOne("ID", func() (*gtsmodel.Tag, error) {
|
return t.state.Caches.DB.Tag.LoadOne("ID", func() (*gtsmodel.Tag, error) {
|
||||||
var tag gtsmodel.Tag
|
var tag gtsmodel.Tag
|
||||||
|
|
||||||
q := t.db.
|
q := t.db.
|
||||||
|
@ -54,7 +54,7 @@ func (t *tagDB) GetTagByName(ctx context.Context, name string) (*gtsmodel.Tag, e
|
||||||
name = strings.TrimSpace(name)
|
name = strings.TrimSpace(name)
|
||||||
name = strings.ToLower(name)
|
name = strings.ToLower(name)
|
||||||
|
|
||||||
return t.state.Caches.GTS.Tag.LoadOne("Name", func() (*gtsmodel.Tag, error) {
|
return t.state.Caches.DB.Tag.LoadOne("Name", func() (*gtsmodel.Tag, error) {
|
||||||
var tag gtsmodel.Tag
|
var tag gtsmodel.Tag
|
||||||
|
|
||||||
q := t.db.
|
q := t.db.
|
||||||
|
@ -72,7 +72,7 @@ func (t *tagDB) GetTagByName(ctx context.Context, name string) (*gtsmodel.Tag, e
|
||||||
|
|
||||||
func (t *tagDB) GetTags(ctx context.Context, ids []string) ([]*gtsmodel.Tag, error) {
|
func (t *tagDB) GetTags(ctx context.Context, ids []string) ([]*gtsmodel.Tag, error) {
|
||||||
// Load all tag IDs via cache loader callbacks.
|
// Load all tag IDs via cache loader callbacks.
|
||||||
tags, err := t.state.Caches.GTS.Tag.LoadIDs("ID",
|
tags, err := t.state.Caches.DB.Tag.LoadIDs("ID",
|
||||||
ids,
|
ids,
|
||||||
func(uncached []string) ([]*gtsmodel.Tag, error) {
|
func(uncached []string) ([]*gtsmodel.Tag, error) {
|
||||||
// Preallocate expected length of uncached tags.
|
// Preallocate expected length of uncached tags.
|
||||||
|
@ -115,7 +115,7 @@ func (t *tagDB) PutTag(ctx context.Context, tag *gtsmodel.Tag) error {
|
||||||
t2.Name = strings.ToLower(t2.Name)
|
t2.Name = strings.ToLower(t2.Name)
|
||||||
|
|
||||||
// Insert the copy.
|
// Insert the copy.
|
||||||
if err := t.state.Caches.GTS.Tag.Store(t2, func() error {
|
if err := t.state.Caches.DB.Tag.Store(t2, func() error {
|
||||||
_, err := t.db.NewInsert().Model(t2).Exec(ctx)
|
_, err := t.db.NewInsert().Model(t2).Exec(ctx)
|
||||||
return err
|
return err
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
|
|
|
@ -42,7 +42,7 @@ func (t *threadDB) PutThread(ctx context.Context, thread *gtsmodel.Thread) error
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *threadDB) GetThreadMute(ctx context.Context, id string) (*gtsmodel.ThreadMute, error) {
|
func (t *threadDB) GetThreadMute(ctx context.Context, id string) (*gtsmodel.ThreadMute, error) {
|
||||||
return t.state.Caches.GTS.ThreadMute.LoadOne("ID", func() (*gtsmodel.ThreadMute, error) {
|
return t.state.Caches.DB.ThreadMute.LoadOne("ID", func() (*gtsmodel.ThreadMute, error) {
|
||||||
var threadMute gtsmodel.ThreadMute
|
var threadMute gtsmodel.ThreadMute
|
||||||
|
|
||||||
q := t.db.
|
q := t.db.
|
||||||
|
@ -63,7 +63,7 @@ func (t *threadDB) GetThreadMutedByAccount(
|
||||||
threadID string,
|
threadID string,
|
||||||
accountID string,
|
accountID string,
|
||||||
) (*gtsmodel.ThreadMute, error) {
|
) (*gtsmodel.ThreadMute, error) {
|
||||||
return t.state.Caches.GTS.ThreadMute.LoadOne("ThreadID,AccountID", func() (*gtsmodel.ThreadMute, error) {
|
return t.state.Caches.DB.ThreadMute.LoadOne("ThreadID,AccountID", func() (*gtsmodel.ThreadMute, error) {
|
||||||
var threadMute gtsmodel.ThreadMute
|
var threadMute gtsmodel.ThreadMute
|
||||||
|
|
||||||
q := t.db.
|
q := t.db.
|
||||||
|
@ -98,7 +98,7 @@ func (t *threadDB) IsThreadMutedByAccount(
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *threadDB) PutThreadMute(ctx context.Context, threadMute *gtsmodel.ThreadMute) error {
|
func (t *threadDB) PutThreadMute(ctx context.Context, threadMute *gtsmodel.ThreadMute) error {
|
||||||
return t.state.Caches.GTS.ThreadMute.Store(threadMute, func() error {
|
return t.state.Caches.DB.ThreadMute.Store(threadMute, func() error {
|
||||||
_, err := t.db.NewInsert().Model(threadMute).Exec(ctx)
|
_, err := t.db.NewInsert().Model(threadMute).Exec(ctx)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
|
@ -112,6 +112,6 @@ func (t *threadDB) DeleteThreadMute(ctx context.Context, id string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
t.state.Caches.GTS.ThreadMute.Invalidate("ID", id)
|
t.state.Caches.DB.ThreadMute.Invalidate("ID", id)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@ type tombstoneDB struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *tombstoneDB) GetTombstoneByURI(ctx context.Context, uri string) (*gtsmodel.Tombstone, error) {
|
func (t *tombstoneDB) GetTombstoneByURI(ctx context.Context, uri string) (*gtsmodel.Tombstone, error) {
|
||||||
return t.state.Caches.GTS.Tombstone.LoadOne("URI", func() (*gtsmodel.Tombstone, error) {
|
return t.state.Caches.DB.Tombstone.LoadOne("URI", func() (*gtsmodel.Tombstone, error) {
|
||||||
var tomb gtsmodel.Tombstone
|
var tomb gtsmodel.Tombstone
|
||||||
|
|
||||||
q := t.db.
|
q := t.db.
|
||||||
|
@ -57,7 +57,7 @@ func (t *tombstoneDB) TombstoneExistsWithURI(ctx context.Context, uri string) (b
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *tombstoneDB) PutTombstone(ctx context.Context, tombstone *gtsmodel.Tombstone) error {
|
func (t *tombstoneDB) PutTombstone(ctx context.Context, tombstone *gtsmodel.Tombstone) error {
|
||||||
return t.state.Caches.GTS.Tombstone.Store(tombstone, func() error {
|
return t.state.Caches.DB.Tombstone.Store(tombstone, func() error {
|
||||||
_, err := t.db.
|
_, err := t.db.
|
||||||
NewInsert().
|
NewInsert().
|
||||||
Model(tombstone).
|
Model(tombstone).
|
||||||
|
@ -67,7 +67,7 @@ func (t *tombstoneDB) PutTombstone(ctx context.Context, tombstone *gtsmodel.Tomb
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *tombstoneDB) DeleteTombstone(ctx context.Context, id string) error {
|
func (t *tombstoneDB) DeleteTombstone(ctx context.Context, id string) error {
|
||||||
defer t.state.Caches.GTS.Tombstone.Invalidate("ID", id)
|
defer t.state.Caches.DB.Tombstone.Invalidate("ID", id)
|
||||||
|
|
||||||
// Delete tombstone from DB.
|
// Delete tombstone from DB.
|
||||||
_, err := t.db.NewDelete().
|
_, err := t.db.NewDelete().
|
||||||
|
|
|
@ -116,7 +116,7 @@ func (u *userDB) GetUserByConfirmationToken(ctx context.Context, token string) (
|
||||||
|
|
||||||
func (u *userDB) getUser(ctx context.Context, lookup string, dbQuery func(*gtsmodel.User) error, keyParts ...any) (*gtsmodel.User, error) {
|
func (u *userDB) getUser(ctx context.Context, lookup string, dbQuery func(*gtsmodel.User) error, keyParts ...any) (*gtsmodel.User, error) {
|
||||||
// Fetch user from database cache with loader callback.
|
// Fetch user from database cache with loader callback.
|
||||||
user, err := u.state.Caches.GTS.User.LoadOne(lookup, func() (*gtsmodel.User, error) {
|
user, err := u.state.Caches.DB.User.LoadOne(lookup, func() (*gtsmodel.User, error) {
|
||||||
var user gtsmodel.User
|
var user gtsmodel.User
|
||||||
|
|
||||||
// Not cached! perform database query.
|
// Not cached! perform database query.
|
||||||
|
@ -179,7 +179,7 @@ func (u *userDB) GetAllUsers(ctx context.Context) ([]*gtsmodel.User, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *userDB) PutUser(ctx context.Context, user *gtsmodel.User) error {
|
func (u *userDB) PutUser(ctx context.Context, user *gtsmodel.User) error {
|
||||||
return u.state.Caches.GTS.User.Store(user, func() error {
|
return u.state.Caches.DB.User.Store(user, func() error {
|
||||||
_, err := u.db.
|
_, err := u.db.
|
||||||
NewInsert().
|
NewInsert().
|
||||||
Model(user).
|
Model(user).
|
||||||
|
@ -197,7 +197,7 @@ func (u *userDB) UpdateUser(ctx context.Context, user *gtsmodel.User, columns ..
|
||||||
columns = append(columns, "updated_at")
|
columns = append(columns, "updated_at")
|
||||||
}
|
}
|
||||||
|
|
||||||
return u.state.Caches.GTS.User.Store(user, func() error {
|
return u.state.Caches.DB.User.Store(user, func() error {
|
||||||
_, err := u.db.
|
_, err := u.db.
|
||||||
NewUpdate().
|
NewUpdate().
|
||||||
Model(user).
|
Model(user).
|
||||||
|
@ -209,7 +209,7 @@ func (u *userDB) UpdateUser(ctx context.Context, user *gtsmodel.User, columns ..
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *userDB) DeleteUserByID(ctx context.Context, userID string) error {
|
func (u *userDB) DeleteUserByID(ctx context.Context, userID string) error {
|
||||||
defer u.state.Caches.GTS.User.Invalidate("ID", userID)
|
defer u.state.Caches.DB.User.Invalidate("ID", userID)
|
||||||
|
|
||||||
// Load user into cache before attempting a delete,
|
// Load user into cache before attempting a delete,
|
||||||
// as we need it cached in order to trigger the invalidate
|
// as we need it cached in order to trigger the invalidate
|
||||||
|
|
|
@ -80,7 +80,7 @@ func (suite *AnnounceTestSuite) TestAnnounceTwice() {
|
||||||
// Insert the boost-of status into the
|
// Insert the boost-of status into the
|
||||||
// DB cache to emulate processor handling
|
// DB cache to emulate processor handling
|
||||||
boost.ID, _ = id.NewULIDFromTime(boost.CreatedAt)
|
boost.ID, _ = id.NewULIDFromTime(boost.CreatedAt)
|
||||||
suite.state.Caches.GTS.Status.Put(boost)
|
suite.state.Caches.DB.Status.Put(boost)
|
||||||
|
|
||||||
// only the URI will be set for the boosted status
|
// only the URI will be set for the boosted status
|
||||||
// because it still needs to be dereferenced
|
// because it still needs to be dereferenced
|
||||||
|
|
|
@ -36,7 +36,7 @@ import (
|
||||||
func (t *transport) webfingerURLFor(targetDomain string) (string, bool) {
|
func (t *transport) webfingerURLFor(targetDomain string) (string, bool) {
|
||||||
url := "https://" + targetDomain + "/.well-known/webfinger"
|
url := "https://" + targetDomain + "/.well-known/webfinger"
|
||||||
|
|
||||||
wc := t.controller.state.Caches.GTS.Webfinger
|
wc := t.controller.state.Caches.Webfinger
|
||||||
|
|
||||||
// We're doing the manual locking/unlocking here to be able to
|
// We're doing the manual locking/unlocking here to be able to
|
||||||
// safely call Cache.Get instead of Get, as the latter updates the
|
// safely call Cache.Get instead of Get, as the latter updates the
|
||||||
|
@ -95,7 +95,7 @@ func (t *transport) Finger(ctx context.Context, targetUsername string, targetDom
|
||||||
// If we got a response we consider successful on a cached URL, i.e one set
|
// If we got a response we consider successful on a cached URL, i.e one set
|
||||||
// by us later on when a host-meta based webfinger request succeeded, set it
|
// by us later on when a host-meta based webfinger request succeeded, set it
|
||||||
// again here to renew the TTL
|
// again here to renew the TTL
|
||||||
t.controller.state.Caches.GTS.Webfinger.Set(targetDomain, url)
|
t.controller.state.Caches.Webfinger.Set(targetDomain, url)
|
||||||
}
|
}
|
||||||
|
|
||||||
if rsp.StatusCode == http.StatusGone {
|
if rsp.StatusCode == http.StatusGone {
|
||||||
|
@ -159,7 +159,7 @@ func (t *transport) Finger(ctx context.Context, targetUsername string, targetDom
|
||||||
// we asked for is gone. This means the endpoint itself is valid and we should
|
// we asked for is gone. This means the endpoint itself is valid and we should
|
||||||
// cache it for future queries to the same domain
|
// cache it for future queries to the same domain
|
||||||
if rsp.StatusCode == http.StatusGone {
|
if rsp.StatusCode == http.StatusGone {
|
||||||
t.controller.state.Caches.GTS.Webfinger.Set(targetDomain, host)
|
t.controller.state.Caches.Webfinger.Set(targetDomain, host)
|
||||||
return nil, fmt.Errorf("account has been deleted/is gone")
|
return nil, fmt.Errorf("account has been deleted/is gone")
|
||||||
}
|
}
|
||||||
// We've reached the end of the line here, both the original request
|
// We've reached the end of the line here, both the original request
|
||||||
|
@ -170,7 +170,7 @@ func (t *transport) Finger(ctx context.Context, targetUsername string, targetDom
|
||||||
// Set the URL in cache here, since host-meta told us this should be the
|
// Set the URL in cache here, since host-meta told us this should be the
|
||||||
// valid one, it's different from the default and our request to it did
|
// valid one, it's different from the default and our request to it did
|
||||||
// not fail in any manner
|
// not fail in any manner
|
||||||
t.controller.state.Caches.GTS.Webfinger.Set(targetDomain, host)
|
t.controller.state.Caches.Webfinger.Set(targetDomain, host)
|
||||||
|
|
||||||
return io.ReadAll(rsp.Body)
|
return io.ReadAll(rsp.Body)
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ type FingerTestSuite struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *FingerTestSuite) TestFinger() {
|
func (suite *FingerTestSuite) TestFinger() {
|
||||||
wc := suite.state.Caches.GTS.Webfinger
|
wc := suite.state.Caches.Webfinger
|
||||||
suite.Equal(0, wc.Len(), "expect webfinger cache to be empty")
|
suite.Equal(0, wc.Len(), "expect webfinger cache to be empty")
|
||||||
|
|
||||||
_, err := suite.transport.Finger(context.TODO(), "brand_new_person", "unknown-instance.com")
|
_, err := suite.transport.Finger(context.TODO(), "brand_new_person", "unknown-instance.com")
|
||||||
|
@ -43,7 +43,7 @@ func (suite *FingerTestSuite) TestFinger() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *FingerTestSuite) TestFingerWithHostMeta() {
|
func (suite *FingerTestSuite) TestFingerWithHostMeta() {
|
||||||
wc := suite.state.Caches.GTS.Webfinger
|
wc := suite.state.Caches.Webfinger
|
||||||
suite.Equal(0, wc.Len(), "expect webfinger cache to be empty")
|
suite.Equal(0, wc.Len(), "expect webfinger cache to be empty")
|
||||||
|
|
||||||
_, err := suite.transport.Finger(context.TODO(), "someone", "misconfigured-instance.com")
|
_, err := suite.transport.Finger(context.TODO(), "someone", "misconfigured-instance.com")
|
||||||
|
@ -60,7 +60,7 @@ func (suite *FingerTestSuite) TestFingerWithHostMetaCacheStrategy() {
|
||||||
suite.T().Skip("this test is flaky on CI for as of yet unknown reasons")
|
suite.T().Skip("this test is flaky on CI for as of yet unknown reasons")
|
||||||
}
|
}
|
||||||
|
|
||||||
wc := suite.state.Caches.GTS.Webfinger
|
wc := suite.state.Caches.Webfinger
|
||||||
|
|
||||||
// Reset the sweep frequency so nothing interferes with the test
|
// Reset the sweep frequency so nothing interferes with the test
|
||||||
wc.Stop()
|
wc.Stop()
|
||||||
|
|
|
@ -631,7 +631,7 @@ func (suite *ASToInternalTestSuite) TestParseHonkAccount() {
|
||||||
suite.False(*dbAcct.Discoverable)
|
suite.False(*dbAcct.Discoverable)
|
||||||
|
|
||||||
// Clear caches.
|
// Clear caches.
|
||||||
suite.state.Caches.GTS = cache.GTSCaches{}
|
suite.state.Caches.DB = cache.DBCaches{}
|
||||||
suite.state.Caches.Init()
|
suite.state.Caches.Init()
|
||||||
|
|
||||||
dbAcct, err = suite.db.GetAccountByID(ctx, acct.ID)
|
dbAcct, err = suite.db.GetAccountByID(ctx, acct.ID)
|
||||||
|
|
Loading…
Reference in a new issue