)]}'
{"cyborg/db/sqlalchemy/alembic/versions/d6f033d8fa5b_add_quota_related_tables.py":[{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"46cf7719698c11bea70714c984c9a0f0212c5179","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\"\"\"add-quota-related-tables"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"Revision ID: d6f033d8fa5b"},{"line_number":4,"context_line":"Revises: f50980397351"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f6a8fd7_8e99627a","line":1,"updated":"2018-05-02 15:54:07.000000000","message":"Please add proper license information here.","commit_id":"66f4535d393eeab387558b4dc238367a4e9b94a0"}],"cyborg/db/sqlalchemy/api.py":[{"author":{"_account_id":11878,"name":"Rushil Chugh","email":"rushil.chugh@gmail.com","username":"rushil"},"change_message_id":"5bf56c82ff0932ca35778332ae9187052312637a","unresolved":false,"context_lines":[{"line_number":567,"context_line":"            with_lockmode(\u0027update\u0027). \\"},{"line_number":568,"context_line":"            all()"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"    def quota_reserve(self, context, resources, deltas, expire,"},{"line_number":571,"context_line":"                      until_refresh, max_age, project_id\u003dNone,"},{"line_number":572,"context_line":"                      is_allocated_reserve\u003dFalse):"},{"line_number":573,"context_line":"        with _session_for_write() as session:"},{"line_number":574,"context_line":"            if project_id is None:"},{"line_number":575,"context_line":"                project_id \u003d context.project_id"},{"line_number":576,"context_line":"            usages \u003d self._get_quota_usages(context, project_id,"},{"line_number":577,"context_line":"                                            resources\u003ddeltas.keys())"},{"line_number":578,"context_line":"            work \u003d set(deltas.keys())"},{"line_number":579,"context_line":"            while work:"},{"line_number":580,"context_line":"                resource \u003d work.pop()"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"                # Do we need to refresh the usage?"},{"line_number":583,"context_line":"                refresh \u003d False"},{"line_number":584,"context_line":"                if resource not in usages:"},{"line_number":585,"context_line":"                    usages[resource] \u003d self._quota_usage_create(project_id,"},{"line_number":586,"context_line":"                                                                resource,"},{"line_number":587,"context_line":"                                                                0, 0,"},{"line_number":588,"context_line":"                                                                until_refresh"},{"line_number":589,"context_line":"                                                                or None,"},{"line_number":590,"context_line":"                                                                session\u003dsession"},{"line_number":591,"context_line":"                                                                )"},{"line_number":592,"context_line":"                    refresh \u003d True"},{"line_number":593,"context_line":"                elif usages[resource].in_use \u003c 0:"},{"line_number":594,"context_line":"                    # Negative in_use count indicates a desync, so try to"},{"line_number":595,"context_line":"                    # heal from that..."},{"line_number":596,"context_line":"                    refresh \u003d True"},{"line_number":597,"context_line":"                elif usages[resource].until_refresh is not None:"},{"line_number":598,"context_line":"                    usages[resource].until_refresh -\u003d 1"},{"line_number":599,"context_line":"                    if usages[resource].until_refresh \u003c\u003d 0:"},{"line_number":600,"context_line":"                        refresh \u003d True"},{"line_number":601,"context_line":"                elif max_age and usages[resource].updated_at is not None and ("},{"line_number":602,"context_line":"                    (timeutils.utcnow() -"},{"line_number":603,"context_line":"                        usages[resource].updated_at).total_seconds() \u003e\u003d"},{"line_number":604,"context_line":"                        max_age):"},{"line_number":605,"context_line":"                    refresh \u003d True"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"                # refresh the usage"},{"line_number":608,"context_line":"                if refresh:"},{"line_number":609,"context_line":"                    updates \u003d self._sync_acc_res(context, resource, project_id)"},{"line_number":610,"context_line":"                    for res, in_use in updates.items():"},{"line_number":611,"context_line":"                        # Make sure we have a destination for the usage!"},{"line_number":612,"context_line":"                        if res not in usages:"},{"line_number":613,"context_line":"                            usages[res] \u003d self._quota_usage_create("},{"line_number":614,"context_line":"                                project_id,"},{"line_number":615,"context_line":"                                res,"},{"line_number":616,"context_line":"                                0, 0,"},{"line_number":617,"context_line":"                                until_refresh or None,"},{"line_number":618,"context_line":"                                session\u003dsession"},{"line_number":619,"context_line":"                            )"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"                        # Update the usage"},{"line_number":622,"context_line":"                        usages[res].in_use \u003d in_use"},{"line_number":623,"context_line":"                        usages[res].until_refresh \u003d until_refresh or None"},{"line_number":624,"context_line":""},{"line_number":625,"context_line":"                        # Because more than one resource may be refreshed"},{"line_number":626,"context_line":"                        # by the call to the sync routine, and we don\u0027t"},{"line_number":627,"context_line":"                        # want to double-sync, we make sure all refreshed"},{"line_number":628,"context_line":"                        # resources are dropped from the work set."},{"line_number":629,"context_line":"                        work.discard(res)"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":"                        # NOTE(Vek): We make the assumption that the sync"},{"line_number":632,"context_line":"                        #            routine actually refreshes the"},{"line_number":633,"context_line":"                        #            resources that it is the sync routine"},{"line_number":634,"context_line":"                        #            for.  We don\u0027t check, because this is"},{"line_number":635,"context_line":"                        #            a best-effort mechanism."},{"line_number":636,"context_line":""},{"line_number":637,"context_line":"            unders \u003d [r for r, delta in deltas.items()"},{"line_number":638,"context_line":"                      if delta \u003c 0 and delta + usages[r].in_use \u003c 0]"},{"line_number":639,"context_line":"            reservations \u003d []"},{"line_number":640,"context_line":"            for resource, delta in deltas.items():"},{"line_number":641,"context_line":"                usage \u003d usages[resource]"},{"line_number":642,"context_line":"                reservation \u003d self._reservation_create("},{"line_number":643,"context_line":"                    str(uuid.uuid4()), usage, project_id, resource,"},{"line_number":644,"context_line":"                    delta, expire, session\u003dsession)"},{"line_number":645,"context_line":"                reservations.append(reservation.uuid)"},{"line_number":646,"context_line":"                usages[resource].reserved +\u003d delta"},{"line_number":647,"context_line":"            session.flush()"},{"line_number":648,"context_line":"        if unders:"},{"line_number":649,"context_line":"            LOG.warning(\"Change will make usage less than 0 for the following \""},{"line_number":650,"context_line":"                        \"resources: %s\", unders)"},{"line_number":651,"context_line":"        return reservations"},{"line_number":652,"context_line":""},{"line_number":653,"context_line":"    def _sync_acc_res(self, context, resource, project_id):"},{"line_number":654,"context_line":"        res_in_use \u003d self._accelerator_data_get_for_project(context, resource,"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_bf584057","line":651,"range":{"start_line":570,"start_character":0,"end_line":651,"end_character":27},"updated":"2018-06-29 15:45:27.000000000","message":"This method should be broken down into sub methods. It\u0027s hard to read what this method is actually doing. Add docstrings too for this method","commit_id":"e55f5676d2f2b01d98bc9780aa0c29b66c50f2fe"},{"author":{"_account_id":11878,"name":"Rushil Chugh","email":"rushil.chugh@gmail.com","username":"rushil"},"change_message_id":"5bf56c82ff0932ca35778332ae9187052312637a","unresolved":false,"context_lines":[{"line_number":650,"context_line":"                        \"resources: %s\", unders)"},{"line_number":651,"context_line":"        return reservations"},{"line_number":652,"context_line":""},{"line_number":653,"context_line":"    def _sync_acc_res(self, context, resource, project_id):"},{"line_number":654,"context_line":"        res_in_use \u003d self._accelerator_data_get_for_project(context, resource,"},{"line_number":655,"context_line":"                                                            project_id)"},{"line_number":656,"context_line":"        return {resource: res_in_use}"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_ff3b18e7","line":653,"updated":"2018-06-29 15:45:27.000000000","message":"Please add docstrings","commit_id":"e55f5676d2f2b01d98bc9780aa0c29b66c50f2fe"},{"author":{"_account_id":11878,"name":"Rushil Chugh","email":"rushil.chugh@gmail.com","username":"rushil"},"change_message_id":"5bf56c82ff0932ca35778332ae9187052312637a","unresolved":false,"context_lines":[{"line_number":655,"context_line":"                                                            project_id)"},{"line_number":656,"context_line":"        return {resource: res_in_use}"},{"line_number":657,"context_line":""},{"line_number":658,"context_line":"    def _accelerator_data_get_for_project(self, context, resource, project_id):"},{"line_number":659,"context_line":"        query \u003d model_query(context, models.Accelerator).\\"},{"line_number":660,"context_line":"            filter_by(project_id\u003dproject_id).filter_by(device_type\u003dresource)"},{"line_number":661,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_1f16145a","line":658,"updated":"2018-06-29 15:45:27.000000000","message":"Same comment as above","commit_id":"e55f5676d2f2b01d98bc9780aa0c29b66c50f2fe"},{"author":{"_account_id":11878,"name":"Rushil Chugh","email":"rushil.chugh@gmail.com","username":"rushil"},"change_message_id":"5bf56c82ff0932ca35778332ae9187052312637a","unresolved":false,"context_lines":[{"line_number":664,"context_line":"    def _dict_with_usage_id(self, usages):"},{"line_number":665,"context_line":"        return {row.id: row for row in usages.values()}"},{"line_number":666,"context_line":""},{"line_number":667,"context_line":"    def reservation_commit(self, context, reservations, project_id\u003dNone):"},{"line_number":668,"context_line":"        with _session_for_write() as session:"},{"line_number":669,"context_line":"            quota_usage \u003d self._get_quota_usages("},{"line_number":670,"context_line":"                context, project_id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_ff14784f","line":667,"updated":"2018-06-29 15:45:27.000000000","message":"Same comment as above","commit_id":"e55f5676d2f2b01d98bc9780aa0c29b66c50f2fe"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"3ec2c1dab9c0c43231c77a3bd0c09687ed86fd26","unresolved":false,"context_lines":[{"line_number":582,"context_line":""},{"line_number":583,"context_line":"                # Do we need to refresh the usage?"},{"line_number":584,"context_line":"                refresh \u003d False"},{"line_number":585,"context_line":"                # create quota usage in DB if there is no recorf of this type"},{"line_number":586,"context_line":"                # of resource"},{"line_number":587,"context_line":"                if resource not in usages:"},{"line_number":588,"context_line":"                    usages[resource] \u003d self._quota_usage_create(project_id,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_b4fede67","line":585,"range":{"start_line":585,"start_character":58,"end_line":585,"end_character":64},"updated":"2018-07-04 02:59:27.000000000","message":"record","commit_id":"33dd3cfd83f3a78749274b98a031a46e846eb7f8"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"3ec2c1dab9c0c43231c77a3bd0c09687ed86fd26","unresolved":false,"context_lines":[{"line_number":587,"context_line":"                if resource not in usages:"},{"line_number":588,"context_line":"                    usages[resource] \u003d self._quota_usage_create(project_id,"},{"line_number":589,"context_line":"                                                                resource,"},{"line_number":590,"context_line":"                                                                0, 0,"},{"line_number":591,"context_line":"                                                                until_refresh"},{"line_number":592,"context_line":"                                                                or None,"},{"line_number":593,"context_line":"                                                                session\u003dsession"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_74f4c687","line":590,"range":{"start_line":590,"start_character":64,"end_line":590,"end_character":68},"updated":"2018-07-04 02:59:27.000000000","message":"parameterize these values, please.","commit_id":"33dd3cfd83f3a78749274b98a031a46e846eb7f8"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"3ec2c1dab9c0c43231c77a3bd0c09687ed86fd26","unresolved":false,"context_lines":[{"line_number":617,"context_line":"                            usages[res] \u003d self._quota_usage_create("},{"line_number":618,"context_line":"                                project_id,"},{"line_number":619,"context_line":"                                res,"},{"line_number":620,"context_line":"                                0, 0,"},{"line_number":621,"context_line":"                                until_refresh or None,"},{"line_number":622,"context_line":"                                session\u003dsession"},{"line_number":623,"context_line":"                            )"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_34eace9f","line":620,"range":{"start_line":620,"start_character":32,"end_line":620,"end_character":37},"updated":"2018-07-04 02:59:27.000000000","message":"parameterize these values, please.","commit_id":"33dd3cfd83f3a78749274b98a031a46e846eb7f8"}],"cyborg/db/sqlalchemy/models.py":[{"author":{"_account_id":17813,"name":"wangzhh","email":"wzh_1993@126.com","username":"wangzhh"},"change_message_id":"e12a48c52ec1cba6eb049ed323f244b5a36676c6","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        return d"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @staticmethod"},{"line_number":55,"context_line":"    def delete_values():"},{"line_number":56,"context_line":"        return {\u0027deleted\u0027: True,"},{"line_number":57,"context_line":"                \u0027deleted_at\u0027: timeutils.utcnow()}"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_64a5a6a1","line":55,"range":{"start_line":55,"start_character":21,"end_line":55,"end_character":24},"updated":"2018-05-15 03:11:08.000000000","message":"Do u want to imply soft delete here? Maybe you can inherit models.SoftDeleteMixin from oslo.db.","commit_id":"d98d3f4643c6d1cd9ac4c6a772c1aca304085a7f"}],"cyborg/quota.py":[{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"3ec2c1dab9c0c43231c77a3bd0c09687ed86fd26","unresolved":false,"context_lines":[{"line_number":1,"context_line":"import datetime"},{"line_number":2,"context_line":"from oslo_config import cfg"},{"line_number":3,"context_line":"from oslo_log import log as logging"},{"line_number":4,"context_line":"from oslo_utils import timeutils"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_748fe62d","line":1,"updated":"2018-07-04 02:59:27.000000000","message":"Please add proper copyright information","commit_id":"33dd3cfd83f3a78749274b98a031a46e846eb7f8"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"3ec2c1dab9c0c43231c77a3bd0c09687ed86fd26","unresolved":false,"context_lines":[{"line_number":34,"context_line":"CONF.register_opts(quota_opts)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class BaseResource(object):"},{"line_number":38,"context_line":"    \"\"\"Describe a single resource for quota checking.\"\"\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def __init__(self, name, flag\u003dNone, parent_project_id\u003dNone):"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_f491b647","line":37,"range":{"start_line":37,"start_character":6,"end_line":37,"end_character":18},"updated":"2018-07-04 02:59:27.000000000","message":"This file should stay inside cyborg/objects folder in my opinion.","commit_id":"33dd3cfd83f3a78749274b98a031a46e846eb7f8"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"3ec2c1dab9c0c43231c77a3bd0c09687ed86fd26","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        \"\"\""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        super(ReservableResource, self).__init__(name, flag\u003dflag)"},{"line_number":97,"context_line":"        if sync:"},{"line_number":98,"context_line":"            self.sync \u003d sync"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_749da655","line":97,"range":{"start_line":97,"start_character":11,"end_line":97,"end_character":15},"updated":"2018-07-04 02:59:27.000000000","message":"is this really necessary? As the function signature assure the \"sync\" param has to be assigned.","commit_id":"33dd3cfd83f3a78749274b98a031a46e846eb7f8"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"3ec2c1dab9c0c43231c77a3bd0c09687ed86fd26","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        keyword arguments, and current usage and other reservations"},{"line_number":126,"context_line":"        are factored into the quota check."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        This method will raise a QuotaResourceUnknown exception if a"},{"line_number":129,"context_line":"        given resource is unknown or if it does not have a usage"},{"line_number":130,"context_line":"        synchronization function."},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_b4b01ede","line":128,"range":{"start_line":128,"start_character":33,"end_line":128,"end_character":53},"updated":"2018-07-04 02:59:27.000000000","message":"well, I did not find this exception being thrown anywhere in your code. Even in cyborg/db/sqlalchemy/api.py","commit_id":"33dd3cfd83f3a78749274b98a031a46e846eb7f8"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"3ec2c1dab9c0c43231c77a3bd0c09687ed86fd26","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        project_id \u003d context.project_id"},{"line_number":174,"context_line":"        try:"},{"line_number":175,"context_line":"            self._driver.commit(context, reservations, project_id\u003dproject_id)"},{"line_number":176,"context_line":"        except Exception:"},{"line_number":177,"context_line":"            # NOTE(Vek): Ignoring exceptions here is safe, because the"},{"line_number":178,"context_line":"            # usage resynchronization and the reservation expiration"},{"line_number":179,"context_line":"            # mechanisms will resolve the issue.  The exception is"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_14bf92ab","line":176,"range":{"start_line":176,"start_character":15,"end_line":176,"end_character":24},"updated":"2018-07-04 02:59:27.000000000","message":"Maybe create a more specific exception?\nAnd this exception has already been handled in your Driver","commit_id":"33dd3cfd83f3a78749274b98a031a46e846eb7f8"}],"cyborg/tests/unit/db/test_db_api.py":[{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"3ec2c1dab9c0c43231c77a3bd0c09687ed86fd26","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# encoding\u003dUTF8"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2010 United States Government as represented by the"},{"line_number":4,"context_line":"# Administrator of the National Aeronautics and Space Administration."},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_b4a9fe8f","line":3,"range":{"start_line":3,"start_character":2,"end_line":3,"end_character":41},"updated":"2018-07-04 02:59:27.000000000","message":"I guess the copyright should mention Intel?","commit_id":"33dd3cfd83f3a78749274b98a031a46e846eb7f8"},{"author":{"_account_id":27458,"name":"Li Liu","email":"liliueecg@gmail.com","username":"liliu"},"change_message_id":"3ec2c1dab9c0c43231c77a3bd0c09687ed86fd26","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            \u0027usage\u0027: {\u0027id\u0027: 1}"},{"line_number":99,"context_line":"        }"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def test__get_reservation_resources(self):"},{"line_number":102,"context_line":"        sqlalchemy_api \u003d sqlalchemyapi.get_backend()"},{"line_number":103,"context_line":"        reservations \u003d _quota_reserve(self.context, \u0027project1\u0027)"},{"line_number":104,"context_line":"        expected \u003d [\u0027fpga\u0027, \u0027gpu\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_f4a3f6af","line":101,"range":{"start_line":101,"start_character":12,"end_line":101,"end_character":13},"updated":"2018-07-04 02:59:27.000000000","message":"an extra underscore?","commit_id":"33dd3cfd83f3a78749274b98a031a46e846eb7f8"}]}
