dyndnsd: allow updater to see if database changed

This commit is contained in:
cn 2020-07-20 11:56:23 +02:00
parent 0cec44893d
commit 0c4c38cc6b
3 changed files with 15 additions and 3 deletions

View File

@ -68,6 +68,9 @@ Style/HashTransformValues:
Style/IdenticalConditionalBranches:
Enabled: false
Style/IfUnlessModifier:
Enabled: false
Style/InverseMethods:
Enabled: false
@ -79,3 +82,6 @@ Style/RescueModifier:
Style/SymbolArray:
Enabled: false
Style/TrailingCommaInArrayLiteral:
Enabled: false

9
lib/dyndnsd.rb Executable file → Normal file
View File

@ -56,9 +56,9 @@ module Dyndnsd
@db.load
@db['serial'] ||= 1
@db['hosts'] ||= {}
@updater.update(@db)
if @db.changed?
@db.save
@updater.update(@db)
end
end
@ -193,8 +193,8 @@ module Dyndnsd
def update_db
@db['serial'] += 1
Dyndnsd.logger.info "Committing update ##{@db['serial']}"
@db.save
@updater.update(@db)
@db.save
Metriks.meter('updates.committed').mark
end
@ -313,7 +313,10 @@ module Dyndnsd
private_class_method def self.setup_rack(config)
# configure daemon
db = Database.new(config['db'])
updater = Updater::CommandWithBindZone.new(config['domain'], config.dig('updater', 'params')) if config.dig('updater', 'name') == 'command_with_bind_zone'
case config.dig('updater', 'name')
when 'command_with_bind_zone'
updater = Updater::CommandWithBindZone.new(config['domain'], config.dig('updater', 'params'))
end
daemon = Daemon.new(config, db, updater)
# configure rack

View File

@ -14,6 +14,9 @@ module Dyndnsd
# @param db [Dyndnsd::Database]
# @return [void]
def update(db)
# do not regenerate zone file (assumed to be persistent) if DB did not change
return if !db.changed?
Helper.span('updater_update') do |span|
span.set_tag('dyndnsd.updater.name', self.class.name&.split('::')&.last || 'None')