Revision 2e0765fe
Added by Dominic Cleal almost 8 years ago
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
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.