Vagrant Gatling Rsync

An rsync watcher for Vagrant 1.5.1+ that uses fewer host resources.
Alternatives To Vagrant Gatling Rsync
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Vagrant Hostmanager1,450712 years ago35May 18, 201871mpl-2.0Ruby
:pencil: A Vagrant plugin that manages hosts files within a multi-machine environment.
Vagrant Lamp770
4 years ago29Ruby
My default LAMP development stack for Vagrant
Landrush663
53 years ago38May 06, 201954mitRuby
A Vagrant plugin that provides a simple DNS server for Vagrant guests
Netplugin473
4 years ago37May 24, 2021152apache-2.0Go
Container networking for various use cases
Magento2 Vagrant For Developers448
4 years ago46mitShell
Vagrant Box for Magento 2 Developers
Socketplane409
4 years agoDecember 26, 201436apache-2.0Go
SocketPlane - Multi-Host Container Networking
Vagrant Hosts2972214 years ago36January 03, 201915otherRuby
Manage static DNS on vagrant guests
Ansible Jenkins276
6 years ago10mitGroovy
Ansible playbook: Jenkins
Vvv Dashboard264
5 years ago17PHP
Dashboard for Varying Vagrant Vagrants https://github.com/Varying-Vagrant-Vagrants/VVV
Vagrant Django Template246
7 years agootherPython
Skeleton project for a Django app running under Vagrant
Alternatives To Vagrant Gatling Rsync
Select To Compare


Alternative Project Comparisons
Readme

vagrant-gatling-rsync

An rsync watcher for Vagrant 1.5.1+ that uses fewer host resources at the potential cost of more rsync actions.

Getting started

To get started, you need to have Vagrant 1.5.1 installed on your Linux, Mac, or Windows host machine. To install the plugin, use the following command.

vagrant plugin install vagrant-gatling-rsync

Working with this plugin

Add the following information to the Vagrantfile to set the coalescing threshold in seconds. If you do not set it, it will default to 1.5.

You may also specify what Time.strftime options the plugin will use when it reports on completed rsyncs. The default is "%I:%M:%S %p".

You will also need to have at least one synced folder set to type "rsync" to use the plugin.

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "hashicorp/precise64"

  config.vm.synced_folder "../files", "/opt/vagrant/rsynced_folder", type: "rsync",
    rsync__exclude: [".git/", ".idea/"]

  # Configure the window for gatling to coalesce writes.
  if Vagrant.has_plugin?("vagrant-gatling-rsync")
    config.gatling.latency = 2.5
    config.gatling.time_format = "%H:%M:%S"
  end

  # Automatically sync when machines with rsync folders come up.
  config.gatling.rsync_on_startup = true
end

With the Vagrantfile configured in this fashion, you can run the following command to sync files.

vagrant gatling-rsync-auto

As of version 0.9.0, vagrant-gatling-rsync will automatically start the sync engine on vagrant up or vagrant reload when the machines that you bring up have one or more rsync folders defined. You can disable this behavior by setting config.gatling.rsync_on_startup to false.

Why "gatling"?

The gatling gun was the first gun capable of firing continuously.

This plugin

The built-in rsync-auto plugin sometimes uses a lot of CPU and disk I/O when it starts up on very large rsynced directories. This plugin is designed to work well with such large rsynced folders.

The rsync-auto command that ships with Vagrant 1.5 uses the listen gem. The Listen gem is quite thorough - it uses Celluloid to spin up an actor system and it checks file contents on OS X to ensure that running "touch" on a file (to do a write but not update its content) will not fire the rsync command.

The downside of using Listen is that it takes a large amount of host resources to monitor large directory structures. This gem works well with to monitor directories hierarchies with 10,000-100,000 files.

This gem's implementation is much closer to the underlying fsevent or inotify APIs, which allows for higher performance.

Event coalescing

This plugin also coalesces events for you. The default latency is 1.5 seconds. It is configurable through the config.gatling.latency parameter. If you specify a latency of two seconds, this plugin will not fire a vagrant rsync until two contiguous seconds without file events have passed. This will delay rsyncs from happening if many writes are happening on the host (during a make or a git clone, for example) until the activity has leveled off.

Authors

Steven Merrill (@stevenmerrill) originally had the idea to tap into rb-fsevent and rb-inotify to more efficiently rsync files.

Doug Marcey (@dougmarcey) provided considerable guidance in the implementation of the coalescing functionality and wrote the initial sketch of the Linux and Windows adapters.

Popular Hosts Projects
Popular Vagrant Projects
Popular Networking Categories

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Ruby
Plugin
Hosts
Vagrant
Rsync