Hi,

we have tried to use event / timestamp based synchronization from an
external user database to repository. It seems that Syncope calls sync and
getLastSyncToken connector framework operations in a following manner when
time goes on:

t1.1 sync, token = null
t1.2 getLastSyncToken
t2.1 sync, token = value got from t1.2
t2.2 getLastSyncToken
t3.1 sync, token = value got from t2.2
t3.2 getLastSyncToken

in ti.j i means task execution iteration number and j means called ICF
operation number in current task execution.

Why getLastSyncToken is used at all? Could it just continue from the time
which was processed in an earlier run, or use getLastSyncToken to test if
there is something newer and then call sync only if something is available? 

There seems to be quite a serious problem in the current implementation.
Let's suppose that we are going to process step t2.1 and there are three new
events e1, e2 and e3 available. And let us further suppose that two new
items e4 and e5 will happen during t2.1. In t2.2 token will be set to e5
which means that in the step t3.1 we will continue from e5 and e4 will be
missed!

We have tested this with database table connector and scripted sql connector
and the problem exists in both implementations.

Thanks!

Timo Hatakka

Reply via email to