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

Joey Boggs jboggs at redhat.com
Thu Mar 19 19:16:35 UTC 2009


I replied last night on this but don't see it anywhere,   ack from me

Steve Linabery wrote:
> 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
>
> _______________________________________________
> Ovirt-devel mailing list
> Ovirt-devel at redhat.com
> https://www.redhat.com/mailman/listinfo/ovirt-devel
>   




More information about the ovirt-devel mailing list