summaryrefslogtreecommitdiff
path: root/internal/processing
diff options
context:
space:
mode:
authorLibravatar tobi <tobi.smethurst@protonmail.com>2025-06-20 15:38:23 +0200
committerLibravatar tobi <kipvandenbos@noreply.codeberg.org>2025-06-20 15:38:23 +0200
commit38ff88f0062c2794eda88adcdc5ba3528783d093 (patch)
tree7ea29c3c0b38bc2a9c93a276b24fca5e17514a15 /internal/processing
parent[feature] Support incoming avatar/header descriptions (#4275) (diff)
downloadgotosocial-38ff88f0062c2794eda88adcdc5ba3528783d093.tar.xz
[bugfix] Queue implicit accepts *before* other side effects (#4282)
This PR just fiddles with the order in which we process status create / boost / fave side effects and implicit acceptances. The goal is to try to make sure the Accept message gets sent to a remote instance *before* the interaction with an implicitly accepted status. Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4282 Co-authored-by: tobi <tobi.smethurst@protonmail.com> Co-committed-by: tobi <tobi.smethurst@protonmail.com>
Diffstat (limited to 'internal/processing')
-rw-r--r--internal/processing/status/boost.go19
-rw-r--r--internal/processing/status/create.go31
-rw-r--r--internal/processing/status/fave.go19
3 files changed, 36 insertions, 33 deletions
diff --git a/internal/processing/status/boost.go b/internal/processing/status/boost.go
index 7c7162c12..4a97706ab 100644
--- a/internal/processing/status/boost.go
+++ b/internal/processing/status/boost.go
@@ -130,15 +130,6 @@ func (p *Processor) BoostCreate(
return nil, gtserror.NewErrorInternalError(err)
}
- // Process side effects asynchronously.
- p.state.Workers.Client.Queue.Push(&messages.FromClientAPI{
- APObjectType: ap.ActivityAnnounce,
- APActivityType: ap.ActivityCreate,
- GTSModel: boost,
- Origin: requester,
- Target: target.Account,
- })
-
// If the boost target status replies to a status
// that we own, and has a pending interaction
// request, use the boost as an implicit accept.
@@ -156,6 +147,16 @@ func (p *Processor) BoostCreate(
target.PendingApproval = util.Ptr(false)
}
+ // Queue remaining boost side effects
+ // (send out boost, update timeline, etc).
+ p.state.Workers.Client.Queue.Push(&messages.FromClientAPI{
+ APObjectType: ap.ActivityAnnounce,
+ APActivityType: ap.ActivityCreate,
+ GTSModel: boost,
+ Origin: requester,
+ Target: target.Account,
+ })
+
return p.c.GetAPIStatus(ctx, requester, boost)
}
diff --git a/internal/processing/status/create.go b/internal/processing/status/create.go
index 3604d3a4a..1a00d8ab7 100644
--- a/internal/processing/status/create.go
+++ b/internal/processing/status/create.go
@@ -275,21 +275,6 @@ func (p *Processor) Create(
}
}
- var model any = status
- if backfill {
- // We specifically wrap backfilled statuses in
- // a different type to signal to worker process.
- model = &gtsmodel.BackfillStatus{Status: status}
- }
-
- // Send it to the client API worker for async side-effects.
- p.state.Workers.Client.Queue.Push(&messages.FromClientAPI{
- APObjectType: ap.ObjectNote,
- APActivityType: ap.ActivityCreate,
- GTSModel: model,
- Origin: requester,
- })
-
// If the new status replies to a status that
// replies to us, use our reply as an implicit
// accept of any pending interaction.
@@ -307,6 +292,22 @@ func (p *Processor) Create(
status.InReplyTo.PendingApproval = util.Ptr(false)
}
+ var model any = status
+ if backfill {
+ // We specifically wrap backfilled statuses in
+ // a different type to signal to worker process.
+ model = &gtsmodel.BackfillStatus{Status: status}
+ }
+
+ // Queue remaining create side effects
+ // (send out status, update timeline, etc).
+ p.state.Workers.Client.Queue.Push(&messages.FromClientAPI{
+ APObjectType: ap.ObjectNote,
+ APActivityType: ap.ActivityCreate,
+ GTSModel: model,
+ Origin: requester,
+ })
+
return p.c.GetAPIStatus(ctx, requester, status)
}
diff --git a/internal/processing/status/fave.go b/internal/processing/status/fave.go
index 52e6b9d43..70560899b 100644
--- a/internal/processing/status/fave.go
+++ b/internal/processing/status/fave.go
@@ -160,15 +160,6 @@ func (p *Processor) FaveCreate(
return nil, gtserror.NewErrorInternalError(err)
}
- // Process new status fave side effects.
- p.state.Workers.Client.Queue.Push(&messages.FromClientAPI{
- APObjectType: ap.ActivityLike,
- APActivityType: ap.ActivityCreate,
- GTSModel: gtsFave,
- Origin: requester,
- Target: status.Account,
- })
-
// If the fave target status replies to a status
// that we own, and has a pending interaction
// request, use the fave as an implicit accept.
@@ -186,6 +177,16 @@ func (p *Processor) FaveCreate(
status.PendingApproval = util.Ptr(false)
}
+ // Queue remaining fave side effects
+ // (send out fave, update timeline, etc).
+ p.state.Workers.Client.Queue.Push(&messages.FromClientAPI{
+ APObjectType: ap.ActivityLike,
+ APActivityType: ap.ActivityCreate,
+ GTSModel: gtsFave,
+ Origin: requester,
+ Target: status.Account,
+ })
+
return p.c.GetAPIStatus(ctx, requester, status)
}