Rclone “Rsync for Cloud Storage” – – ● Talk by – Nick Craig-Wood – Twitter: @Njcw – Email: [email protected]

Rclone “Rsync for Cloud Storage” – – ● Talk by – Nick Craig-Wood – Twitter: @Njcw – Email: Nick@Craig-Wood.Com

Go London User Group - 21st November 2018 ● Rclone “rsync for cloud storage” – https://rclone.org – https://github.com/ncw/rclone ● Talk by – Nick Craig-Wood – Twitter: @njcw – Email: [email protected] 1 Nick Craig-Wood rclone.org About me ● Nick Craig-Wood – CTO of Memset Ltd by day – Open Source coder by night – Keen interest in storage, data integrity – Reformed data hoarder (ha!) 2 Nick Craig-Wood rclone.org Contents ● About Me ● What Rclone Is ● History ● How it works ● Some code ● Testing ● Libraries 3 Nick Craig-Wood rclone.org Rclone - “rsync for cloud storage” ● Rclone is a command line program to sync files and directories to and from cloud providers ● MD5/SHA1 hashes checked at all times for file integrity ● Timestamps preserved on files ● Copy mode to just copy new/changed files ● Sync (one way) mode to make a directory identical ● Check mode to check for file hash equality ● Can sync to and from network, eg two different cloud accounts ● Encryption backend ● Cache backend ● Optional FUSE mount (rclone mount) 4 Nick Craig-Wood rclone.org Rclone vs Rsync ● rsync is a utility for efficiently transferring F and synchronizing files across computer r o ✓ m systems, by checking the timestamp and size W of files. i k i ● p It is commonly found on Unix-like systems e d and functions as both a file synchronization i a and file transfer program. ✓ ● The rsync algorithm is a type of delta encoding, and is used for minimizing network ✗ usage. 5 Nick Craig-Wood rclone.org Cloud providers supported by rclone ● Amazon Drive ● Microsoft Azure Blob Storage ● Amazon S3 ● Microsoft OneDrive ● ● Backblaze B2 Minio ● ● Box Nextcloud ● OVH ● Ceph ● OpenDrive ● DigitalOcean Spaces ● Openstack Swift ● Dreamhost ● Oracle Cloud Storage ● Dropbox ● ownCloud ● FTP ● pCloud ● Google Cloud Storage ● put.io ● Google Drive ● QingStor ● HTTP ● Rackspace Cloud Files ● Hubic ● SFTP ● Jottacloud ● Wasabi ● IBM COS S3 ● WebDAV ● Memset Memstore ● Yandex Disk ● Mega ● The local filesystem 6 Nick Craig-Wood rclone.org Rclone platforms OS CPU I ♥ Cross Compilation 7 Nick Craig-Wood rclone.org How rclone came to be ● Started as a tool to exercise – github.com/ncw/swift – originally was “swiftsync” ● First version in 2012 – Go 1.0 – 3 backends ● Somewhat outgrew its original design! 8 Nick Craig-Wood rclone.org Why Go? ● Single binary deploy ● Excellent concurrency ● Great cross platform ● Fast! Why? ● Standard library ● New challenge for me ● Easy for contributors to pick up 9 Nick Craig-Wood rclone.org One tool to rule them all ● What started as a tiny exercise – 11,000 stars on Github – 200 contributors – 500 pull requests – 1,500 issues – 250,000 downloads a month – Packaged in Ubuntu, Arch, Debian, Homebrew, Chocolatey and more ● ...is now an enormous project. 10 Nick Craig-Wood rclone.org Visualising Rclone’s History 11 Nick Craig-Wood rclone.org Rclone becomes popular and breaks Amazon Cloud Drive ⇒ ? 12 Nick Craig-Wood rclone.org Rclone verbs – bigger = more popular 13 Nick Craig-Wood rclone.org rclone config - Config Wizard ● Old School Config Wizard – Text based – Easy to use – Not pretty – Calls your browser to do oauth 14 Nick Craig-Wood rclone.org rclone copy - demo ● rclone copy – Copy new files to destination – Don’t delete files from destination – Your go to rclone command! 15 Nick Craig-Wood rclone.org rclone sync - demo ● rclone sync – Copy new files to destination – Delete destination files not in source – Use with –dry- run first recommended 16 Nick Craig-Wood rclone.org rclone copy “Source Dir” “Dest Dir” Source Dir Dest Dir Source Dir Dest Dir File 1 Copied File 1 File 1 File 2 File 2 Not Touched File 2 File 2 File 3 Old File 3 Overwritten File 3 File 3 File 4 Not Touched File 4 Destination includes Source Source Destination Actions Source Destination Before Before After After 18 Nick Craig-Wood rclone.org rclone sync “Source Dir” “Dest Dir” Source Dir Dest Dir Source Dir Dest Dir File 1 Copied File 1 File 1 File 2 File 2 Not Touched File 2 File 2 File 3 Old File 3 Overwritten File 3 File 3 File 4 Deleted Destination identical to Source Source Destination Actions Source Destination Before Before After After 19 Nick Craig-Wood rclone.org rclone mount remote:path /mount/point ● FUSE Filesystem – Linux, macOS, FreeBSD – Windows va WinFSP ● Optional caching layer – Needed as can’t write to middle of object – Or read and write together ● Can run as daemon 21 Nick Craig-Wood rclone.org rclone ncdu This displays a text based user interface allowing the navigation of a Remote. It is most useful for answering the question: What is using all my disk space? 22 Nick Craig-Wood rclone.org Backend interface 23 Nick Craig-Wood rclone.org Object interface 24 Nick Craig-Wood rclone.org Optional interfaces for Fs 25 Nick Craig-Wood rclone.org Using an optional interface – Do a type assertion for the interface to see if it exists. – But what if this is a wrapper backend wrapping a backend that doesn’t support Purge? – And if we need to know in advance?... 26 Nick Craig-Wood rclone.org The solution 27 Nick Craig-Wood rclone.org Testing ● How to test ● Unit test what we can – 27 backends – Some things are easy – x 50 commands – Who wants to write mocks – x 8 OSes for 27 different cloud providers? – x 6 CPU Architectures ● Integration test – x 4 Go versions? – Integration tests use go ● 69k lines of code test framework ● 26k lines of test code – Run daily 28 Nick Craig-Wood rclone.org CI – Unit testing and build ● CI Pipeline Push Pull Request – Runs all non integration tests – Tests mount – Builds for all – Makes binaries – Push Uploads to beta Pull Request release 29 Nick Craig-Wood rclone.org Integration testing Integration ● Integration test Test Server – Run daily Subset of cloud providers Daily Pull At least one per backend – Too expensive to run on every push ● Cost ~ 30p ● Time ~ 1 Hour – Creates fancy report – Not integrated with Github (yet) FTP SFTP HTTP Crypt 30 Nick Craig-Wood rclone.org Integration tests ● Problems – Cloud providers aren’t perfectly reliable – Eventual consistency – Networking ● Solution – Retries, Retries, Retries – Lots of work getting it right 31 Nick Craig-Wood rclone.org Retrying integration tests ● test_all framework Attempt 1/5 ./operations.test – Runs standard go tests -test.v -test.timeout 30m0s – Runs lots of tests in parallel -remote TestAzureBlob: – Provides flags as specified in a config file – Parses the output of the tests Attempt 2/5 – ./operations.test Retries the just the failing tests -test.v – Should probably become an -test.timeout 30m0s -remote TestAzureBlob: opensource package in its own -test.run '^(TestPurge| right! TestRmdirsNoLeaveRoot)$' 32 Nick Craig-Wood rclone.org Integration tests for backends ● Backend integration tests – Easy to add thanks to go1.6 nested tests – Give a recipe to follow when making a new backend – Just make the integration tests pass – Originally done with code gen pre go1.6 33 Nick Craig-Wood rclone.org Integration tests elsewhere ● You can add flags to tests – Rclone uses this with a “-remote” flag to signal that the test should be done remotely – There are other flags for debugging and more in depth tests 34 Nick Craig-Wood rclone.org Standing on the shoulders of giants ● Rclone ● Rclone’s libraries – 95,000 lines of code – 520,000 lines of code – 450 source files – 1,100 files – Not including “vendor” – All stored in “vendor” All build on top of the excellent standard library 35 Nick Craig-Wood rclone.org Favourite libraries and tools: golang.org/x/tools/cmd/goimports – Get it in your editor – never type an import statement again – Run it as a save hook – it will `go fmt` your code too 36 Nick Craig-Wood rclone.org github.com/spf13/cobra ● Make commands with subcommands ● Very flexible / extensible ● Used by Kubernetes / Hugo / Docker ● POSIX flags `--flag` with spf13/pflag ● Creates bash completion scripts ● Creates docs ● Makes coffee and cleans the kitchen. 37 Nick Craig-Wood rclone.org Documentation with github.com/spf13/cobra Go code defines help… …becomes -h output… …and markdown for web. 38 Nick Craig-Wood rclone.org github.com/pkg/errors ● Turns an error like this – “unexpected EOF” ● Into – “NewFs creating backend: couldn’t connect SSH: unexpected EOF” 39 Nick Craig-Wood rclone.org What to do if your open source project takes off... ● Don’t Panic! Rclone Star History ● Open a forum (Discourse is good) ● Ask everyone who makes an issue for help ● Recruit pull requesters as contributors Front Page of Hacker News ● Make good contributing docs ● Get octobox.io 40 Nick Craig-Wood rclone.org Thank you for listening ● Rclone “rsync for cloud storage” – https://rclone.org – https://github.com/ncw/rclone ● Talk by – Nick Craig-Wood – Twitter: @njcw – Email: [email protected] ● Special effects by – Gource – source code history visualisation – Asciinema and asciicast2gif – terminal GIFs 41 Nick Craig-Wood rclone.org.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    39 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us