ACK, dbomatic seems to still work fine after this patch.<br><br><div class="gmail_quote">On Tue, Mar 3, 2009 at 5:49 PM, Ian Main <span dir="ltr"><<a href="mailto:imain@redhat.com">imain@redhat.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">This patch uses the managed connection arrangement in the qpid library<br>
which uses a separate thread to manage the qpid connection; a much<br>
better way to go.<br>
<br>
Signed-off-by: Ian Main <<a href="mailto:imain@redhat.com">imain@redhat.com</a>><br>
---<br>
 src/db-omatic/db_omatic.rb |   55 ++++++++++++++-----------------------------<br>
 1 files changed, 18 insertions(+), 37 deletions(-)<br>
<br>
diff --git a/src/db-omatic/db_omatic.rb b/src/db-omatic/db_omatic.rb<br>
index 6dc02fb..96202f4 100755<br>
--- a/src/db-omatic/db_omatic.rb<br>
+++ b/src/db-omatic/db_omatic.rb<br>
@@ -40,7 +40,6 @@ class DbOmatic < Qpid::Qmf::Console<br>
         @cached_objects = {}<br>
         @heartbeats = {}<br>
         @broker = nil<br>
-        @session = Qpid::Qmf::Session.new(:console => self)<br>
<br>
         do_daemon = true<br>
<br>
@@ -74,49 +73,33 @@ class DbOmatic < Qpid::Qmf::Console<br>
         end<br>
         @<a href="http://logger.info" target="_blank">logger.info</a> "dbomatic started."<br>
<br>
-        get_credentials('qpidd')<br>
+        ensure_credentials<br>
<br>
         database_connect<br>
-        qpid_ensure_connected<br>
-<br>
-    end<br>
-<br>
-<br>
-    # FIXME: This should move into a library but I think we'll need<br>
-    # to make some sort of singleton class for these applications so we can<br>
-    # share the logger and qpid variables etc.  It's getting to show itself<br>
-    # as a problem but I don't want to go crazy right now as we're supposed<br>
-    # to be in freeze. :)<br>
-    def qpid_ensure_connected()<br>
-<br>
-        return if @broker and @broker.connected?<br>
<br>
-        sleepy = 2<br>
+        server, port = nil<br>
+        (1..4).each do<br>
+            server, port = get_srv('qpidd', 'tcp')<br>
+            break if server<br>
+            @logger.error "Unable to determine qpid server from DNS SRV record" if not server<br>
+            sleep(10)<br>
+        end<br>
<br>
-        while true do<br>
-            begin<br>
-                server, port = get_srv('qpidd', 'tcp')<br>
-                raise "Unable to determine qpid server from DNS SRV record" if not server<br>
+        raise "Unable to determine server and port from DNS SRV records" if not server<br>
<br>
-                @broker = @session.add_broker("amqp://#{server}:#{port}", :mechanism => 'GSSAPI')<br>
+        @<a href="http://logger.info" target="_blank">logger.info</a> "Connecting to amqp://#{server}:#{port}"<br>
+        @session = Qpid::Qmf::Session.new(:console => self, :manage_connections => true)<br>
+        @broker = @session.add_broker("amqp://#{server}:#{port}", :mechanism => 'GSSAPI')<br>
+    end<br>
<br>
-                # Connection succeeded, go about our business.<br>
-                @<a href="http://logger.info" target="_blank">logger.info</a> "Connected to amqp://#{server}:#{port}"<br>
-                return<br>
<br>
-            rescue Exception => msg<br>
-                @logger.error "Error connecting to qpidd: #{msg}"<br>
-                @logger.error msg.backtrace<br>
-            end<br>
-            sleep(sleepy)<br>
-            sleepy *= 2<br>
-            sleepy = 120 if sleepy > 120<br>
+    def ensure_credentials()<br>
+        get_credentials('qpidd')<br>
<br>
-            begin<br>
-                # Could also be a credentials problem?  Try to get them again..<br>
+        Thread.new do<br>
+            while true do<br>
+                sleep(3600)<br>
                 get_credentials('qpidd')<br>
-            rescue Exception => msg<br>
-                @logger.error "Error getting qpidd credentials: #{msg}"<br>
             end<br>
         end<br>
     end<br>
@@ -370,8 +353,6 @@ class DbOmatic < Qpid::Qmf::Console<br>
         while true<br>
             sleep(5)<br>
<br>
-            qpid_ensure_connected<br>
-<br>
             synchronize do<br>
                 # Get seconds from the epoch<br>
                 t = Time.new.to_i<br>
<font color="#888888">--<br>
1.6.0.6<br>
<br>
_______________________________________________<br>
Ovirt-devel mailing list<br>
<a href="mailto:Ovirt-devel@redhat.com">Ovirt-devel@redhat.com</a><br>
<a href="https://www.redhat.com/mailman/listinfo/ovirt-devel" target="_blank">https://www.redhat.com/mailman/listinfo/ovirt-devel</a><br>
</font></blockquote></div><br>