Skip to content
This repository has been archived by the owner on Oct 13, 2020. It is now read-only.

Internals

nicolas-raoul edited this page Apr 10, 2013 · 16 revisions

Users don't need this information, it is here as a reference for developers.

Architecture

CmisSync runs as a single process on the client machine. It has one thread for each synchronized folder.

Each synchronized folder has an SQLite database to store metadata (in JSON) and date/checksum of the last version seen on the server side.

The Windows installer is built with WiX.

The synchronization algorithm itself can be found in the Cmis.Lib/Sync folder and especially CrawlStrategy.

config.xml

For each CMIS folder:

  • name: a name for this checkout. CmisSync tries to find a good name, but anything is fine except slashes
  • url: CMIS URL
  • repository: id of the CMIS repository to use (there can be several repositories at the same URL)
  • remoteFolder: folder on the repository. With prefix slash but no trailing slash.
  • user
  • hashed password

Full example:

<?xml version="1.0" encoding="UTF-8"?>
<CmisSync>
  <user>
    <name>nraoul</name>
    <email>Unknown</email>
  </user>
  <log4net>
    <appender name="CmisSyncFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="C:\Users\nraoul\AppData\Roaming\cmissync\debug_log.txt" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="5MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="CmisSyncFileAppender" />
    </root>
  </log4net>
  <folders>
    <folder>
      <name>s1</name>
      <path>C:\Users\nraoul\CmisSync\sales</path>
      <url>http://192.168.0.22:8080/alfresco/cmisatom</url>
      <repository>7d52d0ed-5108-4dba-8100-48b63b9d3541</repository>
      <remoteFolder>/Sites/sales/documentLibrary</remoteFolder>
      <user>nicolas.raoul</user>
      <password>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAtiSvUCYnDkGdPOuyhiThTwAAAAACAAAAAAAQZgAAAAEAACAAAADexlyLIms+TPKj/w52HwkYjiHXI5JTF3GkFVSr1wZHBgAAAAAOgAAAAAIAACAAAADehsLp6b/ZO+YAUu57xf9kmRqsTYZSZn7hCgNfEXFbdxAAAAAIkBNhEZrtiGnXkugNIuEGQAAAAFQbSOpuPy2/XyTt5nu3CgLoQsVVfIrBF3jfrFs23mgMBlEx6RW1YHgohJYTDgPPYA+MpWY8B/KEBUY7qdIIzok=</password>
      <pollinterval>5000</pollinterval>
    </folder>
  </folders>
  <notifications>True</notifications>
</CmisSync>

Load tests

Here are a few tests that someone should perform to ensure CmisSync can be used in all circumstances. Feel free to add more test ideas! Thanks in advance to anyone who performs these tests, please let us know about whether it works on the forum/Twitter/email.

  • Very large file
  • Intermittent network connection
  • Very slow network connection
  • Many files in a single folder

Upgrading SQLite

There are dozens of different DLLs for SQLite. The right one is like sqlite-netFx40-static-binary-Win32-2010-1.0.84.0.zip at the Precompiled Statically-Linked Binaries for 32-bit Windows (.NET Framework 4.0) paragraph at http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

Source code explanation

The synchronization algorithm is in CmisSync.Lib/Sync.
CmisSync uses an SQLite database to cache checksums, server-side modification dates, etc, in Database.cs.
The source code contains a lot of comments so it should be explicit. Please let us know if something is lacking.
The UI is based on SparkleShare, an excellent Git-synchronization tool. That explains why you might find references to SparkleShare in the source code.