summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@yahoo.com>2010-10-02 12:29:58 -0700
committerVishvananda Ishaya <vishvananda@yahoo.com>2010-10-02 12:29:58 -0700
commit4bab9061d231b93f5860023e06233fc9c82bb5e3 (patch)
treec31d9d6d085101ee34466c53f1ece91bd3b95c6f
parent3b3c72fc75b5dff8a26c59b0d4bb7f8ef34a18e7 (diff)
pack and unpack context
-rw-r--r--nova/rpc.py32
1 files changed, 27 insertions, 5 deletions
diff --git a/nova/rpc.py b/nova/rpc.py
index feaa4f042..d14c98d3a 100644
--- a/nova/rpc.py
+++ b/nova/rpc.py
@@ -151,8 +151,8 @@ class AdapterConsumer(TopicConsumer):
"""
LOG.debug('received %s' % (message_data))
msg_id = message_data.pop('_msg_id', None)
- dict_context = message_data.pop('_context')
- ctxt = context.RequestContext.from_dict(dict_context)
+
+ ctxt = _unpack_context(message_data)
method = message_data.get('method')
args = message_data.get('args', {})
@@ -249,13 +249,35 @@ class RemoteError(exception.Error):
traceback))
+def _unpack_context(msg):
+ """Unpack context from msg."""
+ context_dict = {}
+ for key in list(msg.keys()):
+ if key.startswith('_context_'):
+ value = msg.pop(key)
+ context_dict[key[9:]] = value
+ LOG.debug('unpacked context: %s', context_dict)
+ return context.RequestContext.from_dict(context_dict)
+
+def _pack_context(msg, context):
+ """Pack context into msg.
+
+ Values for message keys need to be less than 255 chars, so we pull
+ context out into a bunch of separate keys. If we want to support
+ more arguments in rabbit messages, we may want to do the same
+ for args at some point.
+ """
+ context = dict([('_context_%s' % key, value)
+ for (key, value) in context.to_dict().iteritems()])
+ msg.update(context)
+
def call(context, topic, msg):
"""Sends a message on a topic and wait for a response"""
LOG.debug("Making asynchronous call...")
msg_id = uuid.uuid4().hex
msg.update({'_msg_id': msg_id})
LOG.debug("MSG_ID is %s" % (msg_id))
- msg.update({'_context': context.to_dict()})
+ _pack_context(msg, context)
class WaitMessage(object):
@@ -291,7 +313,7 @@ def call_twisted(context, topic, msg):
msg_id = uuid.uuid4().hex
msg.update({'_msg_id': msg_id})
LOG.debug("MSG_ID is %s" % (msg_id))
- msg.update({'_context': context.to_dict()})
+ _pack_context(msg, context)
conn = Connection.instance()
d = defer.Deferred()
@@ -320,7 +342,7 @@ def call_twisted(context, topic, msg):
def cast(context, topic, msg):
"""Sends a message on a topic without waiting for a response"""
LOG.debug("Making asynchronous cast...")
- msg.update({'_context': context.to_dict()})
+ _pack_context(msg, context)
conn = Connection.instance()
publisher = TopicPublisher(connection=conn, topic=topic)
publisher.send(msg)