On Tue, 2010-03-09 at 15:58 +0000, Patrick Ohly wrote:
> On Tue, 2010-03-09 at 13:22 +0000, David Bremner wrote:
> > On Mon, 2010-03-08 at 15:27 -0800, Pietro Battiston wrote:
> >  > What hence I'm asking is: do you think there is any particular reason
> >  > why this brand new libsynthesis should have incompatibilities with an
> >  > older (0.9.1+ds1-1) version of syncevolution?
> > 
> > When I tried downgrading syncevolution w/o downgrading libsynthesis, I got 
> > 
> > ,----
> > | Fatal: Cannot connect to datastore implementation module specified in 
> > <plugin_module>
> > | Fatal error 20010, no valid configuration could be read from XML file
> > | [ERROR] Synthesis XML config parser error
> > `----
> 
> I can reproduce it, but not explain it. I traced it down to the new
> engine expecting the "ReadBlob" function to be provided (which it isn't)
> despite SyncEvolution saying that it doesn't support it
> ("plugin_datablob:no").

The root cause is in this commit:

commit d9b59bad47fedba0a74240c394c2f7f3dc9b4f7f
Author: Beat Forster <[email protected]>
Date:   Thu Dec 3 19:03:07 2009 +0100

    JNI/Java: Several bug fixes and enhancements - Preparing com/sysync package


d9b59bad (Beat Forster 2009-12-03 19:03:07 +0100  833)     cAppCharP            
                 vda= Plugin_DS_Admin;
d9b59bad (Beat Forster 2009-12-03 19:03:07 +0100  834)     if (!Supported( 
VP_InsertMapItem   )) vda= Plugin_DS_Admin_OLD;
d9b59bad (Beat Forster 2009-12-03 19:03:07 +0100  835)     cAppCharP            
                 vdd= Plugin_DS_Data;
d9b59bad (Beat Forster 2009-12-03 19:03:07 +0100  836)     if (!Supported( 
VP_FLI_DSS         )) vdd= Plugin_DS_Data_OLD2;
d9b59bad (Beat Forster 2009-12-03 19:03:07 +0100  837)     if (!Supported( 
VP_ResumeToken     )) vdd= Plugin_DS_Data_OLD1;
d9b59bad (Beat Forster 2009-12-03 19:03:07 +0100  838)     cAppCharP            
                 vdb= Plugin_DS_Blob;
d9b59bad (Beat Forster 2009-12-03 19:03:07 +0100  839)     if (!Supported( 
VP_BLOB_JSignature )) vdb= Plugin_DS_Blob_OLD2; // new BLOB signature
d9b59bad (Beat Forster 2009-12-03 19:03:07 +0100  840)     if (!Supported( 
VP_DeleteBlob      )) vdb= Plugin_DS_Blob_OLD1;

I end up with vdb = Plugin_DS_Blob_OLD2 = "plugin_datablob_OLD2". This
is later checked in FlagOK(). Because there is no explicit
"plugin_datablob_OLD2=no" in SyncEvolution, the Synthesis engine tries
to find the ReadBlob function and fails.

I'm not sure what a proper solution is. It seems to me that instead of
renaming the "plugin_datablob" string by appending "_OLD2", the engine
should have introduced a "plugin_datablob_NEW" version.

> I'm running out of time now. The next step would be to find the oldest
> libsynthesis that still works with 0.9.1. But I wonder whether that is
> really useful?

Attached is a minimal patch which makes the most recent libsynthesis
(and thus 3.4.0.5+ds1-1) work again with SyncEvolution 0.9.1. I suspect
that it might break SyncEvolution 1.0 which does support blobs
(presumably using the current blob API), but that is a problem that we
can deal with later.

Pietro, is this something that could be added to the Ubuntu .deb of
libsynthesis as a quick fix? The only alternatives that I see are:
      * fall back to libsynthesis_3.2.0.35
      * recompile 0.9.1 with libsynthesissdk.a from 3.2.0.45 (untested!)
      * upgrade SyncEvolution to 1.0 beta

1.0 beta works because the if (!Supported()) checks result in false and
thus vdb remains at "plugin_datablob". I suspect that this might also
work when compiling 0.9.1 with a more recent libsynthesissdk.a.

-- 
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.


_______________________________________________
SyncEvolution mailing list
[email protected]
http://lists.syncevolution.org/listinfo/syncevolution

Reply via email to