---
src/dbomatic/dbomatic | 60 ++++++++++++++++++++++++++++++++++++++----------
1 files changed, 47 insertions(+), 13 deletions(-)
diff --git a/src/dbomatic/dbomatic b/src/dbomatic/dbomatic
index e7f29b0..925d8d5 100755
--- a/src/dbomatic/dbomatic
+++ b/src/dbomatic/dbomatic
@@ -130,6 +130,8 @@ class CondorEventLog < Nokogiri::XML::SAX::Document
end
def update_instance_state_event(inst)
+ logger.info "update_instance_state_event for #{inst}"
+
if @trigger_type == "ULOG_GRID_SUBMIT"
inst.state = Instance::STATE_PENDING
elsif @trigger_type == "ULOG_JOB_ABORTED" or @trigger_type ==
"ULOG_JOB_TERMINATED"
@@ -177,6 +179,8 @@ class CondorEventLog < Nokogiri::XML::SAX::Document
end
def update_instance_cloud_id(inst)
+ logger.info "update_instance_cloud_id for #{inst}"
+
# The GridResource/ExecuteHost string looks like this:
# dcloud
http://localhost:3001/api
@@ -219,6 +223,8 @@ class CondorEventLog < Nokogiri::XML::SAX::Document
end
def update_instance_addresses(inst)
+ logger.info "update_instance_addresses for #{inst}"
+
inst.public_addresses = @public_addresses
inst.private_addresses = @private_addresses
inst.save!
@@ -233,9 +239,11 @@ class CondorEventLog < Nokogiri::XML::SAX::Document
if inst.nil?
@logger.info "Unexpected nil instance, skipping..."
else
+ logger.info "Instance #{inst} found, running update events"
update_instance_state_event(inst)
update_instance_cloud_id(inst)
update_instance_addresses(inst)
+ logger.info "Instance #{inst} update events completed"
end
@tag = @event_type = @event_cmd = @event_time = @trigger_type = @grid_resource =
@execute_host = @hold_reason = @public_addresses = @private_addresses = nil
end
@@ -248,6 +256,24 @@ class CondorEventLog < Nokogiri::XML::SAX::Document
end
end
+# Retrieve the current parsing position
+# of the log file as stored in the log
+# file postion tracker
+def get_log_file_pos
+ pos = 0
+ if File.exists?(EVENT_LOG_POS_FILE)
+ File.open(EVENT_LOG_POS_FILE, 'r') { |f| pos = f.read.to_i }
+ end
+ pos
+end
+
+# Set the current parsing position
+# of the log file in the log file
+# position tracker
+def set_log_file_pos(pos)
+ File.open(EVENT_LOG_POS_FILE, 'w') { |f| f.write pos.to_s }
+end
+
# FIXME we should make sure everything here is done atomically
def parse_log_file(parser)
# since the actual log file may be rotated out
@@ -256,9 +282,7 @@ def parse_log_file(parser)
# persistantly store log position in filesystem
# incase of dbomatic restarts
- if File.exists?(EVENT_LOG_POS_FILE)
- File.open(EVENT_LOG_POS_FILE, 'r') { |f| log_file.pos = f.read.to_i }
- end
+ log_file.pos = get_log_file_pos
# if the log has been rotated out
if log_file.pos > File.size(CONDOR_EVENT_LOG_FILE)
@@ -279,7 +303,7 @@ def parse_log_file(parser)
parser << s
end
- File.open(EVENT_LOG_POS_FILE, 'w') { |f| f.write log_file.pos.to_s }
+ set_log_file_pos(log_file.pos)
end
begin
@@ -295,20 +319,28 @@ begin
# Create one for parsing purposes.
parser << "<events>"
- notifier = INotify::Notifier.new
-
parse_log_file(parser) if File.exists? CONDOR_EVENT_LOG_FILE
+ logger.info "Parsed existing event log file - current postition:
#{get_log_file_pos}"
- # Setup inotify watch for condor event log changes
- notifier.watch(condor_event_log_dir, :all_events){ |event|
- if event.name == "EventLog" && event.flags.include?(:modify)
- parse_log_file parser
- end
- }
-
+ logger.info "Beginning main event loop"
while true
begin
+ logger.info "Creating new notifier"
+ notifier = INotify::Notifier.new
+
+ # Setup inotify watch for condor event log changes
+ logger.info "Setting up notifier watch on #{condor_event_log_dir}
directory"
+ notifier.watch(condor_event_log_dir, :all_events){ |event|
+ if event.name == "EventLog" && event.flags.include?(:modify)
+ logger.info "EventLog modification event triggered, parsing log"
+ parse_log_file parser
+ logger.info "EventLog modification event trigger completed, parsing
finished - current position #{get_log_file_pos}"
+ end
+ }
+
+ logger.info "Running notifier"
notifier.run
+ logger.info "Notifier run completed"
rescue => e
logger.error "#{e.backtrace.shift}: #{e.message}"
e.backtrace.each do |step|
@@ -316,9 +348,11 @@ begin
end
end
end
+ logger.info "Main event loop completed"
parser << "</events>"
parser.finish
+ logger.info "Finished parsing, now exiting"
rescue => e
logger.error "#{e.backtrace.shift}: #{e.message}"
e.backtrace.each do |step|
--
1.7.2.3