This patch uses the managed connection arrangement in the qpid library
which uses a separate thread to manage the qpid connection; a much
better way to go.
Signed-off-by: Ian Main <imain at redhat.com>
---
src/db-omatic/db_omatic.rb | 55 ++++++++++++++-----------------------------
1 files changed, 18 insertions(+), 37 deletions(-)
diff --git a/src/db-omatic/db_omatic.rb b/src/db-omatic/db_omatic.rb
index 6dc02fb..96202f4 100755
--- a/src/db-omatic/db_omatic.rb
+++ b/src/db-omatic/db_omatic.rb
@@ -40,7 +40,6 @@ class DbOmatic < Qpid::Qmf::Console
@cached_objects = {}
@heartbeats = {}
@broker = nil
- @session = Qpid::Qmf::Session.new(:console => self)
do_daemon = true
@@ -74,49 +73,33 @@ class DbOmatic < Qpid::Qmf::Console
end
@logger.info "dbomatic started."
- get_credentials('qpidd')
+ ensure_credentials
database_connect
- qpid_ensure_connected
-
- end
-
-
- # FIXME: This should move into a library but I think we'll need
- # to make some sort of singleton class for these applications so we can
- # share the logger and qpid variables etc. It's getting to show itself
- # as a problem but I don't want to go crazy right now as we're
supposed
- # to be in freeze. :)
- def qpid_ensure_connected()
-
- return if @broker and @broker.connected?
- sleepy = 2
+ server, port = nil
+ (1..4).each do
+ server, port = get_srv('qpidd', 'tcp')
+ break if server
+ @logger.error "Unable to determine qpid server from DNS SRV
record" if not server
+ sleep(10)
+ end
- while true do
- begin
- server, port = get_srv('qpidd', 'tcp')
- raise "Unable to determine qpid server from DNS SRV
record" if not server
+ raise "Unable to determine server and port from DNS SRV
records" if not server
- @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')
+ end
- # Connection succeeded, go about our business.
- @logger.info "Connected to amqp://#{server}:#{port}"
- return
- rescue Exception => msg
- @logger.error "Error connecting to qpidd: #{msg}"
- @logger.error msg.backtrace
- end
- sleep(sleepy)
- sleepy *= 2
- sleepy = 120 if sleepy > 120
+ def ensure_credentials()
+ get_credentials('qpidd')
- begin
- # Could also be a credentials problem? Try to get them again..
+ Thread.new do
+ while true do
+ sleep(3600)
get_credentials('qpidd')
- rescue Exception => msg
- @logger.error "Error getting qpidd credentials:
#{msg}"
end
end
end
@@ -370,8 +353,6 @@ class DbOmatic < Qpid::Qmf::Console
while true
sleep(5)
- qpid_ensure_connected
-
synchronize do
# Get seconds from the epoch
t = Time.new.to_i
--
1.6.0.6
Jason Guiditta
2009-Mar-05 18:20 UTC
[Ovirt-devel] [PATCH server] Fix dbomatic qpid reconnect
ACK, dbomatic seems to still work fine after this patch. On Tue, Mar 3, 2009 at 5:49 PM, Ian Main <imain at redhat.com> wrote:> This patch uses the managed connection arrangement in the qpid library > which uses a separate thread to manage the qpid connection; a much > better way to go. > > Signed-off-by: Ian Main <imain at redhat.com> > --- > src/db-omatic/db_omatic.rb | 55 > ++++++++++++++----------------------------- > 1 files changed, 18 insertions(+), 37 deletions(-) > > diff --git a/src/db-omatic/db_omatic.rb b/src/db-omatic/db_omatic.rb > index 6dc02fb..96202f4 100755 > --- a/src/db-omatic/db_omatic.rb > +++ b/src/db-omatic/db_omatic.rb > @@ -40,7 +40,6 @@ class DbOmatic < Qpid::Qmf::Console > @cached_objects = {} > @heartbeats = {} > @broker = nil > - @session = Qpid::Qmf::Session.new(:console => self) > > do_daemon = true > > @@ -74,49 +73,33 @@ class DbOmatic < Qpid::Qmf::Console > end > @logger.info "dbomatic started." > > - get_credentials('qpidd') > + ensure_credentials > > database_connect > - qpid_ensure_connected > - > - end > - > - > - # FIXME: This should move into a library but I think we'll need > - # to make some sort of singleton class for these applications so we > can > - # share the logger and qpid variables etc. It's getting to show > itself > - # as a problem but I don't want to go crazy right now as we're > supposed > - # to be in freeze. :) > - def qpid_ensure_connected() > - > - return if @broker and @broker.connected? > > - sleepy = 2 > + server, port = nil > + (1..4).each do > + server, port = get_srv('qpidd', 'tcp') > + break if server > + @logger.error "Unable to determine qpid server from DNS SRV > record" if not server > + sleep(10) > + end > > - while true do > - begin > - server, port = get_srv('qpidd', 'tcp') > - raise "Unable to determine qpid server from DNS SRV > record" if not server > + raise "Unable to determine server and port from DNS SRV records" > if not server > > - @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') > + end > > - # Connection succeeded, go about our business. > - @logger.info "Connected to amqp://#{server}:#{port}" > - return > > - rescue Exception => msg > - @logger.error "Error connecting to qpidd: #{msg}" > - @logger.error msg.backtrace > - end > - sleep(sleepy) > - sleepy *= 2 > - sleepy = 120 if sleepy > 120 > + def ensure_credentials() > + get_credentials('qpidd') > > - begin > - # Could also be a credentials problem? Try to get them > again.. > + Thread.new do > + while true do > + sleep(3600) > get_credentials('qpidd') > - rescue Exception => msg > - @logger.error "Error getting qpidd credentials: #{msg}" > end > end > end > @@ -370,8 +353,6 @@ class DbOmatic < Qpid::Qmf::Console > while true > sleep(5) > > - qpid_ensure_connected > - > synchronize do > # Get seconds from the epoch > t = Time.new.to_i > -- > 1.6.0.6 > > _______________________________________________ > Ovirt-devel mailing list > Ovirt-devel at redhat.com > https://www.redhat.com/mailman/listinfo/ovirt-devel >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://listman.redhat.com/archives/ovirt-devel/attachments/20090305/403ea560/attachment.htm>