]> git.openstreetmap.org Git - chef.git/commit
Attempt to fix changeset replication lock queueing.
authorMatt Amos <zerebubuth@gmail.com>
Tue, 7 Jul 2020 18:42:31 +0000 (19:42 +0100)
committerMatt Amos <zerebubuth@gmail.com>
Tue, 7 Jul 2020 18:42:31 +0000 (19:42 +0100)
commit63b7c09bb5fcd5eb60c26ce3c53cccf174bf445b
tree74a38ceb90ac17a18cb63fed37ff1b4abf16bf8d
parent318695ced17279985b8ed862c10f1609ba1e2b83
Attempt to fix changeset replication lock queueing.

When the changeset replication runs slow, a lot of processes queue up trying to get the lock. I'm not totally sure, but it looks like they then get woken up in a random order, resulting in weird out-of-order behaviour.

This patch simplifies that process in two ways:

1. If the lock isn't acquired, the process exits. This means much less (perhaps zero) lock queueing.
2. Using a separate `lockfile`, rather than the current state file. Since the new state file is moved into place over the old one, it was effectively unlocking at that point for _new_ processes. But would also unblock an old process which still had the old (now unlinked) file descriptor open.

Hopefully between these two changes, it resolves some of the brokenness that plagues changeset replication! :-)
cookbooks/planet/files/default/replication-bin/replicate-changesets
cookbooks/planet/recipes/replication.rb
cookbooks/planet/templates/default/changesets.conf.erb