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
Comment #1
pbuyle commentedI 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.
Comment #2
pbuyle commentedComment #3
pbuyle commentedI 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
Comment #4
pbuyle commentedThis should be fixed in master for Drupal 6: http://drupalcode.org/project/emf.git/commitdiff/ef062219ee0424c47c4d669...
Comment #5
pbuyle commented