Build Status

Azure Pipelines Build

An Application That Backs Up Files To Cloud Storage Using Akka.NET

This application backs up zipped folders from a PC to a cloud storage location such as OneDrive and also backs up a log of operations. I created a version of this using conventional .NET code and then, as a learning exercise, I re-implemented it using Akka.NET.

I identify two types of folders - Regular folders and Visual Studio Project folders.

For the former I zip and then encrypt them before backing up (encryption technique omitted).

For the latter I create a zip with the bin and obj folders omitted and then back them up.

The input is from a text file, SourceFolderPaths.txt, that contains a list of fully qualified paths to folders that require backing up.

Tech

  • Akka.NET - A toolkit and runtime for building highly concurrent, distributed, and fault tolerant event-driven applications on .NET & Mono, based on the Actor Model of concurrency.
  • NLog - A free logging platform for .NET, Silverlight and Windows Phone with rich log routing and management capabilities.
  • ZipDiff - A utility for comparing the contents of 2 different zip files.
  • System.IO.Abstractions - A library for testing System.IO.

Overview

Actors
  • CloudBackupActor - Manages cloud backup from start to finish. Creates the other actors. Receives StartMessage, IncrementFolderCountMessage and StopMessage. Sends ZipMessage and BackupLogFilesMessage.
  • ZipActor - Manages zip operations on folders. Receives ZipMessage. Sends BackupMessage, IncrementFolderCountMessage, FolderChangesMessage and "no changes" message.
  • BackupActor - Backs up zip archive and log files to cloud storage. Receives BackupMessage and BackupLogFilesMessage. Sends IncrementFolderCountMessage and StopMessage.
  • BackupStatisticsActor - Logs statistics showing changes to folders. Receives FolderChangesMessage and "no changes" message.
Messages
  • StartMessage - Instruction to start actor processing.
  • StartedMessage - Indicates actor processing has started.
  • ZipMessage - Instruction to perform a zip operation.
  • IncrementFolderCountMessage - Instruction to increment the folder count after processing a folder with a specific kind of zip operation.
  • FolderCountIncrementedMessage - Indicates folder count has incremented, i.e., a folder has been processed.
  • FolderChangesMessage - Represents changes to files in a folder.
  • BackupMessage - Instruction for backing up a zip archive to cloud storage.
  • BackupLogFilesMessage - Instruction for backing up log files to cloud storage.
  • StopMessage - Instruction to stop actor processing.

Actors and Messages

Features
  • Actor routing using a RoundRobinPool strategy.

  • Actor supervision using a OneForOne strategy.

  • Predicate message filters (receiving a message from an actor and handling it differently based on a condition).

  • Actor logging.

Actor supervision handles these scenarios
  • Invalid input folder path(s) - action: skip error and resume processing next folder.
  • Locked Word document (i.e., Word is open on a document so zip operation fails for that folder) - action: skip error and resume processing next folder.
  • Invalid backup folder path - action: stop and shut down cleanly, as nothing can be backed up.
  • Empty source folders file - action: stop and shut down cleanly since there's nothing to do.

See also What is an Actor? and Akka.NET cheat sheet.

TeamCity Continuous Integration

TeamCity Results

Cloudbackupactors

An Application That Backs Up Files To Cloud Storage Using Akka.NET

Cloudbackupactors Info

⭐ Stars 10
🔗 Source Code github.com
🕒 Last Update 2 years ago
🕒 Created 5 years ago
🐞 Open Issues 0
➗ Star-Issue Ratio Infinity
😎 Author kevinmcfarlane