When emf_sync_push_requests fail to push a request (emf_plugin_invoke returns FALSE), it stay in the {emf_request}. So, the same request is re-tried on the next requests sync. If the failure is permanent, the failing request will stay forever in the table. When too many permanently failing requests will be queued in the table, sync. will stall as emf_sync_push_requests tries to avoid timeout. There is also a risk of memory overflow in emf_db_get_requests() since it loads all rows from {emf_request}.

When using MailChimp, example of permanently failing requests are unsubscribe for non-subscribed address. Such request are creating deleting a user account with pending subscribe request. In such case, emf_user() blindly generate unsubscribe requests for every lists.

The solution would be to either remove or disable a request after a (configurable) number of failure.

Comments

pbuyle’s picture

I can fix the issue but first I suggest to move the request queue to the Queue operations API provided by Drupal 7 and backported to Drupal 6.

pbuyle’s picture

Assigned: Unassigned » pbuyle
pbuyle’s picture

Status: Active » Patch (to be ported)

I made a quick fix in the 7.x-.1.x branch, see http://drupalcode.org/project/emf.git/commitdiff/c6989ce that need to be ported to 6.x

pbuyle’s picture

Assigned: pbuyle » Unassigned
Status: Patch (to be ported) » Needs review
pbuyle’s picture

Status: Needs review » Fixed

Status: Fixed » Closed (fixed)

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