[Ovirt-devel] [PATCH server] Add exception handling to dbomatic
Steve Linabery
slinabery at redhat.com
Thu Mar 19 18:00:13 UTC 2009
On Wed, Mar 18, 2009 at 01:58:59PM -0700, Ian Main wrote:
> 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
>
> _______________________________________________
> Ovirt-devel mailing list
> Ovirt-devel at redhat.com
> https://www.redhat.com/mailman/listinfo/ovirt-devel
Works for me! ACKity-ACK.
Steve
More information about the ovirt-devel
mailing list