16:03:26 #startmeeting marconi 16:03:27 Meeting started Mon Oct 21 16:03:26 2013 UTC and is due to finish in 60 minutes. The chair is kgriffs. Information about MeetBot at http://wiki.debian.org/MeetBot. 16:03:28 Useful Commands: #action #agreed #help #info #idea #link #topic #startvote. 16:03:30 The meeting name has been set to 'marconi' 16:03:35 16:03:43 #link https://wiki.openstack.org/wiki/Meetings/Marconi#Agenda 16:03:59 #topic Review teh actionz from teh last timez 16:04:12 :D 16:04:21 #link http://eavesdrop.openstack.org/meetings/marconi/2013/marconi.2013-10-07-16.03.html 16:04:38 so, looks like flaper87 was the only one with anything to do this past week. 16:04:40 ;) 16:04:42 lol 16:05:20 erm, mmh, erm erm mmhh 16:05:36 I totally failed on that but I got feedback on the devstack patch 16:05:38 does that count? 16:05:40 :D 16:05:46 heh 16:05:55 I'll get to it this week 16:05:58 promissed 16:06:01 #action flaper87 to research heat 16:06:11 ok 16:06:13 otherwise 16:06:18 quick not regarding API freeze 16:06:43 as Murphy's Law dictates, immediately after freezing the API we started getting people complaining about certain aspects of it 16:07:11 So, i started a page to track feedback. We will need to review it at some point. 16:07:12 https://wiki.openstack.org/wiki/Marconi/specs/api/next 16:07:13 :) 16:07:22 #link https://wiki.openstack.org/wiki/Marconi/specs/api/next 16:07:39 #info Now tracking API feedback for future versions. 16:08:25 interesting notes 16:08:47 I would like us to break them down on an etherpad / bugs and comment there 16:08:57 I can help with bugs creation 16:09:12 yeah, let's hold off for a bit and see what else comes in 16:09:33 sure, I'd say we should start putting them in an etherpad then 16:09:35 i think we need to discuss them first 16:09:37 fwiw, I thought this post was pretty relevant. ;) 16:09:37 and add some comments 16:09:37 http://sethgodin.typepad.com/seths_blog/2013/09/when-to-speak-up.html 16:10:12 heheh 16:10:21 flaper87: let me set that up for next week. We've got sharding to focus on for now. 16:10:21 yup - speak up before it is done, though getting people to break the inertia before use is tough. :P 16:10:37 yeah, I meant to do it off-line 16:10:39 not right now 16:10:50 sorry for not being explicit enough :D 16:10:56 ok, feel free to set up etherpadz or whateverz 16:11:02 okeyz 16:11:11 neeeext topicz 16:11:13 :D 16:11:52 #topic teh updatez on teh shardzes 16:11:59 lol 16:12:11 yeah, there's a lot going on there~ 16:12:29 * flaper87 didn't know kgriffs knows french 16:12:38 So, with a link to summarize the state of things 16:12:41 #link https://etherpad.openstack.org/p/sharding-merge-strategy 16:12:49 Wr've gotten a lot of the foundational stuff down. 16:12:53 *We've 16:13:05 Pipeline enhancements, a sharding driver stubbed out 16:13:31 It's been a load of development towards making sharding a real thing. 16:13:37 (for marconi) 16:13:58 the proposed admin API is currently under review 16:14:26 once that's merged, we'll have a sharding and a catalogue queues storage driver for controlling shard registration 16:15:09 ok, any big questions or concerns or blockers? 16:15:24 requires_mongodb 16:15:24 not from me! 16:15:37 does not work T_T 16:15:37 the only blocker is already being addressed - let's keep reviewing the admin API branch and get those storage drivers in. :) 16:15:40 The whole idea and work looks good 16:15:55 zyuan: mmh, it does work for here :( 16:16:01 ok, rock on 16:16:14 just not on jenkins with py26. discuss latter. 16:16:20 we'll continue working through those patches in #openstack-marconi 16:16:43 awesome 16:16:46 #topic The future of the proxy 16:17:16 * alcabrera notes how serious the tone suddenly became - 90% fewer z's 16:17:29 *100% 16:18:00 * kgriffs has to budget his z's - doesn't want to run out early 16:18:03 kgriffs: want to lead the discussion on this one? 16:18:09 sure 16:18:24 so, given that we will have storage-layer sharding 16:18:35 how far will that allow Marconi to scale? 16:19:00 (without any proxy thingy) 16:19:09 Far enough, imho! 16:19:51 it seems like it would go for some time. Some potential bottlenecks are CPU/connections|node, but those seem far off atm. 16:20:09 I was also thinking that Marconi it'sef could be use as a shard in case of more partitions are needed 16:20:32 meaning, we coul have a Marconi storage backend that talks to a remote Marconi server 16:20:45 in case that's ever needed 16:20:54 my mind just exploded 16:21:01 LOL 16:21:06 cool idea 16:21:09 lol 16:21:24 That's like nova in docker in nova in... 16:21:34 :D 16:21:42 I'll create a bp for that then :D 16:22:09 so a marconi storage backend would talk to another marconi transport? 16:22:12 ok, so the proposal is to stamp a big-ole YAGNI on the proxy? 16:22:26 That's my favored outcome for the proxy. 16:22:32 I'd say so 16:22:50 amitgandhi: yeah, it'd talk to another Marconi 16:23:01 that bp will obviously depend on the client being ready 16:23:02 That'd be -2372 LOC for removing the proxy - easier to manage. 16:23:10 shall we vote? 16:23:14 biggest fear there for me is the latency of it 16:23:22 flaper87: good idea 16:23:35 #startvote Remove the proxy, salvaging what we can for the sharding feature? Yes, No, Abstain 16:23:35 Begin voting on: Remove the proxy, salvaging what we can for the sharding feature? Valid vote options are Yes, No, Abstain. 16:23:36 Vote using '#vote OPTION'. Only your last vote counts. 16:23:40 amitgandhi: yeah, that needs to be examined a lot! 16:23:50 #vote yes 16:23:55 #vote yes 16:23:56 #vote yes 16:24:06 #vote Abstain 16:24:22 #vote yez 16:24:23 kgriffs: yez is not a valid option. Valid options are Yes, No, Abstain. 16:24:32 lol 16:24:32 ... 16:24:35 * kgriffs bots have no humor 16:24:43 #vote yes 16:25:00 going once... 16:25:09 twice... 16:25:15 when? 16:25:19 #endvote 16:25:19 Voted on "Remove the proxy, salvaging what we can for the sharding feature?" Results are 16:25:20 Yes (4): amitgandhi, alcabrera, kgriffs, flaper87 16:25:21 Abstain (1): zyuan 16:25:40 ok, once sharding is packaged up with a pretty bow, we can nuke the proxy code 16:25:46 ok 16:25:55 let's leave it around until then for reference 16:26:00 +1 16:26:18 I've already started the salvaging process. 16:26:32 anything else on that topic? 16:26:37 the admin API feature branch used many of the idioms and storage patterns I put together while working on the proxy. 16:26:42 *uses 16:26:53 Plus, it has pagination. :P 16:27:02 Anyway, that's it from me on the proxy. 16:27:15 (nuke it from orbit) 16:27:15 #topic API Spec server sidez 16:27:24 more zzzzs 16:27:30 o/ 16:27:32 o/ 16:27:34 flaper87: go for it 16:27:35 o/ 16:27:44 * flaper87 runs towards it 16:27:51 * flaper87 is still running 16:27:54 * flaper87 is getting tired 16:27:57 * flaper87 fainted 16:27:59 ok 16:28:01 seriously 16:28:35 that's the first issue? 16:28:48 The idea there is to have something similar to what we have in the client but adapted a bit for the server 16:28:49 it all starts from the thought that we don't have a good way to version our server-side API 16:28:49 ... yet. 16:28:52 so, this is what we've in the client 16:29:11 #link https://review.openstack.org/#/c/50638/7/marconiclient/queues/v1/api.py 16:29:47 In that JSON, I'm specifying the API that can be validated with json schema. 16:29:52 (if needed) 16:30:09 although it seems a bit HTTP tight, it actually isn't. 16:30:31 The whole point is that HTTP is the most partitioned protocol we have right now 16:30:51 other protocols can simple translate that to something they need 16:30:55 and can use 16:31:14 so, hope that explains a bit the idea 16:31:19 thoughts so far? 16:31:21 it's true - zmq is just data + Maybe framing 16:31:28 HTTP is a bit more enveloped 16:31:35 I don;t know about websockets 16:31:47 And I'm pretty sure nanomsg is similar to zmq (data + Maybe frames) 16:31:49 For example, current wsgi controllers would register routes based on that dict 16:31:50 zmq's frame is invisible 16:32:16 zyuan: it's invisible as long as you don't use the XSUB/XPUB patterns 16:32:40 :( 16:32:46 flaper87: as for the idea in general, I'm pretty positive towards it. 16:32:58 It seems like it would greatly reduce the effort required to add a new transport. 16:33:10 * flaper87 is pretty sure it'll need tweaked a bit 16:33:17 need to be* 16:33:29 Instead of implementing each of the resources for each protocol, it seems like only the low-level transport.api.py.thing would have to be implemented 16:33:37 but, yeah, the idea is to have a well defined API schema 16:33:45 and the resources just use the appropriate lower-level to forward/serialize data. 16:34:04 I'm +2 on the API schema 16:34:08 hmm 16:35:32 that would also give us a home endpoint for free and eventually help us a lot with API discovery 16:35:50 also, it will unified the API definition throughout transports 16:36:03 as for now, we basically need to 'define' it for each transport 16:36:05 so, the proposal is to define the API using json-schema 16:36:43 kgriffs: ish, the idea is to have an API schema. Jsonschema has proven to be good for the job 16:37:01 it can be validated but it doesn't "have to" plus, it is flexible enough 16:37:40 so, one schema that all the transports are based on? 16:37:52 kgriffs: yup 16:38:14 Transport would get an 'Api' instance that they'll use to 'register' endpoints 16:38:34 that Api instance contains the API version, schema and other things related to the API 16:39:11 this is what the base API looks like in the client https://github.com/openstack/python-marconiclient/blob/master/marconiclient/transport/api.py 16:39:16 #link https://github.com/openstack/python-marconiclient/blob/master/marconiclient/transport/api.py 16:39:50 I can work on a POC for it 16:40:01 and we can discuss it a bit further based on that 16:40:14 flaper87: To some extent, the client impl. is a pre-POC. :D 16:40:22 alcabrera: good point :D 16:40:28 yeah, let's do that 16:40:29 * flaper87 takes that back 16:40:33 damn 16:40:34 lol 16:40:40 * flaper87 facepalm 16:40:43 ? 16:40:43 :P 16:40:51 kgriffs: just kidding! 16:41:03 I'll do some experiments on marconi-queues 16:41:09 and show the results 16:41:31 but I'd like to get a general thought now about the whole idea 16:41:43 if you guys see some limitations 16:41:45 etc 16:42:21 do you see this complicating, simplifying, or keeping the WSGI driver code the same? 16:42:38 (keeping roughly same in complexity, I mean) 16:42:41 I see this simplifying the WSGI code 16:42:50 in what ways? 16:44:00 1) The way routes are being defined, 2) We could reuse Controller classes in different versions 16:44:43 Number 2 obviously depends on the changes between versions 16:45:13 but what it definitely improves is API's consistency between transports 16:45:52 let me work on a POC 16:45:58 I think that will make this clearer 16:46:19 #action flaper87 to work on a POC for server API schema thingy 16:46:41 awesome. That'll be good to see growing. :) 16:46:44 cool 16:46:49 flaper87: i think I see where you are headed 16:47:01 btw, could you also consider the question of api extensions? 16:47:22 kgriffs: yes, will do! 16:47:26 just want to make sure whatever we implement takes that into consideration 16:47:32 ok 16:47:34 any thoughts so far? 16:47:49 like "WTF are you planning?" or "Yup, that could work" 16:47:57 so, I like the idea of defining the API in code, rather than on a wiki page 16:48:09 kgriffs: +1 16:48:14 +1 16:48:21 we can generate Wiki pages out of it 16:48:23 :D 16:48:26 ok, cool! 16:48:26 It gives us the opportunity to - yes, that 16:48:28 ^ 16:48:30 lets move on 16:48:42 there are other topics to talk about 16:48:44 next topic? 16:48:53 yeah, the basic idea is good, I just want to make sure it doesn't unnecessarily complicate the transport drivers 16:49:14 #topic API versioning strategy? 16:49:33 so, I put out some feelers re api versioning a few weeks back 16:49:52 it sounds like the community prefers extensions and major api revs over media type versioning 16:50:03 does that sound about right? 16:50:07 only media type? 16:50:16 without url? 16:50:38 like, if a client requests queues/my-queue/messages with 16:50:56 accept: application/vnd.openstack.marconi.messages.v2 16:51:08 then we return a different representation of the messages resource 16:51:28 :( that will be curl un-friendly 16:51:50 hmmm... 16:52:02 so, this is the recommended approach instead - http://www.infoq.com/presentations/OpenStack-Extensions 16:52:07 (from what I could gather) 16:52:25 that's my first thought 16:52:25 Cool, I'll check that out. 16:52:44 second is whether to target v2 API for Havana, or stick with v1 plus maybe some extensions 16:52:55 #link http://www.infoq.com/presentations/OpenStack-Extensions 16:53:04 kgriffs: Icehouse, you mena 16:53:05 mena 16:53:08 mean 16:53:08 oops, yeah 16:53:12 Icehouse 16:53:17 * alcabrera kgriffs is a time traveler 16:53:22 **notices 16:53:24 kgriffs: can briefly introduce the link above? 16:53:25 the idea being, we start out with a polished API for our first integrated release 16:53:51 zyuan: basically, you allow api extensions by introducing new resources (with new URLs), new headers, etc. 16:53:58 Icehouse is expected for 2014-04-04 16:54:01 kgriffs: we could also target some minor releases for v1 depending on what needs to be changed 16:54:12 #info Icehouse is expected for 2014-04-04 16:54:13 lets note that our client doens't fully support v1 yet 16:54:21 you also provide a way for clients to discover said extensions 16:54:32 it'd be a bit ackward to release API v2 and leave the client behind 16:54:42 although that clients have a different release cycle 16:54:43 yes, i agree 16:54:48 what an api extension looks like? 16:55:10 well, v2 would be a minor bump i suppose 16:55:17 i guess we could just do v1.1 instead 16:55:37 * flaper87 votes for 1.1 16:55:52 1 -> 2 will create a LOT of confussion 16:55:58 v1.1 works for me, given the changes requested are rather small atm 16:56:10 v2.0 makes me think of routing/exchanges and tags/topics 16:56:11 that would be more open-stacky, although the RESTafarian in me screams our in agony 16:56:25 flaper87: noted 16:56:39 ok, so let's think about doing a v1.1 for Icehouse 16:56:55 /v1.1/ ? 16:57:18 if so, LGTM 16:57:37 then 2.0 stuff we want to start working on we can have first as extensions - that will force us to start making extensions work for 3rd-parties 16:57:42 zyuan: right 16:58:02 actually, i think we can provide extension between releases 16:58:07 plus, the summit is 2 weeks from tomorrow, we'll definitely get a lot of feedback tehre 16:58:09 there 16:58:14 and merge them to new releases 16:58:20 we should also wait on that before taking any final decission 16:58:23 yeah, that is one of the purposes of extensions in general 16:58:33 great 16:58:33 POCs 16:59:29 we don't have much time left; can we discuss the object size / json doc length stuff? 16:59:37 yeah, just one moment 16:59:47 #info Target v1.1 for Icehouse 17:00:00 #topic Updates on bugs 17:00:05 zyuan: go for it 17:00:28 currently, we define document limit in terms of JSON char count 17:00:51 but obviously that does not work for other content like msgpack 17:00:57 zyuan: just a comment about that review. I'm ok with marking WIP in the summary but lets also use the WIP button in gerrit, pls! I didn't notice it was a WIP and reviewed it 17:01:10 LOL, ok... 17:01:25 :P 17:01:46 in addition, currently the code run in production does not perform real JSON char count checking 17:02:01 I short cut it with content-length checking 17:02:25 but if we enable the JSON char count checking.... that would be not just a little slow 17:02:39 so my proposal is to redefine "document size" 17:02:51 -- in terms of the total size of sub obejcts 17:03:07 for example, int and double has size 8 17:03:18 empty array, {} has size 8 17:03:19 etc. 17:03:31 so that any type of media type can have same size 17:03:56 and the checking is cheaper than JSON char count (unless we have a sizing parser in C) 17:04:17 prototype: https://review.openstack.org/#/c/51921/ 17:04:34 comment? 17:05:22 I like the idea overall, I'm a bit worried about the iteration cost (I mean, going deeper on nested objects) but I think that's still cheaper than counting chars 17:05:30 I think it would be helpful to have a python sizing parser as a baseline 17:05:38 The recursion is elegant, and I don't expect it to be too expensive CPU-wise. 17:05:45 given a dict, it walks it and counts up JSON chars 17:06:09 If this becomes a CPU-bound task, then pypy would likely shine here. 17:06:15 Given it's pure Python. 17:06:23 then you pretty much need N iteration, where N is JSON char counts... 17:06:26 I am still concerned about confusion on the part of the users/library developers when they get back an error response and they have to figure out why their message was too large. 17:06:26 Err, becomes a CPU bottleneck 17:06:30 it has to be done in C 17:06:30 alcabrera: yeah, but we can't expect all deployments to use pypy 17:06:39 flaper87: true. :) 17:07:03 i implemented it with recusion just because i don't how to do it without 17:07:05 kgriffs: that also had me thinking 17:07:06 also, we don't have much data on average message complexity 17:07:24 only what we can extrapolate from Rackspace's use of the internal precursor to Marconi 17:07:26 ... and i suspect a manual recursion to be even slower... 17:08:15 kgriffs: i hope so? 17:08:37 i mean, if messages are usually not very complex, then we may be doing premature optimization here 17:08:46 but we are still speculating 17:08:58 is RAX using marconi or ? 17:09:20 I guess we could examine this a bit further and re-schedule the discussion 17:09:24 we use a primitive sort of Marconi called RSE (really simple events) 17:09:33 like I said, I like the idea overall 17:09:53 so, requirements 17:10:09 1. Users must not be confused 17:10:22 2. It needs to be fast for the common case 17:10:52 (as a numerical anaysis user, i feel *really* confused with JSON char counts) 17:11:18 (i agree, performance improvement, hopefully) 17:11:30 3. Don't optimize prematurely; a naive python character counter may be good enough, for example 17:11:34 anyway, we are out of time 17:11:46 let's keep discussing 17:11:50 lets re-schedule this for next week 17:11:54 * flaper87 gtg now 17:12:03 * kgriffs has to go too 17:12:06 #endmeeting