)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"e0e80c6b43b0291535a76aabcc364bdc87b3b379","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In Pike, we re-architected quotas to count resources for quota usage"},{"line_number":10,"context_line":"instead of tracking it separately and stopped using reservations."},{"line_number":11,"context_line":"During an upgrade to Queens, old computes (Pike) will being using"},{"line_number":12,"context_line":"new-style quotas and so the old-style quotas code is no longer needed."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Ie01ab1c3a1219f1d123f0ecedc66a00dfb2eb2c1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5f4e5783_28639144","line":11,"range":{"start_line":11,"start_character":54,"end_line":11,"end_character":59},"updated":"2017-10-13 04:31:51.000000000","message":"be","commit_id":"efa5e1adf3ee1af2d2d6d15b393e73bdf4251bb5"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"89345b09a4c0bf66cf591692d5ed2c30f20751c5","unresolved":false,"context_lines":[{"line_number":3571,"context_line":"        filter_by(user_id\u003duser_id).\\"},{"line_number":3572,"context_line":"        soft_delete(synchronize_session\u003dFalse)"},{"line_number":3573,"context_line":""},{"line_number":3574,"context_line":"    model_query(context, models.QuotaUsage, read_deleted\u003d\"no\").\\"},{"line_number":3575,"context_line":"        filter_by(project_id\u003dproject_id).\\"},{"line_number":3576,"context_line":"        filter_by(user_id\u003duser_id).\\"},{"line_number":3577,"context_line":"        soft_delete(synchronize_session\u003dFalse)"},{"line_number":3578,"context_line":""},{"line_number":3579,"context_line":"    model_query(context, models.Reservation, read_deleted\u003d\"no\").\\"},{"line_number":3580,"context_line":"        filter_by(project_id\u003dproject_id).\\"},{"line_number":3581,"context_line":"        filter_by(user_id\u003duser_id).\\"},{"line_number":3582,"context_line":"        soft_delete(synchronize_session\u003dFalse)"},{"line_number":3583,"context_line":""},{"line_number":3584,"context_line":""},{"line_number":3585,"context_line":"@pick_context_manager_writer"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff82abbf_a8bdad02","line":3582,"range":{"start_line":3574,"start_character":4,"end_line":3582,"end_character":46},"updated":"2017-11-29 21:53:47.000000000","message":"Are these OK? Seems like they\u0027d be harmless if these quota records haven\u0027t been migrated to the API DB yet.","commit_id":"eee673c3b3b4e963f10321a97d418a0af3ee852a"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"8071bf6e3d7e8810f1cebbb0aee08e64d6d44f73","unresolved":false,"context_lines":[{"line_number":3571,"context_line":"        filter_by(user_id\u003duser_id).\\"},{"line_number":3572,"context_line":"        soft_delete(synchronize_session\u003dFalse)"},{"line_number":3573,"context_line":""},{"line_number":3574,"context_line":"    model_query(context, models.QuotaUsage, read_deleted\u003d\"no\").\\"},{"line_number":3575,"context_line":"        filter_by(project_id\u003dproject_id).\\"},{"line_number":3576,"context_line":"        filter_by(user_id\u003duser_id).\\"},{"line_number":3577,"context_line":"        soft_delete(synchronize_session\u003dFalse)"},{"line_number":3578,"context_line":""},{"line_number":3579,"context_line":"    model_query(context, models.Reservation, read_deleted\u003d\"no\").\\"},{"line_number":3580,"context_line":"        filter_by(project_id\u003dproject_id).\\"},{"line_number":3581,"context_line":"        filter_by(user_id\u003duser_id).\\"},{"line_number":3582,"context_line":"        soft_delete(synchronize_session\u003dFalse)"},{"line_number":3583,"context_line":""},{"line_number":3584,"context_line":""},{"line_number":3585,"context_line":"@pick_context_manager_writer"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff82abbf_485d0177","line":3582,"range":{"start_line":3574,"start_character":4,"end_line":3582,"end_character":46},"in_reply_to":"ff82abbf_a8bdad02","updated":"2017-11-29 22:19:21.000000000","message":"We didn\u0027t migrate quota_usages or reservations tables to the API DB. So yes, these are harmless but they should probably be removed. I missed these.","commit_id":"eee673c3b3b4e963f10321a97d418a0af3ee852a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"89345b09a4c0bf66cf591692d5ed2c30f20751c5","unresolved":false,"context_lines":[{"line_number":3592,"context_line":"        filter_by(project_id\u003dproject_id).\\"},{"line_number":3593,"context_line":"        soft_delete(synchronize_session\u003dFalse)"},{"line_number":3594,"context_line":""},{"line_number":3595,"context_line":"    model_query(context, models.QuotaUsage, read_deleted\u003d\"no\").\\"},{"line_number":3596,"context_line":"        filter_by(project_id\u003dproject_id).\\"},{"line_number":3597,"context_line":"        soft_delete(synchronize_session\u003dFalse)"},{"line_number":3598,"context_line":""},{"line_number":3599,"context_line":"    model_query(context, models.Reservation, read_deleted\u003d\"no\").\\"},{"line_number":3600,"context_line":"        filter_by(project_id\u003dproject_id).\\"},{"line_number":3601,"context_line":"        soft_delete(synchronize_session\u003dFalse)"},{"line_number":3602,"context_line":""},{"line_number":3603,"context_line":""},{"line_number":3604,"context_line":"###################"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff82abbf_c8b83112","line":3601,"range":{"start_line":3595,"start_character":4,"end_line":3601,"end_character":46},"updated":"2017-11-29 21:53:47.000000000","message":"And these?","commit_id":"eee673c3b3b4e963f10321a97d418a0af3ee852a"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"8071bf6e3d7e8810f1cebbb0aee08e64d6d44f73","unresolved":false,"context_lines":[{"line_number":3592,"context_line":"        filter_by(project_id\u003dproject_id).\\"},{"line_number":3593,"context_line":"        soft_delete(synchronize_session\u003dFalse)"},{"line_number":3594,"context_line":""},{"line_number":3595,"context_line":"    model_query(context, models.QuotaUsage, read_deleted\u003d\"no\").\\"},{"line_number":3596,"context_line":"        filter_by(project_id\u003dproject_id).\\"},{"line_number":3597,"context_line":"        soft_delete(synchronize_session\u003dFalse)"},{"line_number":3598,"context_line":""},{"line_number":3599,"context_line":"    model_query(context, models.Reservation, read_deleted\u003d\"no\").\\"},{"line_number":3600,"context_line":"        filter_by(project_id\u003dproject_id).\\"},{"line_number":3601,"context_line":"        soft_delete(synchronize_session\u003dFalse)"},{"line_number":3602,"context_line":""},{"line_number":3603,"context_line":""},{"line_number":3604,"context_line":"###################"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff82abbf_28cf5d29","line":3601,"range":{"start_line":3595,"start_character":4,"end_line":3601,"end_character":46},"in_reply_to":"ff82abbf_c8b83112","updated":"2017-11-29 22:19:21.000000000","message":"Same.","commit_id":"eee673c3b3b4e963f10321a97d418a0af3ee852a"}],"nova/objects/quotas.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"0c847b6e7d7c48fe19b91571121872bdc5af8d59","unresolved":false,"context_lines":[{"line_number":255,"context_line":"    def from_reservations(cls, context, reservations, instance\u003dNone):"},{"line_number":256,"context_line":"        pass"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    # TODO(melwitt): Remove this in version 2.0 of the object."},{"line_number":259,"context_line":"    @base.remotable"},{"line_number":260,"context_line":"    def reserve(self, expire\u003dNone, project_id\u003dNone, user_id\u003dNone,"},{"line_number":261,"context_line":"                **deltas):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f4e5783_654bf458","line":258,"updated":"2017-10-13 03:03:46.000000000","message":"Maybe I can remove this one because it\u0027s not remotable.","commit_id":"efa5e1adf3ee1af2d2d6d15b393e73bdf4251bb5"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"0c847b6e7d7c48fe19b91571121872bdc5af8d59","unresolved":false,"context_lines":[{"line_number":261,"context_line":"                **deltas):"},{"line_number":262,"context_line":"        pass"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    # TODO(melwitt): Remove this in version 2.0 of the object."},{"line_number":265,"context_line":"    @base.remotable"},{"line_number":266,"context_line":"    def commit(self):"},{"line_number":267,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f4e5783_853cb0bf","line":264,"updated":"2017-10-13 03:03:46.000000000","message":"Can someone sanity check me here? We have to wait until the next major version bump to remove remotable methods, right?","commit_id":"efa5e1adf3ee1af2d2d6d15b393e73bdf4251bb5"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"0c847b6e7d7c48fe19b91571121872bdc5af8d59","unresolved":false,"context_lines":[{"line_number":486,"context_line":"    def commit(self, context\u003dNone):"},{"line_number":487,"context_line":"        pass"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    # TODO(melwitt): Remove this in version 2.0 of the object."},{"line_number":490,"context_line":"    def rollback(self, context\u003dNone):"},{"line_number":491,"context_line":"        pass"},{"line_number":492,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5f4e5783_25773ca3","line":489,"updated":"2017-10-13 03:03:46.000000000","message":"Maybe I can remove these because they\u0027re not remotable.","commit_id":"efa5e1adf3ee1af2d2d6d15b393e73bdf4251bb5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"89345b09a4c0bf66cf591692d5ed2c30f20751c5","unresolved":false,"context_lines":[{"line_number":255,"context_line":"    def reserve(self, expire\u003dNone, project_id\u003dNone, user_id\u003dNone,"},{"line_number":256,"context_line":"                **deltas):"},{"line_number":257,"context_line":"        # Honor the expected attributes even though we\u0027re not reserving"},{"line_number":258,"context_line":"        # anything anymore. This will protect against things exploding if a"},{"line_number":259,"context_line":"        # someone has an Ocata compute host running by accident, for example."},{"line_number":260,"context_line":"        self.reservations \u003d None"},{"line_number":261,"context_line":"        self.project_id \u003d project_id"},{"line_number":262,"context_line":"        self.user_id \u003d user_id"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff82abbf_e875f564","line":259,"range":{"start_line":258,"start_character":74,"end_line":259,"end_character":17},"updated":"2017-11-29 21:53:47.000000000","message":"someone","commit_id":"eee673c3b3b4e963f10321a97d418a0af3ee852a"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"8071bf6e3d7e8810f1cebbb0aee08e64d6d44f73","unresolved":false,"context_lines":[{"line_number":255,"context_line":"    def reserve(self, expire\u003dNone, project_id\u003dNone, user_id\u003dNone,"},{"line_number":256,"context_line":"                **deltas):"},{"line_number":257,"context_line":"        # Honor the expected attributes even though we\u0027re not reserving"},{"line_number":258,"context_line":"        # anything anymore. This will protect against things exploding if a"},{"line_number":259,"context_line":"        # someone has an Ocata compute host running by accident, for example."},{"line_number":260,"context_line":"        self.reservations \u003d None"},{"line_number":261,"context_line":"        self.project_id \u003d project_id"},{"line_number":262,"context_line":"        self.user_id \u003d user_id"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff82abbf_08d859ec","line":259,"range":{"start_line":258,"start_character":74,"end_line":259,"end_character":17},"in_reply_to":"ff82abbf_e875f564","updated":"2017-11-29 22:19:21.000000000","message":"Oops.","commit_id":"eee673c3b3b4e963f10321a97d418a0af3ee852a"}],"nova/quota.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"89345b09a4c0bf66cf591692d5ed2c30f20751c5","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                usage \u003d usages.get(resource.name, {})"},{"line_number":137,"context_line":"                modified_quotas[resource.name].update("},{"line_number":138,"context_line":"                    in_use\u003dusage.get(\u0027in_use\u0027, 0),"},{"line_number":139,"context_line":"                    reserved\u003d0,"},{"line_number":140,"context_line":"                    )"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"            # Initialize remains quotas with the default limits."}],"source_content_type":"text/x-python","patch_set":5,"id":"ff82abbf_08cdb983","line":139,"range":{"start_line":139,"start_character":20,"end_line":139,"end_character":30},"updated":"2017-11-29 21:53:47.000000000","message":"I guess we can\u0027t remove this yet because the caller could be expecting it?","commit_id":"eee673c3b3b4e963f10321a97d418a0af3ee852a"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"8071bf6e3d7e8810f1cebbb0aee08e64d6d44f73","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                usage \u003d usages.get(resource.name, {})"},{"line_number":137,"context_line":"                modified_quotas[resource.name].update("},{"line_number":138,"context_line":"                    in_use\u003dusage.get(\u0027in_use\u0027, 0),"},{"line_number":139,"context_line":"                    reserved\u003d0,"},{"line_number":140,"context_line":"                    )"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"            # Initialize remains quotas with the default limits."}],"source_content_type":"text/x-python","patch_set":5,"id":"ff82abbf_e3b0b645","line":139,"range":{"start_line":139,"start_character":20,"end_line":139,"end_character":30},"in_reply_to":"ff82abbf_08cdb983","updated":"2017-11-29 22:19:21.000000000","message":"Yeah, so this is for satisfying quota-sets API requests. The quota-sets detail API [1] calls get_user_quotas(usages\u003dTrue) or get_project_quotas(usages\u003dTrue) to get limit/in_use/reserved to show to the end user. I had thought the API expects there to be a \u0027reserved\u0027 field but it\u0027s not that, it just dumps the dict as the REST API response and we\u0027ve been showing a \u0027reserved\u0027 field. So we\u0027d need a microversion to take that out.\n\nI should probably explain all of that in a code comment here.\n\n[1] https://developer.openstack.org/api-ref/compute/#show-the-detail-of-quota","commit_id":"eee673c3b3b4e963f10321a97d418a0af3ee852a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cda19eea7cf38b54113e9193a58133906a3519f9","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                usage \u003d usages.get(resource.name, {})"},{"line_number":137,"context_line":"                modified_quotas[resource.name].update("},{"line_number":138,"context_line":"                    in_use\u003dusage.get(\u0027in_use\u0027, 0),"},{"line_number":139,"context_line":"                    reserved\u003d0,"},{"line_number":140,"context_line":"                    )"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"            # Initialize remains quotas with the default limits."}],"source_content_type":"text/x-python","patch_set":5,"id":"ff82abbf_43b722f6","line":139,"range":{"start_line":139,"start_character":20,"end_line":139,"end_character":30},"in_reply_to":"ff82abbf_e3b0b645","updated":"2017-11-29 22:30:28.000000000","message":"Sure, but like fb5ca63ade7a38fa9af691fb7a804baad15c1843, internally we could just remove this and have the API always return reserved\u003d0.\n\nThe API user doesn\u0027t know if the underlying cloud has this internal counting quotas stuff or not, at least they shouldn\u0027t. I mean you can figure out which release the cloud is on based on the max microversion supported, but like if I\u0027m talking to an Ocata cloud then the reserved stuff is still legit in the API, but it\u0027s not anymore after pike, so we can just hard-code that stuff in the API response now.\n\nAnyway, I\u0027d deal with that in a follow up patch.","commit_id":"eee673c3b3b4e963f10321a97d418a0af3ee852a"}]}
