metz·log

Seafile 5 syncing of old libraries

·

After upgrading to Seafile 5 I observed that my client was not syncing libraries anymore.

It turns out that this happens for libraries that were created long ago (before Seafile 3). According to Seafile issue #975 syncing of Seafile libraries may fail over HTTP(S) if they are stored in an older format on the server. There is a forum thread about migrating the old library format to the new library format but I did not dare to try it out yet.

Since I’m not syncing too much data over Seafile I rather opted to recreate my own libraries from scratch and now my client happily syncs over HTTPS.

Client side

On the Seafile client side it’s pretty obvious that something is not right. Old libraries that should be synced will always stay in the connecting state:

Seafile Connecting To Server

Additionally the ccnet.log will contain lines like this:

[01/17/16 17:21:41] ../common/connect-mgr.c(364): [Conn] Start outgoing connect to (null)(SOMEID) 1.2.3.4:10001
[01/17/16 17:21:51] ../common/connect-mgr.c(220): [Conn] peer (null)(SOMEID) connection fails

Server side

As a server administrator it’s relatively easy to find the list of affected libraries. While Seafile is stopped, running seaf-gc.sh --dry-run will show a list of libraries. Filtering that for GC version 0 will show libraries that will never sync over HTTP(S):

$ ./seaf-gc.sh --dry-run|grep 'GC version 0 '
[01/17/16 17:00:49] gc-core.c(440): GC version 0 repo My Library Template(SOMEUUID)

After cleaning up my own libraries only a few libraries from other users are left in the old format, I guess I have to walk them over the procedure at some point to get things working again.