[Ovirt-devel] [PATCH server] Add exception handling to dbomatic

Ian Main imain at redhat.com
Wed Mar 18 20:58:59 UTC 2009


This adds generic exception handling around the bulk of the code
so we'll know why things break when they do.

Signed-off-by: Ian Main <imain at redhat.com>
---
 src/db-omatic/db_omatic.rb |   79 +++++++++++++++++++++++++-------------------
 1 files changed, 45 insertions(+), 34 deletions(-)

diff --git a/src/db-omatic/db_omatic.rb b/src/db-omatic/db_omatic.rb
index 16a0cbf..8409c91 100755
--- a/src/db-omatic/db_omatic.rb
+++ b/src/db-omatic/db_omatic.rb
@@ -75,23 +75,30 @@ class DbOmatic < Qpid::Qmf::Console
         end
         @logger.info "dbomatic started."
 
-        ensure_credentials
-
-        database_connect
-
-        server, port = nil
-        sleepy = 5
-        while true do
-            server, port = get_srv('qpidd', 'tcp')
-            break if server
-            @logger.error "Unable to determine qpid server from DNS SRV record, retrying.." if not server
-            sleep(sleepy)
-            sleepy *= 2 if sleepy < 120
-        end
+        begin
+            ensure_credentials
+
+            database_connect
+
+            server, port = nil
+            sleepy = 5
+            while true do
+                server, port = get_srv('qpidd', 'tcp')
+                break if server
+                @logger.error "Unable to determine qpid server from DNS SRV record, retrying.." if not server
+                sleep(sleepy)
+                sleepy *= 2 if sleepy < 120
+            end
 
-        @logger.info "Connecting to amqp://#{server}:#{port}"
-        @session = Qpid::Qmf::Session.new(:console => self, :manage_connections => true)
-        @broker = @session.add_broker("amqp://#{server}:#{port}", :mechanism => 'GSSAPI')
+            @logger.info "Connecting to amqp://#{server}:#{port}"
+            @session = Qpid::Qmf::Session.new(:console => self, :manage_connections => true)
+            @broker = @session.add_broker("amqp://#{server}:#{port}", :mechanism => 'GSSAPI')
+
+            db_init_cleanup
+        rescue Exception => ex
+            @logger.error "Error in db-omatic: #{ex}"
+            @logger.error ex.backtrace
+        end
     end
 
 
@@ -403,30 +410,35 @@ class DbOmatic < Qpid::Qmf::Console
     # and makes sure all the agents are still reporting.  If they aren't they get marked as
     # down.
     def check_heartbeats()
-        while true
-            sleep(5)
+        begin
+            while true
+                sleep(5)
 
-            synchronize do
-                # Get seconds from the epoch
-                t = Time.new.to_i
+                synchronize do
+                    # Get seconds from the epoch
+                    t = Time.new.to_i
 
-                @heartbeats.keys.each do | key |
-                    agent, timestamp = @heartbeats[key]
+                    @heartbeats.keys.each do | key |
+                        agent, timestamp = @heartbeats[key]
 
-                    # Heartbeats from qpid are in microseconds, we just need seconds..
-                    s = timestamp / 1000000000
-                    delta = t - s
+                        # Heartbeats from qpid are in microseconds, we just need seconds..
+                        s = timestamp / 1000000000
+                        delta = t - s
 
-                    if delta > 30
-                        # No heartbeat for 30 seconds.. deal with dead/disconnected agent.
-                        agent_disconnected(agent)
+                        if delta > 30
+                            # No heartbeat for 30 seconds.. deal with dead/disconnected agent.
+                            agent_disconnected(agent)
 
-                        @heartbeats.delete(key)
-                    else
-                        agent_connected(agent)
+                            @heartbeats.delete(key)
+                        else
+                            agent_connected(agent)
+                        end
                     end
                 end
             end
+        rescue Exception => ex
+            @logger.error "Error in db-omatic: #{ex}"
+            @logger.error ex.backtrace
         end
     end
 end
@@ -436,10 +448,9 @@ def main()
 
     dbsync = DbOmatic.new()
 
-    dbsync.db_init_cleanup()
-
     # Call into mainloop..
     dbsync.check_heartbeats()
+
 end
 
 main()
-- 
1.6.0.6




More information about the ovirt-devel mailing list