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

Reply via email to