17:04:55 #startmeeting CongressTeamMeeting 17:04:56 Meeting started Tue Apr 22 17:04:55 2014 UTC and is due to finish in 60 minutes. The chair is thinrichs. Information about MeetBot at http://wiki.debian.org/MeetBot. 17:04:57 Useful Commands: #action #agreed #help #info #idea #link #topic #startvote. 17:04:57 Hi rajdeep 17:05:00 The meeting name has been set to 'congressteammeeting' 17:05:28 Usual agenda today: recap on action items, look at todos for alpha release, open discussion 17:06:01 I’d like to chat a bit about the conference at the end if there is time 17:06:03 Let's start with rajdeep. Can you report on data drivers? 17:06:16 yes.. 17:06:35 i completed some key integration points for nova driver 17:06:51 getting the server and flavor data in and converted to tuples 17:07:02 the code has been checked in 17:07:10 and tim approved today morning 17:07:35 #link https://review.openstack.org/#/c/88228/ 17:07:59 So for our running example (network connections to VMs with group constraints), do we have all the data sources that we need from Nova and Neutron? 17:08:12 i guess so 17:08:32 one challenge which i came across is how much API coverage should driver have 17:08:52 POST and DELETE APIs are not needed 17:09:19 Right--for data source drivers we want only API calls that do not CHANGE anything 17:09:29 so focussing on GET requests and prioritize 17:09:48 rajdeep: I’m working through those details now - I expect that some tables will just “appear” when the data source plugin is enabled, and others can be created (for users to manually provision data through the API) 17:09:56 But as we discussed during review, ideally we'll support the core API for each component. 17:10:17 yes we should strive for that 17:10:25 cover as much possible and applicable 17:10:55 now for the use case i had few questions we can discuss during the end 17:10:56 Eventually we'll want libraries where users say "I have Neutron v 1.2.1", and we'll use the data drivers for that version of the codebase. 17:11:16 But for POC, I think the coverage we have is good. 17:11:24 rajdeep: sounds good. 17:11:44 our drivers will also evolve with the openstack and their component versions 17:11:55 which is not designed in the driver itself 17:12:11 i am assuming we will have separate driver for each component and version 17:12:17 rajdeep: agreed 17:12:19 perhaps a driver factory on the top 17:12:33 to load the right driver depending on the version 17:13:04 Sounds good. 17:13:14 qustion: do we expect drivers to be registered at startup? 17:13:15 kudva: how are the builtins going? 17:13:26 Okay, I got the feedback from Tim on my document. 17:13:32 I have started implementation in my sandbox. 17:13:40 pballand: not sure. Ideally we could hot-swap at runtime 17:13:54 kudva: great! 17:13:56 In a week or so, I can put the code in for review 17:14:18 pballand : drivers can be instantiated but you need to call def update_from_datasource(self) 17:14:20 Right now I am assuming my own builtin directory in congress/policy 17:14:28 but we can decide where to put it. 17:14:34 to pull data 17:14:37 kudva: that sounds about right. 17:15:12 I'm looking forward to doing that review--builtins have been on the list for a long time. 17:15:32 kudva: any issues come up that need discussing with the group? 17:17:48 perhaps kudva had to step away. 17:18:11 pballand: how's the API going? 17:18:19 can I ask more questions about data source plugins? 17:18:23 sure 17:18:44 sorry, someone came into my office 17:18:44 do we want validation between the policy and data sources? 17:19:15 e.g. if a data source can dynamically start publishing data, can the policy be declared over it before it joins? 17:19:17 I could imagine telling the user that there are data sources referenced in policy that we don't have data for. Is that what you mean? 17:19:50 yeah, for the API, I’m wondering how strict we should be with schemas and validation 17:19:58 pballand: I'd say yes. I'm thinking of upgrades. Suppose user decides to upgrade Neutron to the next version. 17:20:25 Either they upgrade the data source first or the policy first. Either way there's a window where we have a mismatch. 17:20:51 or we have policy meta data which ties it to a version of the data source 17:20:54 so are tables versioned? ('nova-diablo:vm’) 17:21:48 I could imagine versioning tables temporarily while doing an upgrade. I think we need to think through what the right behavior should be during upgrade in terms of policy. 17:21:59 policy violations that is. 17:22:26 I think for alpha release we're just assuming upgrades don't happen. 17:22:41 I propose we allow adding items to tuples, but force a table name change if columns are removed or the meaning of a column changes 17:23:12 If we think this is important right now, does anyone want to volunteer to think through what happens during upgrade and data-source changes? 17:23:18 so we may wind up with something like nova-vm-version1, nova-vm-version2 17:23:24 pballand: forcing a table-name change would require changing policy. 17:23:47 yup - so we’d like to avoid table semantics if possible 17:23:58 avoid *changing* table semantics 17:24:24 Policy is hard to get right--I worry about telling people they need to change it every time they upgrade. 17:24:40 Without knowing there are no other options. 17:24:53 perhaps we could allow schema changes 17:24:59 I think that’s good enough for now - no need to go through a full upgrade modeling - we just need to be clear that once a table is defined for a data source, we should avoid chanign the schema 17:25:01 Sorry--got to step away for a minute. pballand, can you take over? 17:25:01 and ignore errors because of missing data 17:25:11 thinrichs: yup 17:25:58 what I was going to propose is that for a given datasource::table name, we can add columns between releases, but not remove any 17:26:24 well it will be easier to add new colums at the end of tuple 17:26:37 rajdeep: exactly - that would be allowed 17:26:44 i have a new method to get metadata for a tuple 17:26:57 def get_tuple_metadata(self, type): 56 if type == self.SERVERS: 57 return ("id", "name", "host_id", "status", "tenant_id", "progress", 58 "user_id", "image_id", "flavor_id") 59 elif type == self.FLAVORS: 60 return ("id", "name", "vcpus", "ram", "disk", "ephemeral", 61 "rxtx_factor") 17:27:05 sorry 17:27:09 if a version change calls for changing the type of a column (or removing it), we can either leave the column empty and add a new column, or create a new table 17:27:28 ok, thanks for the input 17:27:32 lets let kudva finish :) 17:27:42 ok 17:27:49 I think many of my questions I can ask around the code 17:28:23 many are probably best answered by thinrichs 17:28:24 So, I would like to have the code out to you 17:28:54 do you want to discuss in IRC, or after you work on the code? 17:28:56 and then have a discussion around the code to make sure the implementations, concepts I have captured properly. This way we will have a concrete strawman 17:29:05 perfect 17:29:21 after I have a version ready 17:29:47 we can do a code/concept review together. Once I get feedback, I'll go back rework it 17:30:07 that sounds good - anything else to discuss in this forum? 17:30:08 < 1 week is the time I have set for myself 17:31:25 ok, I’ll give a summary of where I am at with the API 17:32:02 I’m starting to put together a design doc just on the api/data model 17:32:30 I will have something to publish by the end of the week 17:32:59 ok, i am assuming data model will reflect the driver data structures 17:33:15 rajdeep: yes, that’s the idea 17:33:26 1/2 will be data-source oriented 17:33:32 and the other half will be based on policy 17:33:40 ok 17:34:14 one addition is the ability to have API-sourced tables, which act like the driver data, except the user can create/update them through the API 17:34:33 I expect this to be very useful for testing, demoing, and training 17:34:56 you mean REST APIs? 17:35:11 yes 17:35:41 unlike datasource-plugins, the framework would manage data storage for these ‘internal’ tables 17:35:44 that will be great 17:35:46 (better name welcome) 17:35:58 and perhaps a client library :) 17:36:38 so there are 3 types of data - ephemeral data from a datasource-plugin, static data managed through the API and stored by the framework, and derived data computed and exposed by the policy 17:37:16 (really the static/internal data is just a datasource-plugin that is always available) 17:37:26 does that sound reasonable? 17:37:36 Sounds good to me. 17:37:47 yes it does where will static data be stored? 17:37:51 thinrichs: you’re back :) 17:38:09 rajdeep: my thought was to just use sqlite for now 17:38:14 Been following but repeatedly interrupted. Should be back for good now. 17:38:31 Why not use our normal datastore? 17:38:48 what is our “normal” datastore? 17:38:50 Are we worried about persistence? That's something we need to worry about for policy as well. 17:39:07 the ‘internal’ tables would need to be persisted just like policy 17:39:17 I am considering putting both in sqlite for now 17:39:38 Our in-memory database that we use to cache data sources, reason about policy, etc. 17:39:41 (it’s not a scalable solution, but should be adequate for the use case) 17:40:01 ah, for the internal tables, I think it would be useful for the data to survive restart 17:40:12 (and policy should definitely survive restart) 17:40:23 We can always look at the internal tables as extra policy statements. 17:40:39 And use the same mechanism for persisting them that we do for persisting policy. 17:40:50 thinrichs: I’d rather model them closer to datasource plugins where we manage the persistance 17:41:30 in fact, maybe there are just 2 types of data (datasource and policy) and the ‘internal’ tables are just a datasource plugin that we ship with 17:41:33 I had thought we'd address persistence at the same time we address the need to store history. 17:41:46 For auditing, that is. 17:42:10 So the most recent policy/data is not the only thing we want to persist--we want the history of those things. 17:42:18 Or at least some of the history. 17:42:35 hmm, I don’t think we want to tackle history yet 17:43:15 how about I write up a proposal and send it out 17:43:36 That's fine if we want to delay. But if we use the usual database approach to atomicity we get both history and persistence solved at the same time. 17:43:59 pballand: proposal sounds good 17:44:13 except the scale requirements for the different things are entirely different orders of magnatude 17:44:45 ok, other than the modeling (document end of week), I am working on the runtime 17:45:25 my thought was to take the existing eventlet runtime and make it more pluggable so it can run API, policy, and message bus components 17:45:46 optionally, data source plugins can run in the loop too 17:46:01 any thoughts? 17:46:27 Can you give me a brief description of the eventlet runtime? It's the scheduler for the policy/message bus/API, etc.? ??? 17:47:04 integration with the eventlet engine will be good 17:47:11 it is basically a select loop - as each component blocks, something else gets scheduled 17:47:33 So this is cooperative threading? 17:48:13 basically yes 17:48:34 python sucks at threads, so the greenthread approach is popular 17:49:26 if we want to go multi-processor, we can use multiple processes (orchastrated over message bus) or rewrite in a different language 17:49:33 So we make our classes inherit from some special threading class and insert yield() calls at appropriate places? 17:49:51 thinrichs: exactly 17:50:09 (except you probalby don’t need many/any yields) 17:50:49 Let's keep everything in Python for now. 17:51:06 If we need to we can think about multi-processor approaches later. 17:51:24 agreed - do we think we can all live in a single event loop for now? 17:51:46 yes 17:51:51 (I don’t know how well the plexxi DSE code will cooperate 17:51:59 anyone from plexxi on? 17:52:23 BTW, I'll try to get someone from Plexxi to start attending these meetings. 17:52:40 Oops--running short on time. 17:52:48 Are we finished with API? 17:53:01 yup, I’ll stop rambling :) 17:53:04 :) 17:53:16 Last things from last week's action items... 17:53:24 I was supposed to get the Plexxi code merged. 17:53:32 Done (though I didn't do much to make it happen). 17:53:53 I'll volunteer to work with pballand to see if we can get everything integrated. 17:53:58 message bus, policy, data drivers 17:54:06 sounds good :) 17:54:26 plexxi code check in is good news 17:54:38 agreed 17:55:12 rajdeep: do you have tasks for next week that you're working on? 17:55:22 The rest of us do. 17:55:37 i am planning to add some more usecases to nova 17:55:43 driver 17:55:51 Sounds good. 17:55:59 So 5 minutes of open discussion. 17:56:12 rajdeep: you had some questions earlier. Were they answered? 17:56:20 I was wondering if anyone was heading to Atlanta? 17:56:36 i had a question on groups and users construct in our use case 17:56:45 groups are not used in keystone.. 17:56:52 pballand: I'm headed to Atlanta, though late. Arriving Wed night. 17:57:13 rajdeep: for groups we could use the internal tables pballand was mentioning. 17:57:29 Or we could use the AD integration that's there. We'd need to port it over to your framework. 17:57:37 yeah .. 17:57:54 that would be better 17:57:59 The downside to AD is that you need it running, which is inconvenient for demos/etc. 17:58:14 or use a light weight ldap 17:59:30 Users know they need to install OS to do a reasonable demo. But the more things we make them install to see how use case number 1 works, the more likely they'll get hung up on problems that are irrelevant. 18:00:47 I'd lean toward using only OS components for our first release, just to minimize that problem. But include AD drivers/LDAP drivers/whatever, so they know it's not just about OS. 18:00:59 +1 to keep it simple 18:01:20 And we're over time. 18:01:25 :) 18:01:29 thanks everyone 18:01:34 thanks bye 18:01:37 So thanks everyone, and let's keep up discussions on ML and through google docs! 18:01:45 #endmeeting