)]}'
{"specs/xena/approved/glance/glance-unified-quotas.rst":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"0344d86dca5823c8dea7013b6a5ca1cb5fb4c88d","unresolved":true,"context_lines":[{"line_number":58,"context_line":"more can be added in the future, this spec covers the work required to"},{"line_number":59,"context_line":"add the following limits:"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"* ``image_size_total``: A limit on the storage consumed by all the"},{"line_number":62,"context_line":"  non-deleted images for the tenant. Images with multiple locations"},{"line_number":63,"context_line":"  will count as multiple usages. Specified in Mebibytes (MiB). This"},{"line_number":64,"context_line":"  will be enforced in the image upload path, as well as the import"}],"source_content_type":"text/x-rst","patch_set":2,"id":"c206b493_6ae6a452","line":61,"range":{"start_line":61,"start_character":4,"end_line":61,"end_character":20},"updated":"2021-04-28 06:17:31.000000000","message":"Is this going to be config option, which will be read from glance-api and enforced at the startup?\n\nWe also need to make sure sending sighup (reload) to glance-api reloads the new quotas or so.","commit_id":"030fe17312783c078119830baaa8ae850a5b52c5"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"3e4caf32330a50e03d69cbb39a135ceddb4cee76","unresolved":true,"context_lines":[{"line_number":58,"context_line":"more can be added in the future, this spec covers the work required to"},{"line_number":59,"context_line":"add the following limits:"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"* ``image_size_total``: A limit on the storage consumed by all the"},{"line_number":62,"context_line":"  non-deleted images for the tenant. Images with multiple locations"},{"line_number":63,"context_line":"  will count as multiple usages. Specified in Mebibytes (MiB). This"},{"line_number":64,"context_line":"  will be enforced in the image upload path, as well as the import"}],"source_content_type":"text/x-rst","patch_set":2,"id":"cbd8cd1e_d48e511b","line":61,"range":{"start_line":61,"start_character":4,"end_line":61,"end_character":20},"in_reply_to":"7acdd907_c951f2c3","updated":"2021-05-05 12:59:33.000000000","message":"So after studying about limits, i came to conclusion that if we try to set these through glance then we will not be able to set different limits for different tenants/projects. So I think we need to document this that if new tenant is added then admin needs to set limits for that project/tenant first.\n\nAlso I guess we need to make a provision to failsafe process that if limits is enabled and it is not registered yet then it should ignore the enforcement.","commit_id":"030fe17312783c078119830baaa8ae850a5b52c5"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"4b7e0517a50d5f9355ccadb2a2840ad4bb772e6d","unresolved":true,"context_lines":[{"line_number":58,"context_line":"more can be added in the future, this spec covers the work required to"},{"line_number":59,"context_line":"add the following limits:"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"* ``image_size_total``: A limit on the storage consumed by all the"},{"line_number":62,"context_line":"  non-deleted images for the tenant. Images with multiple locations"},{"line_number":63,"context_line":"  will count as multiple usages. Specified in Mebibytes (MiB). This"},{"line_number":64,"context_line":"  will be enforced in the image upload path, as well as the import"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7acdd907_c951f2c3","line":61,"range":{"start_line":61,"start_character":4,"end_line":61,"end_character":20},"in_reply_to":"88fa8100_0f14facc","updated":"2021-05-04 14:38:57.000000000","message":"Is there any possibility that we can set this through glance during/at service startup phase.\nThe reason I am asking is;\n\n1. this will reduce the administrator work to explicitly set these limits\n2. If someone (Administrator) by mistake modified the limit then it will not take effect unless and until glance service is restarted.\n3. Glance will have control over theses limits.\n\nWe can have a config option with default values which will be set during service startup so this would also skips the possibility that we have upgraded to latest version, enabled the new limits by setting config option true in the api.conf and forget to set these limits explicitly using command line or limit APIs.","commit_id":"030fe17312783c078119830baaa8ae850a5b52c5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4a4e44b6d854b935f7c1e3189dc314063824939a","unresolved":true,"context_lines":[{"line_number":58,"context_line":"more can be added in the future, this spec covers the work required to"},{"line_number":59,"context_line":"add the following limits:"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"* ``image_size_total``: A limit on the storage consumed by all the"},{"line_number":62,"context_line":"  non-deleted images for the tenant. Images with multiple locations"},{"line_number":63,"context_line":"  will count as multiple usages. Specified in Mebibytes (MiB). This"},{"line_number":64,"context_line":"  will be enforced in the image upload path, as well as the import"}],"source_content_type":"text/x-rst","patch_set":2,"id":"88fa8100_0f14facc","line":61,"range":{"start_line":61,"start_character":4,"end_line":61,"end_character":20},"in_reply_to":"c206b493_6ae6a452","updated":"2021-04-28 13:34:38.000000000","message":"No, these are set in keystone via the API (that\u0027s what unified limits are). So something like:\n\n openstack limit create image_size_total --project $ID 100\n\nThere\u0027s no HUP handling needed, they take effect immediately. If you look at my tempest tests, I change the quota during the test and probe that it takes effect immediately:\n\nhttps://review.opendev.org/c/openstack/tempest/+/788346/5/tempest/api/image/v2/test_images.py","commit_id":"030fe17312783c078119830baaa8ae850a5b52c5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"84920278c5509828a2c55afdc8a693c8b0f445d3","unresolved":true,"context_lines":[{"line_number":58,"context_line":"more can be added in the future, this spec covers the work required to"},{"line_number":59,"context_line":"add the following limits:"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"* ``image_size_total``: A limit on the storage consumed by all the"},{"line_number":62,"context_line":"  non-deleted images for the tenant. Images with multiple locations"},{"line_number":63,"context_line":"  will count as multiple usages. Specified in Mebibytes (MiB). This"},{"line_number":64,"context_line":"  will be enforced in the image upload path, as well as the import"}],"source_content_type":"text/x-rst","patch_set":2,"id":"b3d4c5eb_b863f6c8","line":61,"range":{"start_line":61,"start_character":4,"end_line":61,"end_character":20},"in_reply_to":"cbd8cd1e_d48e511b","updated":"2021-05-05 13:41:25.000000000","message":"\u003e So after studying about limits, i came to conclusion that if we try to set these through glance then we will not be able to set different limits for different tenants/projects. So I think we need to document this that if new tenant is added then admin needs to set limits for that project/tenant first.\n\nI\u0027m not sure what you mean. A limit is registered in keystone with a default. That default applies to every tenant automatically unless a specific limit for that tenant is set. So, I would register the limit of image_size\u003d1000 once, when I deploy all the services. Then, I would add (or delete) specific limits for image_size on a given tenant later. That does not need to be before the tenant starts being used, but could be.\n\n\u003e Also I guess we need to make a provision to failsafe process that if limits is enabled and it is not registered yet then it should ignore the enforcement.\n\nThe limits are registered once, at deployment time. If they\u0027re not registered, oslo_limit considers them to be zero, which means \"no quota\". The alternative would be to consider them to be \"unlimited quota\" but that would probably be more surprising to people. If they enable limits via keystone in glance\u0027s config, they need to have registered those limits (with defaults) in keystone first. See this note on the config knob:\n\nhttps://review.opendev.org/c/openstack/glance/+/788054/4/glance/common/config.py","commit_id":"030fe17312783c078119830baaa8ae850a5b52c5"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"0344d86dca5823c8dea7013b6a5ca1cb5fb4c88d","unresolved":true,"context_lines":[{"line_number":64,"context_line":"  will be enforced in the image upload path, as well as the import"},{"line_number":65,"context_line":"  path which are the APIs in which a user actually consumes more"},{"line_number":66,"context_line":"  storage."},{"line_number":67,"context_line":"* ``image_stage_total``: A limit on the storage consumed by all the"},{"line_number":68,"context_line":"  images in ``uploading`` state for the tenant. Specified in Mebibytes"},{"line_number":69,"context_line":"  (MiB). This will be enforced in the image stage path."},{"line_number":70,"context_line":"* ``image_count_total``: A limit on the total number of non-deleted"},{"line_number":71,"context_line":"  images owned by the tenant. Specified as a count of images. This"},{"line_number":72,"context_line":"  will be enforced in the image create path."}],"source_content_type":"text/x-rst","patch_set":2,"id":"1fda4582_62a115b3","line":69,"range":{"start_line":67,"start_character":0,"end_line":69,"end_character":55},"updated":"2021-04-28 06:17:31.000000000","message":"Do we really need this? I am not able to see any benefit from it.","commit_id":"030fe17312783c078119830baaa8ae850a5b52c5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4a4e44b6d854b935f7c1e3189dc314063824939a","unresolved":true,"context_lines":[{"line_number":64,"context_line":"  will be enforced in the image upload path, as well as the import"},{"line_number":65,"context_line":"  path which are the APIs in which a user actually consumes more"},{"line_number":66,"context_line":"  storage."},{"line_number":67,"context_line":"* ``image_stage_total``: A limit on the storage consumed by all the"},{"line_number":68,"context_line":"  images in ``uploading`` state for the tenant. Specified in Mebibytes"},{"line_number":69,"context_line":"  (MiB). This will be enforced in the image stage path."},{"line_number":70,"context_line":"* ``image_count_total``: A limit on the total number of non-deleted"},{"line_number":71,"context_line":"  images owned by the tenant. Specified as a count of images. This"},{"line_number":72,"context_line":"  will be enforced in the image create path."}],"source_content_type":"text/x-rst","patch_set":2,"id":"7c85fb98_aebfb22c","line":69,"range":{"start_line":67,"start_character":0,"end_line":69,"end_character":55},"in_reply_to":"1fda4582_62a115b3","updated":"2021-04-28 13:34:38.000000000","message":"I think we should because the staging area is likely very small and constrained compared to the total image storage space, especially if it\u0027s local storage on the controllers. This allows an operator to prevent a user from staging 1TiB of data and never importing it. If they choose to just limit users by total image storage and not number of images, then a user could fill the staging area without consequence.","commit_id":"030fe17312783c078119830baaa8ae850a5b52c5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"84920278c5509828a2c55afdc8a693c8b0f445d3","unresolved":true,"context_lines":[{"line_number":64,"context_line":"  will be enforced in the image upload path, as well as the import"},{"line_number":65,"context_line":"  path which are the APIs in which a user actually consumes more"},{"line_number":66,"context_line":"  storage."},{"line_number":67,"context_line":"* ``image_stage_total``: A limit on the storage consumed by all the"},{"line_number":68,"context_line":"  images in ``uploading`` state for the tenant. Specified in Mebibytes"},{"line_number":69,"context_line":"  (MiB). This will be enforced in the image stage path."},{"line_number":70,"context_line":"* ``image_count_total``: A limit on the total number of non-deleted"},{"line_number":71,"context_line":"  images owned by the tenant. Specified as a count of images. This"},{"line_number":72,"context_line":"  will be enforced in the image create path."}],"source_content_type":"text/x-rst","patch_set":2,"id":"a1034659_984cfa96","line":69,"range":{"start_line":67,"start_character":0,"end_line":69,"end_character":55},"in_reply_to":"77b43fe8_432272b7","updated":"2021-05-05 13:41:25.000000000","message":"Is there some argument for *not* doing this? I\u0027ve already written the code, so it\u0027s not like it\u0027s a large undertaking. Staging disk space is more constrained than regular disk space, so it seems like it would be pretty straightforward to want to limit its usage, especially since it\u0027s not really billable currently (for those that do).","commit_id":"030fe17312783c078119830baaa8ae850a5b52c5"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"4b7e0517a50d5f9355ccadb2a2840ad4bb772e6d","unresolved":true,"context_lines":[{"line_number":64,"context_line":"  will be enforced in the image upload path, as well as the import"},{"line_number":65,"context_line":"  path which are the APIs in which a user actually consumes more"},{"line_number":66,"context_line":"  storage."},{"line_number":67,"context_line":"* ``image_stage_total``: A limit on the storage consumed by all the"},{"line_number":68,"context_line":"  images in ``uploading`` state for the tenant. Specified in Mebibytes"},{"line_number":69,"context_line":"  (MiB). This will be enforced in the image stage path."},{"line_number":70,"context_line":"* ``image_count_total``: A limit on the total number of non-deleted"},{"line_number":71,"context_line":"  images owned by the tenant. Specified as a count of images. This"},{"line_number":72,"context_line":"  will be enforced in the image create path."}],"source_content_type":"text/x-rst","patch_set":2,"id":"77b43fe8_432272b7","line":69,"range":{"start_line":67,"start_character":0,"end_line":69,"end_character":55},"in_reply_to":"7c85fb98_aebfb22c","updated":"2021-05-04 14:38:57.000000000","message":"I would like to see opinions of other cores for the same. My view is 50-50 about having it.","commit_id":"030fe17312783c078119830baaa8ae850a5b52c5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"84920278c5509828a2c55afdc8a693c8b0f445d3","unresolved":true,"context_lines":[{"line_number":100,"context_line":"new APIs, client support, and database models. It would also run"},{"line_number":101,"context_line":"contrary to the efforts in the wider community to move towards"},{"line_number":102,"context_line":"defining all quota limits in Keystone."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"Data model impact"},{"line_number":105,"context_line":"-----------------"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"89564c96_c202fbaa","line":103,"updated":"2021-05-05 13:41:25.000000000","message":"It\u0027s not really an alternative, but we could add something to this to enforce a quota per store instead of or in addition to a global one. We would do something like check the image_size_total_$store limit (although I think I need to extend oslo_limit to allow to me check to see if that is registered, else fall back to the global).\n\nIf people think that\u0027s important for the first round of this, let me know and I\u0027ll put that in here.","commit_id":"030fe17312783c078119830baaa8ae850a5b52c5"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"0344d86dca5823c8dea7013b6a5ca1cb5fb4c88d","unresolved":true,"context_lines":[{"line_number":149,"context_line":"Other deployer impact"},{"line_number":150,"context_line":"---------------------"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"Operators will need to define the registered and actual limits for the"},{"line_number":153,"context_line":"Glance values in Keystone prior to enabling enforcement."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"Developer impact"},{"line_number":156,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"38d5ea16_825e00d6","line":153,"range":{"start_line":152,"start_character":0,"end_line":153,"end_character":56},"updated":"2021-04-28 06:17:31.000000000","message":"Also what will be the upgrade impact for this?","commit_id":"030fe17312783c078119830baaa8ae850a5b52c5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4a4e44b6d854b935f7c1e3189dc314063824939a","unresolved":true,"context_lines":[{"line_number":149,"context_line":"Other deployer impact"},{"line_number":150,"context_line":"---------------------"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"Operators will need to define the registered and actual limits for the"},{"line_number":153,"context_line":"Glance values in Keystone prior to enabling enforcement."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"Developer impact"},{"line_number":156,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"0c59d4bc_60249064","line":153,"range":{"start_line":152,"start_character":0,"end_line":153,"end_character":56},"in_reply_to":"38d5ea16_825e00d6","updated":"2021-04-28 13:34:38.000000000","message":"It\u0027s stated right here, but I\u0027ll clarify. There\u0027s no upgrade impact directly - someone can upgrade to Xena without any change. Once on Xena, if they want to enable quotas, they register them in keystone at least and then flip the config knob in Glance to start using them. No data migration required, but some users could immediately be \"over quota\" depending on what they have set quota values for.\n\nBut yeah, I will expand this out.","commit_id":"030fe17312783c078119830baaa8ae850a5b52c5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d0cfa84f039d180244536d1f0b6412bf0fefde07","unresolved":true,"context_lines":[{"line_number":175,"context_line":"* Add the ``image_stage_total`` quota enforcement to stage."},{"line_number":176,"context_line":"* Add the ``image_count_total`` quota enforcement to create."},{"line_number":177,"context_line":"* Figure out what to do about ceph snapshots which show up as zero"},{"line_number":178,"context_line":"  size."},{"line_number":179,"context_line":"* Implement configuring these quotas in devstack and integrate"},{"line_number":180,"context_line":"  testing into a job."},{"line_number":181,"context_line":"* Add operator docs to explain how to enable, configure and use these"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dce71e2d_1c980016","line":178,"updated":"2021-04-27 15:25:39.000000000","message":"Hmm, this was brought up in the PTG, but I\u0027m not sure it\u0027s really a problem:\n\n dan@guaranine:~/devstack$ openstack image show foo-snap1 -c name -c size -c properties -f yaml\n name: foo-snap1\n properties:\n   base_image_ref: 3c5a7f05-0988-427a-a356-23f8584b7b28\n   boot_roles: member,reader,admin\n   hw_machine_type: pc\n   image_location: snapshot\n   image_state: available\n   image_type: snapshot\n   instance_uuid: b647e362-37d4-4071-8ddb-d897935bd792\n   locations:\n   - metadata:\n       store: robust\n     url: rbd://b6509810-f444-4724-a559-21b37207c260/images/8a369348-2ae4-41fd-ae14-5eeb49478e51/snap\n   os_hidden: false\n   owner_project_name: demo\n   owner_user_name: admin\n   stores: robust\n   user_id: b5d4f7ae1c544265b35986af2e0547fa\n size: 1073741824\n\nThe image size is what nova considers the root disk size, so 1G here. It\u0027s technically less on the disk because of the CoW, but I think it\u0027s reasonable to tell the user it\u0027s the full size, and it matches what we\u0027d get with a flattened file-based image anyway.","commit_id":"030fe17312783c078119830baaa8ae850a5b52c5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4a4e44b6d854b935f7c1e3189dc314063824939a","unresolved":true,"context_lines":[{"line_number":175,"context_line":"* Add the ``image_stage_total`` quota enforcement to stage."},{"line_number":176,"context_line":"* Add the ``image_count_total`` quota enforcement to create."},{"line_number":177,"context_line":"* Figure out what to do about ceph snapshots which show up as zero"},{"line_number":178,"context_line":"  size."},{"line_number":179,"context_line":"* Implement configuring these quotas in devstack and integrate"},{"line_number":180,"context_line":"  testing into a job."},{"line_number":181,"context_line":"* Add operator docs to explain how to enable, configure and use these"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9d5d806a_5b2aa295","line":178,"in_reply_to":"869cd5e3_e3548825","updated":"2021-04-28 13:34:38.000000000","message":"Ah, so maybe it\u0027s a cinder issue not nova? Maybe we can get Brian to comment.","commit_id":"030fe17312783c078119830baaa8ae850a5b52c5"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"0344d86dca5823c8dea7013b6a5ca1cb5fb4c88d","unresolved":true,"context_lines":[{"line_number":175,"context_line":"* Add the ``image_stage_total`` quota enforcement to stage."},{"line_number":176,"context_line":"* Add the ``image_count_total`` quota enforcement to create."},{"line_number":177,"context_line":"* Figure out what to do about ceph snapshots which show up as zero"},{"line_number":178,"context_line":"  size."},{"line_number":179,"context_line":"* Implement configuring these quotas in devstack and integrate"},{"line_number":180,"context_line":"  testing into a job."},{"line_number":181,"context_line":"* Add operator docs to explain how to enable, configure and use these"}],"source_content_type":"text/x-rst","patch_set":2,"id":"869cd5e3_e3548825","line":178,"in_reply_to":"dce71e2d_1c980016","updated":"2021-04-28 06:17:31.000000000","message":"I think this is about https://bugs.launchpad.net/mos/+bug/1666450","commit_id":"030fe17312783c078119830baaa8ae850a5b52c5"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"4b7e0517a50d5f9355ccadb2a2840ad4bb772e6d","unresolved":true,"context_lines":[{"line_number":56,"context_line":"does not need to store or manage them. Limits are fetched from"},{"line_number":57,"context_line":"Keystone automatically and per-request by the ``oslo_limit`` library,"},{"line_number":58,"context_line":"and thus quota changes take effect immediately."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Adding new quota limits is relatively easy using this model. While"},{"line_number":61,"context_line":"more can be added in the future, this spec covers the work required to"},{"line_number":62,"context_line":"add the following limits:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"65466a27_7c915070","line":59,"updated":"2021-05-04 14:38:57.000000000","message":"I think you also need to explain about use_keystone_limits config option and it will be by default off. You need to enable it to use the limits for glance quotas.","commit_id":"4fa391f2b2a08600ebc4828414fe379d92f11336"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"cad0b5bf44350e7b8fc54882bb37f0becb8bc7be","unresolved":true,"context_lines":[{"line_number":66,"context_line":"  will count as multiple usages. Specified in Mebibytes (MiB). This"},{"line_number":67,"context_line":"  will be enforced in the image upload path, as well as the import"},{"line_number":68,"context_line":"  path which are the APIs in which a user actually consumes more"},{"line_number":69,"context_line":"  storage."},{"line_number":70,"context_line":"* ``image_stage_total``: A limit on the storage consumed by all the"},{"line_number":71,"context_line":"  images in ``uploading`` state for the tenant. Specified in Mebibytes"},{"line_number":72,"context_line":"  (MiB). This will be enforced in the image stage path."}],"source_content_type":"text/x-rst","patch_set":5,"id":"3b6c2e96_977029ac","line":69,"updated":"2021-05-06 18:44:10.000000000","message":"This maps to the current \u0027user_storage_quota\u0027.  The other size-related limit we have now is \u0027image_size_cap\u0027 which limits the largest size image a user can have.  I wonder whether something like image_size_cap would be worth doing as part of this effort.","commit_id":"6eafca3d5050f5ace2b86f4bfcdc12a706f9807b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fd13cdba03c1db3915f7fe9a15632f88147defc9","unresolved":true,"context_lines":[{"line_number":66,"context_line":"  will count as multiple usages. Specified in Mebibytes (MiB). This"},{"line_number":67,"context_line":"  will be enforced in the image upload path, as well as the import"},{"line_number":68,"context_line":"  path which are the APIs in which a user actually consumes more"},{"line_number":69,"context_line":"  storage."},{"line_number":70,"context_line":"* ``image_stage_total``: A limit on the storage consumed by all the"},{"line_number":71,"context_line":"  images in ``uploading`` state for the tenant. Specified in Mebibytes"},{"line_number":72,"context_line":"  (MiB). This will be enforced in the image stage path."}],"source_content_type":"text/x-rst","patch_set":5,"id":"787c0ca9_a5b42c0a","line":69,"in_reply_to":"3b6c2e96_977029ac","updated":"2021-05-06 19:16:46.000000000","message":"I don\u0027t think it fits well, because of the way oslo_limit works. We give it a limit name, a current value, and a requested value, and it tells us if we\u0027re over that limit or not. It doesn\u0027t provide a general purpose way to say \"tell me what this value is for this user\", although it definitely could (and will have to in order to make an API to expose the current limit along with usage).\n\nI think that what you\u0027re describing is a bit in between a config option and the limits that keystone exposes. Maybe the original authors intended to allow aribitrary things to be set like that, but you\u0027re almost on the verge of treating keystone as a generic key\u003dvalue store at that point.","commit_id":"6eafca3d5050f5ace2b86f4bfcdc12a706f9807b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"cad0b5bf44350e7b8fc54882bb37f0becb8bc7be","unresolved":true,"context_lines":[{"line_number":70,"context_line":"* ``image_stage_total``: A limit on the storage consumed by all the"},{"line_number":71,"context_line":"  images in ``uploading`` state for the tenant. Specified in Mebibytes"},{"line_number":72,"context_line":"  (MiB). This will be enforced in the image stage path."},{"line_number":73,"context_line":"* ``image_count_total``: A limit on the total number of non-deleted"},{"line_number":74,"context_line":"  images owned by the tenant. Specified as a count of images. This"},{"line_number":75,"context_line":"  will be enforced in the image create path."},{"line_number":76,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"d84b3536_76c1f206","line":73,"range":{"start_line":73,"start_character":2,"end_line":73,"end_character":23},"updated":"2021-05-06 18:44:10.000000000","message":"I really wonder about this one.  An image is only a few DB rows + data, and the data is already covered by image_size_total.  I don\u0027t want to penalize the ArchLinux user with 10MB images vs. the Windows user with 20GB images.  An operator can simply set this to -1, but I really wonder whether it\u0027s needed at all.","commit_id":"6eafca3d5050f5ace2b86f4bfcdc12a706f9807b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"887386bbd073ae0764b1d0390af22179cfd8a87d","unresolved":true,"context_lines":[{"line_number":70,"context_line":"* ``image_stage_total``: A limit on the storage consumed by all the"},{"line_number":71,"context_line":"  images in ``uploading`` state for the tenant. Specified in Mebibytes"},{"line_number":72,"context_line":"  (MiB). This will be enforced in the image stage path."},{"line_number":73,"context_line":"* ``image_count_total``: A limit on the total number of non-deleted"},{"line_number":74,"context_line":"  images owned by the tenant. Specified as a count of images. This"},{"line_number":75,"context_line":"  will be enforced in the image create path."},{"line_number":76,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"aa4ad4df_eb3d7253","line":73,"range":{"start_line":73,"start_character":2,"end_line":73,"end_character":23},"in_reply_to":"7decb7bc_40a76c9f","updated":"2021-05-06 19:27:23.000000000","message":"I should have said: If others don\u0027t want this, then I can certainly drop those patches (although the discussion below makes it sound like at least we want the staging count). However, they\u0027re already done, so throwing that away doesn\u0027t buy us much.","commit_id":"6eafca3d5050f5ace2b86f4bfcdc12a706f9807b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fd13cdba03c1db3915f7fe9a15632f88147defc9","unresolved":true,"context_lines":[{"line_number":70,"context_line":"* ``image_stage_total``: A limit on the storage consumed by all the"},{"line_number":71,"context_line":"  images in ``uploading`` state for the tenant. Specified in Mebibytes"},{"line_number":72,"context_line":"  (MiB). This will be enforced in the image stage path."},{"line_number":73,"context_line":"* ``image_count_total``: A limit on the total number of non-deleted"},{"line_number":74,"context_line":"  images owned by the tenant. Specified as a count of images. This"},{"line_number":75,"context_line":"  will be enforced in the image create path."},{"line_number":76,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"7decb7bc_40a76c9f","line":73,"range":{"start_line":73,"start_character":2,"end_line":73,"end_character":23},"in_reply_to":"d84b3536_76c1f206","updated":"2021-05-06 19:16:46.000000000","message":"Well, I was mirroring the quotas in nova (instances, a count) and neutron (subnets, networks, ports, all counts).\n\nI agree it\u0027s the least compelling, but we\u0027ve definitely had operators in nova that want the instances quota so I presume it\u0027s useful.","commit_id":"6eafca3d5050f5ace2b86f4bfcdc12a706f9807b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"cad0b5bf44350e7b8fc54882bb37f0becb8bc7be","unresolved":true,"context_lines":[{"line_number":74,"context_line":"  images owned by the tenant. Specified as a count of images. This"},{"line_number":75,"context_line":"  will be enforced in the image create path."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"Since the staging area for Glance API workers is likely to be far more"},{"line_number":78,"context_line":"constrained than the general-purpose image storage, those quotas are"},{"line_number":79,"context_line":"separated. An operator likely wants to give a user a large amount of"},{"line_number":80,"context_line":"image storage, which is backed by a sophisticated and distributed"},{"line_number":81,"context_line":"backend. However, the staging area is really \"temporary space\" which"},{"line_number":82,"context_line":"is used in the process of importing images, and is likely to be far"},{"line_number":83,"context_line":"more constrained (local disk on an API worker). By allowing a separate"},{"line_number":84,"context_line":"quota for the staging area, an operator gains the ability to provide"},{"line_number":85,"context_line":"many TiB of space for general image storage, while restricting users"},{"line_number":86,"context_line":"to a small number of import operations at a time. It helps to avoid a"},{"line_number":87,"context_line":"user staging a large amount of image data and then leaving it there"},{"line_number":88,"context_line":"for a long period of time. If staging quota is not desired, then"},{"line_number":89,"context_line":"setting it to ``-1`` in Keystone signals to ``oslo_limit`` that it"},{"line_number":90,"context_line":"should be \"unlimited.\""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"For the storage-related limits, the initial revision of this will"},{"line_number":93,"context_line":"simply enforce the quota at the beginning of the relevant long-running"}],"source_content_type":"text/x-rst","patch_set":5,"id":"a332e97d_60a78e59","line":90,"range":{"start_line":77,"start_character":0,"end_line":90,"end_character":22},"updated":"2021-05-06 18:44:10.000000000","message":"agree with this 100%","commit_id":"6eafca3d5050f5ace2b86f4bfcdc12a706f9807b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"cad0b5bf44350e7b8fc54882bb37f0becb8bc7be","unresolved":true,"context_lines":[{"line_number":89,"context_line":"setting it to ``-1`` in Keystone signals to ``oslo_limit`` that it"},{"line_number":90,"context_line":"should be \"unlimited.\""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"For the storage-related limits, the initial revision of this will"},{"line_number":93,"context_line":"simply enforce the quota at the beginning of the relevant long-running"},{"line_number":94,"context_line":"storage-using operation. If the user is already over quota, it will"},{"line_number":95,"context_line":"fail, otherwise it will allow the operation. This has the benefit of"},{"line_number":96,"context_line":"being simple and predictable, but does make the quota enforcement"},{"line_number":97,"context_line":"\"soft\" in that a user must go over the limit before they are"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3700ec53_669f2b39","line":94,"range":{"start_line":92,"start_character":0,"end_line":94,"end_character":24},"updated":"2021-05-06 18:44:10.000000000","message":"This makes me wonder whether we want something like the image_count_total to apply to non-deleted, non-active images, to limit the damage  someone could do by simultaneous imports of large images that are individually OK but collectively exceed the quota.","commit_id":"6eafca3d5050f5ace2b86f4bfcdc12a706f9807b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"887386bbd073ae0764b1d0390af22179cfd8a87d","unresolved":true,"context_lines":[{"line_number":89,"context_line":"setting it to ``-1`` in Keystone signals to ``oslo_limit`` that it"},{"line_number":90,"context_line":"should be \"unlimited.\""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"For the storage-related limits, the initial revision of this will"},{"line_number":93,"context_line":"simply enforce the quota at the beginning of the relevant long-running"},{"line_number":94,"context_line":"storage-using operation. If the user is already over quota, it will"},{"line_number":95,"context_line":"fail, otherwise it will allow the operation. This has the benefit of"},{"line_number":96,"context_line":"being simple and predictable, but does make the quota enforcement"},{"line_number":97,"context_line":"\"soft\" in that a user must go over the limit before they are"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ea97cb0d_2987d212","line":94,"range":{"start_line":92,"start_character":0,"end_line":94,"end_character":24},"in_reply_to":"3700ec53_669f2b39","updated":"2021-05-06 19:27:23.000000000","message":"Ack, this is what I have now:\n\nhttps://review.opendev.org/c/openstack/glance/+/788326/1/glance/db/sqlalchemy/api.py\n\nI guess we could separate these into image_count_total (or _active?) and image_count_staged based on your argument. I can definitely see an operator not wanting to limit your staging usage based on space, but does want you to commit to importing or not by limiting you to only two inflight importing images at a time or something. Giving you 100G of staging quota so you can import a single large image, but also letting you import 500 tiny images might defeat the utility in certain circumstances.","commit_id":"6eafca3d5050f5ace2b86f4bfcdc12a706f9807b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"cad0b5bf44350e7b8fc54882bb37f0becb8bc7be","unresolved":true,"context_lines":[{"line_number":168,"context_line":"Performance Impact"},{"line_number":169,"context_line":"------------------"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"Querying Keystone for the limits for a tenant is not free, and will"},{"line_number":172,"context_line":"introduce some dependency and latency. However, this interaction"},{"line_number":173,"context_line":"(specifically with Keystone) is in the critical path for all API usage"},{"line_number":174,"context_line":"anyway. At least initially, a configuration option will be provided to"},{"line_number":175,"context_line":"enable this behavior, defaulting to disabled."}],"source_content_type":"text/x-rst","patch_set":5,"id":"1a25299b_e34381f1","line":172,"range":{"start_line":171,"start_character":0,"end_line":172,"end_character":38},"updated":"2021-05-06 18:44:10.000000000","message":"Relative to the time it takes for an image of real-life size to go active, however, this is pretty negligible.","commit_id":"6eafca3d5050f5ace2b86f4bfcdc12a706f9807b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"cad0b5bf44350e7b8fc54882bb37f0becb8bc7be","unresolved":true,"context_lines":[{"line_number":244,"context_line":"Since per-tenant quotas in Glance do not exist yet, the docs will need"},{"line_number":245,"context_line":"to be updated to add coverage. Operators will need to know which"},{"line_number":246,"context_line":"limits to configure in Keystone, how to do that, as well as how to"},{"line_number":247,"context_line":"enable enforcing in Glance."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"References"},{"line_number":250,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"c7bab9ea_f0fce493","line":247,"updated":"2021-05-06 18:44:10.000000000","message":"You\u0027ve probably already thought of this, but \"the docs\" include the help text for the new option that enables oslo limits, plus notes in the current quota options that will be ignored when that option is enabled.","commit_id":"6eafca3d5050f5ace2b86f4bfcdc12a706f9807b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fd13cdba03c1db3915f7fe9a15632f88147defc9","unresolved":true,"context_lines":[{"line_number":244,"context_line":"Since per-tenant quotas in Glance do not exist yet, the docs will need"},{"line_number":245,"context_line":"to be updated to add coverage. Operators will need to know which"},{"line_number":246,"context_line":"limits to configure in Keystone, how to do that, as well as how to"},{"line_number":247,"context_line":"enable enforcing in Glance."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"References"},{"line_number":250,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7d6b551f_e530d988","line":247,"in_reply_to":"c7bab9ea_f0fce493","updated":"2021-05-06 19:16:46.000000000","message":"For sure :)","commit_id":"6eafca3d5050f5ace2b86f4bfcdc12a706f9807b"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"834f143c173241c1d230a1569170ab4fa0fa4659","unresolved":true,"context_lines":[{"line_number":68,"context_line":"  path which are the APIs in which a user actually consumes more"},{"line_number":69,"context_line":"  storage."},{"line_number":70,"context_line":"* ``image_stage_total``: A limit on the storage consumed by all the"},{"line_number":71,"context_line":"  images in ``uploading`` state for the tenant. Specified in Mebibytes"},{"line_number":72,"context_line":"  (MiB). This will be enforced in the image stage path."},{"line_number":73,"context_line":"* ``image_count_total``: A limit on the total number of non-deleted"},{"line_number":74,"context_line":"  images owned by the tenant. Specified as a count of images. This"}],"source_content_type":"text/x-rst","patch_set":6,"id":"d2a63631_1670ddfa","line":71,"range":{"start_line":71,"start_character":12,"end_line":71,"end_character":25},"updated":"2021-05-18 18:14:59.000000000","message":"This will not account Image Import process utilizing staging which is likely the largest portion of it.","commit_id":"a6d4897cf8c4e2472f9cecca67b662fcd38d998f"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"f3d735dc09221e3557f1614fa558be6f94eb507e","unresolved":true,"context_lines":[{"line_number":68,"context_line":"  path which are the APIs in which a user actually consumes more"},{"line_number":69,"context_line":"  storage."},{"line_number":70,"context_line":"* ``image_stage_total``: A limit on the storage consumed by all the"},{"line_number":71,"context_line":"  images in ``uploading`` state for the tenant. Specified in Mebibytes"},{"line_number":72,"context_line":"  (MiB). This will be enforced in the image stage path."},{"line_number":73,"context_line":"* ``image_count_total``: A limit on the total number of non-deleted"},{"line_number":74,"context_line":"  images owned by the tenant. Specified as a count of images. This"}],"source_content_type":"text/x-rst","patch_set":6,"id":"e113a0c4_b8bfbe35","line":71,"range":{"start_line":71,"start_character":12,"end_line":71,"end_character":25},"in_reply_to":"018c51ab_8776793c","updated":"2021-05-24 12:51:15.000000000","message":"Works for me!","commit_id":"a6d4897cf8c4e2472f9cecca67b662fcd38d998f"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"01f73ec9661dc8ce90d0fc7e6ca7ba411028b001","unresolved":true,"context_lines":[{"line_number":68,"context_line":"  path which are the APIs in which a user actually consumes more"},{"line_number":69,"context_line":"  storage."},{"line_number":70,"context_line":"* ``image_stage_total``: A limit on the storage consumed by all the"},{"line_number":71,"context_line":"  images in ``uploading`` state for the tenant. Specified in Mebibytes"},{"line_number":72,"context_line":"  (MiB). This will be enforced in the image stage path."},{"line_number":73,"context_line":"* ``image_count_total``: A limit on the total number of non-deleted"},{"line_number":74,"context_line":"  images owned by the tenant. Specified as a count of images. This"}],"source_content_type":"text/x-rst","patch_set":6,"id":"87236409_1b3c61b1","line":71,"range":{"start_line":71,"start_character":12,"end_line":71,"end_character":25},"in_reply_to":"309b7abc_8f11d782","updated":"2021-05-19 12:50:54.000000000","message":"So the problem is that all the copy jobs will use staging as well and they happen on \"active\" image (One of the holes I referred to).","commit_id":"a6d4897cf8c4e2472f9cecca67b662fcd38d998f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"76ebd5123dcb7820dd6250b903caeac5ec59e63d","unresolved":true,"context_lines":[{"line_number":68,"context_line":"  path which are the APIs in which a user actually consumes more"},{"line_number":69,"context_line":"  storage."},{"line_number":70,"context_line":"* ``image_stage_total``: A limit on the storage consumed by all the"},{"line_number":71,"context_line":"  images in ``uploading`` state for the tenant. Specified in Mebibytes"},{"line_number":72,"context_line":"  (MiB). This will be enforced in the image stage path."},{"line_number":73,"context_line":"* ``image_count_total``: A limit on the total number of non-deleted"},{"line_number":74,"context_line":"  images owned by the tenant. Specified as a count of images. This"}],"source_content_type":"text/x-rst","patch_set":6,"id":"018c51ab_8776793c","line":71,"range":{"start_line":71,"start_character":12,"end_line":71,"end_character":25},"in_reply_to":"3351c7c5_b2d6add7","updated":"2021-05-21 13:15:52.000000000","message":"Yep, as noted earlier, that\u0027s my plan. Shouldn\u0027t be hard.","commit_id":"a6d4897cf8c4e2472f9cecca67b662fcd38d998f"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"fcade72eec8cafaca6a3a6da35014526c0d2f156","unresolved":true,"context_lines":[{"line_number":68,"context_line":"  path which are the APIs in which a user actually consumes more"},{"line_number":69,"context_line":"  storage."},{"line_number":70,"context_line":"* ``image_stage_total``: A limit on the storage consumed by all the"},{"line_number":71,"context_line":"  images in ``uploading`` state for the tenant. Specified in Mebibytes"},{"line_number":72,"context_line":"  (MiB). This will be enforced in the image stage path."},{"line_number":73,"context_line":"* ``image_count_total``: A limit on the total number of non-deleted"},{"line_number":74,"context_line":"  images owned by the tenant. Specified as a count of images. This"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3351c7c5_b2d6add7","line":71,"range":{"start_line":71,"start_character":12,"end_line":71,"end_character":25},"in_reply_to":"87236409_1b3c61b1","updated":"2021-05-20 23:00:30.000000000","message":"How about if we look at \u0027active\u0027 images that also have the \u0027os_glance_importing_to_stores\u0027 image property on them?  We\u0027d also know their size since they\u0027re already active images.","commit_id":"a6d4897cf8c4e2472f9cecca67b662fcd38d998f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b8916043e4aa5094383684d00d0b01b53d8c1304","unresolved":true,"context_lines":[{"line_number":68,"context_line":"  path which are the APIs in which a user actually consumes more"},{"line_number":69,"context_line":"  storage."},{"line_number":70,"context_line":"* ``image_stage_total``: A limit on the storage consumed by all the"},{"line_number":71,"context_line":"  images in ``uploading`` state for the tenant. Specified in Mebibytes"},{"line_number":72,"context_line":"  (MiB). This will be enforced in the image stage path."},{"line_number":73,"context_line":"* ``image_count_total``: A limit on the total number of non-deleted"},{"line_number":74,"context_line":"  images owned by the tenant. Specified as a count of images. This"}],"source_content_type":"text/x-rst","patch_set":6,"id":"309b7abc_8f11d782","line":71,"range":{"start_line":71,"start_character":12,"end_line":71,"end_character":25},"in_reply_to":"d2a63631_1670ddfa","updated":"2021-05-18 18:59:14.000000000","message":"Will include importing status here and below.","commit_id":"a6d4897cf8c4e2472f9cecca67b662fcd38d998f"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"834f143c173241c1d230a1569170ab4fa0fa4659","unresolved":true,"context_lines":[{"line_number":77,"context_line":"  currently in either the ``uploading`` or ``saving`` state by the"},{"line_number":78,"context_line":"  tenant. Specified as a count of images. This will be enforced in the"},{"line_number":79,"context_line":"  image upload and stage paths, and will provide a limit on the number"},{"line_number":80,"context_line":"  of images that can be adding external data to the system at any"},{"line_number":81,"context_line":"  given point."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"Since the staging area for Glance API workers is likely to be far more"},{"line_number":84,"context_line":"constrained than the general-purpose image storage, those quotas are"}],"source_content_type":"text/x-rst","patch_set":6,"id":"c9bc4213_41d83b9d","line":81,"range":{"start_line":80,"start_character":12,"end_line":81,"end_character":14},"updated":"2021-05-18 18:14:59.000000000","message":"In case of \u0027web-download\u0027 import method, \u0027importing\u0027 state might do that as well.","commit_id":"a6d4897cf8c4e2472f9cecca67b662fcd38d998f"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"fcade72eec8cafaca6a3a6da35014526c0d2f156","unresolved":true,"context_lines":[{"line_number":77,"context_line":"  currently in either the ``uploading`` or ``saving`` state by the"},{"line_number":78,"context_line":"  tenant. Specified as a count of images. This will be enforced in the"},{"line_number":79,"context_line":"  image upload and stage paths, and will provide a limit on the number"},{"line_number":80,"context_line":"  of images that can be adding external data to the system at any"},{"line_number":81,"context_line":"  given point."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"Since the staging area for Glance API workers is likely to be far more"},{"line_number":84,"context_line":"constrained than the general-purpose image storage, those quotas are"}],"source_content_type":"text/x-rst","patch_set":6,"id":"49b77ea9_6c3b737a","line":81,"range":{"start_line":80,"start_character":12,"end_line":81,"end_character":14},"in_reply_to":"626a6256_df37efb3","updated":"2021-05-20 23:00:30.000000000","message":"OK, so it would be \u0027uploading\u0027 + \u0027saving\u0027 + \u0027importing\u0027, and detect the copy-image operations by either looking at the current tasks, or by looking at \u0027active\u0027 images with \u0027os_glance_importing_to_stores\u0027 property.","commit_id":"a6d4897cf8c4e2472f9cecca67b662fcd38d998f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b8916043e4aa5094383684d00d0b01b53d8c1304","unresolved":true,"context_lines":[{"line_number":77,"context_line":"  currently in either the ``uploading`` or ``saving`` state by the"},{"line_number":78,"context_line":"  tenant. Specified as a count of images. This will be enforced in the"},{"line_number":79,"context_line":"  image upload and stage paths, and will provide a limit on the number"},{"line_number":80,"context_line":"  of images that can be adding external data to the system at any"},{"line_number":81,"context_line":"  given point."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"Since the staging area for Glance API workers is likely to be far more"},{"line_number":84,"context_line":"constrained than the general-purpose image storage, those quotas are"}],"source_content_type":"text/x-rst","patch_set":6,"id":"626a6256_df37efb3","line":81,"range":{"start_line":80,"start_character":12,"end_line":81,"end_character":14},"in_reply_to":"c9bc4213_41d83b9d","updated":"2021-05-18 18:59:14.000000000","message":"Ack, yep.","commit_id":"a6d4897cf8c4e2472f9cecca67b662fcd38d998f"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"e9c686e1e64008c8f90d3b1859af6a2750f730dc","unresolved":true,"context_lines":[{"line_number":117,"context_line":"hard limits during or after a transfer could be done as a follow-on"},{"line_number":118,"context_line":"effort."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"One optional step we could take to mitigate the concern of going over"},{"line_number":121,"context_line":"the limit when a user is near quota, would be to add a presumptive"},{"line_number":122,"context_line":"size of the image we use for the quota check. Meaning, when we go to"},{"line_number":123,"context_line":"check the quota before image upload, if we do not know the image size,"},{"line_number":124,"context_line":"we use some configurable value, set by the operator, to test the"},{"line_number":125,"context_line":"limit. If this is set to 1GiB, then a user with 1GiB or less of quota"},{"line_number":126,"context_line":"remaining would not be able to upload any images. This would default"},{"line_number":127,"context_line":"to zero (behavior proposed above), but could be set to create a more"},{"line_number":128,"context_line":"restrictive enforcement model, if desired. The communication of this"},{"line_number":129,"context_line":"to the user will be somewhat confusing, as most will expect to be able"},{"line_number":130,"context_line":"to use quota they have available for any purpose, but it is an option."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"Honoring these limits will be conditional based on a configuration"},{"line_number":133,"context_line":"option. By default limit quotas will be disabled, which will most"}],"source_content_type":"text/x-rst","patch_set":6,"id":"d5117429_ef57a75b","line":130,"range":{"start_line":120,"start_character":0,"end_line":130,"end_character":70},"updated":"2021-05-17 05:24:49.000000000","message":"This sounds little bit strange.\nI think it\u0027s better to underline it as a drawback in the documentation.","commit_id":"a6d4897cf8c4e2472f9cecca67b662fcd38d998f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"76ebd5123dcb7820dd6250b903caeac5ec59e63d","unresolved":true,"context_lines":[{"line_number":117,"context_line":"hard limits during or after a transfer could be done as a follow-on"},{"line_number":118,"context_line":"effort."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"One optional step we could take to mitigate the concern of going over"},{"line_number":121,"context_line":"the limit when a user is near quota, would be to add a presumptive"},{"line_number":122,"context_line":"size of the image we use for the quota check. Meaning, when we go to"},{"line_number":123,"context_line":"check the quota before image upload, if we do not know the image size,"},{"line_number":124,"context_line":"we use some configurable value, set by the operator, to test the"},{"line_number":125,"context_line":"limit. If this is set to 1GiB, then a user with 1GiB or less of quota"},{"line_number":126,"context_line":"remaining would not be able to upload any images. This would default"},{"line_number":127,"context_line":"to zero (behavior proposed above), but could be set to create a more"},{"line_number":128,"context_line":"restrictive enforcement model, if desired. The communication of this"},{"line_number":129,"context_line":"to the user will be somewhat confusing, as most will expect to be able"},{"line_number":130,"context_line":"to use quota they have available for any purpose, but it is an option."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"Honoring these limits will be conditional based on a configuration"},{"line_number":133,"context_line":"option. By default limit quotas will be disabled, which will most"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f205fb1_8344a1b5","line":130,"range":{"start_line":120,"start_character":0,"end_line":130,"end_character":70},"in_reply_to":"192b76a2_fd29542e","updated":"2021-05-21 13:15:52.000000000","message":"Yep, agree with all the comments here that it would be awkward, I was just trying to come up with options to address concerns. Sounds like I can just remove this paragraph.","commit_id":"a6d4897cf8c4e2472f9cecca67b662fcd38d998f"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"fcade72eec8cafaca6a3a6da35014526c0d2f156","unresolved":true,"context_lines":[{"line_number":117,"context_line":"hard limits during or after a transfer could be done as a follow-on"},{"line_number":118,"context_line":"effort."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"One optional step we could take to mitigate the concern of going over"},{"line_number":121,"context_line":"the limit when a user is near quota, would be to add a presumptive"},{"line_number":122,"context_line":"size of the image we use for the quota check. Meaning, when we go to"},{"line_number":123,"context_line":"check the quota before image upload, if we do not know the image size,"},{"line_number":124,"context_line":"we use some configurable value, set by the operator, to test the"},{"line_number":125,"context_line":"limit. If this is set to 1GiB, then a user with 1GiB or less of quota"},{"line_number":126,"context_line":"remaining would not be able to upload any images. This would default"},{"line_number":127,"context_line":"to zero (behavior proposed above), but could be set to create a more"},{"line_number":128,"context_line":"restrictive enforcement model, if desired. The communication of this"},{"line_number":129,"context_line":"to the user will be somewhat confusing, as most will expect to be able"},{"line_number":130,"context_line":"to use quota they have available for any purpose, but it is an option."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"Honoring these limits will be conditional based on a configuration"},{"line_number":133,"context_line":"option. By default limit quotas will be disabled, which will most"}],"source_content_type":"text/x-rst","patch_set":6,"id":"192b76a2_fd29542e","line":130,"range":{"start_line":120,"start_character":0,"end_line":130,"end_character":70},"in_reply_to":"314b44f5_0bf0ab33","updated":"2021-05-20 23:00:30.000000000","message":"This would be really frustrating when I\u0027m trying to upload a 10M image and I know I\u0027ve got 900M left in my quota, but I get rejected anyway because this config value is set at 1G.\n\nWe just need to explain to operators that the image_count_uploading is a kind of proxy for the amount of stage that can be consumed, but it\u0027s an inexact proxy.  The alternative would be to only allow import methods that know the size of the data before it hits the stage, which I guess would be copy-image and web-download (though I don\u0027t think they do this currently).  Or as you mentioned somewhere, we could modify upload/stage to require the user to specify how big the file is in advance.","commit_id":"a6d4897cf8c4e2472f9cecca67b662fcd38d998f"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"f3d735dc09221e3557f1614fa558be6f94eb507e","unresolved":true,"context_lines":[{"line_number":117,"context_line":"hard limits during or after a transfer could be done as a follow-on"},{"line_number":118,"context_line":"effort."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"One optional step we could take to mitigate the concern of going over"},{"line_number":121,"context_line":"the limit when a user is near quota, would be to add a presumptive"},{"line_number":122,"context_line":"size of the image we use for the quota check. Meaning, when we go to"},{"line_number":123,"context_line":"check the quota before image upload, if we do not know the image size,"},{"line_number":124,"context_line":"we use some configurable value, set by the operator, to test the"},{"line_number":125,"context_line":"limit. If this is set to 1GiB, then a user with 1GiB or less of quota"},{"line_number":126,"context_line":"remaining would not be able to upload any images. This would default"},{"line_number":127,"context_line":"to zero (behavior proposed above), but could be set to create a more"},{"line_number":128,"context_line":"restrictive enforcement model, if desired. The communication of this"},{"line_number":129,"context_line":"to the user will be somewhat confusing, as most will expect to be able"},{"line_number":130,"context_line":"to use quota they have available for any purpose, but it is an option."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"Honoring these limits will be conditional based on a configuration"},{"line_number":133,"context_line":"option. By default limit quotas will be disabled, which will most"}],"source_content_type":"text/x-rst","patch_set":6,"id":"924a3281_64476a87","line":130,"range":{"start_line":120,"start_character":0,"end_line":130,"end_character":70},"in_reply_to":"3f205fb1_8344a1b5","updated":"2021-05-24 12:51:15.000000000","message":"I\u0027m OK with dropping this paragraph; you may want to add a note to the doc impact section about \"need to explain the soft limit and what knobs are available to control filling up the stage\".","commit_id":"a6d4897cf8c4e2472f9cecca67b662fcd38d998f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b8916043e4aa5094383684d00d0b01b53d8c1304","unresolved":true,"context_lines":[{"line_number":117,"context_line":"hard limits during or after a transfer could be done as a follow-on"},{"line_number":118,"context_line":"effort."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"One optional step we could take to mitigate the concern of going over"},{"line_number":121,"context_line":"the limit when a user is near quota, would be to add a presumptive"},{"line_number":122,"context_line":"size of the image we use for the quota check. Meaning, when we go to"},{"line_number":123,"context_line":"check the quota before image upload, if we do not know the image size,"},{"line_number":124,"context_line":"we use some configurable value, set by the operator, to test the"},{"line_number":125,"context_line":"limit. If this is set to 1GiB, then a user with 1GiB or less of quota"},{"line_number":126,"context_line":"remaining would not be able to upload any images. This would default"},{"line_number":127,"context_line":"to zero (behavior proposed above), but could be set to create a more"},{"line_number":128,"context_line":"restrictive enforcement model, if desired. The communication of this"},{"line_number":129,"context_line":"to the user will be somewhat confusing, as most will expect to be able"},{"line_number":130,"context_line":"to use quota they have available for any purpose, but it is an option."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"Honoring these limits will be conditional based on a configuration"},{"line_number":133,"context_line":"option. By default limit quotas will be disabled, which will most"}],"source_content_type":"text/x-rst","patch_set":6,"id":"314b44f5_0bf0ab33","line":130,"range":{"start_line":120,"start_character":0,"end_line":130,"end_character":70},"in_reply_to":"816fbc18_5e1c0f4c","updated":"2021-05-18 18:59:14.000000000","message":"I\u0027m referring to the situation where we\u0027ve been told what the image size is at upload time.\n\nBut I agree that because glance allows uploading an image of unknown size, we\u0027re really in a tough spot to provide a hard quota limit, so a soft limit is the obvious first improvement we can make.","commit_id":"a6d4897cf8c4e2472f9cecca67b662fcd38d998f"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"834f143c173241c1d230a1569170ab4fa0fa4659","unresolved":true,"context_lines":[{"line_number":117,"context_line":"hard limits during or after a transfer could be done as a follow-on"},{"line_number":118,"context_line":"effort."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"One optional step we could take to mitigate the concern of going over"},{"line_number":121,"context_line":"the limit when a user is near quota, would be to add a presumptive"},{"line_number":122,"context_line":"size of the image we use for the quota check. Meaning, when we go to"},{"line_number":123,"context_line":"check the quota before image upload, if we do not know the image size,"},{"line_number":124,"context_line":"we use some configurable value, set by the operator, to test the"},{"line_number":125,"context_line":"limit. If this is set to 1GiB, then a user with 1GiB or less of quota"},{"line_number":126,"context_line":"remaining would not be able to upload any images. This would default"},{"line_number":127,"context_line":"to zero (behavior proposed above), but could be set to create a more"},{"line_number":128,"context_line":"restrictive enforcement model, if desired. The communication of this"},{"line_number":129,"context_line":"to the user will be somewhat confusing, as most will expect to be able"},{"line_number":130,"context_line":"to use quota they have available for any purpose, but it is an option."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"Honoring these limits will be conditional based on a configuration"},{"line_number":133,"context_line":"option. By default limit quotas will be disabled, which will most"}],"source_content_type":"text/x-rst","patch_set":6,"id":"816fbc18_5e1c0f4c","line":130,"range":{"start_line":120,"start_character":0,"end_line":130,"end_character":70},"in_reply_to":"d5117429_ef57a75b","updated":"2021-05-18 18:14:59.000000000","message":"Not only that, but the image_size is read-only property so we will never get the size beforehand.","commit_id":"a6d4897cf8c4e2472f9cecca67b662fcd38d998f"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"834f143c173241c1d230a1569170ab4fa0fa4659","unresolved":true,"context_lines":[{"line_number":129,"context_line":"to the user will be somewhat confusing, as most will expect to be able"},{"line_number":130,"context_line":"to use quota they have available for any purpose, but it is an option."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"Honoring these limits will be conditional based on a configuration"},{"line_number":133,"context_line":"option. By default limit quotas will be disabled, which will most"},{"line_number":134,"context_line":"easily facilitate upgrades. When disabled, nothing will be different"},{"line_number":135,"context_line":"from how it is today. When enabled, Glance will fetch limits from"},{"line_number":136,"context_line":"Keystone, expecting the operator has registered them as prescribed,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"e4f4c140_1ab132d4","line":133,"range":{"start_line":132,"start_character":53,"end_line":133,"end_character":7},"updated":"2021-05-18 18:14:59.000000000","message":"Could we rather just use the information if the said limits has been set in Keystone as condition? While I\u0027m normally ok with having new features behind config option this kind of sounds like one of those cases where we just bloat the config file.\n\nAs in if the limits have not been set, we do operate like always before, but if they have been initialized, we enforce them.","commit_id":"a6d4897cf8c4e2472f9cecca67b662fcd38d998f"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"01f73ec9661dc8ce90d0fc7e6ca7ba411028b001","unresolved":true,"context_lines":[{"line_number":129,"context_line":"to the user will be somewhat confusing, as most will expect to be able"},{"line_number":130,"context_line":"to use quota they have available for any purpose, but it is an option."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"Honoring these limits will be conditional based on a configuration"},{"line_number":133,"context_line":"option. By default limit quotas will be disabled, which will most"},{"line_number":134,"context_line":"easily facilitate upgrades. When disabled, nothing will be different"},{"line_number":135,"context_line":"from how it is today. When enabled, Glance will fetch limits from"},{"line_number":136,"context_line":"Keystone, expecting the operator has registered them as prescribed,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"f3ea99ff_b26ba93c","line":133,"range":{"start_line":132,"start_character":53,"end_line":133,"end_character":7},"in_reply_to":"2a9bb41b_b0d37b4f","updated":"2021-05-19 12:50:54.000000000","message":"Ooof ... gr8 yeah then this unfortunately makes sense. And it\u0027s not the single boolean in our config object but the dozen lines extra fluff into the config file to make that single boolean happening.","commit_id":"a6d4897cf8c4e2472f9cecca67b662fcd38d998f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b8916043e4aa5094383684d00d0b01b53d8c1304","unresolved":true,"context_lines":[{"line_number":129,"context_line":"to the user will be somewhat confusing, as most will expect to be able"},{"line_number":130,"context_line":"to use quota they have available for any purpose, but it is an option."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"Honoring these limits will be conditional based on a configuration"},{"line_number":133,"context_line":"option. By default limit quotas will be disabled, which will most"},{"line_number":134,"context_line":"easily facilitate upgrades. When disabled, nothing will be different"},{"line_number":135,"context_line":"from how it is today. When enabled, Glance will fetch limits from"},{"line_number":136,"context_line":"Keystone, expecting the operator has registered them as prescribed,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"2a9bb41b_b0d37b4f","line":133,"range":{"start_line":132,"start_character":53,"end_line":133,"end_character":7},"in_reply_to":"e4f4c140_1ab132d4","updated":"2021-05-18 18:59:14.000000000","message":"We don\u0027t really get to know this directly. Unified limits aren\u0027t supposed to be optional, and as such, oslo-limit hides a missing limit as \"no quota\" from us to prevent forgetting to set a limit and having a runaway usage type issue.\n\nWe could extend oslo-limit to expose this, or probe keystone itself for that information, but all of that seems a little overkill to avoid a single boolean config toggle. The latter also avoids us constantly asking keystone whether a limit is set in the case where an operator doesn\u0027t want to have quotas enabled.","commit_id":"a6d4897cf8c4e2472f9cecca67b662fcd38d998f"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"834f143c173241c1d230a1569170ab4fa0fa4659","unresolved":true,"context_lines":[{"line_number":236,"context_line":"* Add the ``image_count_total`` quota enforcement to create."},{"line_number":237,"context_line":"* Add the ``image_count_uploading`` quota enforcement to stage and"},{"line_number":238,"context_line":"  upload."},{"line_number":239,"context_line":"* Figure out what to do about ceph snapshots which show up as zero"},{"line_number":240,"context_line":"  size."},{"line_number":241,"context_line":"* Add tempest support for limits and tests for these quotas."},{"line_number":242,"context_line":"* Implement configuring these quotas in devstack and integrate"},{"line_number":243,"context_line":"  testing into a job."}],"source_content_type":"text/x-rst","patch_set":6,"id":"10eb6743_74fdff2d","line":240,"range":{"start_line":239,"start_character":2,"end_line":240,"end_character":7},"updated":"2021-05-18 18:14:59.000000000","message":"++ thanks for capturing this issue here!","commit_id":"a6d4897cf8c4e2472f9cecca67b662fcd38d998f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b8916043e4aa5094383684d00d0b01b53d8c1304","unresolved":true,"context_lines":[{"line_number":236,"context_line":"* Add the ``image_count_total`` quota enforcement to create."},{"line_number":237,"context_line":"* Add the ``image_count_uploading`` quota enforcement to stage and"},{"line_number":238,"context_line":"  upload."},{"line_number":239,"context_line":"* Figure out what to do about ceph snapshots which show up as zero"},{"line_number":240,"context_line":"  size."},{"line_number":241,"context_line":"* Add tempest support for limits and tests for these quotas."},{"line_number":242,"context_line":"* Implement configuring these quotas in devstack and integrate"},{"line_number":243,"context_line":"  testing into a job."}],"source_content_type":"text/x-rst","patch_set":6,"id":"fca2d306_528db4ec","line":240,"range":{"start_line":239,"start_character":2,"end_line":240,"end_character":7},"in_reply_to":"10eb6743_74fdff2d","updated":"2021-05-18 18:59:14.000000000","message":"Sure, but FWIW, I couldn\u0027t reproduce it myself and I asked Rajat if he knew anything about cinder problems related to this and he didn\u0027t.\n\nSo, if you have more information, it\u0027d be good to expose that so I can document it here and account for it.","commit_id":"a6d4897cf8c4e2472f9cecca67b662fcd38d998f"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"4e780cfe2fbf4f0d950af140ce1c4a4b6ac66f52","unresolved":true,"context_lines":[{"line_number":174,"context_line":"since they are already possible due to the existing limits, there is"},{"line_number":175,"context_line":"effectively no change."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"A future effort should add a quota usage API to allow clients to check"},{"line_number":178,"context_line":"consumption against their limits."},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"Security impact"},{"line_number":181,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"bc701831_a6aa3ad7","line":178,"range":{"start_line":177,"start_character":0,"end_line":178,"end_character":33},"updated":"2021-05-24 13:58:30.000000000","message":"+1 for this","commit_id":"a6eefb34a211cd37c4711d627c04ee5d7dbcae04"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"4e780cfe2fbf4f0d950af140ce1c4a4b6ac66f52","unresolved":true,"context_lines":[{"line_number":243,"context_line":"* Add the ``image_size_total`` quota enforcement to upload and import."},{"line_number":244,"context_line":"* Add the ``image_stage_total`` quota enforcement to stage."},{"line_number":245,"context_line":"* Add the ``image_count_total`` quota enforcement to create."},{"line_number":246,"context_line":"* Add the ``image_count_uploading`` quota enforcement to stage and"},{"line_number":247,"context_line":"  upload."},{"line_number":248,"context_line":"* Figure out what to do about ceph snapshots which show up as zero"},{"line_number":249,"context_line":"  size."}],"source_content_type":"text/x-rst","patch_set":8,"id":"55aae940_1eb1a9b6","line":246,"range":{"start_line":246,"start_character":12,"end_line":246,"end_character":33},"updated":"2021-05-24 13:58:30.000000000","message":"I guess importing_to_store is missing from here, but can be added if new spin is required.","commit_id":"a6eefb34a211cd37c4711d627c04ee5d7dbcae04"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"11de97351868088e1f694ff81f075fafd589e7bf","unresolved":true,"context_lines":[{"line_number":243,"context_line":"* Add the ``image_size_total`` quota enforcement to upload and import."},{"line_number":244,"context_line":"* Add the ``image_stage_total`` quota enforcement to stage."},{"line_number":245,"context_line":"* Add the ``image_count_total`` quota enforcement to create."},{"line_number":246,"context_line":"* Add the ``image_count_uploading`` quota enforcement to stage and"},{"line_number":247,"context_line":"  upload."},{"line_number":248,"context_line":"* Figure out what to do about ceph snapshots which show up as zero"},{"line_number":249,"context_line":"  size."}],"source_content_type":"text/x-rst","patch_set":8,"id":"3a50953a_5d0008c4","line":246,"range":{"start_line":246,"start_character":12,"end_line":246,"end_character":33},"in_reply_to":"55aae940_1eb1a9b6","updated":"2021-05-24 14:09:50.000000000","message":"I\u0027m counting the actual importing operation as part of the upload here, so I\u0027m expecting an in-progress import to count against your staging/uploading quota until it\u0027s done. But yep, if I respin I will make that clear.","commit_id":"a6eefb34a211cd37c4711d627c04ee5d7dbcae04"}]}
