Currently, the module is potentially blocking each save request.
The call is a synchronous Guzzle post() from hook_entity_insert/update/delete, and those hooks run inside the DB transaction of the entity save:
- SqlContentEntityStorage::save() opens the transaction (core, line 843) → EntityStorageBase::doPostSave() invokes hook_entity_insert|update (line 618) → commit only afterwards. Same for delete() (line 786).
- Timeout is REQUEST_TIMEOUT = 5 s, no separate connect_timeout.
So a slow or unreachable crawler adds up to ~5 s to every node save while holding row locks open, and a bulk operation (VBO publish, migration, drush deploy content updates) makes N sequential 5 s-worst-case calls. It can't break the save \Throwable is caught but the editor waits.
My proposed solution:
Queue + cron. Enqueue node IDs, process in a #[QueueWorker]. Fully non-blocking, retryable, survives a dead crawler; costs up to one cron interval of freshness.
Issue fork page_refresh_webhook-3616519
Show commands
Start within a Git clone of the project using the version control instructions.
Or, if you do not have SSH keys set up on git.drupalcode.org:
Comments
Comment #3
ayalon commentedI have implemented this.