Hello!
I'm not exactly sure how I got my server data into such a state, but I
ended up with entries in my local to remote ID map which only had a
local ID.
As a result, the server sends these items to the peer and then tries to
update the map. It does that with insertMapItem():
#6 0x00000000006163f9 in SyncEvolution_InsertMapItem
(aContext=0x15b2210, mID=0x7fff4e576bf0)
at /home/patrick/projects/syncevolution/src/syncevo/SynthesisDBPlugin.cpp:510
#7 0x00000000006a1f29 in sysync::TDB_Api::InsertMapItem
(this=0x15bd1a8, mID=0x7fff4e576bf0)
at /home/patrick/projects/libsynthesis/src/DB_interfaces/api_db/dbapi.cpp:1558
#8 0x000000000078121c in sysync::TPluginApiDS::apiSaveAdminData
(this=0x15bc1c0,
aDataCommitted=false, aSessionFinished=false)
at
/home/patrick/projects/libsynthesis/src/DB_interfaces/api_db/pluginapids.cpp:1768
#9 0x0000000000796ef1 in sysync::TCustomImplDS::SaveAdminData
(this=0x15bc1c0, aSessionFinished=false, aSuccessful=false)
at /home/patrick/projects/libsynthesis/src/sysync/customimplds.cpp:2957
#10 0x0000000000797044 in sysync::TCustomImplDS::implSaveResumeMarks
(this=0x15bc1c0)
at /home/patrick/projects/libsynthesis/src/sysync/customimplds.cpp:3101
#11 0x000000000075c49a in sysync::TStdLogicDS::logicSaveResumeMarks
(this=0x15bc1c0)
at /home/patrick/projects/libsynthesis/src/sysync/stdlogicds.h:162
#12 0x0000000000710657 in sysync::TLocalEngineDS::engSaveSuspendState
(this=0x15bc1c0, aAnyway=false)
My implementation of that call faithfully checks whether the item
already exists and if so, refuses to update it, as specified in
sync_dbapi.h. The result is a failure to save the admin data. This error
is not returned to the client and the next sync is again a two-way sync
where the same problem occurs once more.
/*! Map table handling: Insert a map item of this context
*
* @param <aContext> The datastore context
* @param <mID> MapID ( with \<localID>,\<remoteID>, <flags> and
\<ident> ).
* A new item with <localID> will be added.
*
* @return error code, if this MapID can't be inserted, or if already existing
*
* USED ONLY WITH \<plugin_datastoredadmin>
*/
_ENTRY_ TSyError InsertMapItem( CContext aContext, cMapID mID );
Should my implementation treat attempts to insert an item which already
exists as an update? TAdminData::InsertMapItem() seems to do that.
--
Best Regards, Patrick Ohly
The content of this message is my personal opinion only and although
I am an employee of Intel, the statements I make here in no way
represent Intel's position on the issue, nor am I authorized to speak
on behalf of Intel on this matter.
_______________________________________________
os-libsynthesis mailing list
[email protected]
http://lists.synthesis.ch/mailman/listinfo/os-libsynthesis