<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";
        mso-fareast-language:EN-GB;}
span.EmailStyle20
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-GB" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Whilst a version number would allow a consumer to detect that something has changed, it doesn’t really help in providing any kind of backward compatibility.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Consider the following scenario:  There are a bunch of systems external to Nova developed to consume notification messages, and someone introduces a change
 to the notification system that changes the message content.   They do the right thing in updating the version number, but all of those external systems now need to change as well.   The new version number lets them fail explicitly, but it could still have
 a significant impact on a production system.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Where I’d like to get to make the notification system a formal external interface, that has the same degree of stability, version control, and rigor around
 changes that the inbound API has.   <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I would guess that Ceilometer will have some requirement around this ?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Phil<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Diego Parrilla Santamarķa [mailto:diego.parrilla.santamaria@gmail.com]
<br>
<b>Sent:</b> 10 October 2012 09:18<br>
<b>To:</b> Day, Phil<br>
<b>Cc:</b> David Ripton; openstack@lists.launchpad.net<br>
<b>Subject:</b> Re: [Openstack] Versioning for notification messages<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">If we want to have a notification system that could handle messages with different payloads and different versions, we have two options:<br>
<br>
1) detect the version of the payload in the notification message<br>
2) add a version number in the notification message<br>
<br>
Option 1 sounds to me like something hard to maintain. Option 2 seems to be correct way to do it in the long term.<br>
<br>
+1 for a version number in the notification message<br>
<br>
Cheers<br>
Diego<br clear="all">
 -- <span style="font-family:"Arial","sans-serif""><o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span lang="ES" style="font-size:10.0pt;font-family:"Arial","sans-serif"">Diego Parrilla<br>
</span><b><span style="font-size:10.0pt;font-family:"Arial","sans-serif"">CEO</span></b><span style="font-size:7.5pt;font-family:"Arial","sans-serif""><br>
</span><b><span style="font-size:10.0pt;font-family:"Arial","sans-serif""><a href="http://www.stackops.com/" target="_blank">www.stackops.com</a> | </span></b><span style="font-size:7.5pt;font-family:"Arial","sans-serif""> <a href="mailto:diego.parrilla@stackops.com" target="_blank">diego.parrilla@stackops.com</a> | +34
 649 94 43 29 | skype:diegoparrilla</span><span style="font-size:10.0pt;font-family:"Arial","sans-serif""><a href="http://www.stackops.com/" target="_blank"><b><br>
</b></a><o:p></o:p></span></p>
</div>
<div>
<p><b><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:#004438"><img border="0" id="_x0000_i1025" src="http://stackops.s3-external-3.amazonaws.com/STACKOPSLOGO-ICON.png"><o:p></o:p></span></b></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
<br>
<o:p></o:p></p>
<div>
<p class="MsoNormal">On Wed, Oct 10, 2012 at 9:27 AM, Day, Phil <<a href="mailto:philip.day@hp.com" target="_blank">philip.day@hp.com</a>> wrote:<o:p></o:p></p>
<p class="MsoNormal">Hi All,<br>
<br>
I guess I may have mis-stated the problem a tad in talking about version numbering.  The notification system is an outbound interface, and my interest is in being able to write consumers with some guarantee that they won't be broken as the notification message
 format evolves.<br>
<br>
Having a version number gives the client a way to know that it may now be broken, but that's not really the same as having an interface with some degree of guaranteed compatibility,<br>
<br>
Phil<o:p></o:p></p>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
-----Original Message-----<br>
From: openstack-bounces+philip.day=<a href="mailto:hp.com@lists.launchpad.net">hp.com@lists.launchpad.net</a> [mailto:<a href="mailto:openstack-bounces%2Bphilip.day">openstack-bounces+philip.day</a>=<a href="mailto:hp.com@lists.launchpad.net">hp.com@lists.launchpad.net</a>]
 On Behalf Of David Ripton<br>
Sent: 09 October 2012 20:59<br>
To: <a href="mailto:openstack@lists.launchpad.net">openstack@lists.launchpad.net</a><br>
Subject: Re: [Openstack] Versioning for notification messages<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">On 10/09/2012 01:07 PM, Day, Phil wrote:<br>
<br>
> What do people think about adding a version number to the notification<br>
> systems, so that consumers of notification messages are protected to<br>
> some extent from changes in the message contents ?<br>
><br>
> For example, would it be enough to add a version number to the<o:p></o:p></p>
</div>
<p class="MsoNormal">> messages - or should we have the version number as part of the topic<o:p></o:p></p>
<div>
<div>
<p class="MsoNormal">> itself (so that the notification system can provide both a 1.0 and 1.1 feed), etc ?<br>
<br>
Putting a version number in the messages is easy, and should work fine.<br>
  Of course it only really helps if someone writes clients that can deal with multiple versions, or at least give helpful error messages when they get an unexpected version.<br>
<br>
I think using separate topics for each version would be inefficient and error-prone.<br>
<br>
Inefficient because you'd have to send out multiples of each message, some of which would probably never be read.  Obviously, if you're sending out N copies of each message then you expect only 1/N the queue performance.  Worse, if you're sending out N copies
 of each message but only 1 of them is being consumed, your queue server is using a lot more memory than it needs to, to hold onto old messages that nobody needs.<br>
(If you properly configure a high-water mark or timeout, then the old messages will eventually be thrown away.  If you don't, then your queue server will eventually consume way too much memory and start swapping, your cloud will break, and someone will get
 paged at 2 a.m.)<br>
<br>
Error-prone because someone would end up reusing the notification queue code for less idempotent/safe uses of queues, like internal API calls.<br>
And then client A would pick up the message from topic_v1, and client B would pick up the same message from topic_v2, and they'd both perform the same API operation, resulting in wasted resources in the best case and data corruption in the worst case.<br>
<br>
--<br>
David Ripton   Red Hat   <a href="mailto:dripton@redhat.com">dripton@redhat.com</a><br>
<br>
_______________________________________________<br>
Mailing list: <a href="https://launchpad.net/~openstack" target="_blank">https://launchpad.net/~openstack</a><br>
Post to     : <a href="mailto:openstack@lists.launchpad.net">openstack@lists.launchpad.net</a><br>
Unsubscribe : <a href="https://launchpad.net/~openstack" target="_blank">https://launchpad.net/~openstack</a><br>
More help   : <a href="https://help.launchpad.net/ListHelp" target="_blank">https://help.launchpad.net/ListHelp</a><br>
<br>
_______________________________________________<br>
Mailing list: <a href="https://launchpad.net/~openstack" target="_blank">https://launchpad.net/~openstack</a><br>
Post to     : <a href="mailto:openstack@lists.launchpad.net">openstack@lists.launchpad.net</a><br>
Unsubscribe : <a href="https://launchpad.net/~openstack" target="_blank">https://launchpad.net/~openstack</a><br>
More help   : <a href="https://help.launchpad.net/ListHelp" target="_blank">https://help.launchpad.net/ListHelp</a><o:p></o:p></p>
</div>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>