)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"45975b98586bef1da6ecad07b4d3ca0318ce7111","unresolved":false,"context_lines":[{"line_number":14,"context_line":"timestamp fields or anything else that applies to multiple types"},{"line_number":15,"context_line":"of Neutron objects. The new fields would just be added to the"},{"line_number":16,"context_line":"\u0027neutronobjects\u0027 table instead of being duplicated across each"},{"line_number":17,"context_line":"object\u0027s table."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This patch starts out with the 4 core resources to target the"},{"line_number":20,"context_line":"timestamp patch that is currently being developed."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da20952f_d539aba4","line":17,"updated":"2015-09-10 13:34:01.000000000","message":"ok, but how do you intend to handle deletes now? You can\u0027t delete from the child table, can you (ie. ports table)? You\u0027d need to change the existing logic throughout the code base, but I don\u0027t see this here, so I gather this must be a first pass...interesting start though....","commit_id":"1ba699b7206234bf12fef20aa0ddee6f998a144c"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"81274bc6fd348f473e7e794cf1fe3a4603c9fb86","unresolved":false,"context_lines":[{"line_number":14,"context_line":"timestamp fields or anything else that applies to multiple types"},{"line_number":15,"context_line":"of Neutron objects. The new fields would just be added to the"},{"line_number":16,"context_line":"\u0027neutronobjects\u0027 table instead of being duplicated across each"},{"line_number":17,"context_line":"object\u0027s table."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This patch starts out with the 4 core resources to target the"},{"line_number":20,"context_line":"timestamp patch that is currently being developed."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da20952f_bebe46ac","line":17,"in_reply_to":"da20952f_d539aba4","updated":"2015-09-10 22:38:43.000000000","message":"We still delete the child object and the sqlaclhemy will automatically emit the delete statement for the parent as well because the children inherit from NeutronObject. I\u0027ll add some unit tests that show this happens.","commit_id":"1ba699b7206234bf12fef20aa0ddee6f998a144c"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"8eb8db00b2c5a56d1821f56d6d1bccf145206fbb","unresolved":false,"context_lines":[{"line_number":14,"context_line":"timestamp fields or anything else that applies to multiple types"},{"line_number":15,"context_line":"of Neutron objects. The new fields would just be added to the"},{"line_number":16,"context_line":"\u0027neutronobjects\u0027 table instead of being duplicated across each"},{"line_number":17,"context_line":"object\u0027s table."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This patch starts out with the 4 core resources to target the"},{"line_number":20,"context_line":"timestamp patch that is currently being developed."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"ba15a1d1_f4fe586a","line":17,"updated":"2015-09-15 07:48:30.000000000","message":"So the idea is that we can later on add the timestamp to this specific table, right?.\n\nWhat are the performance implications of doing this compared to adding the attributes to each table?.\n\nI agree this solution is more beautiful and easier to maintain. But I\u0027m not sure about the performance implications (may be it\u0027s even better at that scale for some types of searches)\n\nI guess that as long as the fields on this table are indexed (resource type, uuid, [datetime]), it will be fast, we\u0027d be doing a join to extract the full ports/subnets, etc.\n\nOk, may be I\u0027m looking too much into the rabbit hole, we could rewrite neutron in assembler too... :P","commit_id":"de70f942140ccee1f4102c77658faa4e5cfd4bb1"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"91f49b47e2aecfb28599ef1dc963481c5223556d","unresolved":false,"context_lines":[{"line_number":14,"context_line":"timestamp fields or anything else that applies to multiple types"},{"line_number":15,"context_line":"of Neutron objects. The new fields would just be added to the"},{"line_number":16,"context_line":"\u0027neutronobjects\u0027 table instead of being duplicated across each"},{"line_number":17,"context_line":"object\u0027s table."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This patch starts out with the 4 core resources to target the"},{"line_number":20,"context_line":"timestamp patch that is currently being developed."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"ba15a1d1_9fb1d003","line":17,"in_reply_to":"ba15a1d1_f4fe586a","updated":"2015-09-17 07:04:55.000000000","message":"\u003eSo the idea is that we can later on add the timestamp to this specific table, right?.\n\nNo, this table is sacred and shall only be used for holding the object ID and the discriminator. Any new things like timestamps should be in a new table with foreign key constraints to this one. This will help us preserve performance so we aren\u0027t loading things that aren\u0027t necessary for certain queries and so this table remains small.\n\nThis is additionally important because there may be some fields that apply to most but not all object types. By having a separate table for new things, we don\u0027t have a bunch of null columns in here.\n\nI\u0027ll add some comments to the class to clarify.","commit_id":"de70f942140ccee1f4102c77658faa4e5cfd4bb1"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"d4a88656d64b5301ab05cb1194a25188a96e74f2","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Kevin Benton \u003cblak111@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-09-16 08:42:22 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make base Neutron objects reference single table"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds a new \u0027neutronobjects\u0027 table and converts the IDs"},{"line_number":10,"context_line":"of ports, subnets, networks, and subnetpools into foreign-key"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba15a1d1_55fb17c1","line":7,"updated":"2015-09-17 08:04:04.000000000","message":"I\u0027d say resources here too.","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"da8b4d357a12c2984163a70b4898f724bdcbfb3a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Kevin Benton \u003cblak111@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-09-16 08:42:22 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make base Neutron objects reference single table"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds a new \u0027neutronobjects\u0027 table and converts the IDs"},{"line_number":10,"context_line":"of ports, subnets, networks, and subnetpools into foreign-key"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba15a1d1_906bfdb8","line":7,"in_reply_to":"ba15a1d1_55fb17c1","updated":"2015-09-17 08:34:18.000000000","message":"Done","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"d4a88656d64b5301ab05cb1194a25188a96e74f2","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make base Neutron objects reference single table"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds a new \u0027neutronobjects\u0027 table and converts the IDs"},{"line_number":10,"context_line":"of ports, subnets, networks, and subnetpools into foreign-key"},{"line_number":11,"context_line":"references to this new table."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba15a1d1_75f89bc3","line":9,"updated":"2015-09-17 08:04:04.000000000","message":"neutronresources","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"da8b4d357a12c2984163a70b4898f724bdcbfb3a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make base Neutron objects reference single table"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds a new \u0027neutronobjects\u0027 table and converts the IDs"},{"line_number":10,"context_line":"of ports, subnets, networks, and subnetpools into foreign-key"},{"line_number":11,"context_line":"references to this new table."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba15a1d1_b07081a5","line":9,"in_reply_to":"ba15a1d1_75f89bc3","updated":"2015-09-17 08:34:18.000000000","message":"Done","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"d4a88656d64b5301ab05cb1194a25188a96e74f2","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This will make it easy to add new things to the schema like"},{"line_number":14,"context_line":"timestamp fields or anything else that applies to multiple types"},{"line_number":15,"context_line":"of Neutron objects. The new fields would just be added to the"},{"line_number":16,"context_line":"\u0027neutronobjects\u0027 table instead of being duplicated across each"},{"line_number":17,"context_line":"object\u0027s table."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba15a1d1_35fea3ae","line":15,"updated":"2015-09-17 08:04:04.000000000","message":"objects-\u003eresources.","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"da8b4d357a12c2984163a70b4898f724bdcbfb3a","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This will make it easy to add new things to the schema like"},{"line_number":14,"context_line":"timestamp fields or anything else that applies to multiple types"},{"line_number":15,"context_line":"of Neutron objects. The new fields would just be added to the"},{"line_number":16,"context_line":"\u0027neutronobjects\u0027 table instead of being duplicated across each"},{"line_number":17,"context_line":"object\u0027s table."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba15a1d1_10604dce","line":15,"in_reply_to":"ba15a1d1_35fea3ae","updated":"2015-09-17 08:34:18.000000000","message":"Done","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"d4a88656d64b5301ab05cb1194a25188a96e74f2","unresolved":false,"context_lines":[{"line_number":13,"context_line":"This will make it easy to add new things to the schema like"},{"line_number":14,"context_line":"timestamp fields or anything else that applies to multiple types"},{"line_number":15,"context_line":"of Neutron objects. The new fields would just be added to the"},{"line_number":16,"context_line":"\u0027neutronobjects\u0027 table instead of being duplicated across each"},{"line_number":17,"context_line":"object\u0027s table."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This patch starts out with the 4 core resources to target the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba15a1d1_d52de746","line":16,"updated":"2015-09-17 08:04:04.000000000","message":"ditto.","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"da8b4d357a12c2984163a70b4898f724bdcbfb3a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"This will make it easy to add new things to the schema like"},{"line_number":14,"context_line":"timestamp fields or anything else that applies to multiple types"},{"line_number":15,"context_line":"of Neutron objects. The new fields would just be added to the"},{"line_number":16,"context_line":"\u0027neutronobjects\u0027 table instead of being duplicated across each"},{"line_number":17,"context_line":"object\u0027s table."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This patch starts out with the 4 core resources to target the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba15a1d1_30b47133","line":16,"in_reply_to":"ba15a1d1_d52de746","updated":"2015-09-17 08:34:18.000000000","message":"Done","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"d4a88656d64b5301ab05cb1194a25188a96e74f2","unresolved":false,"context_lines":[{"line_number":14,"context_line":"timestamp fields or anything else that applies to multiple types"},{"line_number":15,"context_line":"of Neutron objects. The new fields would just be added to the"},{"line_number":16,"context_line":"\u0027neutronobjects\u0027 table instead of being duplicated across each"},{"line_number":17,"context_line":"object\u0027s table."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This patch starts out with the 4 core resources to target the"},{"line_number":20,"context_line":"timestamp patch that is currently being developed."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba15a1d1_9523ef57","line":17,"updated":"2015-09-17 08:04:04.000000000","message":"ditto.","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"da8b4d357a12c2984163a70b4898f724bdcbfb3a","unresolved":false,"context_lines":[{"line_number":14,"context_line":"timestamp fields or anything else that applies to multiple types"},{"line_number":15,"context_line":"of Neutron objects. The new fields would just be added to the"},{"line_number":16,"context_line":"\u0027neutronobjects\u0027 table instead of being duplicated across each"},{"line_number":17,"context_line":"object\u0027s table."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This patch starts out with the 4 core resources to target the"},{"line_number":20,"context_line":"timestamp patch that is currently being developed."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba15a1d1_d083b554","line":17,"in_reply_to":"ba15a1d1_9523ef57","updated":"2015-09-17 08:34:18.000000000","message":"Done","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"fea0a2e3d048777e7bdc1fa6c6734b73fcb4eadf","unresolved":false,"context_lines":[{"line_number":17,"context_line":"object\u0027s table."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This patch starts out with the 4 core resources to target the"},{"line_number":20,"context_line":"timestamp patch that is currently being developed."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: Iaa3ba81a7e9cae09cea153720b29879d8cc9a080"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba15a1d1_f5690bfa","line":20,"updated":"2015-09-17 08:13:55.000000000","message":"Following PS6 conversation and our IRC conversation. \n\nOk, so if those attributes wouldn\u0027t be listed or shown by default I understand we won\u0027t have any big performance implications during read, may be during write, etc, of course.\n\nIf we want them always available, I wonder if there would be any (significative) performance hit, as per our IRC conversation, we\u0027re always targeting PKs, and those are indexed.\n\nDo you think it\u0027d be reasonable to benchmark insertions and reads with and without lazily joining the table to see how it looks? (also, this would be magnified when we add more tables referencing the new table).","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"192fc012304c329136947649647594f4abcb6aef","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This patch starts out with the 4 core resources to target the"},{"line_number":20,"context_line":"timestamp patch that is currently being developed."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: Iaa3ba81a7e9cae09cea153720b29879d8cc9a080"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"ba15a1d1_dc12ef56","line":21,"updated":"2015-09-17 09:19:36.000000000","message":"Is there any RFE to link this patch to?","commit_id":"39e564bee96d0360dc900a9b20dbcb8ae69fa115"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"2c5a5998273d20c9f4a47a0923ad85be186dfdb7","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This patch starts out with the 4 core resources to target the"},{"line_number":20,"context_line":"timestamp patch that is currently being developed."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: Iaa3ba81a7e9cae09cea153720b29879d8cc9a080"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"ba15a1d1_301a2a7e","line":21,"in_reply_to":"ba15a1d1_dc12ef56","updated":"2015-09-17 11:16:31.000000000","message":"Done","commit_id":"39e564bee96d0360dc900a9b20dbcb8ae69fa115"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ef5aaedfe20cfa33783cb9c3eb94cc69f7339fd4","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make base Neutron resources reference single table"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds a new \u0027neutronresources\u0027 table and converts the IDs"},{"line_number":10,"context_line":"of ports, subnets, networks, and subnetpools into foreign-key"},{"line_number":11,"context_line":"references to this new table."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"ba15a1d1_a17ed967","line":9,"updated":"2015-09-17 16:56:51.000000000","message":"Effectively here you adding a new overarching base class, and a parent table to every possible resource entry that is going to be handled by Neutron.\n\nI agree that from a development standpoint this makes sense, but do we have a feeling of the performance implications when we are dealing with millions of rows and clustered DB configurations?\n\nI am not getting cold feet, but I wonder if you had given this any though, check with your boss if you please?","commit_id":"21354a7b30d64e94bfca02c6af9f151c4180ae8d"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"34bf388f7befaa7d6aca4d752126e15593b92f82","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make base Neutron resources reference single table"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds a new \u0027neutronresources\u0027 table and converts the IDs"},{"line_number":10,"context_line":"of ports, subnets, networks, and subnetpools into foreign-key"},{"line_number":11,"context_line":"references to this new table."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"ba15a1d1_1853686c","line":9,"updated":"2015-09-18 02:51:47.000000000","message":"Yes, I have thought about it and discussed it with ajo a bit on IRC (which led to that link he posted in the review). A join on two indexed primary keys is very cheap.\n\nI\u0027ll see if I can get Jay to chime in here.","commit_id":"21354a7b30d64e94bfca02c6af9f151c4180ae8d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6df14ac524e3fbd1d8dc69a543868cac2364433d","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make base Neutron resources reference single table"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds a new \u0027neutronresources\u0027 table and converts the IDs"},{"line_number":10,"context_line":"of ports, subnets, networks, and subnetpools into foreign-key"},{"line_number":11,"context_line":"references to this new table."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"ba15a1d1_35047548","line":9,"in_reply_to":"ba15a1d1_1853686c","updated":"2015-09-23 15:02:20.000000000","message":"Any join on two primary keys is very fast on any database I know of, MySQL included. However, there can be pretty dramatic increases in performance if you used an autoincrementing integer sequence as the primary key for the resources table and use that integer key in join operations to other tables. However, Neutron\u0027s tables all use UUID primary keys, and changing to use integer keys would be a huge undertaking :(","commit_id":"21354a7b30d64e94bfca02c6af9f151c4180ae8d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ef5aaedfe20cfa33783cb9c3eb94cc69f7339fd4","unresolved":false,"context_lines":[{"line_number":14,"context_line":"timestamp fields or anything else that applies to multiple types"},{"line_number":15,"context_line":"of Neutron resources. The new fields would just be added to the"},{"line_number":16,"context_line":"\u0027neutronresources\u0027 table instead of being duplicated across each"},{"line_number":17,"context_line":"resource\u0027s table."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This patch starts out with the 4 core resources to target the"},{"line_number":20,"context_line":"timestamp patch that is currently being developed."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"ba15a1d1_e13db18f","line":17,"updated":"2015-09-17 16:56:51.000000000","message":"So why not move tenant_id, deleted_at, created_at, etc?","commit_id":"21354a7b30d64e94bfca02c6af9f151c4180ae8d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6df14ac524e3fbd1d8dc69a543868cac2364433d","unresolved":false,"context_lines":[{"line_number":14,"context_line":"timestamp fields or anything else that applies to multiple types"},{"line_number":15,"context_line":"of Neutron resources. The new fields would just be added to the"},{"line_number":16,"context_line":"\u0027neutronresources\u0027 table instead of being duplicated across each"},{"line_number":17,"context_line":"resource\u0027s table."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This patch starts out with the 4 core resources to target the"},{"line_number":20,"context_line":"timestamp patch that is currently being developed."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"ba15a1d1_d59bb916","line":17,"in_reply_to":"ba15a1d1_e13db18f","updated":"2015-09-23 15:02:20.000000000","message":"I think that\u0027s precisely what Kevin is suggesting :)","commit_id":"21354a7b30d64e94bfca02c6af9f151c4180ae8d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"5bbc01ba39485bb8680103b4a2c3298363419016","unresolved":false,"context_lines":[{"line_number":15,"context_line":"of Neutron resources. The new fields would just be added to the"},{"line_number":16,"context_line":"\u0027neutronresources\u0027 table instead of being duplicated across each"},{"line_number":17,"context_line":"resource\u0027s table. Or, if the the relationship is 1-to-many (e.g. tags),"},{"line_number":18,"context_line":"the new association table would be related to the \u0027standardattribute\u0027"},{"line_number":19,"context_line":"table."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Related-Bug: #1496802"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"ba8a016a_cad980f4","line":18,"updated":"2015-11-20 00:45:45.000000000","message":"very well said, perhaps can we expand this with a devref that explain how to \u0027Bring your own attribute\u0027 to a neutron resource?","commit_id":"b592c3b6ed47734d24375c1d06a8230cb32dc899"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"8ded8e172050ee6584bba84e380b08f75febbc3d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"of Neutron resources. The new fields would just be added to the"},{"line_number":16,"context_line":"\u0027neutronresources\u0027 table instead of being duplicated across each"},{"line_number":17,"context_line":"resource\u0027s table. Or, if the the relationship is 1-to-many (e.g. tags),"},{"line_number":18,"context_line":"the new association table would be related to the \u0027standardattribute\u0027"},{"line_number":19,"context_line":"table."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Related-Bug: #1496802"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"ba8a016a_3aac138b","line":18,"in_reply_to":"ba8a016a_cad980f4","updated":"2015-11-20 03:54:09.000000000","message":"yes","commit_id":"b592c3b6ed47734d24375c1d06a8230cb32dc899"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d59a94213b51d5637f65f7f6e6fe0829a3140d55","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Make Neutron resources reference standard attr table"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds a new \u0027standardattributes\u0027 table and adds a foreign-key"},{"line_number":10,"context_line":"references from ports, subnets, networks, subnetpools, routers,"},{"line_number":11,"context_line":"securitygroups, and floatingips to this table."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This will make it easy to add new things to the schema like"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba8a016a_6203ad0e","line":10,"updated":"2015-11-20 18:59:21.000000000","message":"I might want to discuss with you about possibly adding this for AddressScope and IpNetwork but I don\u0027t think that has to hold up this patch set.  For now, since those two things aren\u0027t in any released API, we have some time.  It is good for me know what you\u0027re up to here.","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d59a94213b51d5637f65f7f6e6fe0829a3140d55","unresolved":false,"context_lines":[{"line_number":11,"context_line":"securitygroups, and floatingips to this table."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This will make it easy to add new things to the schema like"},{"line_number":14,"context_line":"timestamp fields or anything else that applies to multiple types"},{"line_number":15,"context_line":"of Neutron resources. The new fields would just be added to the"},{"line_number":16,"context_line":"\u0027neutronresources\u0027 table instead of being duplicated across each"},{"line_number":17,"context_line":"resource\u0027s table. Or, if the the relationship is 1-to-many (e.g. tags),"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba8a016a_a247554a","line":14,"updated":"2015-11-20 18:59:21.000000000","message":"DRAFT:  It isn\u0027t clear to me yet whether these fields must apply to all of them or if they can apply to a subset of them.","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"4af6c4d2c4fc1a1b8eacd508d9140f6804ec1352","unresolved":false,"context_lines":[{"line_number":11,"context_line":"securitygroups, and floatingips to this table."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This will make it easy to add new things to the schema like"},{"line_number":14,"context_line":"timestamp fields or anything else that applies to multiple types"},{"line_number":15,"context_line":"of Neutron resources. The new fields would just be added to the"},{"line_number":16,"context_line":"\u0027neutronresources\u0027 table instead of being duplicated across each"},{"line_number":17,"context_line":"resource\u0027s table. Or, if the the relationship is 1-to-many (e.g. tags),"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba8a016a_f66431e6","line":14,"in_reply_to":"ba8a016a_a247554a","updated":"2015-11-21 02:46:23.000000000","message":"They will have to apply to *all* of them.","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"56ab0ee91c43bfe1d1b068b62f49ab537966d97c","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\u0027neutronresources\u0027 table instead of being duplicated across each"},{"line_number":17,"context_line":"resource\u0027s table. Or, if the the relationship is 1-to-many (e.g. tags),"},{"line_number":18,"context_line":"the new association table would be related to the \u0027standardattribute\u0027"},{"line_number":19,"context_line":"table."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Related-Bug: #1496802"},{"line_number":22,"context_line":"Change-Id: Iaa3ba81a7e9cae09cea153720b29879d8cc9a080"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba8a016a_0e1df565","line":19,"updated":"2015-11-23 14:04:01.000000000","message":"It seems like a feature that can be very useful for some subprojects. Can we document it in devref?","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"b27b77462c24741fd477ee806dca545fe52f17ad","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\u0027neutronresources\u0027 table instead of being duplicated across each"},{"line_number":17,"context_line":"resource\u0027s table. Or, if the the relationship is 1-to-many (e.g. tags),"},{"line_number":18,"context_line":"the new association table would be related to the \u0027standardattribute\u0027"},{"line_number":19,"context_line":"table."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Related-Bug: #1496802"},{"line_number":22,"context_line":"Change-Id: Iaa3ba81a7e9cae09cea153720b29879d8cc9a080"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba8a016a_36827201","line":19,"in_reply_to":"ba8a016a_0e1df565","updated":"2015-11-23 22:06:14.000000000","message":"Done","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"396c9b7780d79187803a7baac9589e6eca62f34e","unresolved":false,"context_lines":[{"line_number":18,"context_line":"the new association table would be related to the \u0027standardattribute\u0027"},{"line_number":19,"context_line":"table."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Related-Bug: #1496802"},{"line_number":22,"context_line":"Change-Id: Iaa3ba81a7e9cae09cea153720b29879d8cc9a080"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba8a016a_d8626fad","line":21,"updated":"2015-11-22 09:50:11.000000000","message":"I think that this change should have a BP and a spec associated with it. More details would be super helpful for others reviewing and it may have implications for others developing features which try and do something similar - for example the timestamps","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"2326e968f7ba6de126e32a5ea588be211b3657e7","unresolved":false,"context_lines":[{"line_number":18,"context_line":"the new association table would be related to the \u0027standardattribute\u0027"},{"line_number":19,"context_line":"table."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Related-Bug: #1496802"},{"line_number":22,"context_line":"Change-Id: Iaa3ba81a7e9cae09cea153720b29879d8cc9a080"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba8a016a_79e9cd19","line":21,"in_reply_to":"ba8a016a_968b1e1e","updated":"2015-11-23 22:25:43.000000000","message":"I have already asked for a devref, btw.","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"b27b77462c24741fd477ee806dca545fe52f17ad","unresolved":false,"context_lines":[{"line_number":18,"context_line":"the new association table would be related to the \u0027standardattribute\u0027"},{"line_number":19,"context_line":"table."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Related-Bug: #1496802"},{"line_number":22,"context_line":"Change-Id: Iaa3ba81a7e9cae09cea153720b29879d8cc9a080"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba8a016a_968b1e1e","line":21,"in_reply_to":"ba8a016a_d8626fad","updated":"2015-11-23 22:06:14.000000000","message":"I think a spec for this is a waste of everyone\u0027s time. I will update this patch to include a devref explaining how this can be used.","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"}],"doc/source/devref/db_layer.rst":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ed3e27a25699de197d546fa4c603175bc9befc49","unresolved":false,"context_lines":[{"line_number":74,"context_line":"many-to-one because each object then needs its own table for the attributes"},{"line_number":75,"context_line":"(assuming referential integrity is a concern)."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"To address this issue, the \u0027standardattribute\u0027 table was introduced. Any model"},{"line_number":78,"context_line":"can add support for this table by inheriting the \u0027HasStandardAttributes\u0027 mixin"},{"line_number":79,"context_line":"in neutron.db.model_base. This mixin will add a standard_attr_id BigInteger"},{"line_number":80,"context_line":"column to the model with a foreign key relationship to the \u0027standardattribute\u0027"}],"source_content_type":"text/x-rst","patch_set":16,"id":"ba8a016a_30fef26b","line":77,"updated":"2015-11-24 01:30:30.000000000","message":"was introduced -\u003e is available.","commit_id":"a33672a718dc70088055b906719e4980afcf8d7b"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"3d01a269653c1982f241e3c0a5572b5f61cc6386","unresolved":false,"context_lines":[{"line_number":74,"context_line":"many-to-one because each object then needs its own table for the attributes"},{"line_number":75,"context_line":"(assuming referential integrity is a concern)."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"To address this issue, the \u0027standardattribute\u0027 table was introduced. Any model"},{"line_number":78,"context_line":"can add support for this table by inheriting the \u0027HasStandardAttributes\u0027 mixin"},{"line_number":79,"context_line":"in neutron.db.model_base. This mixin will add a standard_attr_id BigInteger"},{"line_number":80,"context_line":"column to the model with a foreign key relationship to the \u0027standardattribute\u0027"}],"source_content_type":"text/x-rst","patch_set":16,"id":"ba8a016a_d5174643","line":77,"in_reply_to":"ba8a016a_30fef26b","updated":"2015-11-24 10:18:07.000000000","message":"Done","commit_id":"a33672a718dc70088055b906719e4980afcf8d7b"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ed3e27a25699de197d546fa4c603175bc9befc49","unresolved":false,"context_lines":[{"line_number":82,"context_line":"\u0027standardattribute\u0027 table and any tables related to it."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"The introduction of a new standard attribute only requires one table"},{"line_number":85,"context_line":"modification to the \u0027standardattribute\u0027 table (or a new table related to it)"},{"line_number":86,"context_line":"and all of the models using the \u0027HasStandardAttribute\u0027 mixin will automatically"},{"line_number":87,"context_line":"gain access to the new attribute."},{"line_number":88,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"ba8a016a_300cb293","line":85,"updated":"2015-11-24 01:30:30.000000000","message":"table modification -\u003e column addition for one-to-one relationships\nnew table (one-to-many or one-to-zero relationships)","commit_id":"a33672a718dc70088055b906719e4980afcf8d7b"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"3d01a269653c1982f241e3c0a5572b5f61cc6386","unresolved":false,"context_lines":[{"line_number":82,"context_line":"\u0027standardattribute\u0027 table and any tables related to it."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"The introduction of a new standard attribute only requires one table"},{"line_number":85,"context_line":"modification to the \u0027standardattribute\u0027 table (or a new table related to it)"},{"line_number":86,"context_line":"and all of the models using the \u0027HasStandardAttribute\u0027 mixin will automatically"},{"line_number":87,"context_line":"gain access to the new attribute."},{"line_number":88,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"ba8a016a_9588de72","line":85,"in_reply_to":"ba8a016a_300cb293","updated":"2015-11-24 10:18:07.000000000","message":"Done","commit_id":"a33672a718dc70088055b906719e4980afcf8d7b"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"8b19a67c36a3e56d7a3dbd28b732bc83b1728474","unresolved":false,"context_lines":[{"line_number":62,"context_line":"   :members:"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"The Standard Attribute Table"},{"line_number":66,"context_line":"----------------------------"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"There are many attributes that we would like to store in the database which"}],"source_content_type":"text/x-rst","patch_set":17,"id":"9a8ffd7b_602ba983","line":65,"updated":"2015-11-24 17:36:19.000000000","message":"Thanks for adding this","commit_id":"3c8570f3fcd54c1061467616f1d04e95db27a292"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"8b19a67c36a3e56d7a3dbd28b732bc83b1728474","unresolved":false,"context_lines":[{"line_number":90,"context_line":"can be added directly to the \u0027standardattribute\u0027 table. For things that will"},{"line_number":91,"context_line":"frequently be NULL for most entries (e.g. a column to store an error reason),"},{"line_number":92,"context_line":"a new table should be added and joined to in a query to prevent a bunch of"},{"line_number":93,"context_line":"NULL entries in the database."}],"source_content_type":"text/x-rst","patch_set":17,"id":"9a8ffd7b_e03eb9b7","line":93,"updated":"2015-11-24 17:36:19.000000000","message":"Maybe this is an overkill but it may be nice to see how one can use this","commit_id":"3c8570f3fcd54c1061467616f1d04e95db27a292"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"2e56f46cd3dec8317688c151fee2f74e8a37bcf2","unresolved":false,"context_lines":[{"line_number":90,"context_line":"can be added directly to the \u0027standardattribute\u0027 table. For things that will"},{"line_number":91,"context_line":"frequently be NULL for most entries (e.g. a column to store an error reason),"},{"line_number":92,"context_line":"a new table should be added and joined to in a query to prevent a bunch of"},{"line_number":93,"context_line":"NULL entries in the database."}],"source_content_type":"text/x-rst","patch_set":17,"id":"9a8ffd7b_e37483d0","line":93,"in_reply_to":"9a8ffd7b_e03eb9b7","updated":"2015-11-24 18:08:01.000000000","message":"there\u0027s a dependent patch on this one. There are also plenty of examples like:\n\n https://review.openstack.org/#/c/223988/\n https://review.openstack.org/#/c/216021/\n https://bugs.launchpad.net/neutron/+bug/1496705","commit_id":"3c8570f3fcd54c1061467616f1d04e95db27a292"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"679e270483f524a7ffcb62f55132d72cca93a120","unresolved":false,"context_lines":[{"line_number":90,"context_line":"can be added directly to the \u0027standardattribute\u0027 table. For things that will"},{"line_number":91,"context_line":"frequently be NULL for most entries (e.g. a column to store an error reason),"},{"line_number":92,"context_line":"a new table should be added and joined to in a query to prevent a bunch of"},{"line_number":93,"context_line":"NULL entries in the database."}],"source_content_type":"text/x-rst","patch_set":17,"id":"9a8ffd7b_398f1825","line":93,"in_reply_to":"9a8ffd7b_e37483d0","updated":"2015-11-24 18:32:09.000000000","message":"Armando those patches are not based on this one. In addition to this i have some serious doubts about the timestamp one . The other is a spec.","commit_id":"3c8570f3fcd54c1061467616f1d04e95db27a292"}],"neutron/db/migration/alembic_migrations/versions/liberty/contract/8a6d8bdae39_migrate_neutron_objects_table.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"c9cbf939395ef6dd4f7f15a0082115b9c876a9dd","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    for table, model in table_models:"},{"line_number":63,"context_line":"        for row in session.query(model).all():"},{"line_number":64,"context_line":"            if row[0] in dup_check:"},{"line_number":65,"context_line":"                raise Exception(\"Duplicate UUID \u0027%(uuid)s\u0027 between tables \""},{"line_number":66,"context_line":"                                \"%(first)s and %(cur)s. One of the IDs will \""},{"line_number":67,"context_line":"                                \"need to be altered or the object must be \""},{"line_number":68,"context_line":"                                \"deleted before the upgrade can continue.\","}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_06f2a49a","line":65,"updated":"2015-09-10 09:06:39.000000000","message":"I think this will need a creation of a sanity check, like it was done for default security group table. \n\nhttps://review.openstack.org/142101","commit_id":"1ba699b7206234bf12fef20aa0ddee6f998a144c"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"81274bc6fd348f473e7e794cf1fe3a4603c9fb86","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    for table, model in table_models:"},{"line_number":63,"context_line":"        for row in session.query(model).all():"},{"line_number":64,"context_line":"            if row[0] in dup_check:"},{"line_number":65,"context_line":"                raise Exception(\"Duplicate UUID \u0027%(uuid)s\u0027 between tables \""},{"line_number":66,"context_line":"                                \"%(first)s and %(cur)s. One of the IDs will \""},{"line_number":67,"context_line":"                                \"need to be altered or the object must be \""},{"line_number":68,"context_line":"                                \"deleted before the upgrade can continue.\","}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_6fcc7535","line":65,"in_reply_to":"da20952f_06f2a49a","updated":"2015-09-10 22:38:43.000000000","message":"Done","commit_id":"1ba699b7206234bf12fef20aa0ddee6f998a144c"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"878356dbbd3f8d2798128dd481957e39d3c74bd7","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"def get_duplicate_uuids(connection):"},{"line_number":66,"context_line":"    insp \u003d sa.engine.reflection.Inspector.from_engine(connection)"},{"line_number":67,"context_line":"    if \u0027ports\u0027 not in insp.get_table_names():"},{"line_number":68,"context_line":"        return {}"},{"line_number":69,"context_line":"    session \u003d sa.orm.Session(bind\u003dconnection.connect())"},{"line_number":70,"context_line":"    id_map \u003d collections.defaultdict(list)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_cb6fb929","line":67,"updated":"2015-09-16 11:01:29.000000000","message":"Can you clarify why the check? How can we miss the table while we reached the script in our migration chain? Or do we run all sanity checks in advance, and it\u0027s a hack to avoid running it on a fresh database?","commit_id":"de70f942140ccee1f4102c77658faa4e5cfd4bb1"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"91f49b47e2aecfb28599ef1dc963481c5223556d","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"def get_duplicate_uuids(connection):"},{"line_number":66,"context_line":"    insp \u003d sa.engine.reflection.Inspector.from_engine(connection)"},{"line_number":67,"context_line":"    if \u0027ports\u0027 not in insp.get_table_names():"},{"line_number":68,"context_line":"        return {}"},{"line_number":69,"context_line":"    session \u003d sa.orm.Session(bind\u003dconnection.connect())"},{"line_number":70,"context_line":"    id_map \u003d collections.defaultdict(list)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_df898827","line":67,"in_reply_to":"ba15a1d1_cb6fb929","updated":"2015-09-17 07:04:55.000000000","message":"Sanity happens in advance. It\u0027s for a fresh database like you guessed. We do the same thing for the security groups migration check.","commit_id":"de70f942140ccee1f4102c77658faa4e5cfd4bb1"}],"neutron/db/migration/alembic_migrations/versions/liberty/contract/8a6d8bdae39_migrate_neutron_resources_table.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ef5aaedfe20cfa33783cb9c3eb94cc69f7339fd4","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class DuplicateUUIDsDetected(exceptions.Conflict):"},{"line_number":51,"context_line":"    message \u003d _(\"Duplicate UUIDs detected between tables. The IDs will need \""},{"line_number":52,"context_line":"                \"to be altered so they are unique across the database before \""},{"line_number":53,"context_line":"                \"the upgrade can continue. Duplicates: %(duplicates)s\")"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"ba15a1d1_41fd7db2","line":51,"updated":"2015-09-17 16:56:51.000000000","message":"I thought about this and even though there\u0027s a slight chance this could happen couldn\u0027t we resolve it by making (uuid, resource_type) primary key?","commit_id":"21354a7b30d64e94bfca02c6af9f151c4180ae8d"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"34bf388f7befaa7d6aca4d752126e15593b92f82","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class DuplicateUUIDsDetected(exceptions.Conflict):"},{"line_number":51,"context_line":"    message \u003d _(\"Duplicate UUIDs detected between tables. The IDs will need \""},{"line_number":52,"context_line":"                \"to be altered so they are unique across the database before \""},{"line_number":53,"context_line":"                \"the upgrade can continue. Duplicates: %(duplicates)s\")"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"ba15a1d1_b84d9cc5","line":51,"updated":"2015-09-18 02:51:47.000000000","message":"No, if we make the tuple the primary key, we can\u0027t have the other tables join to this one just based on their id. This means the type will have to be replicated to every table that joins to this one (e.g. the RBAC one that depends on this patch). I think failing here is the best thing to do.","commit_id":"21354a7b30d64e94bfca02c6af9f151c4180ae8d"}],"neutron/db/migration/alembic_migrations/versions/liberty/expand/32e5974ada25_add_neutron_objects_table.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"c9cbf939395ef6dd4f7f15a0082115b9c876a9dd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_860b147d","line":1,"updated":"2015-09-10 09:06:39.000000000","message":"Why Rackspace?","commit_id":"1ba699b7206234bf12fef20aa0ddee6f998a144c"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"81274bc6fd348f473e7e794cf1fe3a4603c9fb86","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_393d70dd","line":1,"in_reply_to":"da20952f_860b147d","updated":"2015-09-10 22:38:43.000000000","message":"copied from script. i\u0027ll pull them","commit_id":"1ba699b7206234bf12fef20aa0ddee6f998a144c"}],"neutron/db/migration/alembic_migrations/versions/liberty/expand/32e5974ada25_add_neutron_resources_table.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6df14ac524e3fbd1d8dc69a543868cac2364433d","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    op.create_table("},{"line_number":33,"context_line":"        \u0027neutronresources\u0027,"},{"line_number":34,"context_line":"        sa.Column(\u0027id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":35,"context_line":"        sa.Column(\u0027resource_type\u0027, sa.String(length\u003d50), nullable\u003dFalse),"},{"line_number":36,"context_line":"        sa.PrimaryKeyConstraint(\u0027id\u0027)"},{"line_number":37,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba15a1d1_30dfa36a","line":35,"updated":"2015-09-23 15:02:20.000000000","message":"I\u0027d recommend using a lookup table called resource_types and not using a string key here with lots of duplicate information. I mean, this table would be a central piece of the Neutron database, so it needs to be as slim as possible.\n\n CREATE TABLE resource_types (\n   id INT UNSIGNED NOT NULL AUTOINCREMENT PRIMARY KEY,\n   name VARCHAR(50) NOT NULL,\n   UNIQUE INDEX uix_name (name)\n );\n\n CREATE TABLE resources (\n   id VARCHAR(36) NOT NULL PRIMARY KEY,\n   resource_type INT UNSIGNED NOT NULL,\n   INDEX ix_resource_type (resource_type)\n );","commit_id":"21354a7b30d64e94bfca02c6af9f151c4180ae8d"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"b33dcaec8b89f74fb365ecc3984788f1ccbaacdc","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    op.create_table("},{"line_number":33,"context_line":"        \u0027neutronresources\u0027,"},{"line_number":34,"context_line":"        sa.Column(\u0027id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":35,"context_line":"        sa.Column(\u0027resource_type\u0027, sa.String(length\u003d50), nullable\u003dFalse),"},{"line_number":36,"context_line":"        sa.PrimaryKeyConstraint(\u0027id\u0027)"},{"line_number":37,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba15a1d1_36322a11","line":35,"in_reply_to":"ba15a1d1_30dfa36a","updated":"2015-09-23 23:15:44.000000000","message":"ack","commit_id":"21354a7b30d64e94bfca02c6af9f151c4180ae8d"}],"neutron/db/migration/alembic_migrations/versions/mitaka/contract/8a6d8bdae39_migrate_neutron_resources_table.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"5bbc01ba39485bb8680103b4a2c3298363419016","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            for row in session.query(model):"},{"line_number":72,"context_line":"                # NOTE(kevinbenton): without this disabled, pylint complains"},{"line_number":73,"context_line":"                # about a missing \u0027dml\u0027 argument."},{"line_number":74,"context_line":"                #pylint: disable\u003dno-value-for-parameter"},{"line_number":75,"context_line":"                res \u003d session.execute("},{"line_number":76,"context_line":"                    standardattrs.insert().values(resource_type\u003dtable))"},{"line_number":77,"context_line":"                session.execute("}],"source_content_type":"text/x-python","patch_set":14,"id":"ba8a016a_0ab8e873","line":74,"updated":"2015-11-20 00:45:45.000000000","message":"does it make sense to skip the neutron/db/migration directory altogether? Mostly it should be autogenerated, no?\n\nhttps://github.com/openstack/neutron/blob/master/.pylintrc#L9","commit_id":"b592c3b6ed47734d24375c1d06a8230cb32dc899"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"8ded8e172050ee6584bba84e380b08f75febbc3d","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            for row in session.query(model):"},{"line_number":72,"context_line":"                # NOTE(kevinbenton): without this disabled, pylint complains"},{"line_number":73,"context_line":"                # about a missing \u0027dml\u0027 argument."},{"line_number":74,"context_line":"                #pylint: disable\u003dno-value-for-parameter"},{"line_number":75,"context_line":"                res \u003d session.execute("},{"line_number":76,"context_line":"                    standardattrs.insert().values(resource_type\u003dtable))"},{"line_number":77,"context_line":"                session.execute("}],"source_content_type":"text/x-python","patch_set":14,"id":"ba8a016a_1a958f31","line":74,"in_reply_to":"ba8a016a_0ab8e873","updated":"2015-11-20 03:54:09.000000000","message":"I think we can leave it for now. The stuff generated by the scripts shouldn\u0027t violate pylint rules that often. And if it does it\u0027s usually worth looking into.","commit_id":"b592c3b6ed47734d24375c1d06a8230cb32dc899"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"56ab0ee91c43bfe1d1b068b62f49ab537966d97c","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# basic model of the tables with required field for migration"},{"line_number":33,"context_line":"TABLES \u003d (\u0027ports\u0027, \u0027networks\u0027, \u0027subnets\u0027, \u0027subnetpools\u0027, \u0027securitygroups\u0027,"},{"line_number":34,"context_line":"          \u0027floatingips\u0027, \u0027routers\u0027, \u0027securitygrouprules\u0027)"},{"line_number":35,"context_line":"TABLE_MODELS \u003d ["},{"line_number":36,"context_line":"    (table, sa.Table(table, sa.MetaData(),"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_8eb3250a","line":33,"updated":"2015-11-23 14:04:01.000000000","message":"(No action required) Especially nitty nit: you could as well have the list in some common place and reuse it from both scripts.","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"f07934ba93add048cefe01eeff5c5267f35f5a02","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# basic model of the tables with required field for migration"},{"line_number":33,"context_line":"TABLES \u003d (\u0027ports\u0027, \u0027networks\u0027, \u0027subnets\u0027, \u0027subnetpools\u0027, \u0027securitygroups\u0027,"},{"line_number":34,"context_line":"          \u0027floatingips\u0027, \u0027routers\u0027, \u0027securitygrouprules\u0027)"},{"line_number":35,"context_line":"TABLE_MODELS \u003d ["},{"line_number":36,"context_line":"    (table, sa.Table(table, sa.MetaData(),"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_5f15c946","line":33,"in_reply_to":"ba8a016a_8eb3250a","updated":"2015-11-24 00:40:02.000000000","message":"I\u0027m gonna leave it. I like when the scripts are self-contained as much as possible.","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"56ab0ee91c43bfe1d1b068b62f49ab537966d97c","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            for row in session.query(model):"},{"line_number":72,"context_line":"                # NOTE(kevinbenton): without this disabled, pylint complains"},{"line_number":73,"context_line":"                # about a missing \u0027dml\u0027 argument."},{"line_number":74,"context_line":"                #pylint: disable\u003dno-value-for-parameter"},{"line_number":75,"context_line":"                res \u003d session.execute("},{"line_number":76,"context_line":"                    standardattrs.insert().values(resource_type\u003dtable))"},{"line_number":77,"context_line":"                session.execute("}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_ce5fed73","line":74,"updated":"2015-11-23 14:04:01.000000000","message":"I don\u0027t get any errors with fresh venv. Probably can be removed.","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"83a401c676e46f8f37c4f8f476c61da532cb6ac4","unresolved":false,"context_lines":[{"line_number":43,"context_line":"standardattrs \u003d sa.Table("},{"line_number":44,"context_line":"    \u0027standardattributes\u0027, sa.MetaData(),"},{"line_number":45,"context_line":"    sa.Column(\u0027id\u0027, sa.BigInteger(), primary_key\u003dTrue, autoincrement\u003dTrue),"},{"line_number":46,"context_line":"    sa.Column(\u0027resource_type\u0027, sa.String(length\u003d50), nullable\u003dFalse))"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"def upgrade():"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_1adc1d72","line":46,"updated":"2015-11-24 10:01:38.000000000","message":"Bump resource type to 255 here too.","commit_id":"a33672a718dc70088055b906719e4980afcf8d7b"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"3d01a269653c1982f241e3c0a5572b5f61cc6386","unresolved":false,"context_lines":[{"line_number":43,"context_line":"standardattrs \u003d sa.Table("},{"line_number":44,"context_line":"    \u0027standardattributes\u0027, sa.MetaData(),"},{"line_number":45,"context_line":"    sa.Column(\u0027id\u0027, sa.BigInteger(), primary_key\u003dTrue, autoincrement\u003dTrue),"},{"line_number":46,"context_line":"    sa.Column(\u0027resource_type\u0027, sa.String(length\u003d50), nullable\u003dFalse))"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"def upgrade():"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_9a180dd5","line":46,"in_reply_to":"ba8a016a_1adc1d72","updated":"2015-11-24 10:18:07.000000000","message":"Done","commit_id":"a33672a718dc70088055b906719e4980afcf8d7b"}],"neutron/db/migration/alembic_migrations/versions/mitaka/expand/32e5974ada25_add_neutron_resources_table.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"56ab0ee91c43bfe1d1b068b62f49ab537966d97c","unresolved":false,"context_lines":[{"line_number":35,"context_line":"def upgrade():"},{"line_number":36,"context_line":"    op.create_table("},{"line_number":37,"context_line":"        \u0027standardattributes\u0027,"},{"line_number":38,"context_line":"        sa.Column(\u0027id\u0027, sa.BigInteger(), autoincrement\u003dTrue),"},{"line_number":39,"context_line":"        sa.Column(\u0027resource_type\u0027, sa.String(length\u003d50), nullable\u003dFalse),"},{"line_number":40,"context_line":"        sa.PrimaryKeyConstraint(\u0027id\u0027)"},{"line_number":41,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_aecce9bb","line":38,"updated":"2015-11-23 14:04:01.000000000","message":"Why is it BigInteger here but Integer in the model? Is it expected? Assuming it may generate different DDL, how come our functional tests that compare models with alembic scripts don\u0027t catch it?\n\nOr is it the same for backend we validate for?","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"f2f10d652a1b9ae537bec116e03fddc5adb5c538","unresolved":false,"context_lines":[{"line_number":35,"context_line":"def upgrade():"},{"line_number":36,"context_line":"    op.create_table("},{"line_number":37,"context_line":"        \u0027standardattributes\u0027,"},{"line_number":38,"context_line":"        sa.Column(\u0027id\u0027, sa.BigInteger(), autoincrement\u003dTrue),"},{"line_number":39,"context_line":"        sa.Column(\u0027resource_type\u0027, sa.String(length\u003d50), nullable\u003dFalse),"},{"line_number":40,"context_line":"        sa.PrimaryKeyConstraint(\u0027id\u0027)"},{"line_number":41,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_d54f4632","line":38,"in_reply_to":"ba8a016a_1de746e5","updated":"2015-11-24 10:17:43.000000000","message":"thx","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"2326e968f7ba6de126e32a5ea588be211b3657e7","unresolved":false,"context_lines":[{"line_number":35,"context_line":"def upgrade():"},{"line_number":36,"context_line":"    op.create_table("},{"line_number":37,"context_line":"        \u0027standardattributes\u0027,"},{"line_number":38,"context_line":"        sa.Column(\u0027id\u0027, sa.BigInteger(), autoincrement\u003dTrue),"},{"line_number":39,"context_line":"        sa.Column(\u0027resource_type\u0027, sa.String(length\u003d50), nullable\u003dFalse),"},{"line_number":40,"context_line":"        sa.PrimaryKeyConstraint(\u0027id\u0027)"},{"line_number":41,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_59f649fa","line":38,"in_reply_to":"ba8a016a_aecce9bb","updated":"2015-11-23 22:25:43.000000000","message":"um good catch.","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"f07934ba93add048cefe01eeff5c5267f35f5a02","unresolved":false,"context_lines":[{"line_number":35,"context_line":"def upgrade():"},{"line_number":36,"context_line":"    op.create_table("},{"line_number":37,"context_line":"        \u0027standardattributes\u0027,"},{"line_number":38,"context_line":"        sa.Column(\u0027id\u0027, sa.BigInteger(), autoincrement\u003dTrue),"},{"line_number":39,"context_line":"        sa.Column(\u0027resource_type\u0027, sa.String(length\u003d50), nullable\u003dFalse),"},{"line_number":40,"context_line":"        sa.PrimaryKeyConstraint(\u0027id\u0027)"},{"line_number":41,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_e5966e93","line":38,"in_reply_to":"ba8a016a_aecce9bb","updated":"2015-11-24 00:40:02.000000000","message":"whoops, no it should have been biginteger in the model as well. not sure why the model match didn\u0027t catch it.","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"a33b1501e86f07b8b806fe269e3548219cf48883","unresolved":false,"context_lines":[{"line_number":35,"context_line":"def upgrade():"},{"line_number":36,"context_line":"    op.create_table("},{"line_number":37,"context_line":"        \u0027standardattributes\u0027,"},{"line_number":38,"context_line":"        sa.Column(\u0027id\u0027, sa.BigInteger(), autoincrement\u003dTrue),"},{"line_number":39,"context_line":"        sa.Column(\u0027resource_type\u0027, sa.String(length\u003d50), nullable\u003dFalse),"},{"line_number":40,"context_line":"        sa.PrimaryKeyConstraint(\u0027id\u0027)"},{"line_number":41,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_1de746e5","line":38,"in_reply_to":"ba8a016a_e5966e93","updated":"2015-11-24 02:54:58.000000000","message":"I filed Bug #1519171","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"83a401c676e46f8f37c4f8f476c61da532cb6ac4","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    op.create_table("},{"line_number":37,"context_line":"        \u0027standardattributes\u0027,"},{"line_number":38,"context_line":"        sa.Column(\u0027id\u0027, sa.BigInteger(), autoincrement\u003dTrue),"},{"line_number":39,"context_line":"        sa.Column(\u0027resource_type\u0027, sa.String(length\u003d50), nullable\u003dFalse),"},{"line_number":40,"context_line":"        sa.PrimaryKeyConstraint(\u0027id\u0027)"},{"line_number":41,"context_line":"    )"},{"line_number":42,"context_line":"    for table in TABLES:"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_da8a1564","line":39,"updated":"2015-11-24 10:01:38.000000000","message":"Oh, this one need to be bumped to 255, \n\nFunctional tests are crying: \n\n2015-11-24 01:20:11.305 | 2015-11-24 01:20:11.259 |     AssertionError: Models and migration scripts aren\u0027t in sync:\n2015-11-24 01:20:11.305 | 2015-11-24 01:20:11.260 |     [ [ ( \u0027modify_type\u0027,\n2015-11-24 01:20:11.305 | 2015-11-24 01:20:11.262 |           None,\n2015-11-24 01:20:11.306 | 2015-11-24 01:20:11.263 |           \u0027standardattributes\u0027,\n2015-11-24 01:20:11.306 | 2015-11-24 01:20:11.264 |           \u0027resource_type\u0027,\n2015-11-24 01:20:11.306 | 2015-11-24 01:20:11.266 |           { \u0027existing_nullable\u0027: False,\n2015-11-24 01:20:11.307 | 2015-11-24 01:20:11.267 |             \u0027existing_server_default\u0027: False},\n2015-11-24 01:20:11.309 | 2015-11-24 01:20:11.268 |           VARCHAR(length\u003d50),\n2015-11-24 01:20:11.310 | 2015-11-24 01:20:11.269 |           String(length\u003d255))]]\n2015-11-24 01:20:11.311 | 2015-11-24 01:20:11.271 |","commit_id":"a33672a718dc70088055b906719e4980afcf8d7b"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"3d01a269653c1982f241e3c0a5572b5f61cc6386","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    op.create_table("},{"line_number":37,"context_line":"        \u0027standardattributes\u0027,"},{"line_number":38,"context_line":"        sa.Column(\u0027id\u0027, sa.BigInteger(), autoincrement\u003dTrue),"},{"line_number":39,"context_line":"        sa.Column(\u0027resource_type\u0027, sa.String(length\u003d50), nullable\u003dFalse),"},{"line_number":40,"context_line":"        sa.PrimaryKeyConstraint(\u0027id\u0027)"},{"line_number":41,"context_line":"    )"},{"line_number":42,"context_line":"    for table in TABLES:"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_da43f5ad","line":39,"in_reply_to":"ba8a016a_da8a1564","updated":"2015-11-24 10:18:07.000000000","message":"whoops. missed these on the update","commit_id":"a33672a718dc70088055b906719e4980afcf8d7b"}],"neutron/db/model_base.py":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"8eb8db00b2c5a56d1821f56d6d1bccf145206fbb","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                                primary_key\u003dTrue,"},{"line_number":40,"context_line":"                                default\u003duuidutils.generate_uuid)"},{"line_number":41,"context_line":"        if issubclass(cls, NeutronObject):"},{"line_number":42,"context_line":"            return col(sa.ForeignKey(NeutronObject.id, ondelete\u003d\"CASCADE\"))"},{"line_number":43,"context_line":"        return col()"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_94683c89","line":42,"updated":"2015-09-15 07:48:30.000000000","message":"neat! :)","commit_id":"de70f942140ccee1f4102c77658faa4e5cfd4bb1"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"8eb8db00b2c5a56d1821f56d6d1bccf145206fbb","unresolved":false,"context_lines":[{"line_number":85,"context_line":"BASEV2 \u003d declarative.declarative_base(cls\u003dNeutronBaseV2)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"class NeutronObject(BASEV2):"},{"line_number":89,"context_line":"    \"\"\"Common table to associate all Neutron API objects."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    By having Neutron objects related to this table, we can associate new"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_543b849c","line":88,"updated":"2015-09-15 07:48:30.000000000","message":"Please note:\nhttp://git.openstack.org/cgit/openstack/neutron/tree/neutron/objects/base.py?h\u003dfeature/qos#n40\n\nWe have another neutron object here too, it\u0027s basically an oslo versioned object, with neutron convenience helper methods.\n\nWe have namespaces in front, so not sure if it\u0027s an issue, if it\u0027s we may want to rename this one, or the other (the other could be renamed to NeutronVersionedObject)","commit_id":"de70f942140ccee1f4102c77658faa4e5cfd4bb1"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"878356dbbd3f8d2798128dd481957e39d3c74bd7","unresolved":false,"context_lines":[{"line_number":85,"context_line":"BASEV2 \u003d declarative.declarative_base(cls\u003dNeutronBaseV2)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"class NeutronObject(BASEV2):"},{"line_number":89,"context_line":"    \"\"\"Common table to associate all Neutron API objects."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    By having Neutron objects related to this table, we can associate new"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_ce158740","line":88,"in_reply_to":"ba15a1d1_543b849c","updated":"2015-09-16 11:01:29.000000000","message":"Indeed I believe we should come up with better distinct terms.\n\nI am fine with renaming the oslo versioned one as Miguel suggested, but we should not reuse the same name.","commit_id":"de70f942140ccee1f4102c77658faa4e5cfd4bb1"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"91f49b47e2aecfb28599ef1dc963481c5223556d","unresolved":false,"context_lines":[{"line_number":85,"context_line":"BASEV2 \u003d declarative.declarative_base(cls\u003dNeutronBaseV2)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"class NeutronObject(BASEV2):"},{"line_number":89,"context_line":"    \"\"\"Common table to associate all Neutron API objects."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    By having Neutron objects related to this table, we can associate new"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_ff956c32","line":88,"in_reply_to":"ba15a1d1_ce158740","updated":"2015-09-17 07:04:55.000000000","message":"Shall I just call it Object? ;)\n\nI\u0027ll put something better here.","commit_id":"de70f942140ccee1f4102c77658faa4e5cfd4bb1"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"889477ce44bfe52f0f7929a9e8b1094474b62b87","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    id \u003d sa.Column(sa.String(36),"},{"line_number":98,"context_line":"                   primary_key\u003dTrue,"},{"line_number":99,"context_line":"                   default\u003duuidutils.generate_uuid)"},{"line_number":100,"context_line":"    discriminator \u003d sa.Column(sa.String(50), nullable\u003dFalse)"},{"line_number":101,"context_line":"    __mapper_args__ \u003d {\u0027polymorphic_on\u0027: discriminator}"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_d21a4b17","line":100,"updated":"2015-09-15 04:13:57.000000000","message":"what is a discriminator? Can we find a more intuitive name for it? Why wouldn\u0027t resource_class/resource_type be a better name for it?","commit_id":"de70f942140ccee1f4102c77658faa4e5cfd4bb1"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"8eb8db00b2c5a56d1821f56d6d1bccf145206fbb","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    id \u003d sa.Column(sa.String(36),"},{"line_number":98,"context_line":"                   primary_key\u003dTrue,"},{"line_number":99,"context_line":"                   default\u003duuidutils.generate_uuid)"},{"line_number":100,"context_line":"    discriminator \u003d sa.Column(sa.String(50), nullable\u003dFalse)"},{"line_number":101,"context_line":"    __mapper_args__ \u003d {\u0027polymorphic_on\u0027: discriminator}"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_145c2cec","line":100,"in_reply_to":"ba15a1d1_09e179fe","updated":"2015-09-15 07:48:30.000000000","message":"+1 for resource_type or object_type","commit_id":"de70f942140ccee1f4102c77658faa4e5cfd4bb1"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"91f49b47e2aecfb28599ef1dc963481c5223556d","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    id \u003d sa.Column(sa.String(36),"},{"line_number":98,"context_line":"                   primary_key\u003dTrue,"},{"line_number":99,"context_line":"                   default\u003duuidutils.generate_uuid)"},{"line_number":100,"context_line":"    discriminator \u003d sa.Column(sa.String(50), nullable\u003dFalse)"},{"line_number":101,"context_line":"    __mapper_args__ \u003d {\u0027polymorphic_on\u0027: discriminator}"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_7fc95c58","line":100,"in_reply_to":"ba15a1d1_0e55bff8","updated":"2015-09-17 07:04:55.000000000","message":"resource_type just because i\u0027m not a fan of shadowing if i can avoid it","commit_id":"de70f942140ccee1f4102c77658faa4e5cfd4bb1"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"878356dbbd3f8d2798128dd481957e39d3c74bd7","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    id \u003d sa.Column(sa.String(36),"},{"line_number":98,"context_line":"                   primary_key\u003dTrue,"},{"line_number":99,"context_line":"                   default\u003duuidutils.generate_uuid)"},{"line_number":100,"context_line":"    discriminator \u003d sa.Column(sa.String(50), nullable\u003dFalse)"},{"line_number":101,"context_line":"    __mapper_args__ \u003d {\u0027polymorphic_on\u0027: discriminator}"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_0e55bff8","line":100,"in_reply_to":"ba15a1d1_145c2cec","updated":"2015-09-16 11:01:29.000000000","message":"just \u0027type\u0027 will work. I don\u0027t like \u0027class\u0027 because resources do not directly map to classes (at least until we get all of them NeutronDbObject based).","commit_id":"de70f942140ccee1f4102c77658faa4e5cfd4bb1"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"c1badf31c73d0932d4d2a67681e77798c77c5980","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    id \u003d sa.Column(sa.String(36),"},{"line_number":98,"context_line":"                   primary_key\u003dTrue,"},{"line_number":99,"context_line":"                   default\u003duuidutils.generate_uuid)"},{"line_number":100,"context_line":"    discriminator \u003d sa.Column(sa.String(50), nullable\u003dFalse)"},{"line_number":101,"context_line":"    __mapper_args__ \u003d {\u0027polymorphic_on\u0027: discriminator}"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_09e179fe","line":100,"in_reply_to":"ba15a1d1_d21a4b17","updated":"2015-09-15 07:12:35.000000000","message":"a discriminator provides a way to discriminate between objects of different types :)","commit_id":"de70f942140ccee1f4102c77658faa4e5cfd4bb1"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"d4a88656d64b5301ab05cb1194a25188a96e74f2","unresolved":false,"context_lines":[{"line_number":85,"context_line":"BASEV2 \u003d declarative.declarative_base(cls\u003dNeutronBaseV2)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"class NeutronResource(BASEV2):"},{"line_number":89,"context_line":"    \"\"\"Common table to associate all Neutron API objects."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    By having Neutron objects related to this table, we can associate new"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_35e22330","line":88,"updated":"2015-09-17 08:04:04.000000000","message":"Ok, the new name sounds good.","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ef5aaedfe20cfa33783cb9c3eb94cc69f7339fd4","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or"},{"line_number":12,"context_line":"# implied."},{"line_number":13,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":14,"context_line":"# limitations under the License."},{"line_number":15,"context_line":"import functools"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_db.sqlalchemy import models"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba15a1d1_8125d55c","line":14,"updated":"2015-09-17 16:56:51.000000000","message":"oh no...missing space","commit_id":"21354a7b30d64e94bfca02c6af9f151c4180ae8d"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"bbbc9138804050ea079ca86553647ca64465b98f","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or"},{"line_number":12,"context_line":"# implied."},{"line_number":13,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":14,"context_line":"# limitations under the License."},{"line_number":15,"context_line":"import functools"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_db.sqlalchemy import models"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_104cc39c","line":14,"in_reply_to":"ba15a1d1_8125d55c","updated":"2015-10-22 02:04:38.000000000","message":"and pep8 didnt catch it? Not good ... :)","commit_id":"21354a7b30d64e94bfca02c6af9f151c4180ae8d"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"f2fba58dfad2b961957783f72e5c229cba44cb7f","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @declarative.declared_attr.cascading"},{"line_number":37,"context_line":"    def id(cls):"},{"line_number":38,"context_line":"        col \u003d functools.partial(sa.Column, sa.String(36),"},{"line_number":39,"context_line":"                                primary_key\u003dTrue,"},{"line_number":40,"context_line":"                                default\u003duuidutils.generate_uuid)"},{"line_number":41,"context_line":"        if issubclass(cls, NeutronResource):"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba15a1d1_5bf47359","line":38,"updated":"2015-09-18 09:06:43.000000000","message":"I would prefer:\n\n col \u003d sa.Column(...)\n if ...\n   col.append_foreign_key(sa.ForeignKey(...))","commit_id":"21354a7b30d64e94bfca02c6af9f151c4180ae8d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ef5aaedfe20cfa33783cb9c3eb94cc69f7339fd4","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"class NeutronResource(BASEV2):"},{"line_number":89,"context_line":"    \"\"\"Common table to associate all Neutron API objects."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    By having Neutron objects related to this table, we can associate new"},{"line_number":92,"context_line":"    tables that apply to many Neutron objects (e.g. timestamps, rbac entries)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba15a1d1_667697d8","line":89,"updated":"2015-09-17 16:56:51.000000000","message":"objects -\u003e resources?","commit_id":"21354a7b30d64e94bfca02c6af9f151c4180ae8d"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"34bf388f7befaa7d6aca4d752126e15593b92f82","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"class NeutronResource(BASEV2):"},{"line_number":89,"context_line":"    \"\"\"Common table to associate all Neutron API objects."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    By having Neutron objects related to this table, we can associate new"},{"line_number":92,"context_line":"    tables that apply to many Neutron objects (e.g. timestamps, rbac entries)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba15a1d1_d84890b5","line":89,"updated":"2015-09-18 02:51:47.000000000","message":"yes","commit_id":"21354a7b30d64e94bfca02c6af9f151c4180ae8d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"5bbc01ba39485bb8680103b4a2c3298363419016","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    every single type of Neutron resource. Otherwise this table will be filled"},{"line_number":93,"context_line":"    with NULL entries for combinations that don\u0027t make sense. Additionally,"},{"line_number":94,"context_line":"    by keeping this table small we can ensure that performance isn\u0027t adversely"},{"line_number":95,"context_line":"    impacted for queries on objects."},{"line_number":96,"context_line":"    \"\"\""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    id \u003d sa.Column(sa.Integer(), primary_key\u003dTrue, autoincrement\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba8a016a_0a6f88fc","line":95,"updated":"2015-11-20 00:45:45.000000000","message":"This could be part of the devref I was telling you about earlier.","commit_id":"b592c3b6ed47734d24375c1d06a8230cb32dc899"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"aa40e21e0bdaaab3840f742f5d87979b55cff3bf","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    every single type of Neutron resource. Otherwise this table will be filled"},{"line_number":93,"context_line":"    with NULL entries for combinations that don\u0027t make sense. Additionally,"},{"line_number":94,"context_line":"    by keeping this table small we can ensure that performance isn\u0027t adversely"},{"line_number":95,"context_line":"    impacted for queries on objects."},{"line_number":96,"context_line":"    \"\"\""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    id \u003d sa.Column(sa.Integer(), primary_key\u003dTrue, autoincrement\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba8a016a_ba332361","line":95,"in_reply_to":"ba8a016a_0a6f88fc","updated":"2015-11-20 04:00:46.000000000","message":"+1","commit_id":"b592c3b6ed47734d24375c1d06a8230cb32dc899"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"396c9b7780d79187803a7baac9589e6eca62f34e","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    \"\"\"Common table to associate all Neutron API resources."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    By having Neutron objects related to this table, we can associate new"},{"line_number":86,"context_line":"    tables that apply to many Neutron objects (e.g. timestamps, rbac entries)"},{"line_number":87,"context_line":"    to this table to avoid schema duplication while maintaining referential"},{"line_number":88,"context_line":"    integrity."},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_9845c718","line":86,"updated":"2015-11-22 09:50:11.000000000","message":"why not use https://github.com/openstack/oslo.db/blob/master/oslo_db/sqlalchemy/models.py#L135 ?","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"b27b77462c24741fd477ee806dca545fe52f17ad","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    \"\"\"Common table to associate all Neutron API resources."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    By having Neutron objects related to this table, we can associate new"},{"line_number":86,"context_line":"    tables that apply to many Neutron objects (e.g. timestamps, rbac entries)"},{"line_number":87,"context_line":"    to this table to avoid schema duplication while maintaining referential"},{"line_number":88,"context_line":"    integrity."},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_b690a296","line":86,"in_reply_to":"ba8a016a_9845c718","updated":"2015-11-23 22:06:14.000000000","message":"that\u0027s duplicated schema for every object that wants timestamps","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"396c9b7780d79187803a7baac9589e6eca62f34e","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    # NOTE(kevinbenton): this column is redundant information, but it allows"},{"line_number":101,"context_line":"    # operators/devs to look at the contents of this table and know which table"},{"line_number":102,"context_line":"    # the corresponding object is in"},{"line_number":103,"context_line":"    resource_type \u003d sa.Column(sa.String(50), nullable\u003dFalse)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"class HasStandardAttributes(object):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_f85413cb","line":103,"updated":"2015-11-22 09:50:11.000000000","message":"why 50? that seems kind of random? Can you please explain","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"b27b77462c24741fd477ee806dca545fe52f17ad","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    # NOTE(kevinbenton): this column is redundant information, but it allows"},{"line_number":101,"context_line":"    # operators/devs to look at the contents of this table and know which table"},{"line_number":102,"context_line":"    # the corresponding object is in"},{"line_number":103,"context_line":"    resource_type \u003d sa.Column(sa.String(50), nullable\u003dFalse)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"class HasStandardAttributes(object):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_b66c229d","line":103,"in_reply_to":"ba8a016a_63ca9a51","updated":"2015-11-23 22:06:14.000000000","message":"no, enum would preclude out of tree stuff from leveraging this. I will update this with a better value.","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"2326e968f7ba6de126e32a5ea588be211b3657e7","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    # NOTE(kevinbenton): this column is redundant information, but it allows"},{"line_number":101,"context_line":"    # operators/devs to look at the contents of this table and know which table"},{"line_number":102,"context_line":"    # the corresponding object is in"},{"line_number":103,"context_line":"    resource_type \u003d sa.Column(sa.String(50), nullable\u003dFalse)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"class HasStandardAttributes(object):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_b9be55fd","line":103,"in_reply_to":"ba8a016a_b66c229d","updated":"2015-11-23 22:25:43.000000000","message":"if we can\u0027t express a resource under 50 chars, we might as well do something else than software engineering. 50 chars seems fine to me, but 64 is more cute :)","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"f07934ba93add048cefe01eeff5c5267f35f5a02","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    # NOTE(kevinbenton): this column is redundant information, but it allows"},{"line_number":101,"context_line":"    # operators/devs to look at the contents of this table and know which table"},{"line_number":102,"context_line":"    # the corresponding object is in"},{"line_number":103,"context_line":"    resource_type \u003d sa.Column(sa.String(50), nullable\u003dFalse)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"class HasStandardAttributes(object):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_2a41a50b","line":103,"in_reply_to":"ba8a016a_b9be55fd","updated":"2015-11-24 00:40:02.000000000","message":"I\u0027ll just do 255 since that\u0027s the max for varchar without going into a 2-byte prefix!","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"56ab0ee91c43bfe1d1b068b62f49ab537966d97c","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    # NOTE(kevinbenton): this column is redundant information, but it allows"},{"line_number":101,"context_line":"    # operators/devs to look at the contents of this table and know which table"},{"line_number":102,"context_line":"    # the corresponding object is in"},{"line_number":103,"context_line":"    resource_type \u003d sa.Column(sa.String(50), nullable\u003dFalse)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"class HasStandardAttributes(object):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_63ca9a51","line":103,"in_reply_to":"ba8a016a_f85413cb","updated":"2015-11-23 14:04:01.000000000","message":"+1 to garyk. Also, should we define potential values somewhere and limit the field to just those with enum?","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d59a94213b51d5637f65f7f6e6fe0829a3140d55","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    @declarative.declared_attr"},{"line_number":108,"context_line":"    def standard_attr_id(cls):"},{"line_number":109,"context_line":"        return sa.Column("},{"line_number":110,"context_line":"            sa.Integer(), sa.ForeignKey(StandardAttribute.id,"},{"line_number":111,"context_line":"                                        ondelete\u003d\"CASCADE\"),"},{"line_number":112,"context_line":"            unique\u003dTrue,"},{"line_number":113,"context_line":"            nullable\u003dFalse"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_62eded24","line":110,"updated":"2015-11-20 18:59:21.000000000","message":"micronit:  A new line after \"sa.Integer(),\" would help a little.  My eyes parsed it incorrectly the first time.  Not a big deal.  It is just my opinion but I like to be consistent about either using one line per argument on combining them on lines.","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"f07934ba93add048cefe01eeff5c5267f35f5a02","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    @declarative.declared_attr"},{"line_number":108,"context_line":"    def standard_attr_id(cls):"},{"line_number":109,"context_line":"        return sa.Column("},{"line_number":110,"context_line":"            sa.Integer(), sa.ForeignKey(StandardAttribute.id,"},{"line_number":111,"context_line":"                                        ondelete\u003d\"CASCADE\"),"},{"line_number":112,"context_line":"            unique\u003dTrue,"},{"line_number":113,"context_line":"            nullable\u003dFalse"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_2a7c4571","line":110,"in_reply_to":"ba8a016a_62eded24","updated":"2015-11-24 00:40:02.000000000","message":"Done","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"56ab0ee91c43bfe1d1b068b62f49ab537966d97c","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    # NOTE(kevinbenton): we have to disable the following pylint check because"},{"line_number":117,"context_line":"    # it thinks we are overriding this method in the __init__ method."},{"line_number":118,"context_line":"    #pylint: disable\u003dmethod-hidden"},{"line_number":119,"context_line":"    @declarative.declared_attr"},{"line_number":120,"context_line":"    def standard_attr(cls):"},{"line_number":121,"context_line":"        return orm.relationship(StandardAttribute, lazy\u003d\u0027joined\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_c38586cf","line":118,"updated":"2015-11-23 14:04:01.000000000","message":"(No action required) You could use setattr() to avoid the false positive.","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"f07934ba93add048cefe01eeff5c5267f35f5a02","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    # NOTE(kevinbenton): we have to disable the following pylint check because"},{"line_number":117,"context_line":"    # it thinks we are overriding this method in the __init__ method."},{"line_number":118,"context_line":"    #pylint: disable\u003dmethod-hidden"},{"line_number":119,"context_line":"    @declarative.declared_attr"},{"line_number":120,"context_line":"    def standard_attr(cls):"},{"line_number":121,"context_line":"        return orm.relationship(StandardAttribute, lazy\u003d\u0027joined\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_2a58c5f9","line":118,"in_reply_to":"ba8a016a_c38586cf","updated":"2015-11-24 00:40:02.000000000","message":"IMO setattr is uglier than a pylint skip :)","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d59a94213b51d5637f65f7f6e6fe0829a3140d55","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    #pylint: disable\u003dmethod-hidden"},{"line_number":119,"context_line":"    @declarative.declared_attr"},{"line_number":120,"context_line":"    def standard_attr(cls):"},{"line_number":121,"context_line":"        return orm.relationship(StandardAttribute, lazy\u003d\u0027joined\u0027,"},{"line_number":122,"context_line":"                                cascade\u003d\u0027all, delete-orphan\u0027,"},{"line_number":123,"context_line":"                                single_parent\u003dTrue,"},{"line_number":124,"context_line":"                                uselist\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_c2f859c7","line":121,"updated":"2015-11-20 18:59:21.000000000","message":"ditto: (lazy on new line)","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"f07934ba93add048cefe01eeff5c5267f35f5a02","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    #pylint: disable\u003dmethod-hidden"},{"line_number":119,"context_line":"    @declarative.declared_attr"},{"line_number":120,"context_line":"    def standard_attr(cls):"},{"line_number":121,"context_line":"        return orm.relationship(StandardAttribute, lazy\u003d\u0027joined\u0027,"},{"line_number":122,"context_line":"                                cascade\u003d\u0027all, delete-orphan\u0027,"},{"line_number":123,"context_line":"                                single_parent\u003dTrue,"},{"line_number":124,"context_line":"                                uselist\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_8a61b1aa","line":121,"in_reply_to":"ba8a016a_c2f859c7","updated":"2015-11-24 00:40:02.000000000","message":"Done","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"}],"neutron/db/securitygroups_db.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"5bbc01ba39485bb8680103b4a2c3298363419016","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                   constants.PROTO_NAME_ICMP_V6: constants.PROTO_NUM_ICMP_V6}"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class SecurityGroup(model_base.HasStandardAttributes, model_base.BASEV2,"},{"line_number":47,"context_line":"                    models_v2.HasId, models_v2.HasTenant):"},{"line_number":48,"context_line":"    \"\"\"Represents a v2 neutron security group.\"\"\""},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"ba8a016a_a5446d49","line":46,"updated":"2015-11-20 00:45:45.000000000","message":"what about rules?","commit_id":"b592c3b6ed47734d24375c1d06a8230cb32dc899"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"8ded8e172050ee6584bba84e380b08f75febbc3d","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                   constants.PROTO_NAME_ICMP_V6: constants.PROTO_NUM_ICMP_V6}"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class SecurityGroup(model_base.HasStandardAttributes, model_base.BASEV2,"},{"line_number":47,"context_line":"                    models_v2.HasId, models_v2.HasTenant):"},{"line_number":48,"context_line":"    \"\"\"Represents a v2 neutron security group.\"\"\""},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"ba8a016a_daace7a0","line":46,"in_reply_to":"ba8a016a_a5446d49","updated":"2015-11-20 03:54:09.000000000","message":"good point. several attributes would make sense on those (time created, maybe tags, etc)","commit_id":"b592c3b6ed47734d24375c1d06a8230cb32dc899"}],"neutron/tests/functional/db/test_migrations.py":[{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"f2fba58dfad2b961957783f72e5c229cba44cb7f","unresolved":false,"context_lines":[{"line_number":342,"context_line":"            map(lambda t: t.create(conn), tables.values())"},{"line_number":343,"context_line":"            object_map \u003d {}"},{"line_number":344,"context_line":"            object_id \u003d 0"},{"line_number":345,"context_line":"            for tname, t in tables.items():"},{"line_number":346,"context_line":"                object_id +\u003d 1"},{"line_number":347,"context_line":"                conn.execute(t.insert(), [{\u0027id\u0027: object_id}])"},{"line_number":348,"context_line":"                object_map[tname] \u003d object_id"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba15a1d1_db75e3ca","line":345,"updated":"2015-09-18 09:06:43.000000000","message":"prefer:\n\n for object_id, (tname, t) in enumerate(...):","commit_id":"21354a7b30d64e94bfca02c6af9f151c4180ae8d"}],"neutron/tests/unit/db/test_db_base_plugin_v2.py":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"d4a88656d64b5301ab05cb1194a25188a96e74f2","unresolved":false,"context_lines":[{"line_number":5539,"context_line":"            ctx.session.add(subnetpool)"},{"line_number":5540,"context_line":"        return subnetpool"},{"line_number":5541,"context_line":""},{"line_number":5542,"context_line":"    def _get_neutron_obj(self, ctx, uuid):"},{"line_number":5543,"context_line":"        return ctx.session.query(models_v2.model_base.NeutronResource).filter("},{"line_number":5544,"context_line":"            models_v2.model_base.NeutronResource.id \u003d\u003d uuid).one()"},{"line_number":5545,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_55c6b79a","line":5542,"updated":"2015-09-17 08:04:04.000000000","message":"neutron_obj -\u003e neutron_res","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"da8b4d357a12c2984163a70b4898f724bdcbfb3a","unresolved":false,"context_lines":[{"line_number":5539,"context_line":"            ctx.session.add(subnetpool)"},{"line_number":5540,"context_line":"        return subnetpool"},{"line_number":5541,"context_line":""},{"line_number":5542,"context_line":"    def _get_neutron_obj(self, ctx, uuid):"},{"line_number":5543,"context_line":"        return ctx.session.query(models_v2.model_base.NeutronResource).filter("},{"line_number":5544,"context_line":"            models_v2.model_base.NeutronResource.id \u003d\u003d uuid).one()"},{"line_number":5545,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_104ccdc6","line":5542,"in_reply_to":"ba15a1d1_55c6b79a","updated":"2015-09-17 08:34:18.000000000","message":"Done","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"d4a88656d64b5301ab05cb1194a25188a96e74f2","unresolved":false,"context_lines":[{"line_number":5543,"context_line":"        return ctx.session.query(models_v2.model_base.NeutronResource).filter("},{"line_number":5544,"context_line":"            models_v2.model_base.NeutronResource.id \u003d\u003d uuid).one()"},{"line_number":5545,"context_line":""},{"line_number":5546,"context_line":"    def _test_neutronobject_removed_on_child_delete(self, ctx, child):"},{"line_number":5547,"context_line":"        child_uuid \u003d child.id"},{"line_number":5548,"context_line":"        self._get_neutron_obj(ctx, child_uuid)"},{"line_number":5549,"context_line":"        with ctx.session.begin():"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_15bcbf04","line":5546,"updated":"2015-09-17 08:04:04.000000000","message":"neutronobject-\u003eneutronresource","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"da8b4d357a12c2984163a70b4898f724bdcbfb3a","unresolved":false,"context_lines":[{"line_number":5543,"context_line":"        return ctx.session.query(models_v2.model_base.NeutronResource).filter("},{"line_number":5544,"context_line":"            models_v2.model_base.NeutronResource.id \u003d\u003d uuid).one()"},{"line_number":5545,"context_line":""},{"line_number":5546,"context_line":"    def _test_neutronobject_removed_on_child_delete(self, ctx, child):"},{"line_number":5547,"context_line":"        child_uuid \u003d child.id"},{"line_number":5548,"context_line":"        self._get_neutron_obj(ctx, child_uuid)"},{"line_number":5549,"context_line":"        with ctx.session.begin():"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_f0cd9931","line":5546,"in_reply_to":"ba15a1d1_15bcbf04","updated":"2015-09-17 08:34:18.000000000","message":"Done","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"d4a88656d64b5301ab05cb1194a25188a96e74f2","unresolved":false,"context_lines":[{"line_number":5545,"context_line":""},{"line_number":5546,"context_line":"    def _test_neutronobject_removed_on_child_delete(self, ctx, child):"},{"line_number":5547,"context_line":"        child_uuid \u003d child.id"},{"line_number":5548,"context_line":"        self._get_neutron_obj(ctx, child_uuid)"},{"line_number":5549,"context_line":"        with ctx.session.begin():"},{"line_number":5550,"context_line":"            ctx.session.delete(child)"},{"line_number":5551,"context_line":"        with testtools.ExpectedException(orm.exc.NoResultFound):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_953e8f89","line":5548,"updated":"2015-09-17 08:04:04.000000000","message":"ditto","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"da8b4d357a12c2984163a70b4898f724bdcbfb3a","unresolved":false,"context_lines":[{"line_number":5545,"context_line":""},{"line_number":5546,"context_line":"    def _test_neutronobject_removed_on_child_delete(self, ctx, child):"},{"line_number":5547,"context_line":"        child_uuid \u003d child.id"},{"line_number":5548,"context_line":"        self._get_neutron_obj(ctx, child_uuid)"},{"line_number":5549,"context_line":"        with ctx.session.begin():"},{"line_number":5550,"context_line":"            ctx.session.delete(child)"},{"line_number":5551,"context_line":"        with testtools.ExpectedException(orm.exc.NoResultFound):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_90ce9d2b","line":5548,"in_reply_to":"ba15a1d1_953e8f89","updated":"2015-09-17 08:34:18.000000000","message":"Done","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"d4a88656d64b5301ab05cb1194a25188a96e74f2","unresolved":false,"context_lines":[{"line_number":5549,"context_line":"        with ctx.session.begin():"},{"line_number":5550,"context_line":"            ctx.session.delete(child)"},{"line_number":5551,"context_line":"        with testtools.ExpectedException(orm.exc.NoResultFound):"},{"line_number":5552,"context_line":"            # we want to make sure that the parent neutron object was removed"},{"line_number":5553,"context_line":"            self._get_neutron_obj(ctx, child_uuid)"},{"line_number":5554,"context_line":""},{"line_number":5555,"context_line":"    def test_neutronobject_removed_on_subnet_delete(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_3550e3d3","line":5552,"updated":"2015-09-17 08:04:04.000000000","message":"ditto","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"da8b4d357a12c2984163a70b4898f724bdcbfb3a","unresolved":false,"context_lines":[{"line_number":5549,"context_line":"        with ctx.session.begin():"},{"line_number":5550,"context_line":"            ctx.session.delete(child)"},{"line_number":5551,"context_line":"        with testtools.ExpectedException(orm.exc.NoResultFound):"},{"line_number":5552,"context_line":"            # we want to make sure that the parent neutron object was removed"},{"line_number":5553,"context_line":"            self._get_neutron_obj(ctx, child_uuid)"},{"line_number":5554,"context_line":""},{"line_number":5555,"context_line":"    def test_neutronobject_removed_on_subnet_delete(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_70dae9e9","line":5552,"in_reply_to":"ba15a1d1_3550e3d3","updated":"2015-09-17 08:34:18.000000000","message":"Done","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"d4a88656d64b5301ab05cb1194a25188a96e74f2","unresolved":false,"context_lines":[{"line_number":5550,"context_line":"            ctx.session.delete(child)"},{"line_number":5551,"context_line":"        with testtools.ExpectedException(orm.exc.NoResultFound):"},{"line_number":5552,"context_line":"            # we want to make sure that the parent neutron object was removed"},{"line_number":5553,"context_line":"            self._get_neutron_obj(ctx, child_uuid)"},{"line_number":5554,"context_line":""},{"line_number":5555,"context_line":"    def test_neutronobject_removed_on_subnet_delete(self):"},{"line_number":5556,"context_line":"        ctx \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_d55f27e3","line":5553,"updated":"2015-09-17 08:04:04.000000000","message":"ditto","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"da8b4d357a12c2984163a70b4898f724bdcbfb3a","unresolved":false,"context_lines":[{"line_number":5550,"context_line":"            ctx.session.delete(child)"},{"line_number":5551,"context_line":"        with testtools.ExpectedException(orm.exc.NoResultFound):"},{"line_number":5552,"context_line":"            # we want to make sure that the parent neutron object was removed"},{"line_number":5553,"context_line":"            self._get_neutron_obj(ctx, child_uuid)"},{"line_number":5554,"context_line":""},{"line_number":5555,"context_line":"    def test_neutronobject_removed_on_subnet_delete(self):"},{"line_number":5556,"context_line":"        ctx \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_10e36da5","line":5553,"in_reply_to":"ba15a1d1_d55f27e3","updated":"2015-09-17 08:34:18.000000000","message":"Done","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"d4a88656d64b5301ab05cb1194a25188a96e74f2","unresolved":false,"context_lines":[{"line_number":5583,"context_line":"        for disc, obj in ((\u0027ports\u0027, port), (\u0027networks\u0027, network),"},{"line_number":5584,"context_line":"                          (\u0027subnets\u0027, subnet), (\u0027subnetpools\u0027, spool)):"},{"line_number":5585,"context_line":"            self.assertEqual("},{"line_number":5586,"context_line":"                disc, self._get_neutron_obj(ctx, obj.id).resource_type)"},{"line_number":5587,"context_line":""},{"line_number":5588,"context_line":""},{"line_number":5589,"context_line":"class NeutronDbPluginV2AsMixinTestCase(NeutronDbPluginV2TestCase,"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_156a7f81","line":5586,"updated":"2015-09-17 08:04:04.000000000","message":"ditto","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"da8b4d357a12c2984163a70b4898f724bdcbfb3a","unresolved":false,"context_lines":[{"line_number":5583,"context_line":"        for disc, obj in ((\u0027ports\u0027, port), (\u0027networks\u0027, network),"},{"line_number":5584,"context_line":"                          (\u0027subnets\u0027, subnet), (\u0027subnetpools\u0027, spool)):"},{"line_number":5585,"context_line":"            self.assertEqual("},{"line_number":5586,"context_line":"                disc, self._get_neutron_obj(ctx, obj.id).resource_type)"},{"line_number":5587,"context_line":""},{"line_number":5588,"context_line":""},{"line_number":5589,"context_line":"class NeutronDbPluginV2AsMixinTestCase(NeutronDbPluginV2TestCase,"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_d0ef3585","line":5586,"in_reply_to":"ba15a1d1_156a7f81","updated":"2015-09-17 08:34:18.000000000","message":"Done","commit_id":"ce9542ecf0add13b056ab3c4c5c1d892e36916fa"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"5bbc01ba39485bb8680103b4a2c3298363419016","unresolved":false,"context_lines":[{"line_number":5642,"context_line":"            subnetpool \u003d models_v2.SubnetPool("},{"line_number":5643,"context_line":"                ip_version\u003d4, default_prefixlen\u003d4, min_prefixlen\u003d4,"},{"line_number":5644,"context_line":"                max_prefixlen\u003d4, shared\u003dFalse, default_quota\u003d4,"},{"line_number":5645,"context_line":"                address_scope_id\u003d\u0027f\u0027, tenant_id\u003d\u0027dbcheck\u0027"},{"line_number":5646,"context_line":"            )"},{"line_number":5647,"context_line":"            ctx.session.add(subnetpool)"},{"line_number":5648,"context_line":"        return subnetpool"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba8a016a_65e445ab","line":5645,"updated":"2015-11-20 00:45:45.000000000","message":"I think we need a is_default\u003d\u003csomething\u003e here, do we not?","commit_id":"b592c3b6ed47734d24375c1d06a8230cb32dc899"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"8ded8e172050ee6584bba84e380b08f75febbc3d","unresolved":false,"context_lines":[{"line_number":5642,"context_line":"            subnetpool \u003d models_v2.SubnetPool("},{"line_number":5643,"context_line":"                ip_version\u003d4, default_prefixlen\u003d4, min_prefixlen\u003d4,"},{"line_number":5644,"context_line":"                max_prefixlen\u003d4, shared\u003dFalse, default_quota\u003d4,"},{"line_number":5645,"context_line":"                address_scope_id\u003d\u0027f\u0027, tenant_id\u003d\u0027dbcheck\u0027"},{"line_number":5646,"context_line":"            )"},{"line_number":5647,"context_line":"            ctx.session.add(subnetpool)"},{"line_number":5648,"context_line":"        return subnetpool"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba8a016a_1ac02f4f","line":5645,"in_reply_to":"ba8a016a_65e445ab","updated":"2015-11-20 03:54:09.000000000","message":"yes, a recent change got in. will update","commit_id":"b592c3b6ed47734d24375c1d06a8230cb32dc899"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"56ab0ee91c43bfe1d1b068b62f49ab537966d97c","unresolved":false,"context_lines":[{"line_number":5680,"context_line":"        spool \u003d self._make_subnetpool(ctx)"},{"line_number":5681,"context_line":"        self._test_standardattr_removed_on_obj_delete(ctx, spool)"},{"line_number":5682,"context_line":""},{"line_number":5683,"context_line":"    def test_standardattr_removed_on_port_delete(self):"},{"line_number":5684,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":5685,"context_line":"        network \u003d self._make_network(ctx)"},{"line_number":5686,"context_line":"        port \u003d self._make_port(ctx, network.id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_6e07e11d","line":5683,"updated":"2015-11-23 14:04:01.000000000","message":"(No action required) Curious why you test for those resource types but not all of them.","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"b27b77462c24741fd477ee806dca545fe52f17ad","unresolved":false,"context_lines":[{"line_number":5680,"context_line":"        spool \u003d self._make_subnetpool(ctx)"},{"line_number":5681,"context_line":"        self._test_standardattr_removed_on_obj_delete(ctx, spool)"},{"line_number":5682,"context_line":""},{"line_number":5683,"context_line":"    def test_standardattr_removed_on_port_delete(self):"},{"line_number":5684,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":5685,"context_line":"        network \u003d self._make_network(ctx)"},{"line_number":5686,"context_line":"        port \u003d self._make_port(ctx, network.id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_f6ce2a82","line":5683,"in_reply_to":"ba8a016a_6e07e11d","updated":"2015-11-23 22:06:14.000000000","message":"These were the ones I started with. I got lazy when I added the others and didn\u0027t add tests for them. :)","commit_id":"23d1f712096d859d9a51bf466ee5b33645245394"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"3a8aa24ac8828f81e9a2dd9c4fb3d6e819e04098","unresolved":false,"context_lines":[{"line_number":5634,"context_line":"        with ctx.session.begin():"},{"line_number":5635,"context_line":"            port \u003d models_v2.Port(network_id\u003dnetwork_id, mac_address\u003d\u00271\u0027,"},{"line_number":5636,"context_line":"                                  tenant_id\u003d\u0027dbcheck\u0027,"},{"line_number":5637,"context_line":"                                  admin_state_up\u003dTrue, status\u003d\"COOL\","},{"line_number":5638,"context_line":"                                  device_id\u003d\"devid\", device_owner\u003d\"me\")"},{"line_number":5639,"context_line":"            ctx.session.add(port)"},{"line_number":5640,"context_line":"        return port"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_ef787dc6","line":5637,"updated":"2015-11-24 09:58:03.000000000","message":"I like it cool :)","commit_id":"a33672a718dc70088055b906719e4980afcf8d7b"}]}
