Hello Patrick,

On Aug 1, 2011, at 20:39 , Patrick Ohly wrote:

> In a local slow sync between Evolution and Google Calendar I see the
> following problem:
> [...]
>      * The server logs "Status: 403: originator exception" and
>        "WARNING: Aborting Session with Reason Status 403 (REMOTE
>        problem)".
> 
> That says it all. The session ends here without finishing the slow sync.
> 
> This is a bit too drastic. 
> [...]
> Should it be turned into a local error along the were somewhere? I
> remember vaguely that we discussed something like that and came to the
> conclusion that a backend can return errors in the range <500 to the
> Synthesis engine. That's what SyncEvolution is doing here.

There's a place in localengineds.cpp (around line 3337) where all the error 
codes are catched in a switch/case statement that should NOT abort the session, 
but rather mark the item for "resend later", which means in the next session.

403 is not among these, because usually a auth problem is really fatal and 
retry does not help.

For your case at hand, I'd recommend to translate that kind of 403 error to 417 
(retry later) in the backend (or in the sentitemstatusscript), which means that 
the backend has some hope that a retry in the next session might help.

Here's the excerpt from the switch statement which lists the error codes that 
lead to retry-later behaviour, along with comments that describe the rationale 
to catch these codes here and not let them abort the session:

    case 424: // size mismatch (e.g. due to faild partial item resume attempt 
-> retry will help)
    case 417: // retry later (remote says that retry will probably work)
    case 506: // processing error, retry later (remote says that retry will 
probably work)
    case 404: // not found (retry is not likely to help, but does not harm too 
much, either)
    case 408: // timeout (if that happens on a single item, retry probably 
helps)
    case 415: // bad type (retry is not likely to help, but does not harm too 
much, either)
    case 510: // datastore failure (too unspecific to know if retry might help, 
but why not?)
    case 500: // general failure (too unspecific to know if retry might help, 
but why not?)

Note that the retry feature only works with DB backends that support resume (in 
particular, the flag field in the ID mapping table), which was always the case 
for SyncEvolution, IMHO.

Best Regards,

Lukas Zeller, plan44.ch
l...@plan44.ch - www.plan44.ch



_______________________________________________
os-libsynthesis mailing list
os-libsynthesis@synthesis.ch
http://lists.synthesis.ch/mailman/listinfo/os-libsynthesis

Reply via email to