Project

General

Profile

« Previous | Next » 

Revision 2e0765fe

Added by Dominic Cleal almost 8 years ago

fixes #16021 - restart inotify monitoring on queue overflow

inotify watches are now more specific to only monitor for modifications
to the lease file and incoming file moves in the directory, reducing
the spurious wakeups from accessing other files in the same dir.

View differences:

modules/dhcp_isc/inotify_leases_file_observer.rb
def monitor_leases
@notifier = INotify::Notifier.new
@notifier.watch(File.dirname(leases_filename), :all_events) do |event|
event.flags.each do |flag|
case flag
when :modify
logger.debug "caught :modify event on #{event.absolute_name}."
observer.leases_modified if event.absolute_name == leases_filename
when :move
next unless event.absolute_name == leases_filename
logger.debug "caught :move event on #{event.absolute_name}."
observer.leases_recreated
end
@notifier.watch(leases_filename, :modify) do |event|
logger.debug "caught :modify event on #{event.absolute_name}"
observer.leases_modified
end
@notifier.watch(File.dirname(leases_filename), :moved_to) do |event|
if event.absolute_name == leases_filename
logger.debug "caught :moved_to event on #{event.absolute_name}"
observer.leases_recreated
end
end
@notifier.run
rescue INotify::QueueOverflowError => e
logger.warn "Queue overflow occured when monitoring #{leases_filename}, restarting monitoring", e
observer.leases_recreated
retry
rescue Exception => e
logger.error "Error occured when monitoring #{leases_filename}", e
end

Also available in: Unified diff