)]}'
{"nova/tests/unit/db/test_sqlalchemy_migration.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"bbde50406734dcfdfb9539201f53159fcc954d18","unresolved":false,"context_lines":[{"line_number":256,"context_line":"                                 local_gb_used\u003d5, hypervisor_type\u003d\u0027HyperDanVM\u0027,"},{"line_number":257,"context_line":"                                 hypervisor_version\u003d\u002734\u0027, cpu_info\u003d\u0027foo\u0027)"},{"line_number":258,"context_line":"        cn.create()"},{"line_number":259,"context_line":"        db_api.compute_node_update(self.context, cn.id, {\u0027uuid\u0027: None})"},{"line_number":260,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":261,"context_line":"                          self.migration.upgrade, self.engine)"},{"line_number":262,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1af94dfe_cb398143","line":259,"updated":"2016-03-16 20:22:54.000000000","message":"Heh, sneaky. :)","commit_id":"4d0915568a1011ddee7317ddfb237be0803e7790"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7cb4fc5027f96bf0399c45e18e8df8538df01cde","unresolved":false,"context_lines":[{"line_number":256,"context_line":"                                 local_gb_used\u003d5, hypervisor_type\u003d\u0027HyperDanVM\u0027,"},{"line_number":257,"context_line":"                                 hypervisor_version\u003d\u002734\u0027, cpu_info\u003d\u0027foo\u0027)"},{"line_number":258,"context_line":"        cn.create()"},{"line_number":259,"context_line":"        db_api.compute_node_update(self.context, cn.id, {\u0027uuid\u0027: None})"},{"line_number":260,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":261,"context_line":"                          self.migration.upgrade, self.engine)"},{"line_number":262,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1af94dfe_913b289c","line":259,"in_reply_to":"1af94dfe_cb398143","updated":"2016-03-16 21:07:58.000000000","message":"Yeah, it\u0027s a bit hacky for getting an older ComputeNode but I feel it\u0027s the only possibility because _from_db_object() creates the uuid...\n\nor should we just call db_compute_node_create() after using obj.obj_to_primitive using the target like 1.15 ?","commit_id":"4d0915568a1011ddee7317ddfb237be0803e7790"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"bbde50406734dcfdfb9539201f53159fcc954d18","unresolved":false,"context_lines":[{"line_number":276,"context_line":"                                  \u0027product_id\u0027: \u0027456\u0027,"},{"line_number":277,"context_line":"                                  \u0027dev_type\u0027: \u0027foo\u0027,"},{"line_number":278,"context_line":"                                  \u0027label\u0027: \u0027foobar\u0027,"},{"line_number":279,"context_line":"                                  \u0027status\u0027: \u0027whatisthis?\u0027})"},{"line_number":280,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":281,"context_line":"                          self.migration.upgrade, self.engine)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1af94dfe_2b4105aa","line":279,"updated":"2016-03-16 20:22:54.000000000","message":"How do we know a PCI address exists?","commit_id":"4d0915568a1011ddee7317ddfb237be0803e7790"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2dc6b5802e05c4ccba95d0c0a0d1c5b21ab2b5e2","unresolved":false,"context_lines":[{"line_number":276,"context_line":"                                  \u0027product_id\u0027: \u0027456\u0027,"},{"line_number":277,"context_line":"                                  \u0027dev_type\u0027: \u0027foo\u0027,"},{"line_number":278,"context_line":"                                  \u0027label\u0027: \u0027foobar\u0027,"},{"line_number":279,"context_line":"                                  \u0027status\u0027: \u0027whatisthis?\u0027})"},{"line_number":280,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":281,"context_line":"                          self.migration.upgrade, self.engine)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1af94dfe_71f3fcd6","line":279,"in_reply_to":"1af94dfe_268bfcc4","updated":"2016-03-16 21:08:54.000000000","message":"see my comment above, maybe updating the SQL API directly using a primitive object should be cool ?","commit_id":"4d0915568a1011ddee7317ddfb237be0803e7790"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4a43cd1a6c299eb2edee975f7c8d0292ae0f71b1","unresolved":false,"context_lines":[{"line_number":276,"context_line":"                                  \u0027product_id\u0027: \u0027456\u0027,"},{"line_number":277,"context_line":"                                  \u0027dev_type\u0027: \u0027foo\u0027,"},{"line_number":278,"context_line":"                                  \u0027label\u0027: \u0027foobar\u0027,"},{"line_number":279,"context_line":"                                  \u0027status\u0027: \u0027whatisthis?\u0027})"},{"line_number":280,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":281,"context_line":"                          self.migration.upgrade, self.engine)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1af94dfe_268bfcc4","line":279,"in_reply_to":"1af94dfe_2b4105aa","updated":"2016-03-16 20:53:21.000000000","message":"Yeah, if I\u0027m on the same page, don\u0027t we need to do a PciDevice.create first before trying the update?","commit_id":"4d0915568a1011ddee7317ddfb237be0803e7790"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4d0961b54037d1fdfb737c6195c766c6db3db67c","unresolved":false,"context_lines":[{"line_number":276,"context_line":"                                  \u0027product_id\u0027: \u0027456\u0027,"},{"line_number":277,"context_line":"                                  \u0027dev_type\u0027: \u0027foo\u0027,"},{"line_number":278,"context_line":"                                  \u0027label\u0027: \u0027foobar\u0027,"},{"line_number":279,"context_line":"                                  \u0027status\u0027: \u0027whatisthis?\u0027})"},{"line_number":280,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":281,"context_line":"                          self.migration.upgrade, self.engine)"}],"source_content_type":"text/x-python","patch_set":7,"id":"da0c15f0_a9dd5b16","line":279,"in_reply_to":"1af94dfe_71f3fcd6","updated":"2016-03-25 16:20:08.000000000","message":"Sadly, like the rest of the PCI stuff, the pci_device_update() method is wildly out of sync with the rest of things. If you look, the update method actually creates, only if the thing doesn\u0027t already exist:\n\n https://github.com/openstack/nova/blob/master/nova/db/sqlalchemy/api.py#L6773\n\nIt\u0027s super confusing and took me a bit to figure out. So this is actually creating this device in the database, setting us up to trip over the issue in the migrate step below.","commit_id":"4d0915568a1011ddee7317ddfb237be0803e7790"}]}
