 +            log_info.update(params)
  
              if self.max_retries and attempt == self.max_retries:
-                 LOG.exception(_('Unable to connect to AMQP server on '
---- a/rpc/impl_kombu.py  2012-10-17 08:04:08.671647729 +0400
-+++ b/rpc/impl_kombu.py  2012-10-17 08:04:29.060656476 +0400
-@@ -494,7 +494,7 @@
-         while True:
+-                LOG.exception(_('Unable to connect to AMQP server on '
+-                              '%(hostname)s:%(port)d after %(max_retries)d '
+-                              'tries: %(err_str)s') % log_info)
++                LOG.error(_('Unable to connect to AMQP server on '
++                            '%(hostname)s:%(port)d after %(max_retries)d '
++                            'tries: %(err_str)s') % log_info)
+                 # NOTE(comstud): Copied from original code.  There's
+                 # really no better recourse because if this was a queue we
+                 # need to consume on, we have no way to consume anymore.
+@@ -502,9 +543,9 @@ class Connection(object):
+                 sleep_time = min(sleep_time, self.interval_max)
+ 
+             log_info['sleep_time'] = sleep_time
+-            LOG.exception(_('AMQP server on %(hostname)s:%(port)d is'
+-                          ' unreachable: %(err_str)s. Trying again in '
+-                          '%(sleep_time)d seconds.') % log_info)
++            LOG.error(_('AMQP server on %(hostname)s:%(port)d is '
++                        'unreachable: %(err_str)s. Trying again in '
++                        '%(sleep_time)d seconds.') % log_info)
+             time.sleep(sleep_time)
+ 
+     def ensure(self, error_callback, method, *args, **kwargs):
+@@ -512,7 +553,8 @@ class Connection(object):
              try:
                  return method(*args, **kwargs)
--            except (self.connection_errors, socket.timeout, IOError), e:
-+            except (self.connection_errors, self.channel_errors, socket.timeout, IOError), e:
-                 pass
+             except (self.connection_errors, socket.timeout, IOError), e:
+-                pass
++                if error_callback:
++                    error_callback(e)
              except Exception, e:
                  # NOTE(comstud): Unfortunately it's possible for amqplib
---- a/utils.py  2012-10-17 03:56:53.804857392 +0400
-+++ b/utils.py  2012-10-17 03:56:33.089851994 +0400
-@@ -837,7 +837,7 @@
-     pass
- else:
-     anyjson._modules.append(("nova.utils", "dumps", TypeError,
--                                           "loads", ValueError))
-+                                           "loads", ValueError, None))
-     anyjson.force_implementation("nova.utils")
+                 # to return an error not covered by its transport
+@@ -522,8 +564,8 @@ class Connection(object):
+                 # and try to reconnect in this case.
+                 if 'timeout' not in str(e):
+                     raise
+-            if error_callback:
+-                error_callback(e)
++                if error_callback:
++                    error_callback(e)
+             self.reconnect()
+ 
+     def get_channel(self):
+

+                self._connect(params)
                 return
-            except (self.connection_errors, IOError), e:
+            except (self.connection_errors, self.channel_errors, IOError), e:
                 pass
             except Exception, e:
                 # NOTE(comstud): Unfortunately it's possible for amqplib
@@ -460,7 +463,7 @@
             log_info = {}
             log_info['err_str'] = str(e)
             log_info['max_retries'] = self.max_retries

         """
         if self.connection:
             LOG.info(_("Reconnecting to AMQP server on "
-                     "%(hostname)s:%(port)d") % self.params)
+                     "%(hostname)s:%(port)d") % params)
             try:
                 self.connection.close()
-            except self.connection_errors:
+            except (self.connection_errors, self.channel_errors):
                 pass
             # Setting this in case the next statement fails, though
             # it shouldn't be doing any network operations, yet.
             self.connection = None
-        self.connection = kombu.connection.BrokerConnection(**self.params)
+        self.connection = kombu.connection.BrokerConnection(**params)
         self.connection_errors = self.connection.connection_errors
+        self.channel_errors = self.connection.channel_errors
         if self.memory_transport:
             # Kludge to speed up tests.
             self.connection.transport.polling_interval = 0.0
@@ -450,8 +490,8 @@ class Connection(object):
             self.channel._new_queue('ae.undeliver')
         for consumer in self.consumers:
             consumer.reconnect(self.channel)
-        LOG.info(_('Connected to AMQP server on %(hostname)s:%(port)d'),
-                 self.params)
+        LOG.info(_('Connected to AMQP server on %(hostname)s:%(port)d') %
+                 params)
 
     def reconnect(self):
         """Handles reconnecting and re-establishing queues.
@@ -464,11 +504,12 @@ class Connection(object):
 
         attempt = 0
         while True:
