From: <tr...@eg...> - 2011-03-29 18:46:29
|
Ticket modified by Philip Herbert at 2011/03/29 20:46 Tracking System: Bugs Category: ActiveSync Version: Trunk Status: Open > Resolution: Accepted > Completed: 10% Priority: 5 - medium Created By: Andre Larbiere Created on: 2011/03/29 19:08 Assigned to: Philip Herbert Summary: #2917 - Delete email via WEB gui, then delete same message on AS device --> sync stops I found a problem in the activesync interface that occurs when the mobile AS client wants to act on an email that was deleted via the WEB gui (or any other email client) and when that deletion has not yet been synced to the mobile AS client. The following procedure can be used to reproduce the problem: - set email preferences to move deleted messages to a Trash folder - make sure the AS client is in sync - now delete an email via the EGW web interface - immediately after that, delete the same message on the AS client (before the deletion gets synced) - The server error log will now show the following sequence of messages and the synchronization does no longer work. [Tue Mar 29 18:32:45 2011] [error] [client 192.168.254.107] egw-pear::NET::IMAP:getSummary->error after Fetch for message(s):22895 Trying to retrieve single messages. [Tue Mar 29 18:32:45 2011] [error] [client 192.168.254.107] egw-pear::NET::IMAP:getSummary->error after Fetch for message with id:22895 [Tue Mar 29 18:32:45 2011] [error] [client 192.168.254.107] , [Tue Mar 29 18:32:45 2011] [error] [client 192.168.254.107] An error happened: failed to copy Message(s) to Deleted Items: 22895 due to:'BAD, invalid message range specified' [Tue Mar 29 18:32:45 2011] [error] [client 192.168.254.107] #0 /var/www/egroupware/felamimail/inc/class.felamimail_activesync.inc.php(1338): felamimail_bo->deleteMessages(Array, 'INBOX') [Tue Mar 29 18:32:45 2011] [error] [client 192.168.254.107] #1 [internal function]: felamimail_activesync->DeleteMessage('101000000000', '22895') [Tue Mar 29 18:32:45 2011] [error] [client 192.168.254.107] #2 /var/www/egroupware/activesync/backend/egw.php(696): call_user_func_array(Array, Array) [Tue Mar 29 18:32:45 2011] [error] [client 192.168.254.107] #3 /var/www/egroupware/activesync/backend/egw.php(314): BackendEGW->run_on_plugin_by_id('DeleteMessage', '101000000000', '22895') [Tue Mar 29 18:32:45 2011] [error] [client 192.168.254.107] #4 /var/www/egroupware/activesync/backend/diffbackend.php(332): BackendEGW->DeleteMessage('101000000000', '22895') [Tue Mar 29 18:32:45 2011] [error] [client 192.168.254.107] #5 /var/www/egroupware/activesync/request.php(1080): ImportContentsChangesDiff->ImportMessageDeletion('22895') [Tue Mar 29 18:32:45 2011] [error] [client 192.168.254.107] #6 /var/www/egroupware/activesync/request.php(4132): HandleSync(Object(BackendEGW), '12.1', 'DEVICEID') [Tue Mar 29 18:32:45 2011] [error] [client 192.168.254.107] #7 /var/www/egroupware/activesync/index.php(309): HandleRequest(Object(BackendEGW), 'Sync', 'DEVICEID', '12.1', false) [Tue Mar 29 18:32:45 2011] [error] [client 192.168.254.107] #8 {main} [Tue Mar 29 18:32:45 2011] [error] [client 192.168.254.107] # Instance=default, User=ender, URL=https://mysite.mydomain:443/Microsoft-Server-ActiveSync?Cmd=Sync&User=ender&DeviceId=DEVICEID&DeviceType=DEVICETYPE This sequence of messages repeats with the sync failing until either the AS configuration on the device is deleted and reconfigured, or the message is recovered via a server admin tool (I'm using dbmail, where that is possible) If one always deletes messages either only via the mobile device or only via the WEB gui, then everything works nicely. I tracked this down to the error trapping that occurs in method deleteMessages($_messageUID, $_folder) in file felamimail/inc/class.felamimail_bo.inc.php. With my configuration (move_to_trash), this method first calls egw-pear::Net::IMAP->copyMessages() to copy a message to the Trash folder, then egw-pear::Net::IMAP->deleteMessages() to delete the original message. This does generally work fine, but when the mobile device tries to delete an already deleted message, the first copyMessages() call returns with an error and the function returns false to the caller (without ever attempting to call deleteMessages() - but that's not really a problem). The issue is that the AS Sync call fails, so that the mobile device retries this operation over and over again. As a quick (and dirty) test, I commented out the error checking /* if ( PEAR::isError($retValue) ) { ... } */ after both egw-pear calls, and the issue goes away. This is of course no real fix, as errors may still occur for other reasons... Unfortunately, my knowledge of the egw-pear API is still a bit to limited to come up with a proper fix. But I think the overall process should be changed to: - First check if the message that should be deleted is still there - If not, return true to tell the caller that the request was successful (we wanted to delete the message, didn't we...) - If it is still there, go through the current process, trapping and reporting all errors Instead, ---------------------------------------------------------------- > Comment by Philip Herbert at 2011/03/29 20:46: Hello Andre, thanks for testing our Active Sync implementation and the details of the error. What type of client are you using ? Do you know how to create a debug file ? Could you send a debug.txt of this (with the loop condition) ? You can send this via pm, because it may contain private information. We should fix this, without changing the behaviour of egw-pear. --Philip linked entries: http://www.egroupware.org/egroupware/index.php?menuaction=tracker.tracker_ui.edit&tr_id=2917&no_popup=1 |