)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"64678b7fe6dc273e99fcb990fb2d2a07e97d0db0","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Octavia has no quota definitions, but needs them for parity with Neutron LBaaS."},{"line_number":10,"context_line":"This will provide an endpoint and support for retrieving, updating, and deleting"},{"line_number":11,"context_line":"quotas for tenants."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ia1d85dcd931a57a2fa3f6276d3fe6dabfeadd15e"},{"line_number":14,"context_line":"closes-bug: 1596652"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa7ab95a_b6a060a7","line":11,"range":{"start_line":11,"start_character":11,"end_line":11,"end_character":18},"updated":"2016-08-25 21:26:22.000000000","message":"there is no more tenant in OpenStack","commit_id":"6b684c5bbfaefb37a444182e23b50b83aef66eac"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"488e0914c99712e14ac85e0b53d6719817b39150","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Adds scenario test that simply validates quotas in a lb graph."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Depends-On: Id0deee2714040d271f43a537c27f410e2f4e3ef2"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Co-Authored-By: Phillip Toohill \u003cphillip.toohill@rackspace.com\u003e"},{"line_number":18,"context_line":"Co-Authored-By: Adam Harwell \u003cflux.adam@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":28,"id":"fa6399be_d7a068a8","line":15,"updated":"2016-10-11 08:32:57.000000000","message":"I don\u0027t think this actually is a dependency.","commit_id":"032b1d6513693c1c0592240d9773072782d40007"},{"author":{"_account_id":11302,"name":"Phillip Toohill","email":"phillip.toohill@rackspace.com","username":"ptoohill1"},"change_message_id":"27824dde33dc6e9d91092a8a2d33bf6556954814","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Adds scenario test that simply validates quotas in a lb graph."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Depends-On: Id0deee2714040d271f43a537c27f410e2f4e3ef2"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Co-Authored-By: Phillip Toohill \u003cphillip.toohill@rackspace.com\u003e"},{"line_number":18,"context_line":"Co-Authored-By: Adam Harwell \u003cflux.adam@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":28,"id":"fa6399be_965edd43","line":15,"in_reply_to":"fa6399be_d7a068a8","updated":"2016-10-11 15:48:33.000000000","message":"Not quite sure how that happened o.o","commit_id":"032b1d6513693c1c0592240d9773072782d40007"},{"author":{"_account_id":11302,"name":"Phillip Toohill","email":"phillip.toohill@rackspace.com","username":"ptoohill1"},"change_message_id":"6ba26eda6b7cfb758af26488486316c9df4e816b","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Adds scenario test that simply validates quotas in a lb graph."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Depends-On: Id0deee2714040d271f43a537c27f410e2f4e3ef2"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Co-Authored-By: Phillip Toohill \u003cphillip.toohill@rackspace.com\u003e"},{"line_number":18,"context_line":"Co-Authored-By: Adam Harwell \u003cflux.adam@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":28,"id":"fa6399be_f11d6367","line":15,"in_reply_to":"fa6399be_d7a068a8","updated":"2016-10-11 15:50:34.000000000","message":"Oh, yeah, so yes, this is a dependency. Without it it wont pass the project id like the nlbaas octavia driver does and will cause all types of failures in the quotas logic. So, yes, this is a dependency.","commit_id":"032b1d6513693c1c0592240d9773072782d40007"}],"doc/source/api/octaviaapi.rst":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"1dc7f53098426eece9782ee14e480b4d59e00caf","unresolved":false,"context_lines":[{"line_number":190,"context_line":"**Response Example**::"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    {"},{"line_number":193,"context_line":"        \u0027loadbalancer\u0027: {"},{"line_number":194,"context_line":"            \u0027bytes_in\u0027: 0,"},{"line_number":195,"context_line":"            \u0027bytes_out\u0027: 0,"},{"line_number":196,"context_line":"            \u0027active_connections\u0027: 0,"}],"source_content_type":"text/x-rst","patch_set":64,"id":"7a3c09a3_58daf279","line":193,"updated":"2017-01-13 01:36:08.000000000","message":"Curious why you changed all these quotes... JSON responses would be using double-quotes, per JSON spec? Unless you wanted this to be a python dict form of the response, but this is an API doc for a REST API and technically JSON is the return.\nNot going to force you to redo them, just wondering. :)","commit_id":"6d0d85fbdbf483370d7c64d45399b6bd58109372"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"5710a7cb2b6ac1a7edc2842490ad75ec634f2996","unresolved":false,"context_lines":[{"line_number":190,"context_line":"**Response Example**::"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    {"},{"line_number":193,"context_line":"        \u0027loadbalancer\u0027: {"},{"line_number":194,"context_line":"            \u0027bytes_in\u0027: 0,"},{"line_number":195,"context_line":"            \u0027bytes_out\u0027: 0,"},{"line_number":196,"context_line":"            \u0027active_connections\u0027: 0,"}],"source_content_type":"text/x-rst","patch_set":64,"id":"7a3c09a3_ab361eb2","line":193,"in_reply_to":"7a3c09a3_58daf279","updated":"2017-01-13 01:44:56.000000000","message":"It was for consistency with the reset of the file.  I kind of think they should be double quotes too.","commit_id":"6d0d85fbdbf483370d7c64d45399b6bd58109372"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"5d632ed2669d61a58513b86cd9846336d5a4f029","unresolved":false,"context_lines":[{"line_number":190,"context_line":"**Response Example**::"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    {"},{"line_number":193,"context_line":"        \u0027loadbalancer\u0027: {"},{"line_number":194,"context_line":"            \u0027bytes_in\u0027: 0,"},{"line_number":195,"context_line":"            \u0027bytes_out\u0027: 0,"},{"line_number":196,"context_line":"            \u0027active_connections\u0027: 0,"}],"source_content_type":"text/x-rst","patch_set":64,"id":"7a3c09a3_0bb572cc","line":193,"in_reply_to":"7a3c09a3_ab361eb2","updated":"2017-01-13 01:50:50.000000000","message":"Ah yeah, I see. If I remember later (I won\u0027t) I might go on a find/replace spree here.","commit_id":"6d0d85fbdbf483370d7c64d45399b6bd58109372"}],"etc/octavia.conf":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"0451f56047e004b99e88ad41b7609615d6755b39","unresolved":false,"context_lines":[{"line_number":310,"context_line":"# ca_certificates_file \u003d"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"[quotas]"},{"line_number":313,"context_line":"# default_load_balancer_quota \u003d 20"},{"line_number":314,"context_line":"# default_listener_quota \u003d -1"},{"line_number":315,"context_line":"# default_member_quota \u003d -1"},{"line_number":316,"context_line":"# default_pool_quota \u003d 10"}],"source_content_type":"text/plain","patch_set":63,"id":"7a3c09a3_b82596af","line":313,"updated":"2017-01-13 00:46:27.000000000","message":"You can have 20 LBs but only 10 of those can have pools? lol\nInteresting defaults...","commit_id":"c4c99caeba8c423e8be138c51c0a6fad3b3cb4c5"}],"octavia/api/v1/controllers/base.py":[{"author":{"_account_id":11662,"name":"Paul Glass","email":"paul.glass@rackspace.com","username":"pglass"},"change_message_id":"6e932691f907b43dbc72d60c858cbccaf012f008","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                return False"},{"line_number":121,"context_line":"            lb_count \u003d self.repositories.load_balancer.count("},{"line_number":122,"context_line":"                session, project_id\u003dproject_id)"},{"line_number":123,"context_line":"            return lb_count \u003e\u003d quotas.load_balancer"},{"line_number":124,"context_line":"        elif _class is data_models.Listener:"},{"line_number":125,"context_line":"            if quotas.listener \u003d\u003d const.QUOTA_UNLIMITED:"},{"line_number":126,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a8ec9b2_feb132e1","line":123,"updated":"2016-09-21 22:32:44.000000000","message":"In the docs there is an example request that allows someone to create a \"fully populated\" load balancer: http://docs.openstack.org/developer/octavia/api/octaviaapi.html#create-fully-populated-load-balancer\n\nThis would allow a person to create multiple listeners, pools, members, etc in a single request. If this is supported in Octavia, then whenever a load balancer is created, we\u0027ll need to check quotas on all the other resources and take into account how many of those other resources the user is trying to create.","commit_id":"1fae73c40d43f562347dc5c4830cd62f2fb15f94"}],"octavia/api/v1/controllers/health_monitor.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"d90c63d0ef84f58025429624656d3ec7fa8beaa9","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            pass"},{"line_number":109,"context_line":"        hm_dict \u003d db_prepare.create_health_monitor("},{"line_number":110,"context_line":"            health_monitor.to_dict(render_unsets\u003dTrue), self.pool_id)"},{"line_number":111,"context_line":"        self._test_lb_and_listener_statuses(context.session)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        try:"},{"line_number":114,"context_line":"            db_hm \u003d self.repositories.health_monitor.create(context.session,"}],"source_content_type":"text/x-python","patch_set":36,"id":"5a74a57a_5e76493f","line":111,"updated":"2016-11-22 23:19:54.000000000","message":"Quota check should come after we have exclusive access to the load balancer, otherwise we have a race condition where a user could go over quota.","commit_id":"e007dac00c15e62a3720d036b92324e88d6a4799"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e7c5d8b1882205e70ca848a7320e25eb38f6dae","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            pass"},{"line_number":109,"context_line":"        hm_dict \u003d db_prepare.create_health_monitor("},{"line_number":110,"context_line":"            health_monitor.to_dict(render_unsets\u003dTrue), self.pool_id)"},{"line_number":111,"context_line":"        self._test_lb_and_listener_statuses(context.session)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        try:"},{"line_number":114,"context_line":"            db_hm \u003d self.repositories.health_monitor.create(context.session,"}],"source_content_type":"text/x-python","patch_set":36,"id":"5a74a57a_3ed8adef","line":111,"in_reply_to":"5a74a57a_5e76493f","updated":"2016-11-22 23:25:40.000000000","message":"Nevermind, the problem is bigger than this since quota is at the project level, not the LB level.","commit_id":"e007dac00c15e62a3720d036b92324e88d6a4799"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"1dc7f53098426eece9782ee14e480b4d59e00caf","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            db_hm \u003d self.repositories.health_monitor.create(context.session,"},{"line_number":110,"context_line":"                                                            **hm_dict)"},{"line_number":111,"context_line":"        except odb_exceptions.DBError:"},{"line_number":112,"context_line":"            # Setting LB and Listener back to active because this is just a"},{"line_number":113,"context_line":"            # validation failure"},{"line_number":114,"context_line":"            self.repositories.load_balancer.update("},{"line_number":115,"context_line":"                context.session, self.load_balancer_id,"}],"source_content_type":"text/x-python","patch_set":64,"id":"7a3c09a3_8b5fa20d","side":"PARENT","line":112,"updated":"2017-01-13 01:36:08.000000000","message":"This is no longer true?\nI see this has been removed from every controller... Was it incorrect to begin with, or has this logic moved elsewhere?","commit_id":"1aedd8a0f56b9c7235df31c58414db0c59c2db00"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"5710a7cb2b6ac1a7edc2842490ad75ec634f2996","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            db_hm \u003d self.repositories.health_monitor.create(context.session,"},{"line_number":110,"context_line":"                                                            **hm_dict)"},{"line_number":111,"context_line":"        except odb_exceptions.DBError:"},{"line_number":112,"context_line":"            # Setting LB and Listener back to active because this is just a"},{"line_number":113,"context_line":"            # validation failure"},{"line_number":114,"context_line":"            self.repositories.load_balancer.update("},{"line_number":115,"context_line":"                context.session, self.load_balancer_id,"}],"source_content_type":"text/x-python","patch_set":64,"id":"7a3c09a3_eb0e66e4","side":"PARENT","line":112,"in_reply_to":"7a3c09a3_8b5fa20d","updated":"2017-01-13 01:44:56.000000000","message":"Now all of these are under one transaction umbrella, the \"lock_session\".  That means that if we end up rolling back before a commit, ALL of the changes are undone.  So, this is no longer necessary as the initial load into the database will be rolled back with the overall transaction.\nI.e. we are now in an all-or-none situation.","commit_id":"1aedd8a0f56b9c7235df31c58414db0c59c2db00"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"5d632ed2669d61a58513b86cd9846336d5a4f029","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            db_hm \u003d self.repositories.health_monitor.create(context.session,"},{"line_number":110,"context_line":"                                                            **hm_dict)"},{"line_number":111,"context_line":"        except odb_exceptions.DBError:"},{"line_number":112,"context_line":"            # Setting LB and Listener back to active because this is just a"},{"line_number":113,"context_line":"            # validation failure"},{"line_number":114,"context_line":"            self.repositories.load_balancer.update("},{"line_number":115,"context_line":"                context.session, self.load_balancer_id,"}],"source_content_type":"text/x-python","patch_set":64,"id":"7a3c09a3_6bc43640","side":"PARENT","line":112,"in_reply_to":"7a3c09a3_eb0e66e4","updated":"2017-01-13 01:50:50.000000000","message":"Sweet.","commit_id":"1aedd8a0f56b9c7235df31c58414db0c59c2db00"}],"octavia/api/v1/controllers/listener.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"d90c63d0ef84f58025429624656d3ec7fa8beaa9","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        if listener_dict[\u0027default_pool_id\u0027]:"},{"line_number":178,"context_line":"            self._validate_pool(context.session,"},{"line_number":179,"context_line":"                                listener_dict[\u0027default_pool_id\u0027])"},{"line_number":180,"context_line":"        self._test_lb_and_listener_statuses(context.session)"},{"line_number":181,"context_line":"        # NOTE(blogan): Throwing away because we should not store secure data"},{"line_number":182,"context_line":"        # in the database nor should we send it to a handler."},{"line_number":183,"context_line":"        if \u0027tls_termination\u0027 in listener_dict:"}],"source_content_type":"text/x-python","patch_set":36,"id":"5a74a57a_de8179fd","line":180,"updated":"2016-11-22 23:19:54.000000000","message":"Quota check should come after we have exclusive access to the load balancer, otherwise we have a race condition where a user could go over quota.","commit_id":"e007dac00c15e62a3720d036b92324e88d6a4799"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e7c5d8b1882205e70ca848a7320e25eb38f6dae","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        if listener_dict[\u0027default_pool_id\u0027]:"},{"line_number":178,"context_line":"            self._validate_pool(context.session,"},{"line_number":179,"context_line":"                                listener_dict[\u0027default_pool_id\u0027])"},{"line_number":180,"context_line":"        self._test_lb_and_listener_statuses(context.session)"},{"line_number":181,"context_line":"        # NOTE(blogan): Throwing away because we should not store secure data"},{"line_number":182,"context_line":"        # in the database nor should we send it to a handler."},{"line_number":183,"context_line":"        if \u0027tls_termination\u0027 in listener_dict:"}],"source_content_type":"text/x-python","patch_set":36,"id":"5a74a57a_9eed4191","line":180,"in_reply_to":"5a74a57a_de8179fd","updated":"2016-11-22 23:25:40.000000000","message":"Nevermind, the problem is bigger than this since quota is at the project level, not the LB level.","commit_id":"e007dac00c15e62a3720d036b92324e88d6a4799"}],"octavia/api/v1/controllers/member.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"d90c63d0ef84f58025429624656d3ec7fa8beaa9","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                                      id\u003dmember.subnet_id)"},{"line_number":105,"context_line":"        member_dict \u003d db_prepare.create_member(member.to_dict("},{"line_number":106,"context_line":"            render_unsets\u003dTrue), self.pool_id)"},{"line_number":107,"context_line":"        self._test_lb_and_listener_statuses(context.session)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        try:"},{"line_number":110,"context_line":"            db_member \u003d self.repositories.member.create(context.session,"}],"source_content_type":"text/x-python","patch_set":36,"id":"5a74a57a_9e8e2126","line":107,"updated":"2016-11-22 23:19:54.000000000","message":"Quota check should come after we have exclusive access to the load balancer, otherwise we have a race condition where a user could go over quota.","commit_id":"e007dac00c15e62a3720d036b92324e88d6a4799"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e7c5d8b1882205e70ca848a7320e25eb38f6dae","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                                      id\u003dmember.subnet_id)"},{"line_number":105,"context_line":"        member_dict \u003d db_prepare.create_member(member.to_dict("},{"line_number":106,"context_line":"            render_unsets\u003dTrue), self.pool_id)"},{"line_number":107,"context_line":"        self._test_lb_and_listener_statuses(context.session)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        try:"},{"line_number":110,"context_line":"            db_member \u003d self.repositories.member.create(context.session,"}],"source_content_type":"text/x-python","patch_set":36,"id":"5a74a57a_bef2fd6d","line":107,"in_reply_to":"5a74a57a_9e8e2126","updated":"2016-11-22 23:25:40.000000000","message":"Nevermind, the problem is bigger than this since quota is at the project level, not the LB level.","commit_id":"e007dac00c15e62a3720d036b92324e88d6a4799"}],"octavia/api/v1/controllers/pool.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"d90c63d0ef84f58025429624656d3ec7fa8beaa9","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        if self.listener_id and self.repositories.listener.has_default_pool("},{"line_number":153,"context_line":"                context.session, self.listener_id):"},{"line_number":154,"context_line":"            raise exceptions.DuplicatePoolEntry()"},{"line_number":155,"context_line":"        self._test_lb_and_listener_statuses(context.session)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        pool_dict[\u0027operating_status\u0027] \u003d constants.OFFLINE"},{"line_number":158,"context_line":"        pool_dict[\u0027load_balancer_id\u0027] \u003d self.load_balancer_id"}],"source_content_type":"text/x-python","patch_set":36,"id":"5a74a57a_3ea0ad90","line":155,"updated":"2016-11-22 23:19:54.000000000","message":"Quota check should come after we have exclusive access to the load balancer, otherwise we have a race condition where a user could go over quota.","commit_id":"e007dac00c15e62a3720d036b92324e88d6a4799"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e7c5d8b1882205e70ca848a7320e25eb38f6dae","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        if self.listener_id and self.repositories.listener.has_default_pool("},{"line_number":153,"context_line":"                context.session, self.listener_id):"},{"line_number":154,"context_line":"            raise exceptions.DuplicatePoolEntry()"},{"line_number":155,"context_line":"        self._test_lb_and_listener_statuses(context.session)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        pool_dict[\u0027operating_status\u0027] \u003d constants.OFFLINE"},{"line_number":158,"context_line":"        pool_dict[\u0027load_balancer_id\u0027] \u003d self.load_balancer_id"}],"source_content_type":"text/x-python","patch_set":36,"id":"5a74a57a_feec7591","line":155,"in_reply_to":"5a74a57a_3ea0ad90","updated":"2016-11-22 23:25:40.000000000","message":"Nevermind, the problem is bigger than this since quota is at the project level, not the LB level.","commit_id":"e007dac00c15e62a3720d036b92324e88d6a4799"}],"octavia/api/v1/controllers/quotas.py":[{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"64678b7fe6dc273e99fcb990fb2d2a07e97d0db0","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        return quotas"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def _get_db_quotas(self, session, project_id):"},{"line_number":46,"context_line":"        \"\"\"Gets the tenant\u0027s quotas from the database, or responds with the"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        default quotas."},{"line_number":49,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_f68108fd","line":46,"range":{"start_line":46,"start_character":20,"end_line":46,"end_character":28},"updated":"2016-08-25 21:26:22.000000000","message":"project","commit_id":"6b684c5bbfaefb37a444182e23b50b83aef66eac"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"64678b7fe6dc273e99fcb990fb2d2a07e97d0db0","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        db_quotas \u003d self.repositories.quotas.get("},{"line_number":51,"context_line":"            session, project_id\u003dproject_id)"},{"line_number":52,"context_line":"        if not db_quotas:"},{"line_number":53,"context_line":"            LOG.info(_LI(\"No custom quotas for tenant %s. Returning \""},{"line_number":54,"context_line":"                         \"defaults...\"), project_id)"},{"line_number":55,"context_line":"            db_quotas \u003d self._get_default_quotas()"},{"line_number":56,"context_line":"        return db_quotas"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_d693244e","line":53,"range":{"start_line":53,"start_character":47,"end_line":53,"end_character":53},"updated":"2016-08-25 21:26:22.000000000","message":"project","commit_id":"6b684c5bbfaefb37a444182e23b50b83aef66eac"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"64678b7fe6dc273e99fcb990fb2d2a07e97d0db0","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    @wsme_pecan.wsexpose(quota_types.QuotasResponse, wtypes.text,"},{"line_number":80,"context_line":"                         body\u003dquota_types.QuotasPUT, status_code\u003d202)"},{"line_number":81,"context_line":"    def update(self, project_id, quotas):"},{"line_number":82,"context_line":"        \"\"\"Update any or all quotas for a tenant.\"\"\""},{"line_number":83,"context_line":"        context \u003d pecan.request.context.get(\u0027octavia_context\u0027)"},{"line_number":84,"context_line":"        self.repositories.quotas.update(context.session, project_id, quotas)"},{"line_number":85,"context_line":"        db_quotas \u003d self._get_db_quotas(context.session, project_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_b62a20e6","line":82,"range":{"start_line":82,"start_character":42,"end_line":82,"end_character":48},"updated":"2016-08-25 21:26:22.000000000","message":"project","commit_id":"6b684c5bbfaefb37a444182e23b50b83aef66eac"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"64678b7fe6dc273e99fcb990fb2d2a07e97d0db0","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    @wsme_pecan.wsexpose(None, wtypes.text, status_code\u003d202)"},{"line_number":89,"context_line":"    def delete(self):"},{"line_number":90,"context_line":"        \"\"\"Reset a tenant\u0027s quotas to the default values.\"\"\""},{"line_number":91,"context_line":"        context \u003d pecan.request.context.get(\u0027octavia_context\u0027)"},{"line_number":92,"context_line":"        pass"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_b61140b2","line":90,"range":{"start_line":90,"start_character":19,"end_line":90,"end_character":27},"updated":"2016-08-25 21:26:22.000000000","message":"project","commit_id":"6b684c5bbfaefb37a444182e23b50b83aef66eac"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"64678b7fe6dc273e99fcb990fb2d2a07e97d0db0","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    def delete(self):"},{"line_number":90,"context_line":"        \"\"\"Reset a tenant\u0027s quotas to the default values.\"\"\""},{"line_number":91,"context_line":"        context \u003d pecan.request.context.get(\u0027octavia_context\u0027)"},{"line_number":92,"context_line":"        pass"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    @staticmethod"},{"line_number":95,"context_line":"    def _get_quotas(self, session, project_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_16110cad","line":92,"range":{"start_line":92,"start_character":8,"end_line":92,"end_character":12},"updated":"2016-08-25 21:26:22.000000000","message":"why pass?","commit_id":"6b684c5bbfaefb37a444182e23b50b83aef66eac"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"64678b7fe6dc273e99fcb990fb2d2a07e97d0db0","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        pass"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    @staticmethod"},{"line_number":95,"context_line":"    def _get_quotas(self, session, project_id):"},{"line_number":96,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_56239405","line":95,"range":{"start_line":95,"start_character":8,"end_line":95,"end_character":19},"updated":"2016-08-25 21:26:22.000000000","message":"what is the idea for that method?","commit_id":"6b684c5bbfaefb37a444182e23b50b83aef66eac"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"c88596b86b6361e5835b9bc3f67228d85ca0480a","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def _get_default_quotas(self):"},{"line_number":38,"context_line":"        quotas \u003d data_models.Quotas()"},{"line_number":39,"context_line":"        quotas.load_balancer_quota \u003d CONF.quotas.default_load_balancer_quota"},{"line_number":40,"context_line":"        quotas.listener_quota \u003d CONF.quotas.default_listener_quota"},{"line_number":41,"context_line":"        quotas.l7_policy_quota \u003d CONF.quotas.default_l7_policy_quota"},{"line_number":42,"context_line":"        quotas.pool_quota \u003d CONF.quotas.default_pool_quota"},{"line_number":43,"context_line":"        quotas.health_monitor_quota \u003d CONF.quotas.default_health_monitor_quota"},{"line_number":44,"context_line":"        return quotas"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def _get_db_quotas(self, session, project_id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_dee2d99f","line":43,"range":{"start_line":39,"start_character":8,"end_line":43,"end_character":78},"updated":"2016-09-12 16:03:22.000000000","message":"We can set that values as defaults in Quotas class","commit_id":"8a0e8856bdd72357c192d697d83ca8e7dc32a4a4"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"c88596b86b6361e5835b9bc3f67228d85ca0480a","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        if not db_quotas:"},{"line_number":54,"context_line":"            LOG.info(_LI(\"No custom quotas for project %s. Returning \""},{"line_number":55,"context_line":"                         \"defaults...\"), project_id)"},{"line_number":56,"context_line":"            db_quotas \u003d self._get_default_quotas()"},{"line_number":57,"context_line":"        return db_quotas"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @wsme_pecan.wsexpose(quota_types.QuotasResponse, wtypes.text)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_3e374500","line":56,"range":{"start_line":56,"start_character":24,"end_line":56,"end_character":50},"updated":"2016-09-12 16:03:22.000000000","message":"We can here just assign data_models.Quotas()","commit_id":"8a0e8856bdd72357c192d697d83ca8e7dc32a4a4"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"71fc69974ee2e4037b445781fde5176a49fe6bb4","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        db_quotas \u003d self._get_db_quotas(context.session, project_id)"},{"line_number":68,"context_line":"        return self._convert_db_to_type(db_quotas, quota_types.QuotaResponse)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    @pecan.expose()"},{"line_number":71,"context_line":"    def _lookup(self, project_id, *remainder):"},{"line_number":72,"context_line":"        \"\"\"Overridden pecan _lookup method for routing default endpoint.\"\"\""},{"line_number":73,"context_line":"        if project_id and len(remainder) and remainder[0] \u003d\u003d \u0027default\u0027:"},{"line_number":74,"context_line":"            return QuotasDefaultController(project_id), \u0027\u0027"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"class QuotasDefaultController(base.BaseController):"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def __init__(self, project_id):"},{"line_number":80,"context_line":"        super(QuotasDefaultController, self).__init__()"},{"line_number":81,"context_line":"        self.project_id \u003d project_id"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    @wsme_pecan.wsexpose(quota_types.QuotaResponse, wtypes.text)"},{"line_number":84,"context_line":"    def get(self):"},{"line_number":85,"context_line":"        \"\"\"Get a project\u0027s default quota details.\"\"\""},{"line_number":86,"context_line":"        context \u003d pecan.request.context.get(\u0027octavia_context\u0027)"},{"line_number":87,"context_line":"        project_id \u003d context.project_id"},{"line_number":88,"context_line":"        quotas \u003d self._get_default_quotas(project_id)"},{"line_number":89,"context_line":"        return self._convert_db_to_type(quotas, quota_types.QuotaResponse)"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a95cdbc_423ecb28","line":89,"range":{"start_line":70,"start_character":0,"end_line":89,"end_character":74},"updated":"2016-10-07 16:55:18.000000000","message":"I don\u0027t get it that part. Why have we two controllers to handle that stuff?","commit_id":"a586a5ca2da58e9d8c32e6f523a126859b5496be"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"ce5031af6ac145353e2c2bbe4ed4a03b2b951377","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        db_quotas \u003d self._get_db_quotas(context.session, project_id)"},{"line_number":68,"context_line":"        return self._convert_db_to_type(db_quotas, quota_types.QuotaResponse)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    @pecan.expose()"},{"line_number":71,"context_line":"    def _lookup(self, project_id, *remainder):"},{"line_number":72,"context_line":"        \"\"\"Overridden pecan _lookup method for routing default endpoint.\"\"\""},{"line_number":73,"context_line":"        if project_id and len(remainder) and remainder[0] \u003d\u003d \u0027default\u0027:"},{"line_number":74,"context_line":"            return QuotasDefaultController(project_id), \u0027\u0027"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"class QuotasDefaultController(base.BaseController):"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def __init__(self, project_id):"},{"line_number":80,"context_line":"        super(QuotasDefaultController, self).__init__()"},{"line_number":81,"context_line":"        self.project_id \u003d project_id"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    @wsme_pecan.wsexpose(quota_types.QuotaResponse, wtypes.text)"},{"line_number":84,"context_line":"    def get(self):"},{"line_number":85,"context_line":"        \"\"\"Get a project\u0027s default quota details.\"\"\""},{"line_number":86,"context_line":"        context \u003d pecan.request.context.get(\u0027octavia_context\u0027)"},{"line_number":87,"context_line":"        project_id \u003d context.project_id"},{"line_number":88,"context_line":"        quotas \u003d self._get_default_quotas(project_id)"},{"line_number":89,"context_line":"        return self._convert_db_to_type(quotas, quota_types.QuotaResponse)"}],"source_content_type":"text/x-python","patch_set":27,"id":"fa6399be_d781484f","line":89,"range":{"start_line":70,"start_character":0,"end_line":89,"end_character":74},"in_reply_to":"1a95cdbc_423ecb28","updated":"2016-10-11 08:28:05.000000000","message":"I don\u0027t have any idea yet. Will look into it. Welcome other people\u0027s thoughts...","commit_id":"a586a5ca2da58e9d8c32e6f523a126859b5496be"},{"author":{"_account_id":14615,"name":"Sergey Belous","email":"belous.py@gmail.com","username":"sbelous"},"change_message_id":"3671bad57cab3921e8b5aac41b0913e7e8a8a558","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                                        [quota_types.QuotaResponse])"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @wsme_pecan.wsexpose(quota_types.QuotaResponse, wtypes.text,"},{"line_number":51,"context_line":"                         body\u003dquota_types.QuotaPut, status_code\u003d202)"},{"line_number":52,"context_line":"    def put(self, project_id, quotas):"},{"line_number":53,"context_line":"        \"\"\"Update any or all quotas for a project.\"\"\""},{"line_number":54,"context_line":"        context \u003d pecan.request.context.get(\u0027octavia_context\u0027)"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa6399be_93dc0be6","line":51,"range":{"start_line":51,"start_character":42,"end_line":51,"end_character":50},"updated":"2016-10-12 11:28:37.000000000","message":"nit: QuotaPUT (or need changes in types/quotas.py)","commit_id":"5c77ab03d161e3c7b153b3b098773a07f5922296"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"d678b7caad86c297932b97ccf0e4143219609f89","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                                        [quota_types.QuotaResponse])"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @wsme_pecan.wsexpose(quota_types.QuotaResponse, wtypes.text,"},{"line_number":51,"context_line":"                         body\u003dquota_types.QuotaPut, status_code\u003d202)"},{"line_number":52,"context_line":"    def put(self, project_id, quotas):"},{"line_number":53,"context_line":"        \"\"\"Update any or all quotas for a project.\"\"\""},{"line_number":54,"context_line":"        context \u003d pecan.request.context.get(\u0027octavia_context\u0027)"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa6399be_de5a8af1","line":51,"range":{"start_line":51,"start_character":42,"end_line":51,"end_character":50},"in_reply_to":"fa6399be_93dc0be6","updated":"2016-10-14 18:39:39.000000000","message":"Not a nit! This will break things. Fixed.","commit_id":"5c77ab03d161e3c7b153b3b098773a07f5922296"}],"octavia/api/v1/types/quotas.py":[{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"64678b7fe6dc273e99fcb990fb2d2a07e97d0db0","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from octavia.api.v1.types import base"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class QuotasResponse(base.BaseType):"},{"line_number":21,"context_line":"    \"\"\"Defines which attributes are to be shown on any response.\"\"\""},{"line_number":22,"context_line":"    loadbalancer_quota \u003d wtypes.wsattr(wtypes.IntegerType())"},{"line_number":23,"context_line":"    listener_quota \u003d wtypes.wsattr(wtypes.IntegerType())"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_764ed8c2","line":20,"range":{"start_line":20,"start_character":6,"end_line":20,"end_character":20},"updated":"2016-08-25 21:26:22.000000000","message":"We cannot create a base quota type? They\u0027re the same.","commit_id":"6b684c5bbfaefb37a444182e23b50b83aef66eac"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"c88596b86b6361e5835b9bc3f67228d85ca0480a","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class QuotasResponse(QuotasBase):"},{"line_number":39,"context_line":"    \"\"\"Defines which attributes are to be shown on any response.\"\"\""},{"line_number":40,"context_line":"    @classmethod"},{"line_number":41,"context_line":"    def from_data_model(cls, data_model, children\u003dFalse):"},{"line_number":42,"context_line":"        quotas \u003d super(QuotasResponse, cls).from_data_model("},{"line_number":43,"context_line":"            data_model, children\u003dchildren)"},{"line_number":44,"context_line":"        return quotas"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class QuotasPUT(QuotasBase):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_c494cc8c","line":44,"range":{"start_line":40,"start_character":4,"end_line":44,"end_character":21},"updated":"2016-09-12 16:03:22.000000000","message":"You\u0027re not changing anything here so you can just use method from QuotaBase","commit_id":"8a0e8856bdd72357c192d697d83ca8e7dc32a4a4"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"71fc69974ee2e4037b445781fde5176a49fe6bb4","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class QuotaResponse(base.BaseType):"},{"line_number":30,"context_line":"    \"\"\"Wrapper object for quotas responses.\"\"\""},{"line_number":31,"context_line":"    quota \u003d wtypes.wsattr(QuotaBase)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @classmethod"},{"line_number":34,"context_line":"    def from_data_model(cls, data_model, children\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a95cdbc_42da4be9","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":36},"updated":"2016-10-07 16:55:18.000000000","message":"This is because we want to return { \"quota\": { \"load_balancer\": x, xxx}}?","commit_id":"a586a5ca2da58e9d8c32e6f523a126859b5496be"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"ce5031af6ac145353e2c2bbe4ed4a03b2b951377","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class QuotaResponse(base.BaseType):"},{"line_number":30,"context_line":"    \"\"\"Wrapper object for quotas responses.\"\"\""},{"line_number":31,"context_line":"    quota \u003d wtypes.wsattr(QuotaBase)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @classmethod"},{"line_number":34,"context_line":"    def from_data_model(cls, data_model, children\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":27,"id":"fa6399be_dcbb2f74","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":36},"in_reply_to":"1a95cdbc_42da4be9","updated":"2016-10-11 08:28:05.000000000","message":"I believe this was done for root tag support, yeah... The rest of our API doesn\u0027t yet do root tags, but SHOULD for neutron-lbaas compatibility, right? So, I guess this fix is just early?","commit_id":"a586a5ca2da58e9d8c32e6f523a126859b5496be"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"71fc69974ee2e4037b445781fde5176a49fe6bb4","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class QuotaPut(base.BaseType):"},{"line_number":42,"context_line":"    \"\"\"Overall object for quota PUT request.\"\"\""},{"line_number":43,"context_line":"    quota \u003d wtypes.wsattr(QuotaBase)"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a95cdbc_e2e517a4","line":43,"range":{"start_line":43,"start_character":0,"end_line":43,"end_character":36},"updated":"2016-10-07 16:55:18.000000000","message":"The same here?","commit_id":"a586a5ca2da58e9d8c32e6f523a126859b5496be"}],"octavia/common/config.py":[{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"71fc69974ee2e4037b445781fde5176a49fe6bb4","unresolved":false,"context_lines":[{"line_number":169,"context_line":"                      \u0027suffixes.  Example: 10k\u0027)),"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    # REST server"},{"line_number":172,"context_line":"    cfg.IPOpt(\u0027bind_host\u0027, default\u003d\u00270.0.0.0\u0027,  # nosec"},{"line_number":173,"context_line":"              help\u003d_(\"The host IP to bind to\")),"},{"line_number":174,"context_line":"    cfg.PortOpt(\u0027bind_port\u0027, default\u003d9443,"},{"line_number":175,"context_line":"                help\u003d_(\"The port to bind to\")),"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a95cdbc_c2c2dbe8","line":172,"range":{"start_line":172,"start_character":47,"end_line":172,"end_character":54},"updated":"2016-10-07 16:55:18.000000000","message":"Why this is here?","commit_id":"a586a5ca2da58e9d8c32e6f523a126859b5496be"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"ce5031af6ac145353e2c2bbe4ed4a03b2b951377","unresolved":false,"context_lines":[{"line_number":169,"context_line":"                      \u0027suffixes.  Example: 10k\u0027)),"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    # REST server"},{"line_number":172,"context_line":"    cfg.IPOpt(\u0027bind_host\u0027, default\u003d\u00270.0.0.0\u0027,  # nosec"},{"line_number":173,"context_line":"              help\u003d_(\"The host IP to bind to\")),"},{"line_number":174,"context_line":"    cfg.PortOpt(\u0027bind_port\u0027, default\u003d9443,"},{"line_number":175,"context_line":"                help\u003d_(\"The port to bind to\")),"}],"source_content_type":"text/x-python","patch_set":27,"id":"fa6399be_3cec2bc7","line":172,"range":{"start_line":172,"start_character":47,"end_line":172,"end_character":54},"in_reply_to":"1a95cdbc_c2c2dbe8","updated":"2016-10-11 08:28:05.000000000","message":"I don\u0027t know? But, not related to this CR.","commit_id":"a586a5ca2da58e9d8c32e6f523a126859b5496be"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"1dc7f53098426eece9782ee14e480b4d59e00caf","unresolved":false,"context_lines":[{"line_number":437,"context_line":""},{"line_number":438,"context_line":"quota_opts \u003d ["},{"line_number":439,"context_line":"    cfg.IntOpt(\u0027default_load_balancer_quota\u0027,"},{"line_number":440,"context_line":"               default\u003d-1,"},{"line_number":441,"context_line":"               help\u003d_(\u0027Default per project load balancer quota.\u0027)),"},{"line_number":442,"context_line":"    cfg.IntOpt(\u0027default_listener_quota\u0027,"},{"line_number":443,"context_line":"               default\u003d-1,"}],"source_content_type":"text/x-python","patch_set":64,"id":"7a3c09a3_7855eec4","line":440,"updated":"2017-01-13 01:36:08.000000000","message":"Should these use the constant QUOTA_UNLIMITED? :P","commit_id":"6d0d85fbdbf483370d7c64d45399b6bd58109372"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"5710a7cb2b6ac1a7edc2842490ad75ec634f2996","unresolved":false,"context_lines":[{"line_number":437,"context_line":""},{"line_number":438,"context_line":"quota_opts \u003d ["},{"line_number":439,"context_line":"    cfg.IntOpt(\u0027default_load_balancer_quota\u0027,"},{"line_number":440,"context_line":"               default\u003d-1,"},{"line_number":441,"context_line":"               help\u003d_(\u0027Default per project load balancer quota.\u0027)),"},{"line_number":442,"context_line":"    cfg.IntOpt(\u0027default_listener_quota\u0027,"},{"line_number":443,"context_line":"               default\u003d-1,"}],"source_content_type":"text/x-python","patch_set":64,"id":"7a3c09a3_8b0082ac","line":440,"in_reply_to":"7a3c09a3_7855eec4","updated":"2017-01-13 01:44:56.000000000","message":"Darn it, yes.","commit_id":"6d0d85fbdbf483370d7c64d45399b6bd58109372"}],"octavia/common/constants.py":[{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"64678b7fe6dc273e99fcb990fb2d2a07e97d0db0","unresolved":false,"context_lines":[{"line_number":304,"context_line":""},{"line_number":305,"context_line":"HAPROXY_MEMBER_STATUSES \u003d (UP, DOWN, NO_CHECK)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"#Quota Constants"},{"line_number":308,"context_line":"QUOTA_UNLIMITED \u003d -1"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"QUOTA_VALUES \u003d (QUOTA_UNLIMITED,)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_76fc183f","line":307,"range":{"start_line":307,"start_character":0,"end_line":307,"end_character":1},"updated":"2016-08-25 21:26:22.000000000","message":"Missing space","commit_id":"6b684c5bbfaefb37a444182e23b50b83aef66eac"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"64678b7fe6dc273e99fcb990fb2d2a07e97d0db0","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"#Quota Constants"},{"line_number":308,"context_line":"QUOTA_UNLIMITED \u003d -1"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"QUOTA_VALUES \u003d (QUOTA_UNLIMITED,)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"API_VERSION \u003d \u00270.5\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_f6e748aa","line":309,"updated":"2016-08-25 21:26:22.000000000","message":"They not suppose to be separated","commit_id":"6b684c5bbfaefb37a444182e23b50b83aef66eac"}],"octavia/common/exceptions.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2d40a90495ec7b843fb160e74948b26823b25bbd","unresolved":false,"context_lines":[{"line_number":239,"context_line":"    message \u003d _LE(\u0027Failed to delete server group object.\u0027)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"class QuotaException(OctaviaException):"},{"line_number":243,"context_line":"    message \u003d _LE(\u0027Quota has been met.\u0027)"},{"line_number":244,"context_line":"    code \u003d 403"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a71b18c_cc261316","line":242,"updated":"2016-12-01 18:13:03.000000000","message":"APIException","commit_id":"e007dac00c15e62a3720d036b92324e88d6a4799"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2d40a90495ec7b843fb160e74948b26823b25bbd","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"class QuotaException(OctaviaException):"},{"line_number":243,"context_line":"    message \u003d _LE(\u0027Quota has been met.\u0027)"},{"line_number":244,"context_line":"    code \u003d 403"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a71b18c_ec23cf03","line":243,"updated":"2016-12-01 18:13:03.000000000","message":"msg","commit_id":"e007dac00c15e62a3720d036b92324e88d6a4799"}],"octavia/controller/worker/tasks/database_tasks.py":[{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"d01c72e87a50657dad27fab293a29315e1eef969","unresolved":false,"context_lines":[{"line_number":2241,"context_line":"        :returns: None"},{"line_number":2242,"context_line":"        \"\"\""},{"line_number":2243,"context_line":""},{"line_number":2244,"context_line":"        LOG.warning(_LW(\u0027Reverting decrement quota for health monitor \u0027"},{"line_number":2245,"context_line":"                        \u0027on project {proj} Project quota counts may be \u0027"},{"line_number":2246,"context_line":"                        \u0027incorrect.\u0027).format(proj\u003dhealth_mon.project_id))"},{"line_number":2247,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"da4df55a_6fe6b2b5","line":2244,"updated":"2016-12-23 16:57:53.000000000","message":"shouldn\u0027t it add to the quota?","commit_id":"43d5849cdb930900c2076199541c699cc701dee5"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f80a6a191a9749b5911785e87ceb3d360975ddf6","unresolved":false,"context_lines":[{"line_number":2241,"context_line":"        :returns: None"},{"line_number":2242,"context_line":"        \"\"\""},{"line_number":2243,"context_line":""},{"line_number":2244,"context_line":"        LOG.warning(_LW(\u0027Reverting decrement quota for health monitor \u0027"},{"line_number":2245,"context_line":"                        \u0027on project {proj} Project quota counts may be \u0027"},{"line_number":2246,"context_line":"                        \u0027incorrect.\u0027).format(proj\u003dhealth_mon.project_id))"},{"line_number":2247,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"da4df55a_d9168754","line":2244,"in_reply_to":"da4df55a_6fe6b2b5","updated":"2016-12-23 22:55:10.000000000","message":"I have gone back and forth on this.\nTo some degree, these are going to be at the end of the flows, so no value to adding it back.\nOn the other hand, the revert will put the object back in the database in an error state, so should have quota.\nI will add these back to get comments.","commit_id":"43d5849cdb930900c2076199541c699cc701dee5"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"d01c72e87a50657dad27fab293a29315e1eef969","unresolved":false,"context_lines":[{"line_number":2446,"context_line":"                  \"project: %s \", pool.project_id)"},{"line_number":2447,"context_line":""},{"line_number":2448,"context_line":"        health_mon_count \u003d 1 if pool.health_monitor else 0"},{"line_number":2449,"context_line":"        member_count \u003d len(pool.members)"},{"line_number":2450,"context_line":""},{"line_number":2451,"context_line":"        return {\u0027HM\u0027: health_mon_count, \u0027member\u0027: member_count}"}],"source_content_type":"text/x-python","patch_set":43,"id":"da4df55a_8f8f56cb","line":2449,"updated":"2016-12-23 16:57:53.000000000","message":"Does this really work for a lot of members? This could potentially lead to OOM. Personally I would use some direct sql count or so","commit_id":"43d5849cdb930900c2076199541c699cc701dee5"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"c2e8dcac5490adc051d1153fd650bb4c6a9f59de","unresolved":false,"context_lines":[{"line_number":2446,"context_line":"                  \"project: %s \", pool.project_id)"},{"line_number":2447,"context_line":""},{"line_number":2448,"context_line":"        health_mon_count \u003d 1 if pool.health_monitor else 0"},{"line_number":2449,"context_line":"        member_count \u003d len(pool.members)"},{"line_number":2450,"context_line":""},{"line_number":2451,"context_line":"        return {\u0027HM\u0027: health_mon_count, \u0027member\u0027: member_count}"}],"source_content_type":"text/x-python","patch_set":43,"id":"ba5201f7_b59d180c","line":2449,"in_reply_to":"da4df55a_3464fae2","updated":"2017-01-05 03:48:27.000000000","message":"I think he\u0027s saying it might force loading them from the DB (otherwise, lazy-loaded?) but I think it\u0027d require WAAAAAY more members than is actually feasible in order to OOM by loading them all (do we have a cap on members?) so I don\u0027t think it\u0027s really a problem regardless.","commit_id":"43d5849cdb930900c2076199541c699cc701dee5"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f80a6a191a9749b5911785e87ceb3d360975ddf6","unresolved":false,"context_lines":[{"line_number":2446,"context_line":"                  \"project: %s \", pool.project_id)"},{"line_number":2447,"context_line":""},{"line_number":2448,"context_line":"        health_mon_count \u003d 1 if pool.health_monitor else 0"},{"line_number":2449,"context_line":"        member_count \u003d len(pool.members)"},{"line_number":2450,"context_line":""},{"line_number":2451,"context_line":"        return {\u0027HM\u0027: health_mon_count, \u0027member\u0027: member_count}"}],"source_content_type":"text/x-python","patch_set":43,"id":"da4df55a_3464fae2","line":2449,"in_reply_to":"da4df55a_8f8f56cb","updated":"2016-12-23 22:55:10.000000000","message":"len() on a python list is O(1)\nhttps://wiki.python.org/moin/TimeComplexity","commit_id":"43d5849cdb930900c2076199541c699cc701dee5"}],"octavia/db/models.py":[{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"c88596b86b6361e5835b9bc3f67228d85ca0480a","unresolved":false,"context_lines":[{"line_number":539,"context_line":""},{"line_number":540,"context_line":"    __tablename__ \u003d \"quotas\""},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    project_id \u003d sa.Column(sa.String(36), primary_key\u003dTrue)"},{"line_number":543,"context_line":"    load_balancer_quota \u003d sa.Column(sa.Integer(), nullable\u003dFalse)"},{"line_number":544,"context_line":"    listener_quota \u003d sa.Column(sa.Integer(), nullable\u003dFalse)"},{"line_number":545,"context_line":"    l7_policy_quota \u003d sa.Column(sa.Integer(), nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_44bc3cbb","line":542,"range":{"start_line":542,"start_character":4,"end_line":542,"end_character":14},"updated":"2016-09-12 16:03:22.000000000","message":"You\u0027re using project mixin so you shouldn\u0027t add this here.","commit_id":"8a0e8856bdd72357c192d697d83ca8e7dc32a4a4"}],"octavia/db/repositories.py":[{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"64678b7fe6dc273e99fcb990fb2d2a07e97d0db0","unresolved":false,"context_lines":[{"line_number":875,"context_line":"            quotas \u003d session.query(self.model_class).filter_by("},{"line_number":876,"context_line":"                project_id\u003dproject_id).one()"},{"line_number":877,"context_line":""},{"line_number":878,"context_line":"            for key in model_kwargs:"},{"line_number":879,"context_line":"                setattr(quotas, key, model_kwargs[key])"},{"line_number":880,"context_line":"            session.add(quotas)"},{"line_number":881,"context_line":"            session.flush()"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_313a9ace","line":878,"range":{"start_line":878,"start_character":23,"end_line":878,"end_character":35},"updated":"2016-08-25 21:26:22.000000000","message":"Using six.iteritems will be better here. I don\u0027t like this way of reading data from dicts.","commit_id":"6b684c5bbfaefb37a444182e23b50b83aef66eac"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"c88596b86b6361e5835b9bc3f67228d85ca0480a","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from octavia.common import validate"},{"line_number":30,"context_line":"from octavia.db import models"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"import six"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_04edd4b6","line":32,"updated":"2016-09-12 16:03:22.000000000","message":"It not suppose to be here","commit_id":"8a0e8856bdd72357c192d697d83ca8e7dc32a4a4"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"c88596b86b6361e5835b9bc3f67228d85ca0480a","unresolved":false,"context_lines":[{"line_number":878,"context_line":"                project_id\u003dproject_id).first()"},{"line_number":879,"context_line":"            if not quotas:"},{"line_number":880,"context_line":"                quotas \u003d models.Quotas()"},{"line_number":881,"context_line":"                quotas.project_id \u003d project_id"},{"line_number":882,"context_line":""},{"line_number":883,"context_line":"            for key in six.iteritems(model_kwargs):"},{"line_number":884,"context_line":"                setattr(quotas, key[0], key[1])"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_2413b8b9","line":881,"range":{"start_line":881,"start_character":16,"end_line":881,"end_character":46},"updated":"2016-09-12 16:03:22.000000000","message":"you can assign that in init","commit_id":"8a0e8856bdd72357c192d697d83ca8e7dc32a4a4"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"c88596b86b6361e5835b9bc3f67228d85ca0480a","unresolved":false,"context_lines":[{"line_number":880,"context_line":"                quotas \u003d models.Quotas()"},{"line_number":881,"context_line":"                quotas.project_id \u003d project_id"},{"line_number":882,"context_line":""},{"line_number":883,"context_line":"            for key in six.iteritems(model_kwargs):"},{"line_number":884,"context_line":"                setattr(quotas, key[0], key[1])"},{"line_number":885,"context_line":"            session.add(quotas)"},{"line_number":886,"context_line":"            session.flush()"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_84eac472","line":883,"range":{"start_line":883,"start_character":16,"end_line":883,"end_character":19},"updated":"2016-09-12 16:03:22.000000000","message":"for key, val in ...","commit_id":"8a0e8856bdd72357c192d697d83ca8e7dc32a4a4"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"71fc69974ee2e4037b445781fde5176a49fe6bb4","unresolved":false,"context_lines":[{"line_number":241,"context_line":"                                 provisioning_status\u003dlistener_prov_status)"},{"line_number":242,"context_line":"        return success"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    def _quota_met(self, session, _class, project_id):"},{"line_number":245,"context_line":"        quotas \u003d self.quotas.get(session, project_id\u003dproject_id)"},{"line_number":246,"context_line":"        if not quotas:"},{"line_number":247,"context_line":"            quotas \u003d self.quotas.update("}],"source_content_type":"text/x-python","patch_set":27,"id":"1a95cdbc_bd640eb9","line":244,"range":{"start_line":244,"start_character":8,"end_line":244,"end_character":18},"updated":"2016-10-07 16:55:18.000000000","message":"Exactly the same code is in controllers/base.py","commit_id":"a586a5ca2da58e9d8c32e6f523a126859b5496be"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"ce5031af6ac145353e2c2bbe4ed4a03b2b951377","unresolved":false,"context_lines":[{"line_number":241,"context_line":"                                 provisioning_status\u003dlistener_prov_status)"},{"line_number":242,"context_line":"        return success"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    def _quota_met(self, session, _class, project_id):"},{"line_number":245,"context_line":"        quotas \u003d self.quotas.get(session, project_id\u003dproject_id)"},{"line_number":246,"context_line":"        if not quotas:"},{"line_number":247,"context_line":"            quotas \u003d self.quotas.update("}],"source_content_type":"text/x-python","patch_set":27,"id":"fa6399be_3c034b75","line":244,"range":{"start_line":244,"start_character":8,"end_line":244,"end_character":18},"in_reply_to":"1a95cdbc_bd640eb9","updated":"2016-10-11 08:28:05.000000000","message":"Switched to using this one, removed duplicate code from that side.","commit_id":"a586a5ca2da58e9d8c32e6f523a126859b5496be"},{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"71fc69974ee2e4037b445781fde5176a49fe6bb4","unresolved":false,"context_lines":[{"line_number":253,"context_line":"                    \u0027pool\u0027: CONF.quotas.default_pool_quota,"},{"line_number":254,"context_line":"                    \u0027health_monitor\u0027: CONF.quotas.default_health_monitor_quota,"},{"line_number":255,"context_line":"                    \u0027member\u0027: CONF.quotas.default_member_quota})"},{"line_number":256,"context_line":"        unlimited_quota \u003d constants.QUOTA_UNLIMITED"},{"line_number":257,"context_line":"        if _class \u003d\u003d models.LoadBalancer:"},{"line_number":258,"context_line":"            if quotas.load_balancer \u003d\u003d unlimited_quota:"},{"line_number":259,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a95cdbc_e238b7f0","line":256,"range":{"start_line":256,"start_character":0,"end_line":256,"end_character":51},"updated":"2016-10-07 16:55:18.000000000","message":"Do we need this?","commit_id":"a586a5ca2da58e9d8c32e6f523a126859b5496be"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"ce5031af6ac145353e2c2bbe4ed4a03b2b951377","unresolved":false,"context_lines":[{"line_number":253,"context_line":"                    \u0027pool\u0027: CONF.quotas.default_pool_quota,"},{"line_number":254,"context_line":"                    \u0027health_monitor\u0027: CONF.quotas.default_health_monitor_quota,"},{"line_number":255,"context_line":"                    \u0027member\u0027: CONF.quotas.default_member_quota})"},{"line_number":256,"context_line":"        unlimited_quota \u003d constants.QUOTA_UNLIMITED"},{"line_number":257,"context_line":"        if _class \u003d\u003d models.LoadBalancer:"},{"line_number":258,"context_line":"            if quotas.load_balancer \u003d\u003d unlimited_quota:"},{"line_number":259,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":27,"id":"fa6399be_bce4bb3b","line":256,"range":{"start_line":256,"start_character":0,"end_line":256,"end_character":51},"in_reply_to":"1a95cdbc_e238b7f0","updated":"2016-10-11 08:28:05.000000000","message":"Nope.","commit_id":"a586a5ca2da58e9d8c32e6f523a126859b5496be"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2d40a90495ec7b843fb160e74948b26823b25bbd","unresolved":false,"context_lines":[{"line_number":253,"context_line":"                    \u0027pool\u0027: CONF.quotas.default_pool_quota,"},{"line_number":254,"context_line":"                    \u0027health_monitor\u0027: CONF.quotas.default_health_monitor_quota,"},{"line_number":255,"context_line":"                    \u0027member\u0027: CONF.quotas.default_member_quota})"},{"line_number":256,"context_line":"        if _class \u003d\u003d models.LoadBalancer:"},{"line_number":257,"context_line":"            if quotas.load_balancer \u003d\u003d constants.QUOTA_UNLIMITED:"},{"line_number":258,"context_line":"                return False"},{"line_number":259,"context_line":"            lb_count \u003d self.load_balancer.count(session, project_id\u003dproject_id)"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a71b18c_ecf58f83","line":256,"updated":"2016-12-01 18:13:03.000000000","message":"models-\u003edata_models","commit_id":"e007dac00c15e62a3720d036b92324e88d6a4799"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2d40a90495ec7b843fb160e74948b26823b25bbd","unresolved":false,"context_lines":[{"line_number":256,"context_line":"        if _class \u003d\u003d models.LoadBalancer:"},{"line_number":257,"context_line":"            if quotas.load_balancer \u003d\u003d constants.QUOTA_UNLIMITED:"},{"line_number":258,"context_line":"                return False"},{"line_number":259,"context_line":"            lb_count \u003d self.load_balancer.count(session, project_id\u003dproject_id)"},{"line_number":260,"context_line":"            return lb_count \u003e\u003d quotas.load_balancer"},{"line_number":261,"context_line":"        if _class \u003d\u003d models.Listener:"},{"line_number":262,"context_line":"            if quotas.listener \u003d\u003d constants.QUOTA_UNLIMITED:"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a71b18c_ac3ab734","line":259,"updated":"2016-12-01 18:13:03.000000000","message":"Not in DELETED state","commit_id":"e007dac00c15e62a3720d036b92324e88d6a4799"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"d01c72e87a50657dad27fab293a29315e1eef969","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        try:"},{"line_number":284,"context_line":"            quotas \u003d lock_session.query(models.Quotas).filter_by("},{"line_number":285,"context_line":"                project_id\u003dproject_id).with_for_update().first()"},{"line_number":286,"context_line":"            if _class \u003d\u003d data_models.LoadBalancer:"},{"line_number":287,"context_line":"                # Decide which quota to use"},{"line_number":288,"context_line":"                if not quotas.load_balancer:"},{"line_number":289,"context_line":"                    lb_quota \u003d CONF.quotas.default_load_balancer_quota"}],"source_content_type":"text/x-python","patch_set":43,"id":"da4df55a_ea57f0ff","line":286,"updated":"2016-12-23 16:57:53.000000000","message":"mmh, shouldn\u0027t we use something in the line with isinstance (http://stackoverflow.com/questions/1549801/differences-between-isinstance-and-type-in-python) -- to avoid diltram\u0027s ire","commit_id":"43d5849cdb930900c2076199541c699cc701dee5"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f80a6a191a9749b5911785e87ceb3d360975ddf6","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        try:"},{"line_number":284,"context_line":"            quotas \u003d lock_session.query(models.Quotas).filter_by("},{"line_number":285,"context_line":"                project_id\u003dproject_id).with_for_update().first()"},{"line_number":286,"context_line":"            if _class \u003d\u003d data_models.LoadBalancer:"},{"line_number":287,"context_line":"                # Decide which quota to use"},{"line_number":288,"context_line":"                if not quotas.load_balancer:"},{"line_number":289,"context_line":"                    lb_quota \u003d CONF.quotas.default_load_balancer_quota"}],"source_content_type":"text/x-python","patch_set":43,"id":"da4df55a_b47d4a70","line":286,"in_reply_to":"da4df55a_ea57f0ff","updated":"2016-12-23 22:55:10.000000000","message":"Ummm, well, the way this is being used it doesn\u0027t really matter as it\u0027s basically being used as a constant to say what to act on.  Frankly these probably should just be switched to constants given the way I have changed this code from the original.  I am half temped to break these out into their own methods.  It would be cleaner.","commit_id":"43d5849cdb930900c2076199541c699cc701dee5"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"d01c72e87a50657dad27fab293a29315e1eef969","unresolved":false,"context_lines":[{"line_number":1165,"context_line":""},{"line_number":1166,"context_line":"            for key, val in six.iteritems(kwargs_quota):"},{"line_number":1167,"context_line":"                setattr(quotas, key, val)"},{"line_number":1168,"context_line":"            session.add(quotas)"},{"line_number":1169,"context_line":"            session.flush()"},{"line_number":1170,"context_line":"        return self.get(session, project_id\u003dproject_id)"},{"line_number":1171,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"da4df55a_aa37a8ae","line":1168,"updated":"2016-12-23 16:57:53.000000000","message":"probably fine to have the add here but consider only issuing it when we create a new object","commit_id":"43d5849cdb930900c2076199541c699cc701dee5"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f80a6a191a9749b5911785e87ceb3d360975ddf6","unresolved":false,"context_lines":[{"line_number":1165,"context_line":""},{"line_number":1166,"context_line":"            for key, val in six.iteritems(kwargs_quota):"},{"line_number":1167,"context_line":"                setattr(quotas, key, val)"},{"line_number":1168,"context_line":"            session.add(quotas)"},{"line_number":1169,"context_line":"            session.flush()"},{"line_number":1170,"context_line":"        return self.get(session, project_id\u003dproject_id)"},{"line_number":1171,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"da4df55a_b4f46af2","line":1168,"in_reply_to":"da4df55a_aa37a8ae","updated":"2016-12-23 22:55:10.000000000","message":"This is sqlalchemy speak for an \"upsert\" operation.\nUpdate it if it exists, insert it if not.\nThe old saveorupdate method is deprecated.","commit_id":"43d5849cdb930900c2076199541c699cc701dee5"}],"octavia/quota/__init__.py":[{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"c88596b86b6361e5835b9bc3f67228d85ca0480a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"9a89bdaa_a45fc83f","updated":"2016-09-12 16:03:22.000000000","message":"Why is this module created here?","commit_id":"8a0e8856bdd72357c192d697d83ca8e7dc32a4a4"}],"octavia/tests/functional/api/v1/test_member.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"1dc7f53098426eece9782ee14e480b4d59e00caf","unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def test_create_over_quota(self):"},{"line_number":212,"context_line":"        self.check_quota_met_true_mock.start()"},{"line_number":213,"context_line":"        body \u003d {\u0027ip_address\u0027: \u002710.0.0.3\u0027, \u0027protocol_port\u0027: 81}"},{"line_number":214,"context_line":"        self.post(self.members_path, body, status\u003d403)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def test_update(self):"}],"source_content_type":"text/x-python","patch_set":64,"id":"7a3c09a3_f8255e5c","line":213,"updated":"2017-01-13 01:36:08.000000000","message":"This doesn\u0027t have to pass project_id?","commit_id":"6d0d85fbdbf483370d7c64d45399b6bd58109372"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"5d632ed2669d61a58513b86cd9846336d5a4f029","unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def test_create_over_quota(self):"},{"line_number":212,"context_line":"        self.check_quota_met_true_mock.start()"},{"line_number":213,"context_line":"        body \u003d {\u0027ip_address\u0027: \u002710.0.0.3\u0027, \u0027protocol_port\u0027: 81}"},{"line_number":214,"context_line":"        self.post(self.members_path, body, status\u003d403)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def test_update(self):"}],"source_content_type":"text/x-python","patch_set":64,"id":"7a3c09a3_4bf5ba81","line":213,"in_reply_to":"7a3c09a3_6bc8b675","updated":"2017-01-13 01:50:50.000000000","message":"Ah, I see... So even though it has no project, it will still assume it\u0027s over-quota. Got it.","commit_id":"6d0d85fbdbf483370d7c64d45399b6bd58109372"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"5710a7cb2b6ac1a7edc2842490ad75ec634f2996","unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def test_create_over_quota(self):"},{"line_number":212,"context_line":"        self.check_quota_met_true_mock.start()"},{"line_number":213,"context_line":"        body \u003d {\u0027ip_address\u0027: \u002710.0.0.3\u0027, \u0027protocol_port\u0027: 81}"},{"line_number":214,"context_line":"        self.post(self.members_path, body, status\u003d403)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def test_update(self):"}],"source_content_type":"text/x-python","patch_set":64,"id":"7a3c09a3_6bc8b675","line":213,"in_reply_to":"7a3c09a3_f8255e5c","updated":"2017-01-13 01:44:56.000000000","message":"No because it is being mocked in the line above.  Basically this is a test to make sure the right response is coming back in an over quota situation.","commit_id":"6d0d85fbdbf483370d7c64d45399b6bd58109372"}],"octavia/tests/functional/api/v1/test_quotas.py":[{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"71fc69974ee2e4037b445781fde5176a49fe6bb4","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        quota_dict \u003d response.json"},{"line_number":44,"context_line":"        self._assert_quotas_equal(quota_dict[\u0027quota\u0027])"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def test_default_quotas(self):"},{"line_number":47,"context_line":"        response \u003d self.get(self.QUOTA_DEFAULT_PATH.format("},{"line_number":48,"context_line":"            project_id\u003dself.project_id))"},{"line_number":49,"context_line":"        quota_dict \u003d response.json"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a95cdbc_7d8b6668","line":46,"range":{"start_line":46,"start_character":8,"end_line":46,"end_character":27},"updated":"2016-10-07 16:55:18.000000000","message":"Something is not OK because default quota is 20 not 10","commit_id":"a586a5ca2da58e9d8c32e6f523a126859b5496be"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"84b2cdde0c7f0099aec6720d03cd30a0fecb0a90","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        quota_dict \u003d response.json"},{"line_number":44,"context_line":"        self._assert_quotas_equal(quota_dict[\u0027quota\u0027])"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def test_default_quotas(self):"},{"line_number":47,"context_line":"        response \u003d self.get(self.QUOTA_DEFAULT_PATH.format("},{"line_number":48,"context_line":"            project_id\u003dself.project_id))"},{"line_number":49,"context_line":"        quota_dict \u003d response.json"}],"source_content_type":"text/x-python","patch_set":27,"id":"fa6399be_4f087f28","line":46,"range":{"start_line":46,"start_character":8,"end_line":46,"end_character":27},"in_reply_to":"1a95cdbc_7d8b6668","updated":"2016-10-14 22:03:16.000000000","message":"You were right! It seems to actually be testing these now, so updated them to 20 here and 30 for custom.\nDone.","commit_id":"a586a5ca2da58e9d8c32e6f523a126859b5496be"}],"octavia/tests/functional/db/test_repositories.py":[{"author":{"_account_id":14591,"name":"Lubosz Kosnik (diltram)","email":"lubosz.kosnik@intel.com","username":"diltram"},"change_message_id":"c88596b86b6361e5835b9bc3f67228d85ca0480a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"9a89bdaa_441efc70","updated":"2016-09-12 16:03:22.000000000","message":"Completely missing all tests for reading, updating, deleting data using repo.","commit_id":"8a0e8856bdd72357c192d697d83ca8e7dc32a4a4"}]}
