<br><br><div class="gmail_quote">On Thu, Jul 18, 2013 at 9:44 AM, Jay Pipes <span dir="ltr"><<a href="mailto:jaypipes@gmail.com" target="_blank">jaypipes@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="HOEnZb"><div class="h5">On 07/18/2013 10:09 AM, Sandy Walsh wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hey y'all!<br>
<br>
Running into an interesting little dilemma with a branch I'm working on.<br>
Recently, I introduced a branch in oslo-common to optionally .reject() a<br>
kombu message on an exception. Currently, we always .ack() all messages<br>
even if the processing callback fails. For Ceilometer, this is a problem<br>
... we have to guarantee we get all notifications.<br>
<br>
The patch itself was pretty simple, but didn't work :) The spawn_n()<br>
call was eating the exceptions coming from the callback. So, in order to<br>
get the exceptions it's simple enough to re-wrap the callback, but I<br>
need to pool.waitall() after the spawn_n() to ensure none of the<br>
consumers failed. Sad, but a necessary evil. And remember, it's only<br>
used in a special case, normal openstack rpc is unaffected and remains<br>
async.<br>
<br>
But it does introduce a larger problem ... I have to change the rpc<br>
callback signature.<br>
<br>
Old: callback(message)<br>
New: callback(message, delivery_info=None, wait_for_consumers=False)<br>
<br>
(The delivery_info is another thing, we were dumping the message info on<br>
the floor, but this has important info in it)<br>
<br>
My worry is busting all the other callbacks out there that use<br>
olso-common.rpc<br>
<br>
Some options:<br>
1. embed all these flags and extra data in the message structure<br>
<br>
message = {'_context_stuff': "...",<br>
            'payload": {...},<br>
            '_extra_magic': {...}}<br>
</blockquote>
<br></div></div>
This would be my preference. #2 below is essentially the same thing but with some object-orientation for sugar -- and it breaks the existing structure, which #1 doesn't.<br>
<br>
best,<br>
-jay<div class="HOEnZb"><div class="h5"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
2. make a generic CallContext() object to include with message that has<br>
anything else we need (a one-time signature break)<br>
<br>
call_context = CallContext({"delivery_info": {...}, "wait": False})<br>
callback(message, call_context)<br>
<br>
3. some other ugly python hack that I haven't thought of yet.<br>
<br>
Look forward to your thoughts on a solution!<br>
<br>
Thanks<br>
-S<br>
<br>
<br>
My work-in-progess is here:<br>
<a href="https://github.com/SandyWalsh/openstack-common/blob/callback_exceptions/openstack/common/rpc/amqp.py#L373" target="_blank">https://github.com/SandyWalsh/<u></u>openstack-common/blob/<u></u>callback_exceptions/openstack/<u></u>common/rpc/amqp.py#L373</a><br>


<br>
______________________________<u></u>_________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org" target="_blank">OpenStack-dev@lists.openstack.<u></u>org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/<u></u>cgi-bin/mailman/listinfo/<u></u>openstack-dev</a><br>
<br>
</blockquote>
<br>
<br>
______________________________<u></u>_________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org" target="_blank">OpenStack-dev@lists.openstack.<u></u>org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/<u></u>cgi-bin/mailman/listinfo/<u></u>openstack-dev</a><br>
</div></div></blockquote></div><br><div>+1 to what Jay said.  I was actually getting ready to write a very similar email.</div><div><br></div><div>Cheers,</div><div>Morgan Fainberg</div>