mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-10-29 07:22:24 -05:00
[chore] Add interaction policy gtsmodels (#3075)
* [chore] introduce interaction policy gts models * update migration a smidge * fix copy paste typo * update migration * use int for InteractionType
This commit is contained in:
parent
8f8093aea4
commit
5bc567196b
46 changed files with 1318 additions and 531 deletions
2
internal/cache/cache.go
vendored
2
internal/cache/cache.go
vendored
|
|
@ -73,6 +73,7 @@ func (c *Caches) Init() {
|
|||
c.initFollowRequestIDs()
|
||||
c.initInReplyToIDs()
|
||||
c.initInstance()
|
||||
c.initInteractionApproval()
|
||||
c.initList()
|
||||
c.initListEntry()
|
||||
c.initMarker()
|
||||
|
|
@ -145,6 +146,7 @@ func (c *Caches) Sweep(threshold float64) {
|
|||
c.GTS.FollowRequestIDs.Trim(threshold)
|
||||
c.GTS.InReplyToIDs.Trim(threshold)
|
||||
c.GTS.Instance.Trim(threshold)
|
||||
c.GTS.InteractionApproval.Trim(threshold)
|
||||
c.GTS.List.Trim(threshold)
|
||||
c.GTS.ListEntry.Trim(threshold)
|
||||
c.GTS.Marker.Trim(threshold)
|
||||
|
|
|
|||
37
internal/cache/db.go
vendored
37
internal/cache/db.go
vendored
|
|
@ -100,6 +100,9 @@ type GTSCaches struct {
|
|||
// Instance provides access to the gtsmodel Instance database cache.
|
||||
Instance StructCache[*gtsmodel.Instance]
|
||||
|
||||
// InteractionApproval provides access to the gtsmodel InteractionApproval database cache.
|
||||
InteractionApproval StructCache[*gtsmodel.InteractionApproval]
|
||||
|
||||
// InReplyToIDs provides access to the status in reply to IDs list database cache.
|
||||
InReplyToIDs SliceCache[string]
|
||||
|
||||
|
|
@ -737,6 +740,39 @@ func (c *Caches) initInstance() {
|
|||
})
|
||||
}
|
||||
|
||||
func (c *Caches) initInteractionApproval() {
|
||||
// Calculate maximum cache size.
|
||||
cap := calculateResultCacheMax(
|
||||
sizeofInteractionApproval(),
|
||||
config.GetCacheInteractionApprovalMemRatio(),
|
||||
)
|
||||
|
||||
log.Infof(nil, "cache size = %d", cap)
|
||||
|
||||
copyF := func(i1 *gtsmodel.InteractionApproval) *gtsmodel.InteractionApproval {
|
||||
i2 := new(gtsmodel.InteractionApproval)
|
||||
*i2 = *i1
|
||||
|
||||
// Don't include ptr fields that
|
||||
// will be populated separately.
|
||||
// See internal/db/bundb/interaction.go.
|
||||
i2.Account = nil
|
||||
i2.InteractingAccount = nil
|
||||
|
||||
return i2
|
||||
}
|
||||
|
||||
c.GTS.InteractionApproval.Init(structr.CacheConfig[*gtsmodel.InteractionApproval]{
|
||||
Indices: []structr.IndexConfig{
|
||||
{Fields: "ID"},
|
||||
{Fields: "URI"},
|
||||
},
|
||||
MaxSize: cap,
|
||||
IgnoreErr: ignoreErrors,
|
||||
Copy: copyF,
|
||||
})
|
||||
}
|
||||
|
||||
func (c *Caches) initList() {
|
||||
// Calculate maximum cache size.
|
||||
cap := calculateResultCacheMax(
|
||||
|
|
@ -1188,6 +1224,7 @@ func (c *Caches) initStatusFave() {
|
|||
c.GTS.StatusFave.Init(structr.CacheConfig[*gtsmodel.StatusFave]{
|
||||
Indices: []structr.IndexConfig{
|
||||
{Fields: "ID"},
|
||||
{Fields: "URI"},
|
||||
{Fields: "AccountID,StatusID"},
|
||||
{Fields: "StatusID", Multiple: true},
|
||||
},
|
||||
|
|
|
|||
17
internal/cache/size.go
vendored
17
internal/cache/size.go
vendored
|
|
@ -189,6 +189,7 @@ func totalOfRatios() float64 {
|
|||
config.GetCacheFollowRequestMemRatio() +
|
||||
config.GetCacheFollowRequestIDsMemRatio() +
|
||||
config.GetCacheInstanceMemRatio() +
|
||||
config.GetCacheInteractionApprovalMemRatio() +
|
||||
config.GetCacheInReplyToIDsMemRatio() +
|
||||
config.GetCacheListMemRatio() +
|
||||
config.GetCacheListEntryMemRatio() +
|
||||
|
|
@ -425,6 +426,19 @@ func sizeofInstance() uintptr {
|
|||
}))
|
||||
}
|
||||
|
||||
func sizeofInteractionApproval() uintptr {
|
||||
return uintptr(size.Of(>smodel.InteractionApproval{
|
||||
ID: exampleID,
|
||||
CreatedAt: exampleTime,
|
||||
UpdatedAt: exampleTime,
|
||||
AccountID: exampleID,
|
||||
InteractingAccountID: exampleID,
|
||||
InteractionURI: exampleURI,
|
||||
InteractionType: gtsmodel.InteractionAnnounce,
|
||||
URI: exampleURI,
|
||||
}))
|
||||
}
|
||||
|
||||
func sizeofList() uintptr {
|
||||
return uintptr(size.Of(>smodel.List{
|
||||
ID: exampleID,
|
||||
|
|
@ -591,9 +605,6 @@ func sizeofStatus() uintptr {
|
|||
Language: "en",
|
||||
CreatedWithApplicationID: exampleID,
|
||||
Federated: func() *bool { ok := true; return &ok }(),
|
||||
Boostable: func() *bool { ok := true; return &ok }(),
|
||||
Replyable: func() *bool { ok := true; return &ok }(),
|
||||
Likeable: func() *bool { ok := true; return &ok }(),
|
||||
ActivityStreamsType: ap.ObjectNote,
|
||||
}))
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue