)]}'
{"nova/api/openstack/compute/flavor_manage.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ca19206a285d763e558df988e8f6ba2b26fab970","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            req.cache_db_flavor(flavor)"},{"line_number":84,"context_line":"        except (exception.FlavorExists,"},{"line_number":85,"context_line":"                exception.FlavorIdExists,"},{"line_number":86,"context_line":"                exception.ObjectActionError) as err:"},{"line_number":87,"context_line":"            raise webob.exc.HTTPConflict(explanation\u003derr.format_message())"},{"line_number":88,"context_line":"        except exception.FlavorCreateFailed as err:"},{"line_number":89,"context_line":"            raise webob.exc.HTTPInternalServerError(explanation\u003d"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba0121b8_5a0b438e","line":86,"range":{"start_line":86,"start_character":16,"end_line":86,"end_character":43},"updated":"2016-03-30 20:26:30.000000000","message":"This should also be in the v2.0 API:\n\nhttps://github.com/openstack/nova/blob/master/nova/api/openstack/compute/legacy_v2/contrib/flavormanage.py#L88","commit_id":"ca2667536be29ae8879c4b9621fabf9d001ecece"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8e2b49b28413644f5f5c43353ec9bd08245ef46e","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            req.cache_db_flavor(flavor)"},{"line_number":84,"context_line":"        except (exception.FlavorExists,"},{"line_number":85,"context_line":"                exception.FlavorIdExists,"},{"line_number":86,"context_line":"                exception.ObjectActionError) as err:"},{"line_number":87,"context_line":"            raise webob.exc.HTTPConflict(explanation\u003derr.format_message())"},{"line_number":88,"context_line":"        except exception.FlavorCreateFailed as err:"},{"line_number":89,"context_line":"            raise webob.exc.HTTPInternalServerError(explanation\u003d"}],"source_content_type":"text/x-python","patch_set":27,"id":"ba0121b8_1de38534","line":86,"range":{"start_line":86,"start_character":16,"end_line":86,"end_character":43},"updated":"2016-03-30 20:36:21.000000000","message":"As discussed in IRC, let\u0027s:\n\n 1. Handle this in v2.0 also.\n 2. Handle this separately here and provide a specific message, like \"Unable to create flavor. Not all flavors have been migrated to the API database.\" - needs to be marked for translation also.","commit_id":"2db7e482d071590775618e07ebdabf030be07c92"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"80139604408a4b462cdbabf8fd0ae3fee5a21001","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        except (exception.FlavorExists,"},{"line_number":86,"context_line":"                exception.FlavorIdExists) as err:"},{"line_number":87,"context_line":"            raise webob.exc.HTTPConflict(explanation\u003derr.format_message())"},{"line_number":88,"context_line":"        except exception.ObjectActionError:"},{"line_number":89,"context_line":"            raise webob.exc.HTTPConflict(explanation\u003d_("},{"line_number":90,"context_line":"                \u0027Not all flavors have been migrated to the API database\u0027))"},{"line_number":91,"context_line":"        except exception.FlavorCreateFailed as err:"}],"source_content_type":"text/x-python","patch_set":28,"id":"ba0121b8_d5cc27bd","line":88,"updated":"2016-03-31 11:56:02.000000000","message":"well, creating a duplicate flavor was raising the same exception. That seems a nit but I\u0027d like to see other opinions there.","commit_id":"c845024e2fb5c36748fd5b953a1ddfe5657f1e8b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4531ef41b26be7ed091a471ca88f60388b99ddb4","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        except (exception.FlavorExists,"},{"line_number":86,"context_line":"                exception.FlavorIdExists) as err:"},{"line_number":87,"context_line":"            raise webob.exc.HTTPConflict(explanation\u003derr.format_message())"},{"line_number":88,"context_line":"        except exception.ObjectActionError:"},{"line_number":89,"context_line":"            raise webob.exc.HTTPConflict(explanation\u003d_("},{"line_number":90,"context_line":"                \u0027Not all flavors have been migrated to the API database\u0027))"},{"line_number":91,"context_line":"        except exception.FlavorCreateFailed as err:"}],"source_content_type":"text/x-python","patch_set":28,"id":"ba0121b8_506bfef0","line":88,"in_reply_to":"ba0121b8_c59112f3","updated":"2016-03-31 13:58:31.000000000","message":"If we weren\u0027t handling this before, we should be now, and I think a 409 is OK for trying to create a duplicate flavor.","commit_id":"c845024e2fb5c36748fd5b953a1ddfe5657f1e8b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7f36d21fa3fa17cbb3437e5e57456ed5adc19421","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        except (exception.FlavorExists,"},{"line_number":86,"context_line":"                exception.FlavorIdExists) as err:"},{"line_number":87,"context_line":"            raise webob.exc.HTTPConflict(explanation\u003derr.format_message())"},{"line_number":88,"context_line":"        except exception.ObjectActionError:"},{"line_number":89,"context_line":"            raise webob.exc.HTTPConflict(explanation\u003d_("},{"line_number":90,"context_line":"                \u0027Not all flavors have been migrated to the API database\u0027))"},{"line_number":91,"context_line":"        except exception.FlavorCreateFailed as err:"}],"source_content_type":"text/x-python","patch_set":28,"id":"ba0121b8_c59112f3","line":88,"in_reply_to":"ba0121b8_d5cc27bd","updated":"2016-03-31 13:42:11.000000000","message":"We discussed this on IRC last night and came up with this. The 409 seems right to me. I\u0027m not sure what else we would raise, other than a generic 400.","commit_id":"c845024e2fb5c36748fd5b953a1ddfe5657f1e8b"}],"nova/objects/flavor.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"726bcb1b4fc466cad255274cc298ef91137f5b22","unresolved":false,"context_lines":[{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    @staticmethod"},{"line_number":463,"context_line":"    def _ensure_migrated(context):"},{"line_number":464,"context_line":"        return _ensure_migrated(context)"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"    @base.remotable"},{"line_number":467,"context_line":"    def create(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba0121b8_aded9527","line":464,"updated":"2016-03-28 17:28:28.000000000","message":"Gotcha.","commit_id":"08554188bb18224b9d3fb69818cce7b7578ac165"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"52e7155e1bb147cde2286365795303d3b4831959","unresolved":false,"context_lines":[{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    @staticmethod"},{"line_number":463,"context_line":"    def _ensure_migrated(context):"},{"line_number":464,"context_line":"        return _ensure_migrated(context)"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"    @base.remotable"},{"line_number":467,"context_line":"    def create(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"da0c15f0_d882fb51","line":464,"updated":"2016-03-27 16:18:19.000000000","message":"Might be good to add a quick comment noting this is here because of the ForcedFlavor fixture...","commit_id":"08554188bb18224b9d3fb69818cce7b7578ac165"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8587b6d50b4714072cd7986ff74ab20a23db1ab1","unresolved":false,"context_lines":[{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    @staticmethod"},{"line_number":463,"context_line":"    def _ensure_migrated(context):"},{"line_number":464,"context_line":"        return _ensure_migrated(context)"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"    @base.remotable"},{"line_number":467,"context_line":"    def create(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"da0c15f0_7062cdae","line":464,"in_reply_to":"da0c15f0_d882fb51","updated":"2016-03-28 14:02:06.000000000","message":"It\u0027s not actually. All of these DB operations should be staticmethods on the object. However, multiple cascading bugs between stubout and oslo.db are preventing this from working on py2 and py3 the same way. So, I\u0027ve got these static proxies here so that the tests and code are written the way we want them. When the bugs are landed in those projects, we can move the module-level functions into here and avoid the seemingly-useless static jumps.","commit_id":"08554188bb18224b9d3fb69818cce7b7578ac165"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"ac3eabbfcedee5a98c668852c1462e86e687054d","unresolved":false,"context_lines":[{"line_number":471,"context_line":"            raise exception.ObjectActionError(action\u003d\u0027create\u0027,"},{"line_number":472,"context_line":"                                              reason\u003d\u0027already created\u0027)"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        if not self._ensure_migrated(self._context):"},{"line_number":475,"context_line":"            raise exception.ObjectActionError("},{"line_number":476,"context_line":"                action\u003d\u0027create\u0027,"},{"line_number":477,"context_line":"                reason\u003d\u0027main database still contains flavors\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba0121b8_28f0db66","line":474,"updated":"2016-03-30 15:21:39.000000000","message":"At some point we\u0027ll want to remove this. If you respin it would be good to add a comment about that, even if we don\u0027t have a definite point to remove it by yet.","commit_id":"b2087631d67c29fb22a3ab202819d9e91adc7cf9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8b93dd720e512f711fea2fe4174b1c3a18035d71","unresolved":false,"context_lines":[{"line_number":475,"context_line":"        # all flavors have been migrated, we can remove this. Ideally"},{"line_number":476,"context_line":"        # in Ocata with a blocker migration to be sure."},{"line_number":477,"context_line":"        if not self._ensure_migrated(self._context):"},{"line_number":478,"context_line":"            raise exception.ObjectActionError("},{"line_number":479,"context_line":"                action\u003d\u0027create\u0027,"},{"line_number":480,"context_line":"                reason\u003d\u0027main database still contains flavors\u0027)"},{"line_number":481,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba0121b8_9e5672cc","line":478,"updated":"2016-03-30 19:01:15.000000000","message":"This is going to result in a 500 response when someone tries to create a flavor and they aren\u0027t all migrated yet. Shouldn\u0027t we handle that in the REST API?\n\nhttps://github.com/openstack/nova/blob/master/nova/api/openstack/compute/flavor_manage.py#L76\n\nShouldn\u0027t we at least think about a release note for this?","commit_id":"f76e21cc2b962e9dd730cfd8228acec5fa499d27"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ca19206a285d763e558df988e8f6ba2b26fab970","unresolved":false,"context_lines":[{"line_number":477,"context_line":"        if not self._ensure_migrated(self._context):"},{"line_number":478,"context_line":"            raise exception.ObjectActionError("},{"line_number":479,"context_line":"                action\u003d\u0027create\u0027,"},{"line_number":480,"context_line":"                reason\u003d\u0027main database still contains flavors\u0027)"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"        updates \u003d self.obj_get_changes()"},{"line_number":483,"context_line":"        expected_attrs \u003d []"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba0121b8_da3e3327","line":480,"range":{"start_line":480,"start_character":24,"end_line":480,"end_character":60},"updated":"2016-03-30 20:26:30.000000000","message":"I think we could get by without a release note if this was more clear, since this is what you\u0027re going to get back in the 409 error in the API.\n\nMaybe we should say,\n\n\"Main (nova) database still contains flavors. You must run \u0027nova-manage db online_data_migrations\u0027 before you can create new flavors.\"","commit_id":"ca2667536be29ae8879c4b9621fabf9d001ecece"}],"nova/test.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"ac3eabbfcedee5a98c668852c1462e86e687054d","unresolved":false,"context_lines":[{"line_number":217,"context_line":"            self.useFixture(nova_fixtures.Database(database\u003d\u0027api\u0027))"},{"line_number":218,"context_line":"            # NOTE(danms): Flavors are encoded in our original migration"},{"line_number":219,"context_line":"            # which means we have no real option other than to migrate them"},{"line_number":220,"context_line":"            # onlineish every time we build a new database (for now)."},{"line_number":221,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":222,"context_line":"            flavor_obj.migrate_flavors(ctxt, 100, hard_delete\u003dTrue)"},{"line_number":223,"context_line":"        elif not self.USES_DB_SELF:"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba0121b8_68b49381","line":220,"updated":"2016-03-30 15:21:39.000000000","message":":(","commit_id":"b2087631d67c29fb22a3ab202819d9e91adc7cf9"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"80139604408a4b462cdbabf8fd0ae3fee5a21001","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        if self.USES_DB:"},{"line_number":216,"context_line":"            self.useFixture(nova_fixtures.Database())"},{"line_number":217,"context_line":"            self.useFixture(nova_fixtures.Database(database\u003d\u0027api\u0027))"},{"line_number":218,"context_line":"            # NOTE(danms): Flavors are encoded in our original migration"},{"line_number":219,"context_line":"            # which means we have no real option other than to migrate them"},{"line_number":220,"context_line":"            # onlineish every time we build a new database (for now)."},{"line_number":221,"context_line":"            ctxt \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":28,"id":"ba0121b8_5515b7e2","line":218,"range":{"start_line":218,"start_character":14,"end_line":218,"end_character":18},"updated":"2016-03-31 11:56:02.000000000","message":"maybe a FIXME \u0027d be better, or trying to see when we could stop using the havana migration... :-)\n\nTBH, I\u0027m really happy to see the havana migration retiring :-)","commit_id":"c845024e2fb5c36748fd5b953a1ddfe5657f1e8b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4531ef41b26be7ed091a471ca88f60388b99ddb4","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        if self.USES_DB:"},{"line_number":216,"context_line":"            self.useFixture(nova_fixtures.Database())"},{"line_number":217,"context_line":"            self.useFixture(nova_fixtures.Database(database\u003d\u0027api\u0027))"},{"line_number":218,"context_line":"            # NOTE(danms): Flavors are encoded in our original migration"},{"line_number":219,"context_line":"            # which means we have no real option other than to migrate them"},{"line_number":220,"context_line":"            # onlineish every time we build a new database (for now)."},{"line_number":221,"context_line":"            ctxt \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":28,"id":"ba0121b8_6b39f7d6","line":218,"range":{"start_line":218,"start_character":14,"end_line":218,"end_character":18},"in_reply_to":"ba0121b8_0565ca1c","updated":"2016-03-31 13:58:31.000000000","message":"If by polled you mean asking a couple of people in the ops channel at the time, yes. :) We should probably still make them aware on the operators ML.","commit_id":"c845024e2fb5c36748fd5b953a1ddfe5657f1e8b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7f36d21fa3fa17cbb3437e5e57456ed5adc19421","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        if self.USES_DB:"},{"line_number":216,"context_line":"            self.useFixture(nova_fixtures.Database())"},{"line_number":217,"context_line":"            self.useFixture(nova_fixtures.Database(database\u003d\u0027api\u0027))"},{"line_number":218,"context_line":"            # NOTE(danms): Flavors are encoded in our original migration"},{"line_number":219,"context_line":"            # which means we have no real option other than to migrate them"},{"line_number":220,"context_line":"            # onlineish every time we build a new database (for now)."},{"line_number":221,"context_line":"            ctxt \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":28,"id":"ba0121b8_0565ca1c","line":218,"range":{"start_line":218,"start_character":14,"end_line":218,"end_character":18},"in_reply_to":"ba0121b8_5515b7e2","updated":"2016-03-31 13:42:11.000000000","message":"Yep, we\u0027re going to need to pull the default flavors out of that migration following this. We polled the operators on that topic recently.","commit_id":"c845024e2fb5c36748fd5b953a1ddfe5657f1e8b"}],"nova/tests/unit/api/openstack/compute/test_flavor_manage.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8385bbc6c54a8506c8a766b80475e1ea34f62659","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        req.method \u003d \u0027POST\u0027"},{"line_number":180,"context_line":"        req.body \u003d jsonutils.dump_as_bytes({})"},{"line_number":181,"context_line":"        res \u003d req.get_response(self.app)"},{"line_number":182,"context_line":"        self.assertEqual(400, res.status_code)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def _create_flavor_success_case(self, body, req\u003dNone):"},{"line_number":185,"context_line":"        req \u003d req if req else self._get_http_request(url\u003dself.base_url)"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba0121b8_599d14bb","line":182,"updated":"2016-03-30 19:21:27.000000000","message":"As discussed in IRC, this is wrong, it should be a 500, but the fake_create stub in the setup is masking something here.","commit_id":"f76e21cc2b962e9dd730cfd8228acec5fa499d27"}],"nova/tests/unit/conductor/test_conductor.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"ac3eabbfcedee5a98c668852c1462e86e687054d","unresolved":false,"context_lines":[{"line_number":405,"context_line":"    @mock.patch(\u0027nova.objects.Instance.refresh\u0027)"},{"line_number":406,"context_line":"    def test_build_instances(self, mock_refresh):"},{"line_number":407,"context_line":"        instance_type \u003d flavors.get_default_flavor()"},{"line_number":408,"context_line":"        # NOTE(danms): I don\u0027t know why this is required"},{"line_number":409,"context_line":"        instance_type.created_at \u003d None"},{"line_number":410,"context_line":"        instances \u003d [objects.Instance(context\u003dself.context,"},{"line_number":411,"context_line":"                                      id\u003di,"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba0121b8_8bf801c5","line":408,"updated":"2016-03-30 15:21:39.000000000","message":"lol. What fails if it\u0027s not here?","commit_id":"b2087631d67c29fb22a3ab202819d9e91adc7cf9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"942ad55d5ae9d881c567404ea924c0e97675aecd","unresolved":false,"context_lines":[{"line_number":405,"context_line":"    @mock.patch(\u0027nova.objects.Instance.refresh\u0027)"},{"line_number":406,"context_line":"    def test_build_instances(self, mock_refresh):"},{"line_number":407,"context_line":"        instance_type \u003d flavors.get_default_flavor()"},{"line_number":408,"context_line":"        # NOTE(danms): I don\u0027t know why this is required"},{"line_number":409,"context_line":"        instance_type.created_at \u003d None"},{"line_number":410,"context_line":"        instances \u003d [objects.Instance(context\u003dself.context,"},{"line_number":411,"context_line":"                                      id\u003di,"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba0121b8_d146264e","line":408,"in_reply_to":"ba0121b8_8bf801c5","updated":"2016-03-30 15:46:13.000000000","message":"Heh, I should update this, I think I know now.","commit_id":"b2087631d67c29fb22a3ab202819d9e91adc7cf9"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"2df82b01219e4dfa694fedc1c7330759f5559bbf","unresolved":false,"context_lines":[{"line_number":405,"context_line":"    @mock.patch(\u0027nova.objects.Instance.refresh\u0027)"},{"line_number":406,"context_line":"    def test_build_instances(self, mock_refresh):"},{"line_number":407,"context_line":"        instance_type \u003d flavors.get_default_flavor()"},{"line_number":408,"context_line":"        # NOTE(danms): Avoid datetime timezone issues with converted flavors"},{"line_number":409,"context_line":"        instance_type.created_at \u003d None"},{"line_number":410,"context_line":"        instances \u003d [objects.Instance(context\u003dself.context,"},{"line_number":411,"context_line":"                                      id\u003di,"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba0121b8_11cede2d","line":408,"updated":"2016-03-30 15:50:15.000000000","message":"*blink* wonder why we\u0027re dealing with timezones at all; code bug?  *shrug*","commit_id":"3e759a2bb5868eb691264c74d028ca38f32ac3bd"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e786699c90d5058089c3d7760b557428992210fe","unresolved":false,"context_lines":[{"line_number":405,"context_line":"    @mock.patch(\u0027nova.objects.Instance.refresh\u0027)"},{"line_number":406,"context_line":"    def test_build_instances(self, mock_refresh):"},{"line_number":407,"context_line":"        instance_type \u003d flavors.get_default_flavor()"},{"line_number":408,"context_line":"        # NOTE(danms): Avoid datetime timezone issues with converted flavors"},{"line_number":409,"context_line":"        instance_type.created_at \u003d None"},{"line_number":410,"context_line":"        instances \u003d [objects.Instance(context\u003dself.context,"},{"line_number":411,"context_line":"                                      id\u003di,"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba0121b8_f17feaa8","line":408,"in_reply_to":"ba0121b8_11cede2d","updated":"2016-03-30 15:51:54.000000000","message":"Objects use tz-aware datetimes and the db objects are tz-unaware.\n\nIf we try to compare the two below, we\u0027ll get tz-related failures. So we either handle them or just don\u0027t care about comparing timestamps since we don\u0027t really need to anyway.","commit_id":"3e759a2bb5868eb691264c74d028ca38f32ac3bd"}],"nova/tests/unit/objects/test_flavor.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"52e7155e1bb147cde2286365795303d3b4831959","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        self.assertEqual([\u0027project-1\u0027, \u0027project-3\u0027], flavor.projects)"},{"line_number":325,"context_line":"        mock_add.assert_called_once_with(self.context, 123, \u0027project-3\u0027)"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    @mock.patch(\u0027nova.objects.Flavor._flavor_create\u0027)"},{"line_number":328,"context_line":"    @mock.patch(\u0027nova.db.flavor_extra_specs_delete\u0027)"},{"line_number":329,"context_line":"    @mock.patch(\u0027nova.db.flavor_extra_specs_update_or_create\u0027)"},{"line_number":330,"context_line":"    def test_save_deleted_extra_specs(self, mock_update, mock_delete,"}],"source_content_type":"text/x-python","patch_set":15,"id":"da0c15f0_98ba4322","side":"PARENT","line":327,"updated":"2016-03-27 16:18:19.000000000","message":"Any reason to remove this unit test?","commit_id":"1e163bb3873e1329b76b452ed0760e8f98eeab1d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"726bcb1b4fc466cad255274cc298ef91137f5b22","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        self.assertEqual([\u0027project-1\u0027, \u0027project-3\u0027], flavor.projects)"},{"line_number":325,"context_line":"        mock_add.assert_called_once_with(self.context, 123, \u0027project-3\u0027)"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    @mock.patch(\u0027nova.objects.Flavor._flavor_create\u0027)"},{"line_number":328,"context_line":"    @mock.patch(\u0027nova.db.flavor_extra_specs_delete\u0027)"},{"line_number":329,"context_line":"    @mock.patch(\u0027nova.db.flavor_extra_specs_update_or_create\u0027)"},{"line_number":330,"context_line":"    def test_save_deleted_extra_specs(self, mock_update, mock_delete,"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba0121b8_cde8c919","side":"PARENT","line":327,"updated":"2016-03-28 17:28:28.000000000","message":"Cool.","commit_id":"1e163bb3873e1329b76b452ed0760e8f98eeab1d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8587b6d50b4714072cd7986ff74ab20a23db1ab1","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        self.assertEqual([\u0027project-1\u0027, \u0027project-3\u0027], flavor.projects)"},{"line_number":325,"context_line":"        mock_add.assert_called_once_with(self.context, 123, \u0027project-3\u0027)"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    @mock.patch(\u0027nova.objects.Flavor._flavor_create\u0027)"},{"line_number":328,"context_line":"    @mock.patch(\u0027nova.db.flavor_extra_specs_delete\u0027)"},{"line_number":329,"context_line":"    @mock.patch(\u0027nova.db.flavor_extra_specs_update_or_create\u0027)"},{"line_number":330,"context_line":"    def test_save_deleted_extra_specs(self, mock_update, mock_delete,"}],"source_content_type":"text/x-python","patch_set":15,"id":"da0c15f0_90832156","side":"PARENT","line":327,"in_reply_to":"da0c15f0_98ba4322","updated":"2016-03-28 14:02:06.000000000","message":"It\u0027s covered by the save test case. However, it was the beginning of cleanup that I don\u0027t want to do in this patch, so I\u0027ll put it back and fix it so it works and then do the bulk cleanup later.","commit_id":"1e163bb3873e1329b76b452ed0760e8f98eeab1d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"52e7155e1bb147cde2286365795303d3b4831959","unresolved":false,"context_lines":[{"line_number":447,"context_line":"        db_flavors \u003d [fake_flavor]"},{"line_number":448,"context_line":"        mock_get.return_value \u003d db_flavors"},{"line_number":449,"context_line":"        flavors \u003d objects.FlavorList.get_all(self.context)"},{"line_number":450,"context_line":"        self.assertEqual(len(db_flavors) + len(api_flavors), len(flavors))"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"    def test_get_all_from_db_with_limit(self):"},{"line_number":453,"context_line":"        flavors \u003d objects.FlavorList.get_all(self.context,"}],"source_content_type":"text/x-python","patch_set":15,"id":"da0c15f0_78b5af2f","line":450,"updated":"2016-03-27 16:18:19.000000000","message":"The above is more than a little confusing... Perhaps you could add a quick comment explaining what precisely is happening?","commit_id":"08554188bb18224b9d3fb69818cce7b7578ac165"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8587b6d50b4714072cd7986ff74ab20a23db1ab1","unresolved":false,"context_lines":[{"line_number":447,"context_line":"        db_flavors \u003d [fake_flavor]"},{"line_number":448,"context_line":"        mock_get.return_value \u003d db_flavors"},{"line_number":449,"context_line":"        flavors \u003d objects.FlavorList.get_all(self.context)"},{"line_number":450,"context_line":"        self.assertEqual(len(db_flavors) + len(api_flavors), len(flavors))"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"    def test_get_all_from_db_with_limit(self):"},{"line_number":453,"context_line":"        flavors \u003d objects.FlavorList.get_all(self.context,"}],"source_content_type":"text/x-python","patch_set":15,"id":"da0c15f0_f5ac0f37","line":450,"in_reply_to":"da0c15f0_78b5af2f","updated":"2016-03-28 14:02:06.000000000","message":"It\u0027s doing the same thing as it was before, which is one real query and one mocked query, making sure that they merge for the result. The API and main DBs are just trading places now.\n\nBut yeah, I\u0027ll add comments.","commit_id":"08554188bb18224b9d3fb69818cce7b7578ac165"}],"releasenotes/notes/flavors-moved-to-api-database-b33489ed3b1b246b.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a849232d6a44fdaf17006e3d175387d4665fdb95","unresolved":false,"context_lines":[{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - Flavors are being moved to the API database for CellsV2. In this"},{"line_number":4,"context_line":"    release, the online data migrations will move any flavors you have"},{"line_number":5,"context_line":"    in your main database to the API database, retaining all"},{"line_number":6,"context_line":"    attributes. Until this is complete, new attempts to create flavors"},{"line_number":7,"context_line":"    will return an HTTP 409 to avoid creating flavors in one place that"},{"line_number":8,"context_line":"    may conflict with flavors you already have and are yet to be"}],"source_content_type":"text/x-yaml","patch_set":27,"id":"ba0121b8_bd3ff985","line":5,"range":{"start_line":5,"start_character":12,"end_line":5,"end_character":16},"updated":"2016-03-30 20:37:37.000000000","message":"nit: we might want to start calling this the \u0027cell\u0027 database. It\u0027s starting to get confusing when we\u0027re talking about the api vs \u0027nova\u0027 db.","commit_id":"2db7e482d071590775618e07ebdabf030be07c92"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"87b629a6037c25744d83e1d4f494c5573ee9a9b2","unresolved":false,"context_lines":[{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - Flavors are being moved to the API database for CellsV2. In this"},{"line_number":4,"context_line":"    release, the online data migrations will move any flavors you have"},{"line_number":5,"context_line":"    in your main database to the API database, retaining all"},{"line_number":6,"context_line":"    attributes. Until this is complete, new attempts to create flavors"},{"line_number":7,"context_line":"    will return an HTTP 409 to avoid creating flavors in one place that"},{"line_number":8,"context_line":"    may conflict with flavors you already have and are yet to be"}],"source_content_type":"text/x-yaml","patch_set":27,"id":"ba0121b8_c3cf6e27","line":5,"range":{"start_line":5,"start_character":12,"end_line":5,"end_character":16},"in_reply_to":"ba0121b8_1df8a548","updated":"2016-03-30 21:42:48.000000000","message":"That\u0027s fair.","commit_id":"2db7e482d071590775618e07ebdabf030be07c92"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"aa6c8a5eaa55a50ce6e18da5357d47a290a534ab","unresolved":false,"context_lines":[{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - Flavors are being moved to the API database for CellsV2. In this"},{"line_number":4,"context_line":"    release, the online data migrations will move any flavors you have"},{"line_number":5,"context_line":"    in your main database to the API database, retaining all"},{"line_number":6,"context_line":"    attributes. Until this is complete, new attempts to create flavors"},{"line_number":7,"context_line":"    will return an HTTP 409 to avoid creating flavors in one place that"},{"line_number":8,"context_line":"    may conflict with flavors you already have and are yet to be"}],"source_content_type":"text/x-yaml","patch_set":27,"id":"ba0121b8_1df8a548","line":5,"range":{"start_line":5,"start_character":12,"end_line":5,"end_character":16},"in_reply_to":"ba0121b8_bd3ff985","updated":"2016-03-30 20:49:29.000000000","message":"Well, at this point, there is no more than one of these. So I also don\u0027t want to freak out non-cells users, or make them think that this doesn\u0027t affect them, because it does.","commit_id":"2db7e482d071590775618e07ebdabf030be07c92"}]}
