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.

Command icon 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

ayalon created an issue. See original summary.

ayalon’s picture

Status: Active » Fixed

I have implemented this.

Now that this issue is closed, review the contribution record.

As a contributor, attribute any organization that helped you, or if you volunteered your own time.

Maintainers, credit people who helped resolve this issue.

  • jm.liip committed 05c8e12e on 2.0.x
    Issue #3616519 by ayalon: Make the endpoint optional and send the...

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.