In the figure below we can observe the architecture of the desktop client. Next, we will detail each element and explain the relation between them.
- Watcher. Receives modification events suffered by files located in the synchronization folder. Any action performed by the user (e.g., create a file or folder, delete them, etc.) is captured by the Watcher and notified to the Indexer.
- Indexer. It must process all events received from the Watcher. It updates the internal database and creates the chunks from the modified file.
- Uploader. It is charge of communicating with OpenStack Swift and the SyncService. First, it uploads the chunks to Swift through the TransferManager interface. Then, it notifies the SyncService about the committed operation.
- EventListener. It awaits events from the SyncService. When receiving events, it queues them in order for the ChangeManager to sequentially process them.
- ChangeManager. Processes all events coming from the SyncService. It contains the synchronization algorithm that ensures consistency in the client side.