)]}'
{"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"90c2862adfcbe8c938f256d40097d337ae7d8e07","unresolved":false,"context_lines":[{"line_number":4960,"context_line":"            for spec_ref in spec_refs:"},{"line_number":4961,"context_line":"                key \u003d spec_ref[\"key\"]"},{"line_number":4962,"context_line":"                existing_keys.add(key)"},{"line_number":4963,"context_line":"                with main_context_manager.writer.savepoint.using(context):"},{"line_number":4964,"context_line":"                    spec_ref.update({\"value\": specs[key]})"},{"line_number":4965,"context_line":"                    context.session.flush()"},{"line_number":4966,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_c12205a3","line":4963,"updated":"2016-01-30 09:25:52.000000000","message":"Sorry, I am not sure what is happening here.\n\nIs the idea we have to flush the write so we can then read?","commit_id":"cd123662b692bd462cef217a7bb89a6e441fe01a"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"f5f04139fda58ecb74339a823bea291659fd869f","unresolved":false,"context_lines":[{"line_number":4960,"context_line":"            for spec_ref in spec_refs:"},{"line_number":4961,"context_line":"                key \u003d spec_ref[\"key\"]"},{"line_number":4962,"context_line":"                existing_keys.add(key)"},{"line_number":4963,"context_line":"                with main_context_manager.writer.savepoint.using(context):"},{"line_number":4964,"context_line":"                    spec_ref.update({\"value\": specs[key]})"},{"line_number":4965,"context_line":"                    context.session.flush()"},{"line_number":4966,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_740bad2a","line":4963,"in_reply_to":"7a5de9d1_c12205a3","updated":"2016-02-01 12:29:00.000000000","message":"The situation is similar to the \u0027instance_tags\u0027 patch https://review.openstack.org/#/c/244058/","commit_id":"cd123662b692bd462cef217a7bb89a6e441fe01a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"37d9d2fad16d66caed0680b368faa1a88378a45d","unresolved":false,"context_lines":[{"line_number":4934,"context_line":"            for spec_ref in spec_refs:"},{"line_number":4935,"context_line":"                key \u003d spec_ref[\"key\"]"},{"line_number":4936,"context_line":"                existing_keys.add(key)"},{"line_number":4937,"context_line":"                with main_context_manager.writer.savepoint.using(context):"},{"line_number":4938,"context_line":"                    spec_ref.update({\"value\": specs[key]})"},{"line_number":4939,"context_line":""},{"line_number":4940,"context_line":"            for key, value in specs.items():"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a5ae5dd_5ef8b5e5","line":4937,"updated":"2016-02-03 15:31:46.000000000","message":"Nit: its tempting to describe why the savepoint is needed, but I think I understand why, and at least we test for it.","commit_id":"ad3f73c1b6cb7fa5d2b1170c9a1306c771841792"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"f5143826831407b2f4d8cef9f13693b35312e37c","unresolved":false,"context_lines":[{"line_number":4934,"context_line":"            for spec_ref in spec_refs:"},{"line_number":4935,"context_line":"                key \u003d spec_ref[\"key\"]"},{"line_number":4936,"context_line":"                existing_keys.add(key)"},{"line_number":4937,"context_line":"                with main_context_manager.writer.savepoint.using(context):"},{"line_number":4938,"context_line":"                    spec_ref.update({\"value\": specs[key]})"},{"line_number":4939,"context_line":""},{"line_number":4940,"context_line":"            for key, value in specs.items():"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a5ae5dd_86657f46","line":4937,"in_reply_to":"5a5ae5dd_5ef8b5e5","updated":"2016-02-03 16:50:47.000000000","message":"Adding a comment here, and really every use of savepoint, would be helpful.  In a followup.","commit_id":"ad3f73c1b6cb7fa5d2b1170c9a1306c771841792"}],"nova/tests/unit/api/openstack/compute/test_flavors_extra_specs.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"f5143826831407b2f4d8cef9f13693b35312e37c","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def test_create_flavor_db_duplicate(self):"},{"line_number":192,"context_line":"        def fake_instance_type_extra_specs_update_or_create(*args, **kwargs):"},{"line_number":193,"context_line":"            raise exception.FlavorExtraSpecUpdateCreateFailed(id\u003d\u00271\u0027,"},{"line_number":194,"context_line":"                                                              retries\u003d5)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        self.stubs.Set(nova.db,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a5ae5dd_46a46756","line":193,"updated":"2016-02-03 16:50:47.000000000","message":"This change makes no sense to me and seems out of place in this patch.  The id for the flavor is an integer in the db so keeping it as an int here would be proper.","commit_id":"ad3f73c1b6cb7fa5d2b1170c9a1306c771841792"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"f9139105615bc1b0f2e14f1c2e179481ca701da3","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def test_create_flavor_db_duplicate(self):"},{"line_number":192,"context_line":"        def fake_instance_type_extra_specs_update_or_create(*args, **kwargs):"},{"line_number":193,"context_line":"            raise exception.FlavorExtraSpecUpdateCreateFailed(id\u003d\u00271\u0027,"},{"line_number":194,"context_line":"                                                              retries\u003d5)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        self.stubs.Set(nova.db,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a5ae5dd_20ee81b4","line":193,"in_reply_to":"5a5ae5dd_1842e3ae","updated":"2016-02-05 14:34:16.000000000","message":"I see. This is confusing because it\u0027s using flavorid rather than id. I\u0027m fine with this change being made in a separate patch, and updating \u0027id\u0027 in the exception string to be \u0027flavorid\u0027.","commit_id":"ad3f73c1b6cb7fa5d2b1170c9a1306c771841792"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"8464635492dff80ce0f2fb53f7e4c126e26d8267","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def test_create_flavor_db_duplicate(self):"},{"line_number":192,"context_line":"        def fake_instance_type_extra_specs_update_or_create(*args, **kwargs):"},{"line_number":193,"context_line":"            raise exception.FlavorExtraSpecUpdateCreateFailed(id\u003d\u00271\u0027,"},{"line_number":194,"context_line":"                                                              retries\u003d5)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        self.stubs.Set(nova.db,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a5ae5dd_ddef5de7","line":193,"in_reply_to":"5a5ae5dd_46a46756","updated":"2016-02-05 12:10:25.000000000","message":"Oh, good point.","commit_id":"ad3f73c1b6cb7fa5d2b1170c9a1306c771841792"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"1c72ca84c99cca76408789f69a544f36fd165885","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def test_create_flavor_db_duplicate(self):"},{"line_number":192,"context_line":"        def fake_instance_type_extra_specs_update_or_create(*args, **kwargs):"},{"line_number":193,"context_line":"            raise exception.FlavorExtraSpecUpdateCreateFailed(id\u003d\u00271\u0027,"},{"line_number":194,"context_line":"                                                              retries\u003d5)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        self.stubs.Set(nova.db,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a5ae5dd_1842e3ae","line":193,"in_reply_to":"5a5ae5dd_ddef5de7","updated":"2016-02-05 12:44:35.000000000","message":"here https://github.com/openstack/nova/blob/master/nova/db/sqlalchemy/api.py#L4971-L4972 flavor_id is really a string https://github.com/openstack/nova/blob/master/nova/db/sqlalchemy/models.py#L413, that\u0027s it was changed.\n\nTODO: in other patch","commit_id":"ad3f73c1b6cb7fa5d2b1170c9a1306c771841792"}]}
