mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2025-06-05 21:59:39 +02:00
[feature/chore] Add Move database functions + cache (#2647)
* [feature/chore] Add Move database functions + cache * add move mem ratio to envparsing.sh * update comment
This commit is contained in:
2
internal/cache/cache.go
vendored
2
internal/cache/cache.go
vendored
@ -75,6 +75,7 @@ func (c *Caches) Init() {
|
||||
c.initMarker()
|
||||
c.initMedia()
|
||||
c.initMention()
|
||||
c.initMove()
|
||||
c.initNotification()
|
||||
c.initPoll()
|
||||
c.initPollVote()
|
||||
@ -135,6 +136,7 @@ func (c *Caches) Sweep(threshold float64) {
|
||||
c.GTS.Marker.Trim(threshold)
|
||||
c.GTS.Media.Trim(threshold)
|
||||
c.GTS.Mention.Trim(threshold)
|
||||
c.GTS.Move.Trim(threshold)
|
||||
c.GTS.Notification.Trim(threshold)
|
||||
c.GTS.Poll.Trim(threshold)
|
||||
c.GTS.Report.Trim(threshold)
|
||||
|
32
internal/cache/db.go
vendored
32
internal/cache/db.go
vendored
@ -117,6 +117,9 @@ type GTSCaches struct {
|
||||
// Mention provides access to the gtsmodel Mention database cache.
|
||||
Mention structr.Cache[*gtsmodel.Mention]
|
||||
|
||||
// Move provides access to the gtsmodel Move database cache.
|
||||
Move structr.Cache[*gtsmodel.Move]
|
||||
|
||||
// Notification provides access to the gtsmodel Notification database cache.
|
||||
Notification structr.Cache[*gtsmodel.Notification]
|
||||
|
||||
@ -185,6 +188,8 @@ func (c *Caches) initAccount() {
|
||||
a2.AvatarMediaAttachment = nil
|
||||
a2.HeaderMediaAttachment = nil
|
||||
a2.Emojis = nil
|
||||
a2.AlsoKnownAs = nil
|
||||
a2.Move = nil
|
||||
|
||||
return a2
|
||||
}
|
||||
@ -816,6 +821,33 @@ func (c *Caches) initMention() {
|
||||
})
|
||||
}
|
||||
|
||||
func (c *Caches) initMove() {
|
||||
// Calculate maximum cache size.
|
||||
cap := calculateResultCacheMax(
|
||||
sizeofMove(), // model in-mem size.
|
||||
config.GetCacheMoveMemRatio(),
|
||||
)
|
||||
|
||||
log.Infof(nil, "cache size = %d", cap)
|
||||
|
||||
c.GTS.Move.Init(structr.Config[*gtsmodel.Move]{
|
||||
Indices: []structr.IndexConfig{
|
||||
{Fields: "ID"},
|
||||
{Fields: "URI"},
|
||||
{Fields: "OriginURI,TargetURI"},
|
||||
{Fields: "OriginURI", Multiple: true},
|
||||
{Fields: "TargetURI", Multiple: true},
|
||||
},
|
||||
MaxSize: cap,
|
||||
IgnoreErr: ignoreErrors,
|
||||
CopyValue: func(m1 *gtsmodel.Move) *gtsmodel.Move {
|
||||
m2 := new(gtsmodel.Move)
|
||||
*m2 = *m1
|
||||
return m2
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func (c *Caches) initNotification() {
|
||||
// Calculate maximum cache size.
|
||||
cap := calculateResultCacheMax(
|
||||
|
4
internal/cache/invalidate.go
vendored
4
internal/cache/invalidate.go
vendored
@ -54,6 +54,10 @@ func (c *Caches) OnInvalidateAccount(account *gtsmodel.Account) {
|
||||
|
||||
// Invalidate this account's block lists.
|
||||
c.GTS.BlockIDs.Invalidate(account.ID)
|
||||
|
||||
// Invalidate this account's Move(s).
|
||||
c.GTS.Move.Invalidate("OriginURI", account.URI)
|
||||
c.GTS.Move.Invalidate("TargetURI", account.URI)
|
||||
}
|
||||
|
||||
func (c *Caches) OnInvalidateBlock(block *gtsmodel.Block) {
|
||||
|
13
internal/cache/size.go
vendored
13
internal/cache/size.go
vendored
@ -460,6 +460,19 @@ func sizeofMention() uintptr {
|
||||
}))
|
||||
}
|
||||
|
||||
func sizeofMove() uintptr {
|
||||
return uintptr(size.Of(>smodel.Move{
|
||||
ID: exampleID,
|
||||
CreatedAt: exampleTime,
|
||||
UpdatedAt: exampleTime,
|
||||
AttemptedAt: exampleTime,
|
||||
SucceededAt: exampleTime,
|
||||
OriginURI: exampleURI,
|
||||
TargetURI: exampleURI,
|
||||
URI: exampleURI,
|
||||
}))
|
||||
}
|
||||
|
||||
func sizeofNotification() uintptr {
|
||||
return uintptr(size.Of(>smodel.Notification{
|
||||
ID: exampleID,
|
||||
|
Reference in New Issue
Block a user