)]}'
{"releasenotes/notes/add-ram-quota-d8e64d0385b1429f.yaml":[{"author":{"_account_id":6732,"name":"Lingxian Kong","email":"anlin.kong@gmail.com","username":"kong"},"change_message_id":"35aec9e12bdfece3911436cc3ae4afd902302b60","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added the ability to quota on total amount of RAM used per project."},{"line_number":5,"context_line":"    Set ``quota.max_ram_per_tenant`` to enable. Default is -1 (unlimited)"},{"line_number":6,"context_line":"    to be backwards compatible. Existing installations will need to manually"},{"line_number":7,"context_line":"    backfill quote usage for this to work as expected."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"1f621f24_6f14634f","line":7,"range":{"start_line":6,"start_character":68,"end_line":7,"end_character":24},"updated":"2020-10-31 08:22:40.000000000","message":"Why this is needed?","commit_id":"378178f21ba849e251add89300b119d092e787df"}],"trove/common/cfg.py":[{"author":{"_account_id":6732,"name":"Lingxian Kong","email":"anlin.kong@gmail.com","username":"kong"},"change_message_id":"97e0ac3b680eeac179caba107ce12fe4538e0b83","unresolved":false,"context_lines":[{"line_number":223,"context_line":"               deprecated_name\u003d\u0027max_instances_per_user\u0027),"},{"line_number":224,"context_line":"    cfg.IntOpt(\u0027max_ram_per_tenant\u0027,"},{"line_number":225,"context_line":"               default\u003d-1,"},{"line_number":226,"context_line":"               help\u003d\u0027Default maximum total amount of RAM per tenant.\u0027),"},{"line_number":227,"context_line":"    cfg.IntOpt(\u0027max_accepted_volume_size\u0027, default\u003d10,"},{"line_number":228,"context_line":"               help\u003d\u0027Default maximum volume size (in GB) for an instance.\u0027),"},{"line_number":229,"context_line":"    cfg.IntOpt(\u0027max_volumes_per_tenant\u0027, default\u003d40,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1f621f24_97fb6d77","line":226,"updated":"2020-11-09 22:43:24.000000000","message":"Can we make it clear that the ram is in MB or KB?\n\nBTW, have you already supported ram quota already? If not, how are you going to fill in the db if it\u0027s a required feature for you?","commit_id":"332879041f671156722b64ddd67d7e4cdcc7b2e2"}],"trove/instance/models.py":[{"author":{"_account_id":6732,"name":"Lingxian Kong","email":"anlin.kong@gmail.com","username":"kong"},"change_message_id":"35aec9e12bdfece3911436cc3ae4afd902302b60","unresolved":false,"context_lines":[{"line_number":1373,"context_line":""},{"line_number":1374,"context_line":"        def _resize_flavor():"},{"line_number":1375,"context_line":""},{"line_number":1376,"context_line":"            self.validate_can_perform_action()"},{"line_number":1377,"context_line":"            LOG.info(\"Resizing instance %(instance_id)s flavor to \""},{"line_number":1378,"context_line":"                     \"%(flavor_id)s.\","},{"line_number":1379,"context_line":"                     {\u0027instance_id\u0027: self.id, \u0027flavor_id\u0027: new_flavor_id})"},{"line_number":1380,"context_line":"            if self.db_info.cluster_id is not None:"},{"line_number":1381,"context_line":"                raise exception.ClusterInstanceOperationNotSupported()"},{"line_number":1382,"context_line":""},{"line_number":1383,"context_line":"            # Validate that the old and new flavor IDs are not the same, new"},{"line_number":1384,"context_line":"            # flavor can be found and has ephemeral/volume support if required"},{"line_number":1385,"context_line":"            # by the current flavor."},{"line_number":1386,"context_line":"            if self.flavor_id \u003d\u003d new_flavor_id:"},{"line_number":1387,"context_line":"                raise exception.BadRequest("},{"line_number":1388,"context_line":"                    _(\"The new flavor id must be different \""},{"line_number":1389,"context_line":"                      \"than the current flavor id of \u0027%s\u0027.\") % self.flavor_id)"},{"line_number":1390,"context_line":"            if self.volume_support:"},{"line_number":1391,"context_line":"                if new_flavor.ephemeral !\u003d 0:"},{"line_number":1392,"context_line":"                    raise exception.LocalStorageNotSupported()"},{"line_number":1393,"context_line":"            elif self.device_path is not None:"},{"line_number":1394,"context_line":"                # ephemeral support enabled"},{"line_number":1395,"context_line":"                if new_flavor.ephemeral \u003d\u003d 0:"},{"line_number":1396,"context_line":"                    raise exception.LocalStorageNotSpecified("},{"line_number":1397,"context_line":"                        flavor\u003dnew_flavor_id)"},{"line_number":1398,"context_line":""},{"line_number":1399,"context_line":"            # Set the task to RESIZING and begin the async call before"},{"line_number":1400,"context_line":"            # returning."}],"source_content_type":"text/x-python","patch_set":6,"id":"1f621f24_2f1a6b7c","line":1397,"range":{"start_line":1376,"start_character":0,"end_line":1397,"end_character":45},"updated":"2020-10-31 08:22:40.000000000","message":"Can we put all those checks outside of the _resize_flavor() function?","commit_id":"378178f21ba849e251add89300b119d092e787df"}]}
