mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2025-06-05 21:59:39 +02:00
[performance] overhaul struct (+ result) caching library for simplicity, performance and multiple-result lookups (#2535)
* rewrite cache library as codeberg.org/gruf/go-structr, implement in gotosocial
* use actual go-structr release version (not just commit hash)
* revert go toolchain changes (damn you go for auto changing this)
* fix go mod woes
* ensure %w is used in calls to errs.Appendf()
* fix error checking
* fix possible panic
* remove unnecessary start/stop functions, move to main Cache{} struct, add note regarding which caches require start/stop
* fix copy-paste artifact... 😇
* fix all comment copy-paste artifacts
* remove dropID() function, now we can just use slices.DeleteFunc()
* use util.Deduplicate() instead of collate(), move collate to util
* move orderByIDs() to util package and "generify"
* add a util.DeleteIf() function, use this to delete entries on failed population
* use slices.DeleteFunc() instead of util.DeleteIf() (i had the logic mixed up in my head somehow lol)
* add note about how collate differs from deduplicate
This commit is contained in:
@@ -491,7 +491,7 @@ func (c *Converter) StatusToAS(ctx context.Context, s *gtsmodel.Status) (ap.Stat
|
||||
|
||||
// tag -- mentions
|
||||
mentions := s.Mentions
|
||||
if len(s.MentionIDs) > len(mentions) {
|
||||
if len(s.MentionIDs) != len(mentions) {
|
||||
mentions, err = c.state.DB.GetMentions(ctx, s.MentionIDs)
|
||||
if err != nil {
|
||||
return nil, gtserror.Newf("error getting mentions: %w", err)
|
||||
@@ -507,14 +507,10 @@ func (c *Converter) StatusToAS(ctx context.Context, s *gtsmodel.Status) (ap.Stat
|
||||
|
||||
// tag -- emojis
|
||||
emojis := s.Emojis
|
||||
if len(s.EmojiIDs) > len(emojis) {
|
||||
emojis = []*gtsmodel.Emoji{}
|
||||
for _, emojiID := range s.EmojiIDs {
|
||||
emoji, err := c.state.DB.GetEmojiByID(ctx, emojiID)
|
||||
if err != nil {
|
||||
return nil, gtserror.Newf("error getting emoji %s from database: %w", emojiID, err)
|
||||
}
|
||||
emojis = append(emojis, emoji)
|
||||
if len(s.EmojiIDs) != len(emojis) {
|
||||
emojis, err = c.state.DB.GetEmojisByIDs(ctx, s.EmojiIDs)
|
||||
if err != nil {
|
||||
return nil, gtserror.Newf("error getting emojis from database: %w", err)
|
||||
}
|
||||
}
|
||||
for _, emoji := range emojis {
|
||||
@@ -527,7 +523,7 @@ func (c *Converter) StatusToAS(ctx context.Context, s *gtsmodel.Status) (ap.Stat
|
||||
|
||||
// tag -- hashtags
|
||||
hashtags := s.Tags
|
||||
if len(s.TagIDs) > len(hashtags) {
|
||||
if len(s.TagIDs) != len(hashtags) {
|
||||
hashtags, err = c.state.DB.GetTags(ctx, s.TagIDs)
|
||||
if err != nil {
|
||||
return nil, gtserror.Newf("error getting tags: %w", err)
|
||||
@@ -623,14 +619,10 @@ func (c *Converter) StatusToAS(ctx context.Context, s *gtsmodel.Status) (ap.Stat
|
||||
// attachments
|
||||
attachmentProp := streams.NewActivityStreamsAttachmentProperty()
|
||||
attachments := s.Attachments
|
||||
if len(s.AttachmentIDs) > len(attachments) {
|
||||
attachments = []*gtsmodel.MediaAttachment{}
|
||||
for _, attachmentID := range s.AttachmentIDs {
|
||||
attachment, err := c.state.DB.GetAttachmentByID(ctx, attachmentID)
|
||||
if err != nil {
|
||||
return nil, gtserror.Newf("error getting attachment %s from database: %w", attachmentID, err)
|
||||
}
|
||||
attachments = append(attachments, attachment)
|
||||
if len(s.AttachmentIDs) != len(attachments) {
|
||||
attachments, err = c.state.DB.GetAttachmentsByIDs(ctx, s.AttachmentIDs)
|
||||
if err != nil {
|
||||
return nil, gtserror.Newf("error getting attachments from database: %w", err)
|
||||
}
|
||||
}
|
||||
for _, a := range attachments {
|
||||
|
Reference in New Issue
Block a user