Update RRData incrementally

Compute the adds and deletes required to get from existing RRData to new RRData
and perform just those operations instead of doing a complete drop/add of the
entire RRData set. Also during an update, do adds before deletes. This
eliminates the existence gap and fixes #29
This commit is contained in:
Nate Riffe 2015-05-01 08:01:12 -05:00
parent eb6d3f5d63
commit 827fb1e88f

View File

@ -1,3 +1,4 @@
# ex: syntax=ruby si sw=2 ts=2 et
require 'tempfile' require 'tempfile'
module PuppetBind module PuppetBind
@ -27,8 +28,8 @@ module PuppetBind
def flush def flush
return if @properties.empty? return if @properties.empty?
update do |file| update do |file|
destructo(file)
accio(file) accio(file)
destructo(file)
end end
end end
@ -58,17 +59,25 @@ module PuppetBind
end end
def accio(file) def accio(file)
newdata.each do |datum| rrdata_adds.each do |datum|
file.write "update add #{name}. #{resource[:ttl]} #{rrclass} #{type} #{datum}\n" file.write "update add #{name}. #{resource[:ttl]} #{rrclass} #{type} #{datum}\n"
end end
end end
def destructo(file) def destructo(file)
rrdata.each do |datum| rrdata_deletes.each do |datum|
file.write "update delete #{name}. #{ttl} #{rrclass} #{type} #{datum}\n" file.write "update delete #{name}. #{ttl} #{rrclass} #{type} #{datum}\n"
end end
end end
def rrdata_adds
newdata - rrdata
end
def rrdata_deletes
type === 'SOA' ? [] : rrdata - newdata
end
def server def server
resource[:server] resource[:server]
end end