fix(19.3-06): queue site-cache purges after commit and coalesce them (WR-01)
- PurgeSiteCacheAfterCommit queues the purge on a per-purger worker after commit: one request in flight, saves committed meanwhile collapse into one follow-up, so the admin request never waits for the site - new cooler.SiteCachePurger.Wait drains the queue; Handle.Close waits for it at shutdown (timeout plus one second) - Purge stays the synchronous send; exported names and signatures unchanged
This commit is contained in:
@@ -59,9 +59,9 @@ type articlesController struct {
|
||||
app func() *backpack.App
|
||||
}
|
||||
|
||||
// purge registers one site-cache purge for the saved article, sent after the
|
||||
// save transaction commits (at once outside one). Without a purge configured
|
||||
// the purger is nil and nothing is sent.
|
||||
// purge queues one site-cache purge for the saved article once the save
|
||||
// transaction commits (at once outside one); the save never waits for the
|
||||
// site. Without a purge configured the purger is nil and nothing is sent.
|
||||
func (c articlesController) purge(ctx context.Context, model any) error {
|
||||
article, ok := model.(*Article)
|
||||
if !ok {
|
||||
@@ -121,5 +121,9 @@ func ExampleSiteCacheFromApp() {
|
||||
if err := c.FormAfterUpdate(context.Background(), &Article{Slug: "hello-summer"}); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
// The purge is queued; Wait drains the queue (serve does it at shutdown).
|
||||
if err := cooler.SiteCacheFromApp(app).Wait(context.Background()); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
// Output: POST /api/__site__/cache/purge {"kind":"article","slug":"hello-summer"}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user