
When a rpc client try to make a RPC call and the server is unreachable The rpc call hang until the server come back. In most case this is the desired behavior. But sometimes, we can prefer that the library raise an exception after a certain number of retries. For example in ceilometer, when publishing a storage.objects.incoming.bytes sample from the Swift middleware to an AMQP topic, you might not want to block the Swift client if the AMQP broker is unavailable - instead, you might have a queueing policy whereby if a single reconection attempt fails we queue the sample in memory and try again when another sample is to be published. This patch is the oslo.messaging part that allow this. Closes bug #1282639 Co-Authored-By: Ala Rezmerita <ala.rezmerita@cloudwatt.com> Change-Id: I32086d0abf141c368343bf225d4b021da496c020
39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
|
|
# Copyright 2013 Red Hat, Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
__all__ = ['MessagingException', 'MessagingTimeout', 'MessageDeliveryFailure',
|
|
'InvalidTarget']
|
|
|
|
|
|
class MessagingException(Exception):
|
|
"""Base class for exceptions."""
|
|
|
|
|
|
class MessagingTimeout(MessagingException):
|
|
"""Raised if message sending times out."""
|
|
|
|
|
|
class MessageDeliveryFailure(MessagingException):
|
|
"""Raised if message sending failed after the asked retry."""
|
|
|
|
|
|
class InvalidTarget(MessagingException, ValueError):
|
|
"""Raised if a target does not meet certain pre-conditions."""
|
|
|
|
def __init__(self, msg, target):
|
|
msg = msg + ":" + str(target)
|
|
super(InvalidTarget, self).__init__(msg)
|
|
self.target = target
|