Friday, 2014-09-05

*** amcrn has quit IRC00:16
*** EricGonczer_ has joined #openstack-dns00:18
*** vinod1 has joined #openstack-dns00:21
openstackgerritVinod Mangalpally proposed a change to openstack/designate: Call _handle_query_error correctly  https://review.openstack.org/11922900:36
*** vinod1 has quit IRC00:37
*** rmoe has quit IRC00:37
*** darshan104 has quit IRC00:42
*** darshan104 has joined #openstack-dns00:43
*** darshan104 has quit IRC00:47
*** rmoe has joined #openstack-dns00:53
*** EricGonczer_ has quit IRC00:58
*** EricGonczer_ has joined #openstack-dns01:00
*** EricGonczer_ has quit IRC01:11
*** lpmulligan has quit IRC01:22
*** EricGonczer_ has joined #openstack-dns01:33
*** nosnos has joined #openstack-dns01:49
*** rossk has quit IRC01:51
*** rossk has joined #openstack-dns01:52
*** rossk has quit IRC01:57
*** eankutse has joined #openstack-dns01:59
*** eankutse has quit IRC02:02
*** eankutse has joined #openstack-dns02:02
*** rossk has joined #openstack-dns02:15
*** eankutse has quit IRC02:18
*** rossk has quit IRC02:22
*** EricGonczer_ has quit IRC02:25
*** richm has quit IRC02:46
*** EricGonczer_ has joined #openstack-dns03:05
*** EricGonczer_ has quit IRC03:08
*** EricGonczer_ has joined #openstack-dns03:08
*** EricGonczer_ has quit IRC03:10
*** rjrjr has quit IRC03:29
*** vinod1 has joined #openstack-dns03:32
*** vinod1 has quit IRC04:23
*** ttrumm has joined #openstack-dns05:37
*** ttrumm_ has joined #openstack-dns05:38
*** ttrumm has quit IRC05:41
*** k4n0 has joined #openstack-dns06:25
*** ttrumm has joined #openstack-dns06:35
*** ttrumm_ has quit IRC06:38
*** fouxm_ is now known as fouxm07:19
*** darshan104 has joined #openstack-dns08:42
*** k4n0 has quit IRC09:16
*** darshan104 has quit IRC09:39
*** darshan104 has joined #openstack-dns09:40
*** darshan104 has quit IRC09:44
*** darshan104 has joined #openstack-dns09:50
*** darshan104 has quit IRC09:54
*** vinod1 has joined #openstack-dns10:02
*** vinod1 has quit IRC10:43
*** ttrumm_ has joined #openstack-dns10:47
*** ttrumm has quit IRC10:49
*** darshan104 has joined #openstack-dns10:51
*** darshan104 has quit IRC10:55
*** darshan104 has joined #openstack-dns11:51
*** k4n0 has joined #openstack-dns11:55
*** darshan104 has quit IRC11:56
*** openstackgerrit has quit IRC12:01
*** openstackgerrit has joined #openstack-dns12:02
*** ChanServ sets mode: +v openstackgerrit12:02
*** mwagner_lap has joined #openstack-dns12:10
*** nosnos has quit IRC12:19
*** nosnos has joined #openstack-dns12:20
*** nosnos has quit IRC12:24
*** bauruine has quit IRC12:28
*** bauruine has joined #openstack-dns12:34
*** vinod1 has joined #openstack-dns12:44
*** darshan104 has joined #openstack-dns12:54
*** darshan104 has quit IRC12:58
*** richm has joined #openstack-dns13:10
*** eankutse has joined #openstack-dns13:15
*** vinod1 has quit IRC13:18
*** ttrumm_ has quit IRC13:29
*** ttrumm has joined #openstack-dns13:29
*** ttrumm has quit IRC13:42
*** darshan104 has joined #openstack-dns13:55
*** darshan104 has quit IRC13:59
*** EricGonczer_ has joined #openstack-dns14:21
*** timsim has joined #openstack-dns14:28
*** vinod1 has joined #openstack-dns14:28
*** paul_glass has joined #openstack-dns14:30
*** paul_glass has quit IRC14:30
*** paul_glass has joined #openstack-dns14:30
*** jmcbride has joined #openstack-dns14:33
openstackgerritA change was merged to openstack/designate: Updated from global requirements  https://review.openstack.org/11913914:41
*** ttrumm has joined #openstack-dns14:48
*** ttrumm has quit IRC14:49
*** rmoe has quit IRC14:53
*** k4n0 has quit IRC14:57
openstackgerritVinod Mangalpally proposed a change to openstack/designate: Delete SOA records correctly on a downgrade  https://review.openstack.org/11939315:01
*** paul_glass has quit IRC15:02
*** eankutse1 has joined #openstack-dns15:03
*** EricGonc_ has joined #openstack-dns15:03
*** eankutse has quit IRC15:03
*** EricGonczer_ has quit IRC15:04
*** paul_glass has joined #openstack-dns15:20
*** darshan104 has joined #openstack-dns15:28
*** darshan104 has quit IRC15:33
*** eankutse1 has quit IRC15:37
*** eankutse has joined #openstack-dns15:37
vinod1musie:/kiall: Had a question on bug 136569915:45
uvirtbotLaunchpad bug 1365699 in designate "We could end up with multiple SOA recordsets in the recordset table" [High,Confirmed] https://launchpad.net/bugs/136569915:45
vinod1When a domain is deleted why do we mark it as "deleted" rather than delete it?15:45
Kiallvinod1: for metering and billing purposes.. We need to know who owned a domain at a given time in order to take things like query aggregations and pass the bill onto the customer15:47
*** darshan104 has joined #openstack-dns15:47
Kiallit also for a little bit of safety against users rm -rf'ing all there data ;)15:48
vinod1So having the ondelete here - https://github.com/openstack/designate/blob/master/designate/storage/impl_sqlalchemy/tables.py#L12515:48
vinod1does not do anything then15:48
KiallThe ondelete = CASCADE will be triggered when the domain is actually fully deleted.. Which is something we do periodically out of band15:50
vinod1Kiall, so on deleting a domain, do we want to mark the corresponding recordsets and records too as deleted or do we want to actually delete the recordsets and records?15:50
mugsievinod1: mark them the same way15:51
Kialle.g. DELETE FROM `domains` WHERE `domains`.`deleted_at` > "1 Month Ago";15:51
mugsiein the storage layer we try not to actually delete anything15:51
Kiallvinod1: there's been no need to do that before, as soft deleting the domain effectively get's rid of them15:51
Kiallvinod1: for mDNS, I think the right answer is to do a..15:51
*** darshan104 has quit IRC15:51
mugsiebut, with the current _delete() call in the current layer, it might be difficult15:52
mugsie(it takes a table, and an id)15:52
mugsieso that may need to be changed to take a qriterion as well15:52
KiallSELECT `recordsets`.* FROM `recordsets` LEFT JOIN `domains` ON `recordsets`.`domain_id` = `domains`.`id` WHERE `recordsets`.`type` = 'SOA' AND `recordsets`.`name` = 'example.com.' AND `domains`.`deleted` = '0';15:53
*** eankutse has quit IRC15:53
mugsieKiall: we should be 'deleteing' the recordsets db entry as well tbh15:54
mugsienot patching the end result in mDNS15:54
KiallI don't think so...15:54
mugsieits in consistant data15:54
KiallAnd it becomes ambiguous data if we also marked the RRSet's as deleted ;)15:55
mugsiehow is it ambigiuos?15:55
KiallLets say we go to restore a deleted zone, which recordsets should we restore? Some may have been deleted months ago.15:55
mugsiethis rrset is deleted15:55
mugsiewe store the delted date as part of the soft delete mixin15:55
mugsieso, thats kind of invalid15:56
mugsieit also mean that when a clean needs to happen - you have now idea if the rrsets are still active15:56
KiallHumm, what about a RRSet that's deleted moments before the users bad script rm -rf's the whole zone? The timestamp may be the same15:57
mugsiethat is a 0.1% use case15:57
mugsiethat doesnt out wiegh storing corrct data15:57
KiallThe correct data is there, it just needs to be queried correctly ;)15:58
mugsieand tbf, a customer would just be happy you could get any data back, and if it had an extra record, they should verify it anyway15:58
mugsieits not correct data - and it has the result for the mDNS single record lookup of 2x the db calls needed15:59
mugsievs doing it properly15:59
mugsiefor a tiny use case15:59
KiallWell .. 1 DB call, with a JOIN..16:00
KiallAnyway - Regardless. We're in feature freeze.. and this is a bug in juno16:00
KiallImplementing soft-delete on the recordsets and records table is not something that's going to happen to Juno16:00
mugsiewe have soft delte on those tables16:01
mugsieits a matter of calling it16:01
mugsienot implementing it16:01
KiallNo, we don't...16:01
Kiallhttps://github.com/openstack/designate/blob/master/designate/storage/impl_sqlalchemy/tables.py16:01
*** rmoe has joined #openstack-dns16:01
Kiallrecordsets and records don't have any of the necessary columns etc16:01
mugsieso your point about data recovery is totally invalid then.....16:02
Kiallmugsie: No, when a user accidentally presses the wrong "Delete" button in horizon, and the whole zone is deleted, the data is still there16:03
mugsieanyway - what ever - fix for 1365699 is for mDNS to fix the query (bug part 2 in my comment)16:04
mugsiei'll file a bug for the other bit now, for kilo16:04
Kiallother bit?16:05
mugsiefixing the storage layer - there is comment in the bug16:06
KiallI guess I still don't see that as a bug...16:06
KiallIt's a relational DB - we have the info available, we just need to make use of it16:07
mugsiewell, I do. I will file it, and we can discuss it later16:07
vinod1okay so I will fix mdns's _handle_record_query the same as axfr - first get the domain_id and then query based on the domain_id and type16:08
Kiallvinod1: sounds good :)16:08
mugsievinod1: yup16:08
mugsievinod1: kiall's query above will drop it to one query with a join16:09
vinod1mugsie: I will let you file the storage layer bug/non-bug :-)16:09
mugsieso its not quite as bad as 2 queries16:09
Kiallmugsie: thinking about it, the core use case for mDNS is AXFR, which has to (I think) load the domain row anyway..16:10
Kiallfor other queries arriving at mDNS, the smaller/simpler 2 query fix might be fine..16:10
mugsieyup - if you read my comment in the bug, I said this ;)16:10
Kiallanyway.. whatever works ;)16:10
vinod1just so that I know this for later, do I run the sql query as conn.execute similar to https://github.com/openstack/designate/blob/master/designate/storage/impl_sqlalchemy/migrate_repo/versions/038_icehouse.py#L21616:12
vinod1Kiall/mugsie: For record types other than SOA I see an issue16:18
vinod1When we get a request for a recordset type - we just get the name and type16:18
vinod1The name need not be the same as the domain name16:18
vinod1So from the recordset name we need to figure out the domain name for this to work correctly16:19
vinod1or we need to get all the recordsets for that name and type and then see which ones are deleted based on the domain_id16:19
vinod1so we need to run the query that you mentioned earlier16:20
Kiallvinod1: humm.. crap.16:20
Kiallre the Q on running the query, no.. conn.execute() should be avoided! You can build up the same query using SQLA Core16:21
KiallBut.. implementing it is probably going to be painful - looking at the sqla driver now to see what we can do...16:22
Kiallhttps://github.com/openstack/designate/blob/master/designate/storage/impl_sqlalchemy/__init__.py#L16416:24
Kiallif we update that method to take in a query as well as the table, and have all the other methods pass in `select([table])` as the query, we have an opportunity to customize the query a little... So, _find_recordsets could then pass `select([tables.recordsets]).join(tables.domains).where(tables.domains.id == "0")`16:27
Kiall So, _find_recordsets could then pass `select([tables.recordsets]).join(tables.domains).where(tables.domains.deleted == "0")`*16:27
*** mwagner_lap has quit IRC16:29
Kiallthe only thing I dislike about that is... all our calls to find_recordsets etc will end up doing the join16:30
vinod1We can have a new function for this - find_active_recordsets ?16:30
KiallYea, we could16:33
KiallWell.. Is it worth it? Is the JOIN going to cause much DB pain? It's a single primary key lookup on a smaller table, and we're not actually selecting the data..16:35
Kiallvinod1 / mugsie ... thoughts?16:35
mugsieKiall: its not just a single PK look up though :|16:36
mugsieits a filter on an unindexed field (domains.deleted)16:36
mugsieon what could be a massive table16:37
Kialldeleted is indexed16:37
mugsieis it?16:37
mugsieok16:37
Kiall(a unique index is on it)16:37
mugsiewhat data type is it?16:37
Kiallvarchar(32) ish16:37
mugsiehrum16:37
vinod1we would have at least a lot of SOA record requests from the servers based on the refresh rate of the domains.16:38
KiallI'm not sure it matters.. So.. The JOIN acts on the PK to get the row, then looks at the data16:38
KiallI think :/16:38
mugsieyeah - but the join will load all rows16:38
KiallThere's only 1 matching row16:38
mugsieit will have to partly load them to filter16:39
KiallJOIN `domains` ON `recordsets`.`domain_id` = `domains`.`id` <-- That'll match 116:39
mugsieyeah, but all domains (even old deleted ones) will have RRsets16:39
Kiallvinod1: true, which suggests that the majority of queries are going to involve the join anyway, so, it's probably not worth adding a separate code path for it...16:40
Kiallmugsie: ah.. Yes.. Humm.16:40
mugsietemporary fix - join16:40
mugsieso for j-3 we do ^16:40
mugsieand then we revisit a soft delete / other options in K16:40
mugsiemDNS is an experimental feature in Juno anyway16:41
Kiallvinod1: ekarlso- just got designate stuff for rally merged... Maybe we just try it without the extra codepath, then benchmark before after to see the actual difference ;)16:41
mugsieKiall: does the designate stuff do lookups on mDNS?16:41
mugsiei thought it just added the API calls16:41
Kiallmugsie: the JOIN would be in the storage layer, so even API calls etc would get it16:41
mugsie(currently)16:41
Kiall"does the designate stuff do lookups on mDNS?" Not sure what you mean?16:42
mugsiewe cant test the perfomance difference with out doing a dig style query @ mdns16:42
mugsiecurretnyl the rally code just hits the API16:43
mugsiei think a separate code path for j-3 is OK16:43
KiallRight - but the find_recordsets method is used by both the API and mDNS ;)16:43
mugsies/j-3/juno/16:43
vinod1Kiall - just to clarify _handle_record_query uses find_recordset16:45
*** eankutse has joined #openstack-dns16:45
KiallYep, it does :)16:46
vinod1So now I will change find_recordset, rather than add a new api - any objections?16:47
mugsievinod1: no - for juno create a new method16:48
Kiallvinod1: I'm happy with that - once you have it I'll run a before/after benchmark..16:48
Kialllol16:48
*** betsy has joined #openstack-dns16:48
Kiallcan't agree on anything today ;)16:48
*** paul_glass1 has joined #openstack-dns16:49
vinod1How about adding an optional parameter - query to find_recordset?16:49
vinod1    def find_recordset(self, context, criterion, query)16:49
*** paul_glass has quit IRC16:51
KiallHumm, I think we should keep it hidden in the storage layer, so `select([tables.recordsets]).join(tables.domains).where(tables.domains.id == "0")` would be in https://github.com/openstack/designate/blob/master/designate/storage/impl_sqlalchemy/__init__.py#L54316:51
Kialland then passed to _find16:51
vinod1I am fine with it - mugsie?16:55
vinod1whether we do it this way or add a new api - the hit on mdns would be the same16:55
mugsiei personally think forcing the join on everything is bad idea, that will be very difficult to benchmark16:55
mugsieyeah - the hit to mdns will  be16:56
mugsiebut the hit to api etc wont be16:56
mugsiewe are talking about potentialy harming our main interface, for the sake of an experimental interface that no one should be deploying in production in junp16:57
mugsiejuno*16:57
mugsiewhich i think is crazy to even consider16:57
KiallI don't like the idea of adding single purpose methods to the storage API, I'd personally prefer to keep that clean...16:57
mugsiefine16:57
mugsiebut causing potential for havok in the API is mental to consider in the RC phase of a release16:58
KiallI'm not sure I see the potential for havok, either it works or it doesn't, and I believe we can benchmark the before/after with a high enough confidence to make the call on if we merge or not.16:59
mugsieand, I dont think we can properly. you are taking about 1/2 loading the entire domains table every time some one does a get request on a single record.17:00
mugsiethink about that.17:00
KiallIf that's really the result, 1/2 the domain's table get loaded on each go.. That will be blindingly obvious in even a trivial before/after benchmark....17:01
mugsiei think this warrents a full discussion - before we implemnent anything from it.17:02
mugsieI am really not comfortable doing it this way.17:02
KiallI get you don't agree, that's fine.. Calling for a vote because you don't agree with a suggestion to *try it and see if it OK* is pushing it IMO.17:03
mugsiewell, I think that we should discuss it with the wider team group before we do this - thats not pushing it17:03
KiallAnyway - I've got a demo to give! We can continue this later if needed...17:03
mugsiethat is following the proces17:03
vinod1How about applying the join only when the criterion does not include a domain_id?  Most of the api calls should have the domain_id17:04
mugsievinod1: i think they all should17:04
*** openstackgerrit has quit IRC17:04
mugsieyeah - from the looks of it they do, bar the floating_ip stuff17:06
mugsiemost of the pass a full recordset object back, which has a domain_id in it17:08
mugsieso, that might work17:08
mugsiewe would want to test the floating ip stuff thougharly as well17:08
vinod1ok - let me work on the fix17:09
*** HenryG is now known as HenryThe8th17:12
*** rossk has joined #openstack-dns17:12
*** diga has joined #openstack-dns17:26
*** mwagner_lap has joined #openstack-dns17:47
*** jmcbride has quit IRC18:03
*** EricGonc_ has quit IRC18:03
*** paul_glass1 has quit IRC18:06
*** betsy has quit IRC18:06
*** timsim has quit IRC18:07
*** vinod1 has quit IRC18:07
*** eankutse has quit IRC18:09
*** openstackgerrit has joined #openstack-dns18:10
*** ChanServ sets mode: +v openstackgerrit18:10
*** openstackgerrit has quit IRC19:01
*** openstackgerrit has joined #openstack-dns19:02
*** ChanServ sets mode: +v openstackgerrit19:02
*** mwagner_lap has quit IRC19:20
*** darshan104 has joined #openstack-dns19:55
*** arborism has joined #openstack-dns20:26
*** EricGonczer_ has joined #openstack-dns20:44
*** EricGonczer_ has quit IRC20:56
*** EricGonczer_ has joined #openstack-dns20:57
*** mwagner_lap has joined #openstack-dns21:21
*** nkinder has quit IRC21:26
*** openstackgerrit has quit IRC21:31
*** vinod1 has joined #openstack-dns21:32
*** openstackgerrit has joined #openstack-dns21:32
*** ChanServ sets mode: +v openstackgerrit21:32
*** vinod1 has quit IRC21:36
*** vinod1 has joined #openstack-dns21:39
*** EricGonczer_ has quit IRC22:08
*** darshan104 has quit IRC22:35
*** darshan104 has joined #openstack-dns22:35
*** EricGonczer_ has joined #openstack-dns22:45
*** arborism is now known as amcrn22:46
*** EricGonczer_ has quit IRC23:01
*** darshan104 has quit IRC23:05
openstackgerritVinod Mangalpally proposed a change to openstack/designate: _find_recordsets returns active recordsets only  https://review.openstack.org/11950223:11
*** richm has quit IRC23:17
*** vinod1 has quit IRC23:27
*** vinod1 has joined #openstack-dns23:30
*** vinod1 has quit IRC23:36
*** vinod1 has joined #openstack-dns23:48
*** vinod1 has quit IRC23:56

Generated by irclog2html.py 2.14.0 by Marius Gedminas - find it at mg.pov.lt!