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