)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":12,"context_line":"becomes even more important when considering Edge Computing"},{"line_number":13,"context_line":"environments, limited bandwidth, as well as high-scale rapid"},{"line_number":14,"context_line":"application deployment."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Ice4d23b1397e97d4f39a9d8c9f01ee2ac1534ce0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3fa7e38b_1672af12","line":15,"updated":"2019-10-02 18:55:59.000000000","message":"Should have the APIImpact tag in here and link to the blueprint (once you create it in launchpad).","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1978e04fe66ba3d204805536b51f144a8e55e85d","unresolved":false,"context_lines":[{"line_number":12,"context_line":"becomes even more important when considering Edge Computing"},{"line_number":13,"context_line":"environments, limited bandwidth, as well as high-scale rapid"},{"line_number":14,"context_line":"application deployment."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Ice4d23b1397e97d4f39a9d8c9f01ee2ac1534ce0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3fa7e38b_8c49b28c","line":15,"updated":"2019-10-02 20:14:01.000000000","message":"[From PS1] Should have the APIImpact tag in here and link to the blueprint (once you create it in launchpad).","commit_id":"ad82f9ed954307efae535f3a07a06191de9a4f36"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"de798916d7e88b7b2b8f7d9178ba9d0588888736","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"APIImpact"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Related to blueprint https://blueprints.launchpad.net/nova/+spec/image-precache-support"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: Ice4d23b1397e97d4f39a9d8c9f01ee2ac1534ce0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3fa7e38b_e2bdcd02","line":18,"range":{"start_line":18,"start_character":21,"end_line":18,"end_character":65},"updated":"2019-10-02 20:51:29.000000000","message":"nit: could nix this part","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"936b1a3091b32a5fb2456d2f1a42d62cabb0c322","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"APIImpact"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Related to blueprint https://blueprints.launchpad.net/nova/+spec/image-precache-support"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: Ice4d23b1397e97d4f39a9d8c9f01ee2ac1534ce0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3fa7e38b_f2027109","line":18,"range":{"start_line":18,"start_character":21,"end_line":18,"end_character":65},"in_reply_to":"3fa7e38b_a2ba75de","updated":"2019-10-03 18:54:01.000000000","message":"hehe gerrit syntax hylighted \"blueprint too\" in your coment but it still does not syntax highlight link in the commit message.\n\nwe ignore urls for line limts so it wont break anything but ya it could be fixed but its a nit.","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0b459b1567a4b7688addd1ca6b6d49ffd0285d42","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"APIImpact"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Related to blueprint https://blueprints.launchpad.net/nova/+spec/image-precache-support"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: Ice4d23b1397e97d4f39a9d8c9f01ee2ac1534ce0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3fa7e38b_a2ba75de","line":18,"range":{"start_line":18,"start_character":21,"end_line":18,"end_character":65},"in_reply_to":"3fa7e38b_e2bdcd02","updated":"2019-10-02 20:53:26.000000000","message":"Sorry, I took \"link in the blueprint too literally\". I will if I respin.","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"}],"specs/ussuri/approved/image-precache-support.rst":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":29,"context_line":"cached copy of the base image instead of downloading it again from"},{"line_number":30,"context_line":"Glance. This behavior provides the following benefits:"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":" - Decreased load on the Glance server(s)"},{"line_number":33,"context_line":" - Decreased network utilization"},{"line_number":34,"context_line":" - Decreased time-to-boot latency for the second and subsequent"},{"line_number":35,"context_line":"   instances"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_3687abb9","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":1},"updated":"2019-10-02 18:55:59.000000000","message":"nix the space, it messes up formatting","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":34,"context_line":" - Decreased time-to-boot latency for the second and subsequent"},{"line_number":35,"context_line":"   instances"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"The latter is particularly important for situations where new"},{"line_number":38,"context_line":"application rollouts must be performed within a specific time window,"},{"line_number":39,"context_line":"or where scale-up operations are expected to happen quickly in"},{"line_number":40,"context_line":"response to changing load conditions. Specifically, it can be"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_f67ef3ad","line":37,"updated":"2019-10-02 18:55:59.000000000","message":"I was going to say something about the latter one being important because of big windows images etc but you\u0027ve already covered why that one is particularly important so fine with me.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Because Nova does not provide a way to seed this process from the"},{"line_number":53,"context_line":"outside, operators are currently forced to hack around the"},{"line_number":54,"context_line":"problem. Some of the workarounds we know are being used include:"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":" - Pre-booting throwaway instances on each compute node by hand to"},{"line_number":57,"context_line":"   seed the cache before deploying the real ones"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_f11a7d6d","line":54,"range":{"start_line":54,"start_character":56,"end_line":54,"end_character":63},"updated":"2019-10-02 18:55:59.000000000","message":"There is another one I think related to this is using a shared file system like NFS for the instance image directory within an aggregate of compute hosts so that once the image is one one host in the share it\u0027s on all of them, but this can lead to cache management and collision problems - I\u0027m thinking of this bug:\n\nhttps://bugs.launchpad.net/nova/+bug/1804262","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":53,"context_line":"outside, operators are currently forced to hack around the"},{"line_number":54,"context_line":"problem. Some of the workarounds we know are being used include:"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":" - Pre-booting throwaway instances on each compute node by hand to"},{"line_number":57,"context_line":"   seed the cache before deploying the real ones"},{"line_number":58,"context_line":" - Copying the images directly into the cache directories on the"},{"line_number":59,"context_line":"   compute nodes out of band"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_f657d325","line":56,"range":{"start_line":56,"start_character":0,"end_line":56,"end_character":1},"updated":"2019-10-02 18:55:59.000000000","message":"same","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":54,"context_line":"problem. Some of the workarounds we know are being used include:"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":" - Pre-booting throwaway instances on each compute node by hand to"},{"line_number":57,"context_line":"   seed the cache before deploying the real ones"},{"line_number":58,"context_line":" - Copying the images directly into the cache directories on the"},{"line_number":59,"context_line":"   compute nodes out of band"},{"line_number":60,"context_line":" - Modifying the Nova code themselves to provide this functionality"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_96177f52","line":57,"updated":"2019-10-02 18:55:59.000000000","message":"Notably this has the downside of potentially taking a node out of rotation during scheduling because of the BuildFailureWeigher.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":56,"context_line":" - Pre-booting throwaway instances on each compute node by hand to"},{"line_number":57,"context_line":"   seed the cache before deploying the real ones"},{"line_number":58,"context_line":" - Copying the images directly into the cache directories on the"},{"line_number":59,"context_line":"   compute nodes out of band"},{"line_number":60,"context_line":" - Modifying the Nova code themselves to provide this functionality"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_5609072f","line":59,"updated":"2019-10-02 18:55:59.000000000","message":"This is the case where people are using things like ansible right? One obvious downside to this is tightly coupling the deployment/config management tooling to how the internals of nova work and if those internals change the deployment tooling is broken.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e11fd49c0659a3265e9368e5bcc459bbbe5a55ec","unresolved":false,"context_lines":[{"line_number":56,"context_line":" - Pre-booting throwaway instances on each compute node by hand to"},{"line_number":57,"context_line":"   seed the cache before deploying the real ones"},{"line_number":58,"context_line":" - Copying the images directly into the cache directories on the"},{"line_number":59,"context_line":"   compute nodes out of band"},{"line_number":60,"context_line":" - Modifying the Nova code themselves to provide this functionality"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_0ce2a230","line":59,"in_reply_to":"3fa7e38b_5609072f","updated":"2019-10-02 19:30:59.000000000","message":"Yup","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":57,"context_line":"   seed the cache before deploying the real ones"},{"line_number":58,"context_line":" - Copying the images directly into the cache directories on the"},{"line_number":59,"context_line":"   compute nodes out of band"},{"line_number":60,"context_line":" - Modifying the Nova code themselves to provide this functionality"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"Use Cases"},{"line_number":63,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_71076d1a","line":60,"updated":"2019-10-02 18:55:59.000000000","message":"e.g. external API extensions right (Workday?):\n\nhttps://www.openstack.org/videos/summits/berlin-2018/workday-private-cloud-operational-and-scaling-challenges-of-growing-from-50k-to-300k","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e11fd49c0659a3265e9368e5bcc459bbbe5a55ec","unresolved":false,"context_lines":[{"line_number":57,"context_line":"   seed the cache before deploying the real ones"},{"line_number":58,"context_line":" - Copying the images directly into the cache directories on the"},{"line_number":59,"context_line":"   compute nodes out of band"},{"line_number":60,"context_line":" - Modifying the Nova code themselves to provide this functionality"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"Use Cases"},{"line_number":63,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_8ccf72af","line":60,"in_reply_to":"3fa7e38b_71076d1a","updated":"2019-10-02 19:30:59.000000000","message":"Yes, included in the references section","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":79,"context_line":"failed to gain traction amongst the team for various reasons. Thus,"},{"line_number":80,"context_line":"this spec proposes a minimally viable initial implementation which"},{"line_number":81,"context_line":"addresses the need for pre-caching, but does not provide specific"},{"line_number":82,"context_line":"visibility, reporting, scheduling, or other advanced features."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"Initially we will add a mechanism to Nova, by which a user can request"},{"line_number":85,"context_line":"that a set of images be cached on the set of compute nodes contained"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_915a2928","line":82,"range":{"start_line":82,"start_character":23,"end_line":82,"end_character":33},"updated":"2019-10-02 18:55:59.000000000","message":"Right, I have seen a few old blueprints in launchpad related to this by reporting metadata from the computes to the scheduler to tell the scheduler if an image is already there or not and weigh accordingly to avoid downloading the image if it\u0027s already on an acceptable host.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e11fd49c0659a3265e9368e5bcc459bbbe5a55ec","unresolved":false,"context_lines":[{"line_number":79,"context_line":"failed to gain traction amongst the team for various reasons. Thus,"},{"line_number":80,"context_line":"this spec proposes a minimally viable initial implementation which"},{"line_number":81,"context_line":"addresses the need for pre-caching, but does not provide specific"},{"line_number":82,"context_line":"visibility, reporting, scheduling, or other advanced features."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"Initially we will add a mechanism to Nova, by which a user can request"},{"line_number":85,"context_line":"that a set of images be cached on the set of compute nodes contained"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_ac358eaa","line":82,"range":{"start_line":82,"start_character":23,"end_line":82,"end_character":33},"in_reply_to":"3fa7e38b_915a2928","updated":"2019-10-02 19:30:59.000000000","message":"Included in the references","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":81,"context_line":"addresses the need for pre-caching, but does not provide specific"},{"line_number":82,"context_line":"visibility, reporting, scheduling, or other advanced features."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"Initially we will add a mechanism to Nova, by which a user can request"},{"line_number":85,"context_line":"that a set of images be cached on the set of compute nodes contained"},{"line_number":86,"context_line":"within a host aggregate. This activity will be delegated to a"},{"line_number":87,"context_line":"(super-)conductor worker, which will:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_11463951","line":84,"range":{"start_line":84,"start_character":54,"end_line":84,"end_character":58},"updated":"2019-10-02 18:55:59.000000000","message":"I\u0027d probably say admin here since non-admin tenant users can\u0027t use the aggregates API by default. Maybe you\u0027re just using the term \"user\" generically.\n\n(later)\n\nOK I see this is admin-only by default later when talking about security impact.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":82,"context_line":"visibility, reporting, scheduling, or other advanced features."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"Initially we will add a mechanism to Nova, by which a user can request"},{"line_number":85,"context_line":"that a set of images be cached on the set of compute nodes contained"},{"line_number":86,"context_line":"within a host aggregate. This activity will be delegated to a"},{"line_number":87,"context_line":"(super-)conductor worker, which will:"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_51aa71d2","line":85,"range":{"start_line":85,"start_character":7,"end_line":85,"end_character":20},"updated":"2019-10-02 18:55:59.000000000","message":"Hmm, would there be any sort of rate limiting on this to prevent someone from sending 1000 random UUIDs to the API that handles this? If this is locked down to admin-only by default policy then that is less of a concern.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9a5f9eef58dfb6909bb68ba0ab8707365b29c4eb","unresolved":false,"context_lines":[{"line_number":82,"context_line":"visibility, reporting, scheduling, or other advanced features."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"Initially we will add a mechanism to Nova, by which a user can request"},{"line_number":85,"context_line":"that a set of images be cached on the set of compute nodes contained"},{"line_number":86,"context_line":"within a host aggregate. This activity will be delegated to a"},{"line_number":87,"context_line":"(super-)conductor worker, which will:"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_31025540","line":85,"range":{"start_line":85,"start_character":7,"end_line":85,"end_character":20},"in_reply_to":"3fa7e38b_51aa71d2","updated":"2019-10-02 19:09:58.000000000","message":"Yep, I mentioned a potential config knob or later providing a rate in the actual request. I can beef up some of that wording if you want.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":86,"context_line":"within a host aggregate. This activity will be delegated to a"},{"line_number":87,"context_line":"(super-)conductor worker, which will:"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":" - Validate the images provided"},{"line_number":90,"context_line":" - Look up the list of hosts in the given aggregate"},{"line_number":91,"context_line":" - Collate the hosts by cell"},{"line_number":92,"context_line":" - Iterate through those hosts making an RPC call to start the request"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_5179112d","line":89,"range":{"start_line":89,"start_character":3,"end_line":89,"end_character":11},"updated":"2019-10-02 18:55:59.000000000","message":"What sort of validation are you thinking here? Just that you can GET the image and maybe assert some kind of status on it, like \"active\" or whatever?","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":86,"context_line":"within a host aggregate. This activity will be delegated to a"},{"line_number":87,"context_line":"(super-)conductor worker, which will:"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":" - Validate the images provided"},{"line_number":90,"context_line":" - Look up the list of hosts in the given aggregate"},{"line_number":91,"context_line":" - Collate the hosts by cell"},{"line_number":92,"context_line":" - Iterate through those hosts making an RPC call to start the request"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_516591e0","line":89,"range":{"start_line":89,"start_character":0,"end_line":89,"end_character":1},"updated":"2019-10-02 18:55:59.000000000","message":"same","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9a5f9eef58dfb6909bb68ba0ab8707365b29c4eb","unresolved":false,"context_lines":[{"line_number":86,"context_line":"within a host aggregate. This activity will be delegated to a"},{"line_number":87,"context_line":"(super-)conductor worker, which will:"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":" - Validate the images provided"},{"line_number":90,"context_line":" - Look up the list of hosts in the given aggregate"},{"line_number":91,"context_line":" - Collate the hosts by cell"},{"line_number":92,"context_line":" - Iterate through those hosts making an RPC call to start the request"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_719d2d09","line":89,"range":{"start_line":89,"start_character":3,"end_line":89,"end_character":11},"in_reply_to":"3fa7e38b_5179112d","updated":"2019-10-02 19:09:58.000000000","message":"Yep, just to make sure the conductor doesn\u0027t garbage-in-garbage-out asking all the computes to please cache some invalid image. I will add words.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":87,"context_line":"(super-)conductor worker, which will:"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":" - Validate the images provided"},{"line_number":90,"context_line":" - Look up the list of hosts in the given aggregate"},{"line_number":91,"context_line":" - Collate the hosts by cell"},{"line_number":92,"context_line":" - Iterate through those hosts making an RPC call to start the request"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Images will be cached on each compute using a new method on the virt"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_71f1ad01","line":91,"range":{"start_line":90,"start_character":3,"end_line":91,"end_character":28},"updated":"2019-10-02 18:55:59.000000000","message":"This raises an interesting question I guess I haven\u0027t really thought of before, or at least in awhile, but I guess there is nothing technically stopping someone from creating an aggregate that spans multiple cells - I generally just always think of all hosts within an aggregate being in the same cell, and a cell itself and all of its hosts being a single aggregate/AZ, but sure you could spread them across cells, it\u0027s pretty flexible that way.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9a5f9eef58dfb6909bb68ba0ab8707365b29c4eb","unresolved":false,"context_lines":[{"line_number":87,"context_line":"(super-)conductor worker, which will:"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":" - Validate the images provided"},{"line_number":90,"context_line":" - Look up the list of hosts in the given aggregate"},{"line_number":91,"context_line":" - Collate the hosts by cell"},{"line_number":92,"context_line":" - Iterate through those hosts making an RPC call to start the request"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Images will be cached on each compute using a new method on the virt"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_118e39d0","line":91,"range":{"start_line":90,"start_character":3,"end_line":91,"end_character":28},"in_reply_to":"3fa7e38b_71f1ad01","updated":"2019-10-02 19:09:58.000000000","message":"No, we\u0027ve specifically said aggregates can cross cells in the past, and I definitely don\u0027t want to break/change that. Groups are groups.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":89,"context_line":" - Validate the images provided"},{"line_number":90,"context_line":" - Look up the list of hosts in the given aggregate"},{"line_number":91,"context_line":" - Collate the hosts by cell"},{"line_number":92,"context_line":" - Iterate through those hosts making an RPC call to start the request"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Images will be cached on each compute using a new method on the virt"},{"line_number":95,"context_line":"driver which, when implemented, will re-use the image downloading"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_713f6d87","line":92,"range":{"start_line":92,"start_character":45,"end_line":92,"end_character":49},"updated":"2019-10-02 18:55:59.000000000","message":"Does this need to be a call or can we fire and forget? I think the downside of that is if we have no way of tracking the status of the operation on a given host it might fail and we don\u0027t really have a way to report that. Having said that, we don\u0027t really have a way to report this anyway since things like instance actions are per server and we don\u0027t have a thing like aggregate actions or whatever. So in that case, what harm is there in making this a cast rather than a call?\n\nAlso, would conductor be checking that each compute service is up before making the call, similar to what we did for the down compute trait blueprint:\n\nhttps://github.com/openstack/nova/blob/8fb4e18f0813c585b14fca06f5f7ca4a37f8d9ec/nova/compute/api.py#L5152","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9a5f9eef58dfb6909bb68ba0ab8707365b29c4eb","unresolved":false,"context_lines":[{"line_number":89,"context_line":" - Validate the images provided"},{"line_number":90,"context_line":" - Look up the list of hosts in the given aggregate"},{"line_number":91,"context_line":" - Collate the hosts by cell"},{"line_number":92,"context_line":" - Iterate through those hosts making an RPC call to start the request"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Images will be cached on each compute using a new method on the virt"},{"line_number":95,"context_line":"driver which, when implemented, will re-use the image downloading"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_b1616514","line":92,"range":{"start_line":92,"start_character":45,"end_line":92,"end_character":49},"in_reply_to":"3fa7e38b_713f6d87","updated":"2019-10-02 19:09:58.000000000","message":"The reason to make it a call is so we don\u0027t ask 1000 computes to cache an image and DDoS glance. I expect some discussion on the NOTE point below.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"9ef4281fa1f9491def811aac7513ce2ffa640c3d","unresolved":false,"context_lines":[{"line_number":98,"context_line":"rules as those downloaded on demand as a result of instance"},{"line_number":99,"context_line":"boots."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"NOTE: We could re-delegate the per-cell work to cell conductors if desired"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"NOTE: We could make the call to computes blocking long-call RPCs so"},{"line_number":104,"context_line":"that we know when the image download has completed for throttling"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_d163c1b0","line":101,"range":{"start_line":101,"start_character":0,"end_line":101,"end_character":4},"updated":"2019-10-02 18:40:30.000000000","message":"nit: might as well use the rst .. note:: construct here.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1978e04fe66ba3d204805536b51f144a8e55e85d","unresolved":false,"context_lines":[{"line_number":98,"context_line":"rules as those downloaded on demand as a result of instance"},{"line_number":99,"context_line":"boots."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"NOTE: We could re-delegate the per-cell work to cell conductors if desired"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"NOTE: We could make the call to computes blocking long-call RPCs so"},{"line_number":104,"context_line":"that we know when the image download has completed for throttling"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_273f77b6","line":101,"range":{"start_line":101,"start_character":0,"end_line":101,"end_character":4},"in_reply_to":"3fa7e38b_317575cd","updated":"2019-10-02 20:14:01.000000000","message":"Use .. todo:: then.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9a5f9eef58dfb6909bb68ba0ab8707365b29c4eb","unresolved":false,"context_lines":[{"line_number":98,"context_line":"rules as those downloaded on demand as a result of instance"},{"line_number":99,"context_line":"boots."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"NOTE: We could re-delegate the per-cell work to cell conductors if desired"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"NOTE: We could make the call to computes blocking long-call RPCs so"},{"line_number":104,"context_line":"that we know when the image download has completed for throttling"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_317575cd","line":101,"range":{"start_line":101,"start_character":0,"end_line":101,"end_character":4},"in_reply_to":"3fa7e38b_d163c1b0","updated":"2019-10-02 19:09:58.000000000","message":"This is something we need to resolve in the review process. If there\u0027s a better way to indicate that I should change it, but ..note:: is for things that are going to stay in the doc right?","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"NOTE: We could re-delegate the per-cell work to cell conductors if desired"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"NOTE: We could make the call to computes blocking long-call RPCs so"},{"line_number":104,"context_line":"that we know when the image download has completed for throttling"},{"line_number":105,"context_line":"reasons. Additonally, we could have some configuration knob to control"},{"line_number":106,"context_line":"how many computes we contact in parallel."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_51f4b1cf","line":103,"range":{"start_line":103,"start_character":41,"end_line":103,"end_character":64},"updated":"2019-10-02 18:55:59.000000000","message":"So when you say RPC call above, did you mean cast?","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"9ef4281fa1f9491def811aac7513ce2ffa640c3d","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"NOTE: We could re-delegate the per-cell work to cell conductors if desired"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"NOTE: We could make the call to computes blocking long-call RPCs so"},{"line_number":104,"context_line":"that we know when the image download has completed for throttling"},{"line_number":105,"context_line":"reasons. Additonally, we could have some configuration knob to control"},{"line_number":106,"context_line":"how many computes we contact in parallel."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_7158cdf9","line":103,"range":{"start_line":103,"start_character":0,"end_line":103,"end_character":4},"updated":"2019-10-02 18:40:30.000000000","message":"ditto","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9a5f9eef58dfb6909bb68ba0ab8707365b29c4eb","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"NOTE: We could re-delegate the per-cell work to cell conductors if desired"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"NOTE: We could make the call to computes blocking long-call RPCs so"},{"line_number":104,"context_line":"that we know when the image download has completed for throttling"},{"line_number":105,"context_line":"reasons. Additonally, we could have some configuration knob to control"},{"line_number":106,"context_line":"how many computes we contact in parallel."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_7139adf0","line":103,"range":{"start_line":103,"start_character":41,"end_line":103,"end_character":64},"in_reply_to":"3fa7e38b_51f4b1cf","updated":"2019-10-02 19:09:58.000000000","message":"Well, I was kinda thinking in my head that this would be a blocking call for this reason. But, tell me what you think and we\u0027ll resolve it one way or the other.\n\nIf we cast to a crap ton of computes, then you\u0027re just asking for a DDoS of you glance. Without other knobs, the only way to mitigate that is to define smaller aggregates and throttle you requests. I don\u0027t want this to fail on details like this as the other attempts had, so I figure just being slow and doing it once-per-compute is probably the way to go (or some parallelism limit if need-be).","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":115,"context_line":"Another option would be to take a similar approach, but dispense with"},{"line_number":116,"context_line":"the incremental nature. We could implement a larger API, with task and"},{"line_number":117,"context_line":"progress reporting, scheduling (image X should be cached for Y hours,"},{"line_number":118,"context_line":"etc) and other features that have been part of previous requests."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"Data model impact"},{"line_number":121,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_b12c054b","line":118,"updated":"2019-10-02 18:55:59.000000000","message":"If possible, I always like to see a statement about why an alternative is less ideal than what\u0027s proposed, e.g. in this case it\u0027s pretty obvious - we can do something incrementally useful and actually get it done or engineer for utopia and never get started (which is what happened in the past).","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9a5f9eef58dfb6909bb68ba0ab8707365b29c4eb","unresolved":false,"context_lines":[{"line_number":115,"context_line":"Another option would be to take a similar approach, but dispense with"},{"line_number":116,"context_line":"the incremental nature. We could implement a larger API, with task and"},{"line_number":117,"context_line":"progress reporting, scheduling (image X should be cached for Y hours,"},{"line_number":118,"context_line":"etc) and other features that have been part of previous requests."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"Data model impact"},{"line_number":121,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_312335c1","line":118,"in_reply_to":"3fa7e38b_b12c054b","updated":"2019-10-02 19:09:58.000000000","message":"Ack","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":120,"context_line":"Data model impact"},{"line_number":121,"context_line":"-----------------"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"None in this initial iteration. In the future, it may be desirable to"},{"line_number":124,"context_line":"track images and status per-compute, which would require some"},{"line_number":125,"context_line":"accounting in the database."},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_3120154a","line":123,"updated":"2019-10-02 18:55:59.000000000","message":"OK so if we\u0027re not tracking anything state/status-wise, going back to the blocking RPC call above, I don\u0027t think we likely need that because this is best effort and conductor could just RPC cast fire and forget and the computes can log if they fail to cache the image or whatever.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0a69707ef8246a90c368e2702b837852174229b2","unresolved":false,"context_lines":[{"line_number":120,"context_line":"Data model impact"},{"line_number":121,"context_line":"-----------------"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"None in this initial iteration. In the future, it may be desirable to"},{"line_number":124,"context_line":"track images and status per-compute, which would require some"},{"line_number":125,"context_line":"accounting in the database."},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_71cf6d29","line":123,"in_reply_to":"3fa7e38b_3120154a","updated":"2019-10-02 19:03:32.000000000","message":"I actually didn\u0027t notice the use of \"call\" - I assumed \"cast\" from the get-go based on the description and MVP\u0027ness of this.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9a5f9eef58dfb6909bb68ba0ab8707365b29c4eb","unresolved":false,"context_lines":[{"line_number":120,"context_line":"Data model impact"},{"line_number":121,"context_line":"-----------------"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"None in this initial iteration. In the future, it may be desirable to"},{"line_number":124,"context_line":"track images and status per-compute, which would require some"},{"line_number":125,"context_line":"accounting in the database."},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_112ab98f","line":123,"in_reply_to":"3fa7e38b_3120154a","updated":"2019-10-02 19:09:58.000000000","message":"The call is for rate-limiting not for checking status.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":135,"context_line":"os-aggregates"},{"line_number":136,"context_line":"~~~~~~~~~~~~~"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"A ``cache_images`` option will be added to the ``action`` which takes a"},{"line_number":139,"context_line":"list of images."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"* ``POST /os-aggregates/{aggregate_id}/action``"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_31f8157b","line":138,"updated":"2019-10-02 18:55:59.000000000","message":"I\u0027m assuming the response on this would be a 202 since the API is going to cast off to conductor?","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9a5f9eef58dfb6909bb68ba0ab8707365b29c4eb","unresolved":false,"context_lines":[{"line_number":135,"context_line":"os-aggregates"},{"line_number":136,"context_line":"~~~~~~~~~~~~~"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"A ``cache_images`` option will be added to the ``action`` which takes a"},{"line_number":139,"context_line":"list of images."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"* ``POST /os-aggregates/{aggregate_id}/action``"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_b1188584","line":138,"in_reply_to":"3fa7e38b_31f8157b","updated":"2019-10-02 19:09:58.000000000","message":"Yep","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":138,"context_line":"A ``cache_images`` option will be added to the ``action`` which takes a"},{"line_number":139,"context_line":"list of images."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"* ``POST /os-aggregates/{aggregate_id}/action``"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"  .. code-block:: json"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_3193355f","line":141,"range":{"start_line":141,"start_character":39,"end_line":141,"end_character":45},"updated":"2019-10-02 18:55:59.000000000","message":"I think given the option we should probably break with tradition on the action-style APIs and just make this a new route like what we recently did for GET /servers/{server_id}/topology (though that makes more sense to me as a GET than this as a POST really), because if you try to work this into the existing action API for aggregates you have to have some validation logic about when this can be used in conjunction with add_host/remove_host/set_metadata, though I guess jsonschema validation for the new action would just say the body has to include cache_images and nothing else as the top-level key.\n\nI don\u0027t know, not a huge blocker, but it\u0027d be nice to not rely on the action pattern for a new API if we don\u0027t have to, but something can also be argued for consistent style in the compute APIs behave.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"9ef4281fa1f9491def811aac7513ce2ffa640c3d","unresolved":false,"context_lines":[{"line_number":138,"context_line":"A ``cache_images`` option will be added to the ``action`` which takes a"},{"line_number":139,"context_line":"list of images."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"* ``POST /os-aggregates/{aggregate_id}/action``"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"  .. code-block:: json"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_31f7b5d7","line":141,"updated":"2019-10-02 18:40:30.000000000","message":"What would be the possible responses? 202 Accepted and the usual 400, 403, 404?","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9a5f9eef58dfb6909bb68ba0ab8707365b29c4eb","unresolved":false,"context_lines":[{"line_number":138,"context_line":"A ``cache_images`` option will be added to the ``action`` which takes a"},{"line_number":139,"context_line":"list of images."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"* ``POST /os-aggregates/{aggregate_id}/action``"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"  .. code-block:: json"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_91178952","line":141,"range":{"start_line":141,"start_character":39,"end_line":141,"end_character":45},"in_reply_to":"3fa7e38b_3193355f","updated":"2019-10-02 19:09:58.000000000","message":"Yeah, I\u0027d prefer a route too, if that\u0027s cool with you","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":149,"context_line":"           {\"id\": \"4d8c3732-a248-40ed-bebc-539a6ffd25c0\"}"},{"line_number":150,"context_line":"         ]}"},{"line_number":151,"context_line":"     }"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"Because we are attempting to provide a minimally-viable initial"},{"line_number":154,"context_line":"implementation, the structure of the request is defined so that it"},{"line_number":155,"context_line":"will be possible to add additional information in future"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_91030974","line":152,"updated":"2019-10-02 18:55:59.000000000","message":"Some might ask for the proposed jsonschema for this in the spec but I\u0027m not one of them - I\u0027m fine with leaving that as an implementation detail.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":163,"context_line":"Obviously allowing any user to initiate a wide-scale moving of data"},{"line_number":164,"context_line":"brings some inherent risk. As this proposes to be aggregate-based, the"},{"line_number":165,"context_line":"user would likely need to already have at least the ability to list"},{"line_number":166,"context_line":"host aggregates in order to provide one to the caching API. A policy"},{"line_number":167,"context_line":"knob defining which users have that ability would default to the"},{"line_number":168,"context_line":"existing ones with ability to manage host aggregates."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Notifications impact"},{"line_number":171,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_31a1f596","line":168,"range":{"start_line":166,"start_character":60,"end_line":168,"end_character":53},"updated":"2019-10-02 18:55:59.000000000","message":"OK, this answers my question earlier.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":170,"context_line":"Notifications impact"},{"line_number":171,"context_line":"--------------------"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"Without any API-based reporting of progress per-compute, emitting"},{"line_number":174,"context_line":"notifications about the start and completion of image downloads could"},{"line_number":175,"context_line":"be helpful. This would allow operators to monitor the process."},{"line_number":176,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_d1bbc1c1","line":173,"updated":"2019-10-02 18:55:59.000000000","message":"Ah yeah, I didn\u0027t think of notifications but this is a good stop-gap solution for reporting. Sure we don\u0027t have a fully fledged built in native solution for reporting these operations but we\u0027d at least give something on which an external solution could be built in the meantime for those that really need it.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":201,"context_line":"Developer impact"},{"line_number":202,"context_line":"----------------"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"This will require a new RPC call on the conductor, compute, and a"},{"line_number":205,"context_line":"corresponding call to the virt driver. Currently, the ``libvirt``,"},{"line_number":206,"context_line":"``hyperv``, and ``vmwareapi`` drivers use the imagecache. Initial"},{"line_number":207,"context_line":"support will be provided for the ``libvirt`` driver, but should be"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_31ca554f","line":204,"range":{"start_line":204,"start_character":28,"end_line":204,"end_character":32},"updated":"2019-10-02 18:55:59.000000000","message":"Again, by call here I\u0027m not sure if you mean method or cast, but the API should definitely cast off to conductor and I think conductor should probably also cast off to compute given this could be a lot of hosts with a lot of images potentially.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":217,"context_line":"pinned to a version lower than required to make this call, then no"},{"line_number":218,"context_line":"computes will be contacted to pre-cache the images."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"If the caching call is made against computes running virt drivers that"},{"line_number":221,"context_line":"are not yet (or ever) able to participate, a warning log message will"},{"line_number":222,"context_line":"be emitted by the base virt driver."},{"line_number":223,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_d1e0a1cf","line":220,"updated":"2019-10-02 18:55:59.000000000","message":"The compute drivers have an \"has_imagecache\" capability which we could turn into a standard trait reported to placement and then if necessary we could pre-filter the hosts based on that capability trait in conductor, but that\u0027s not likely something we need to worry too much about on a first pass, nor is it likely much gain vs just casting to a compute that doesn\u0027t honor the request.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e11fd49c0659a3265e9368e5bcc459bbbe5a55ec","unresolved":false,"context_lines":[{"line_number":217,"context_line":"pinned to a version lower than required to make this call, then no"},{"line_number":218,"context_line":"computes will be contacted to pre-cache the images."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"If the caching call is made against computes running virt drivers that"},{"line_number":221,"context_line":"are not yet (or ever) able to participate, a warning log message will"},{"line_number":222,"context_line":"be emitted by the base virt driver."},{"line_number":223,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_6c7c7672","line":220,"in_reply_to":"3fa7e38b_71b68d8d","updated":"2019-10-02 19:30:59.000000000","message":"One of the previous asks was to schedule based on computes that already have your image cached. Doing that requires a lot of reporting obviously, and is also tangential to this effort. But, yes, maybe.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2acd1c96d46de922ff75ff491d2745f761b73cd9","unresolved":false,"context_lines":[{"line_number":217,"context_line":"pinned to a version lower than required to make this call, then no"},{"line_number":218,"context_line":"computes will be contacted to pre-cache the images."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"If the caching call is made against computes running virt drivers that"},{"line_number":221,"context_line":"are not yet (or ever) able to participate, a warning log message will"},{"line_number":222,"context_line":"be emitted by the base virt driver."},{"line_number":223,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_ecc70664","line":220,"in_reply_to":"3fa7e38b_71b68d8d","updated":"2019-10-02 19:29:36.000000000","message":"Usually but not necessarily always I don\u0027t think, e.g.:\n\nhttps://review.opendev.org/#/c/666604/\n\nThough that ultimately is related to scheduling properly for same host resize/cold migration. Compute capabilities as traits are the only thing we have right now to determine something about the compute, outside of the ComputeNode object, from the controller services so I don\u0027t think it should be limited to scheduler filtering only.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1978e04fe66ba3d204805536b51f144a8e55e85d","unresolved":false,"context_lines":[{"line_number":217,"context_line":"pinned to a version lower than required to make this call, then no"},{"line_number":218,"context_line":"computes will be contacted to pre-cache the images."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"If the caching call is made against computes running virt drivers that"},{"line_number":221,"context_line":"are not yet (or ever) able to participate, a warning log message will"},{"line_number":222,"context_line":"be emitted by the base virt driver."},{"line_number":223,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_4790734f","line":220,"in_reply_to":"3fa7e38b_cca48abc","updated":"2019-10-02 20:14:01.000000000","message":"You have a nova host aggregate anyway, right? And we mirror those to placement as resource provider aggregates. So yeah I\u0027d think if a provider in that aggregate is reporting the COMPUTE_HAS_IMAGECACHE trait we could request a list of providers from placement in the aggregate with that trait:\n\nGET /resource_providers?member_of\u003d\u003caggregate_uuid\u003e\u0026required\u003dCOMPUTE_HAS_IMAGECACHE\n\nThe problem with that is I\u0027m not sure how easily that maps between compute service hosts and resource providers, since with ironic that could be 1:M (though in this case you\u0027d always get 0 back for ironic since it doesn\u0027t support the image cache). Meaning on the nova side I\u0027d think we\u0027d still have to map the providers to the hosts in the aggregate to determine which to not even bother with, which is maybe possible just based on the resource provider name which is the ComputeNode.hypervisor_hostname which for libvirt/hyperv/vmwareapi is the same as the compute service hostname.\n\nAnyway, just a thought, it could always be fleshed out more later if we cared to optimize somehow.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e11fd49c0659a3265e9368e5bcc459bbbe5a55ec","unresolved":false,"context_lines":[{"line_number":217,"context_line":"pinned to a version lower than required to make this call, then no"},{"line_number":218,"context_line":"computes will be contacted to pre-cache the images."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"If the caching call is made against computes running virt drivers that"},{"line_number":221,"context_line":"are not yet (or ever) able to participate, a warning log message will"},{"line_number":222,"context_line":"be emitted by the base virt driver."},{"line_number":223,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_cca48abc","line":220,"in_reply_to":"3fa7e38b_d1e0a1cf","updated":"2019-10-02 19:30:59.000000000","message":"How would that work? Ask placement for a list of computes that are in the relevant aggregate that have the has_imagecache trait? I kinda expect people would draw aggregates around the computes based on function or ownership and use those to pre-cache these images such that it\u0027s very unlikely for people to make this request where a lot of the nodes don\u0027t support it at all. In that case, the call to placement would be more expensive, not less.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0a69707ef8246a90c368e2702b837852174229b2","unresolved":false,"context_lines":[{"line_number":217,"context_line":"pinned to a version lower than required to make this call, then no"},{"line_number":218,"context_line":"computes will be contacted to pre-cache the images."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"If the caching call is made against computes running virt drivers that"},{"line_number":221,"context_line":"are not yet (or ever) able to participate, a warning log message will"},{"line_number":222,"context_line":"be emitted by the base virt driver."},{"line_number":223,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_71b68d8d","line":220,"in_reply_to":"3fa7e38b_d1e0a1cf","updated":"2019-10-02 19:03:32.000000000","message":"I thought traits was only stuff we wanted to base scheduling decisions on? Would we ever want to schedule based on \"has image pre-cached\"?\n\n(This convo is obviously out of scope of this spec - except for the call/cast bit)","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"9ef4281fa1f9491def811aac7513ce2ffa640c3d","unresolved":false,"context_lines":[{"line_number":258,"context_line":""},{"line_number":259,"context_line":"As this initial phase of implementation provides no externally-visible"},{"line_number":260,"context_line":"changes to a running deployment, testing with tempest would have to"},{"line_number":261,"context_line":"rely on something obscure like time-to-boot latency to determine"},{"line_number":262,"context_line":"success. Thus, functional tests will be added to ensure that the image"},{"line_number":263,"context_line":"cache is populated by the new call, and that subsequent instance boots"},{"line_number":264,"context_line":"do not contact the image service to perform the download."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_71dbed4e","line":261,"updated":"2019-10-02 18:40:30.000000000","message":"We have whitebox (admitedly WIP\u0027ish) upstream now!","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9a5f9eef58dfb6909bb68ba0ab8707365b29c4eb","unresolved":false,"context_lines":[{"line_number":258,"context_line":""},{"line_number":259,"context_line":"As this initial phase of implementation provides no externally-visible"},{"line_number":260,"context_line":"changes to a running deployment, testing with tempest would have to"},{"line_number":261,"context_line":"rely on something obscure like time-to-boot latency to determine"},{"line_number":262,"context_line":"success. Thus, functional tests will be added to ensure that the image"},{"line_number":263,"context_line":"cache is populated by the new call, and that subsequent instance boots"},{"line_number":264,"context_line":"do not contact the image service to perform the download."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_4c0e5a33","line":261,"in_reply_to":"3fa7e38b_71dbed4e","updated":"2019-10-02 19:09:58.000000000","message":"Shall I add you as a co-assignee? :D","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bb3eafe622ec22a0700d842051d47a755482e2e","unresolved":false,"context_lines":[{"line_number":267,"context_line":"Documentation Impact"},{"line_number":268,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"This feature needs documentation for the operators and the users."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"References"},{"line_number":273,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_b112c5b3","line":270,"range":{"start_line":270,"start_character":37,"end_line":270,"end_character":65},"updated":"2019-10-02 18:55:59.000000000","message":"Probably just operators yeah? So API reference:\n\nhttps://docs.openstack.org/api-ref/compute/#host-aggregates-os-aggregates\n\nand maybe admin guide?\n\nhttps://docs.openstack.org/nova/latest/admin/","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9a5f9eef58dfb6909bb68ba0ab8707365b29c4eb","unresolved":false,"context_lines":[{"line_number":267,"context_line":"Documentation Impact"},{"line_number":268,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"This feature needs documentation for the operators and the users."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"References"},{"line_number":273,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_6c20f69c","line":270,"range":{"start_line":270,"start_character":37,"end_line":270,"end_character":65},"in_reply_to":"3fa7e38b_b112c5b3","updated":"2019-10-02 19:09:58.000000000","message":"Well, I guess I would expect some private-y clouds would extend this to more users than just admins, but.. okay.","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cc6bae74769a932c396f292511c55b30c043d7c3","unresolved":false,"context_lines":[{"line_number":272,"context_line":"References"},{"line_number":273,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"- Proposal from 2011 where image aching was initially added, showing that pre-cache was an intended improvement after the initial implementation: https://wiki.openstack.org/wiki/Nova-image-cache-management"},{"line_number":276,"context_line":"- Blueprint from 2013 proposing an alternate way to boot images to initial cache-seeding download: https://blueprints.launchpad.net/nova/+spec/effective-template-base-image-preparing"},{"line_number":277,"context_line":"- Blueprint from 2013 proposing more configurable image cache implementations, offering at least the ability to pin images on computes: https://blueprints.launchpad.net/nova/+spec/multiple-image-cache-handlers"},{"line_number":278,"context_line":"- Blueprint from 2014 proposing an entire new nova service for pre-caching images: https://blueprints.launchpad.net/nova/+spec/image-precacher"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3fa7e38b_16e06f96","line":275,"range":{"start_line":275,"start_character":33,"end_line":275,"end_character":39},"updated":"2019-10-02 18:17:31.000000000","message":"Done","commit_id":"743861292b8155ee3f184876f9b71d4b72f2c881"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1978e04fe66ba3d204805536b51f144a8e55e85d","unresolved":false,"context_lines":[{"line_number":58,"context_line":"- Copying the images directly into the cache directories on the"},{"line_number":59,"context_line":"  compute nodes out of band"},{"line_number":60,"context_line":"- Modifying the Nova code themselves to provide this functionality"},{"line_number":61,"context_line":"- Using a shared storage volume for the image cache (which is known to"},{"line_number":62,"context_line":"  be broken)"},{"line_number":63,"context_line":"- Using a totally different ephemeral backend, such as ceph which"},{"line_number":64,"context_line":"  side-steps the problem entirely (but requires a substantially larger"},{"line_number":65,"context_line":"  investment)"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3fa7e38b_2c0c3e41","line":62,"range":{"start_line":61,"start_character":53,"end_line":62,"end_character":11},"updated":"2019-10-02 20:14:01.000000000","message":"Is this bug 1804262? Might be nice to link to whatever you\u0027re referring to here.\n\n(later)\n\nYup I see you added that to the references list below.","commit_id":"ad82f9ed954307efae535f3a07a06191de9a4f36"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1978e04fe66ba3d204805536b51f144a8e55e85d","unresolved":false,"context_lines":[{"line_number":87,"context_line":"visibility, reporting, scheduling, or other advanced features."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"Initially we will add a mechanism to Nova, by which a"},{"line_number":90,"context_line":"(sufficiently-endowed) user can request that a set of images be cached"},{"line_number":91,"context_line":"on the set of compute nodes contained within a host aggregate. This"},{"line_number":92,"context_line":"activity will be delegated to a (super-)conductor worker, which will:"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"3fa7e38b_2711b754","line":90,"range":{"start_line":90,"start_character":1,"end_line":90,"end_character":21},"updated":"2019-10-02 20:14:01.000000000","message":"This makes me think of things that I don\u0027t think you intended for me to be thinking about, but I\u0027d probably instead say something like \"by which a user with proper authorization\".","commit_id":"ad82f9ed954307efae535f3a07a06191de9a4f36"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e7794014918461b7e6a76d1fd76f407c8ef44d82","unresolved":false,"context_lines":[{"line_number":87,"context_line":"visibility, reporting, scheduling, or other advanced features."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"Initially we will add a mechanism to Nova, by which a"},{"line_number":90,"context_line":"(sufficiently-endowed) user can request that a set of images be cached"},{"line_number":91,"context_line":"on the set of compute nodes contained within a host aggregate. This"},{"line_number":92,"context_line":"activity will be delegated to a (super-)conductor worker, which will:"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"3fa7e38b_470e3333","line":90,"range":{"start_line":90,"start_character":14,"end_line":90,"end_character":21},"updated":"2019-10-02 20:00:32.000000000","message":"phrasing!","commit_id":"ad82f9ed954307efae535f3a07a06191de9a4f36"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"42d403d7e383698892e8ebb564d4938e2f5ddc4a","unresolved":false,"context_lines":[{"line_number":87,"context_line":"visibility, reporting, scheduling, or other advanced features."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"Initially we will add a mechanism to Nova, by which a"},{"line_number":90,"context_line":"(sufficiently-endowed) user can request that a set of images be cached"},{"line_number":91,"context_line":"on the set of compute nodes contained within a host aggregate. This"},{"line_number":92,"context_line":"activity will be delegated to a (super-)conductor worker, which will:"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"3fa7e38b_47c71347","line":90,"range":{"start_line":90,"start_character":1,"end_line":90,"end_character":21},"in_reply_to":"3fa7e38b_2711b754","updated":"2019-10-02 20:23:22.000000000","message":"I really don\u0027t see the problem, but okay.","commit_id":"ad82f9ed954307efae535f3a07a06191de9a4f36"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e7794014918461b7e6a76d1fd76f407c8ef44d82","unresolved":false,"context_lines":[{"line_number":108,"context_line":"case of the existing drivers that use the ``imagecache`` module, we"},{"line_number":109,"context_line":"will just need to *touch* them to update their ``mtime``."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"NOTE to reviewers: We could re-delegate the per-cell work to cell"},{"line_number":112,"context_line":"conductors if desired, which would achieve number-of-cells parallelism"},{"line_number":113,"context_line":"at least."},{"line_number":114,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"3fa7e38b_6c447675","line":111,"range":{"start_line":111,"start_character":8,"end_line":111,"end_character":17},"updated":"2019-10-02 20:00:32.000000000","message":"Ah, thanks, this makes your intention clearer - we need to resolve this before merging.","commit_id":"ad82f9ed954307efae535f3a07a06191de9a4f36"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1978e04fe66ba3d204805536b51f144a8e55e85d","unresolved":false,"context_lines":[{"line_number":108,"context_line":"case of the existing drivers that use the ``imagecache`` module, we"},{"line_number":109,"context_line":"will just need to *touch* them to update their ``mtime``."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"NOTE to reviewers: We could re-delegate the per-cell work to cell"},{"line_number":112,"context_line":"conductors if desired, which would achieve number-of-cells parallelism"},{"line_number":113,"context_line":"at least."},{"line_number":114,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"3fa7e38b_676ecfca","line":111,"range":{"start_line":111,"start_character":0,"end_line":111,"end_character":17},"updated":"2019-10-02 20:14:01.000000000","message":"Could use .. todo:: here if it\u0027s something we need to resolve in review.","commit_id":"ad82f9ed954307efae535f3a07a06191de9a4f36"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1978e04fe66ba3d204805536b51f144a8e55e85d","unresolved":false,"context_lines":[{"line_number":108,"context_line":"case of the existing drivers that use the ``imagecache`` module, we"},{"line_number":109,"context_line":"will just need to *touch* them to update their ``mtime``."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"NOTE to reviewers: We could re-delegate the per-cell work to cell"},{"line_number":112,"context_line":"conductors if desired, which would achieve number-of-cells parallelism"},{"line_number":113,"context_line":"at least."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"NOTE to reviewers: We could make the call to computes blocking"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3fa7e38b_479393a4","line":112,"range":{"start_line":111,"start_character":61,"end_line":112,"end_character":10},"updated":"2019-10-02 20:14:01.000000000","message":"I\u0027m not sure how easy this is, nor how many people are deploying with a super-conductor and cell-specific conductors. Sounds like CERN is (I was wrong about that) but not sure about others that are doing single cell with a single conductor handling all the load.","commit_id":"ad82f9ed954307efae535f3a07a06191de9a4f36"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"42d403d7e383698892e8ebb564d4938e2f5ddc4a","unresolved":false,"context_lines":[{"line_number":108,"context_line":"case of the existing drivers that use the ``imagecache`` module, we"},{"line_number":109,"context_line":"will just need to *touch* them to update their ``mtime``."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"NOTE to reviewers: We could re-delegate the per-cell work to cell"},{"line_number":112,"context_line":"conductors if desired, which would achieve number-of-cells parallelism"},{"line_number":113,"context_line":"at least."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"NOTE to reviewers: We could make the call to computes blocking"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3fa7e38b_47ccf360","line":112,"range":{"start_line":111,"start_character":61,"end_line":112,"end_character":10},"in_reply_to":"3fa7e38b_479393a4","updated":"2019-10-02 20:23:22.000000000","message":"Yeah, it wouldn\u0027t be a solution to the parallelism, it would just create N-cells parallelism on top of whatever we chose for the below.","commit_id":"ad82f9ed954307efae535f3a07a06191de9a4f36"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1978e04fe66ba3d204805536b51f144a8e55e85d","unresolved":false,"context_lines":[{"line_number":118,"context_line":"single-threaded and iterate over all affected computes to avoid the"},{"line_number":119,"context_line":"DDoS against glance. Additonally, we could have some configuration"},{"line_number":120,"context_line":"knob to control how many computes we contact in parallel (suggest we"},{"line_number":121,"context_line":"add this if time permits after sequential implementation). We would"},{"line_number":122,"context_line":"probably want to check service-is-up for each host before making the"},{"line_number":123,"context_line":"call to avoid stalling on computes that are down."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Alternatives"},{"line_number":126,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3fa7e38b_c73a2397","line":123,"range":{"start_line":121,"start_character":59,"end_line":123,"end_character":49},"updated":"2019-10-02 20:14:01.000000000","message":"Yeah I think we definitely want this if we\u0027re going to do a call - that\u0027s what we do in the service enable/disable compute trait thing in Train.\n\nIf we cast we don\u0027t care about that as much, but then we have the DDoS issue to deal with, so we\u0027d want a configurable throttle but if you\u0027re casting then you don\u0027t know when to continue to the next batch...\n\nWould we assume a glance proxy per cell in a multi-cell environment - is that a thing or did I just make it up? I want to say I remember GoDaddy and NeCTAR guys saying they needed ways to configure nova to hit per-cell private glance endpoints rather than a single central public glance endpoint. Anyway, my thought was if we can parallelize across cells, but per cell we have configuration, defaulting to 1 (or nproc?) that would do the (a) check for up-ness on the compute service and (2) the blocking RPC call. Or is that too complicated for an MVP? Point being if we have per-cell glance then we don\u0027t need to worry as much about DDoS a single glance but still have to make sure we don\u0027t DDoS the glance in each cell.","commit_id":"ad82f9ed954307efae535f3a07a06191de9a4f36"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"240554759bc10550f01988f8af540528ec5aa31b","unresolved":false,"context_lines":[{"line_number":118,"context_line":"single-threaded and iterate over all affected computes to avoid the"},{"line_number":119,"context_line":"DDoS against glance. Additonally, we could have some configuration"},{"line_number":120,"context_line":"knob to control how many computes we contact in parallel (suggest we"},{"line_number":121,"context_line":"add this if time permits after sequential implementation). We would"},{"line_number":122,"context_line":"probably want to check service-is-up for each host before making the"},{"line_number":123,"context_line":"call to avoid stalling on computes that are down."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Alternatives"},{"line_number":126,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3fa7e38b_c766a32a","line":123,"range":{"start_line":121,"start_character":59,"end_line":123,"end_character":49},"in_reply_to":"3fa7e38b_6781efc3","updated":"2019-10-02 20:28:30.000000000","message":"\u003e I think some parallelism is probably important, but we shouldn\u0027t\n \u003e overthink it. Since not many people have multiple cells, then it\u0027s\n \u003e probably not worth doing the two-level delegation. Thus, let\u0027s just\n \u003e add a conf knob for the parallelism, threadpool the long-rpc calls\n \u003e to the computes and then see where and for who that breaks.\n\nSo sorta like how this works?\n\nhttps://docs.openstack.org/nova/latest/configuration/config.html#DEFAULT.max_concurrent_builds\n\nhttps://github.com/openstack/nova/blob/6979a6df60e26afafb1c48da25926db32f2f05a1/nova/compute/manager.py#L1975\n\n? Yeah I\u0027m fine with that for starters.","commit_id":"ad82f9ed954307efae535f3a07a06191de9a4f36"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"42d403d7e383698892e8ebb564d4938e2f5ddc4a","unresolved":false,"context_lines":[{"line_number":118,"context_line":"single-threaded and iterate over all affected computes to avoid the"},{"line_number":119,"context_line":"DDoS against glance. Additonally, we could have some configuration"},{"line_number":120,"context_line":"knob to control how many computes we contact in parallel (suggest we"},{"line_number":121,"context_line":"add this if time permits after sequential implementation). We would"},{"line_number":122,"context_line":"probably want to check service-is-up for each host before making the"},{"line_number":123,"context_line":"call to avoid stalling on computes that are down."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Alternatives"},{"line_number":126,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3fa7e38b_6781efc3","line":123,"range":{"start_line":121,"start_character":59,"end_line":123,"end_character":49},"in_reply_to":"3fa7e38b_c73a2397","updated":"2019-10-02 20:23:22.000000000","message":"I think some parallelism is probably important, but we shouldn\u0027t overthink it. Since not many people have multiple cells, then it\u0027s probably not worth doing the two-level delegation. Thus, let\u0027s just add a conf knob for the parallelism, threadpool the long-rpc calls to the computes and then see where and for who that breaks.","commit_id":"ad82f9ed954307efae535f3a07a06191de9a4f36"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7ad26dbd819b408c0133cfc5c29427a0a7b9e139","unresolved":false,"context_lines":[{"line_number":118,"context_line":"single-threaded and iterate over all affected computes to avoid the"},{"line_number":119,"context_line":"DDoS against glance. Additonally, we could have some configuration"},{"line_number":120,"context_line":"knob to control how many computes we contact in parallel (suggest we"},{"line_number":121,"context_line":"add this if time permits after sequential implementation). We would"},{"line_number":122,"context_line":"probably want to check service-is-up for each host before making the"},{"line_number":123,"context_line":"call to avoid stalling on computes that are down."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Alternatives"},{"line_number":126,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3fa7e38b_87498b8c","line":123,"range":{"start_line":121,"start_character":59,"end_line":123,"end_character":49},"in_reply_to":"3fa7e38b_c766a32a","updated":"2019-10-02 20:29:01.000000000","message":"Exactly like that.","commit_id":"ad82f9ed954307efae535f3a07a06191de9a4f36"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1978e04fe66ba3d204805536b51f144a8e55e85d","unresolved":false,"context_lines":[{"line_number":156,"context_line":"os-aggregates"},{"line_number":157,"context_line":"~~~~~~~~~~~~~"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"A ``cache_images`` option will be added to the ``action`` which takes a"},{"line_number":160,"context_line":"list of images."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"* ``POST /os-aggregates/{aggregate_id}/images``"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3fa7e38b_670d6fe7","line":159,"range":{"start_line":159,"start_character":0,"end_line":159,"end_character":57},"updated":"2019-10-02 20:14:01.000000000","message":"This is stale now.\n\nAlso, you should probably be explicit and say the API would return a 202 response status since people will ask (artom and I both did but gmann will also ask I\u0027m pretty sure).","commit_id":"ad82f9ed954307efae535f3a07a06191de9a4f36"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"42d403d7e383698892e8ebb564d4938e2f5ddc4a","unresolved":false,"context_lines":[{"line_number":156,"context_line":"os-aggregates"},{"line_number":157,"context_line":"~~~~~~~~~~~~~"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"A ``cache_images`` option will be added to the ``action`` which takes a"},{"line_number":160,"context_line":"list of images."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"* ``POST /os-aggregates/{aggregate_id}/images``"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3fa7e38b_a7604737","line":159,"range":{"start_line":159,"start_character":0,"end_line":159,"end_character":57},"in_reply_to":"3fa7e38b_670d6fe7","updated":"2019-10-02 20:23:22.000000000","message":"I didn\u0027t see that in the API example I was copying so I didn\u0027t know if you meant I should actually state it in here.","commit_id":"ad82f9ed954307efae535f3a07a06191de9a4f36"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1978e04fe66ba3d204805536b51f144a8e55e85d","unresolved":false,"context_lines":[{"line_number":164,"context_line":"  .. code-block:: json"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"     {"},{"line_number":167,"context_line":"       \"images\": ["},{"line_number":168,"context_line":"         {\"id\": \"a26887c6-c47b-4654-abb5-dfadf7d3f803\"},"},{"line_number":169,"context_line":"         {\"id\": \"4d8c3732-a248-40ed-bebc-539a6ffd25c0\"}"},{"line_number":170,"context_line":"       ]"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3fa7e38b_a72cc74a","line":167,"range":{"start_line":167,"start_character":8,"end_line":167,"end_character":14},"updated":"2019-10-02 20:14:01.000000000","message":"nit: if we have a new \u0027images\u0027 route then the \u0027images\u0027 in the body seems a bit redundant, maybe this should change to \u0027cache\u0027 in the body?","commit_id":"ad82f9ed954307efae535f3a07a06191de9a4f36"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"42d403d7e383698892e8ebb564d4938e2f5ddc4a","unresolved":false,"context_lines":[{"line_number":164,"context_line":"  .. code-block:: json"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"     {"},{"line_number":167,"context_line":"       \"images\": ["},{"line_number":168,"context_line":"         {\"id\": \"a26887c6-c47b-4654-abb5-dfadf7d3f803\"},"},{"line_number":169,"context_line":"         {\"id\": \"4d8c3732-a248-40ed-bebc-539a6ffd25c0\"}"},{"line_number":170,"context_line":"       ]"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3fa7e38b_c7654347","line":167,"range":{"start_line":167,"start_character":8,"end_line":167,"end_character":14},"in_reply_to":"3fa7e38b_a72cc74a","updated":"2019-10-02 20:23:22.000000000","message":"The body of a JSON request can\u0027t (or shouldn\u0027t) be a list I thought? Assuming it always needs to be a dict, I kept this because I still want to be able to add per-request and per-image things later. But, if you mean just s/images/cache/ then I guess that works.","commit_id":"ad82f9ed954307efae535f3a07a06191de9a4f36"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"de798916d7e88b7b2b8f7d9178ba9d0588888736","unresolved":false,"context_lines":[{"line_number":164,"context_line":"  .. code-block:: json"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"     {"},{"line_number":167,"context_line":"       \"images\": ["},{"line_number":168,"context_line":"         {\"id\": \"a26887c6-c47b-4654-abb5-dfadf7d3f803\"},"},{"line_number":169,"context_line":"         {\"id\": \"4d8c3732-a248-40ed-bebc-539a6ffd25c0\"}"},{"line_number":170,"context_line":"       ]"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3fa7e38b_025029d4","line":167,"range":{"start_line":167,"start_character":8,"end_line":167,"end_character":14},"in_reply_to":"3fa7e38b_c7654347","updated":"2019-10-02 20:51:29.000000000","message":"Yeah, just s/images/cache/.","commit_id":"ad82f9ed954307efae535f3a07a06191de9a4f36"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"936b1a3091b32a5fb2456d2f1a42d62cabb0c322","unresolved":false,"context_lines":[{"line_number":21,"context_line":"Problem description"},{"line_number":22,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Several of the virt drivers in Nova support the caching of base images"},{"line_number":25,"context_line":"for improved boot performance. The first time an instance is booted"},{"line_number":26,"context_line":"from a given image, that base image is downloaded from glance, cached,"},{"line_number":27,"context_line":"and either copied or CoW\u0027d to create the actual instance root"},{"line_number":28,"context_line":"disk. Subsequent instance boots from the same image can re-use the"},{"line_number":29,"context_line":"cached copy of the base image instead of downloading it again from"},{"line_number":30,"context_line":"Glance. This behavior provides the following benefits:"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_94a9a591","line":28,"range":{"start_line":24,"start_character":0,"end_line":28,"end_character":5},"updated":"2019-10-03 18:54:01.000000000","message":"its an implematnion nit but in the libvirt driver at least we will have to also take acout of but the virt type and images_type values as i don\u0027t think we support image cache for all the image types the libvirt dirver supports.\nim thinkin of lvm backend and flat which i think dont have the image cache support but rbd and qcow do.\n\nas long as we state which ones are supported we in the reno/docs we shoudl be good.\n\nbut yes i agree that this is a generic capability that can be supported across multiple drivers so +1","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"aab0b9773794b93febb93abb488846595c3e1e13","unresolved":false,"context_lines":[{"line_number":21,"context_line":"Problem description"},{"line_number":22,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Several of the virt drivers in Nova support the caching of base images"},{"line_number":25,"context_line":"for improved boot performance. The first time an instance is booted"},{"line_number":26,"context_line":"from a given image, that base image is downloaded from glance, cached,"},{"line_number":27,"context_line":"and either copied or CoW\u0027d to create the actual instance root"},{"line_number":28,"context_line":"disk. Subsequent instance boots from the same image can re-use the"},{"line_number":29,"context_line":"cached copy of the base image instead of downloading it again from"},{"line_number":30,"context_line":"Glance. This behavior provides the following benefits:"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_3a753b99","line":28,"range":{"start_line":24,"start_character":0,"end_line":28,"end_character":5},"in_reply_to":"3fa7e38b_94a9a591","updated":"2019-10-03 19:09:53.000000000","message":"I don\u0027t see that LVM or Flat override/disable the cache() handler on imagebackend.","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"936b1a3091b32a5fb2456d2f1a42d62cabb0c322","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"- Decreased load on the Glance server(s)"},{"line_number":33,"context_line":"- Decreased network utilization"},{"line_number":34,"context_line":"- Decreased time-to-boot latency for the second and subsequent"},{"line_number":35,"context_line":"  instances"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"The latter is particularly important for situations where new"},{"line_number":38,"context_line":"application rollouts must be performed within a specific time window,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_54a1ed94","line":35,"range":{"start_line":34,"start_character":2,"end_line":35,"end_character":11},"updated":"2019-10-03 18:54:01.000000000","message":"this is refering to the benifits of image cacheing in gernal right. because the new precaching feature would also reduce the latency  for the first boot too in principal.","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"aab0b9773794b93febb93abb488846595c3e1e13","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"- Decreased load on the Glance server(s)"},{"line_number":33,"context_line":"- Decreased network utilization"},{"line_number":34,"context_line":"- Decreased time-to-boot latency for the second and subsequent"},{"line_number":35,"context_line":"  instances"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"The latter is particularly important for situations where new"},{"line_number":38,"context_line":"application rollouts must be performed within a specific time window,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_7a62d3da","line":35,"range":{"start_line":34,"start_character":2,"end_line":35,"end_character":11},"in_reply_to":"3fa7e38b_54a1ed94","updated":"2019-10-03 19:09:53.000000000","message":"That\u0027s why it says \"for the second and subsequent\" yes","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"936b1a3091b32a5fb2456d2f1a42d62cabb0c322","unresolved":false,"context_lines":[{"line_number":42,"context_line":"compute nodes prior to the upgrade window opening, or before load"},{"line_number":43,"context_line":"unexpectedly spikes."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Further, in situations where compute nodes may be remotely located in"},{"line_number":46,"context_line":"environments where network bandwidth is limited (such as many edge"},{"line_number":47,"context_line":"computing environments), it may be very important to push a new base"},{"line_number":48,"context_line":"image to those nodes during times of low utilization or a maintenance"},{"line_number":49,"context_line":"window, such that the image download process does not consume a"},{"line_number":50,"context_line":"massive amount of bandwidth during normal operation."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Because Nova does not provide a way to seed this process from the"},{"line_number":53,"context_line":"outside, operators are currently forced to hack around the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_14c4d53f","line":50,"range":{"start_line":45,"start_character":0,"end_line":50,"end_character":52},"updated":"2019-10-03 18:54:01.000000000","message":"this is covered below im sure but the intent is for this to be trigger externally rather then nova orchestrating the push of image to indiviual compute nodes.\n\nim envisioning a nodepool buildinger like service or an ansible playbook that would upload a new image to a set of clouds then invoke a new api endpoint that triggers the image to be pushed to a host or set of hosts(az? host-aggrate? placment aggreagt?) as a second api request to nova.","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"aab0b9773794b93febb93abb488846595c3e1e13","unresolved":false,"context_lines":[{"line_number":42,"context_line":"compute nodes prior to the upgrade window opening, or before load"},{"line_number":43,"context_line":"unexpectedly spikes."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Further, in situations where compute nodes may be remotely located in"},{"line_number":46,"context_line":"environments where network bandwidth is limited (such as many edge"},{"line_number":47,"context_line":"computing environments), it may be very important to push a new base"},{"line_number":48,"context_line":"image to those nodes during times of low utilization or a maintenance"},{"line_number":49,"context_line":"window, such that the image download process does not consume a"},{"line_number":50,"context_line":"massive amount of bandwidth during normal operation."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Because Nova does not provide a way to seed this process from the"},{"line_number":53,"context_line":"outside, operators are currently forced to hack around the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_1aa95fde","line":50,"range":{"start_line":45,"start_character":0,"end_line":50,"end_character":52},"in_reply_to":"3fa7e38b_14c4d53f","updated":"2019-10-03 19:09:53.000000000","message":"Yes, it\u0027s API-driven only at this point, as stated below.","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"936b1a3091b32a5fb2456d2f1a42d62cabb0c322","unresolved":false,"context_lines":[{"line_number":60,"context_line":"- Modifying the Nova code themselves to provide this functionality"},{"line_number":61,"context_line":"- Using a shared storage volume for the image cache (which is known to"},{"line_number":62,"context_line":"  be broken)"},{"line_number":63,"context_line":"- Using a totally different ephemeral backend, such as ceph which"},{"line_number":64,"context_line":"  side-steps the problem entirely (but requires a substantially larger"},{"line_number":65,"context_line":"  investment)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"Use Cases"},{"line_number":68,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_14d93521","line":65,"range":{"start_line":63,"start_character":1,"end_line":65,"end_character":13},"updated":"2019-10-03 18:54:01.000000000","message":"tangental to this it would be nice to add image caching to the lvm backend via lvm snapshots at some point.\n\nthe nova lvm backend has better local write perfomace then the qcow2 backend to my knoladge but without caching/backing files it comes at the cost of more space and more bandwith so that coudl be limiting in an edge deployment","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0634689ac6c7c232bda393e055ed87b79fff5639","unresolved":false,"context_lines":[{"line_number":83,"context_line":"This functionality has been proposed and requested multiple times, but"},{"line_number":84,"context_line":"failed to gain traction amongst the team for various reasons. Thus,"},{"line_number":85,"context_line":"this spec proposes a minimally viable initial implementation which"},{"line_number":86,"context_line":"addresses the need for pre-caching, but does not provide specific"},{"line_number":87,"context_line":"visibility, reporting, scheduling, or other advanced features."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"Initially we will add a mechanism to Nova, by which a"},{"line_number":90,"context_line":"(sufficiently-privileged) user can request that a set of images be"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_43a052a6","line":87,"range":{"start_line":86,"start_character":40,"end_line":87,"end_character":33},"updated":"2019-10-03 22:18:00.000000000","message":"Ack. You get your 202 and... hope for the best. If you want to keep the caches warm, you have to repeat the operation, but you have to do some rough math to calculate what that interval should be. Etc. Not optimal, but \"minimum viable\" ✔","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"936b1a3091b32a5fb2456d2f1a42d62cabb0c322","unresolved":false,"context_lines":[{"line_number":92,"context_line":"aggregate. This activity will be delegated to a (super-)conductor"},{"line_number":93,"context_line":"worker, which will:"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"- Validate the images provided (for existence and accessibility, to"},{"line_number":96,"context_line":"  avoid asking a ton of computes to do something impossible)"},{"line_number":97,"context_line":"- Look up the list of hosts in the given aggregate"},{"line_number":98,"context_line":"- Collate the hosts by cell"},{"line_number":99,"context_line":"- Iterate through those hosts making an RPC request to start the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_b438613d","line":96,"range":{"start_line":95,"start_character":0,"end_line":96,"end_character":60},"updated":"2019-10-03 18:54:01.000000000","message":"will the conductor need to call the schduler filter to run the IsolatedHostsFilter and AggregateImagePropertiesIsolation\nfilters\nhttps://github.com/openstack/nova/blob/master/nova/scheduler/filters/aggregate_image_properties_isolation.py\nhttps://github.com/openstack/nova/blob/master/nova/scheduler/filters/isolated_hosts_filter.py\n\nto validate if the image is allow to be copied to that host.\n\nthose filters are sometimes used to lock down which host aggrates/hosts images can be pused too for geofencing reasons so we should at leat be aware that for leagel reason the image may not be allowed to go to some hosts that those filters are used today to enforce that.","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"936b1a3091b32a5fb2456d2f1a42d62cabb0c322","unresolved":false,"context_lines":[{"line_number":99,"context_line":"- Iterate through those hosts making an RPC request to start the"},{"line_number":100,"context_line":"  operation"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"If we were to fire off all those requests via RPC casts to be handled"},{"line_number":103,"context_line":"asynchronously, we would surely DDoS the image service. Throttling"},{"line_number":104,"context_line":"that appropriately could be done in many ways and is easily the"},{"line_number":105,"context_line":"subject of a dedicated subsequent spec. In this initial revision, we"},{"line_number":106,"context_line":"will introduce a configurable parallelism limit, which will cause"},{"line_number":107,"context_line":"conductor to contact that many computes in parallel to trigger their"},{"line_number":108,"context_line":"downloads, using the long-running RPC call functionality to wait for"},{"line_number":109,"context_line":"completion."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"Images will be cached on each compute using a new method on the virt"},{"line_number":112,"context_line":"driver which, when implemented, will re-use the image downloading"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_7468a920","line":109,"range":{"start_line":102,"start_character":0,"end_line":109,"end_character":11},"updated":"2019-10-03 18:54:01.000000000","message":"as a follow on for some futrue release, if we do need to invole the schduler as i suspect we might due to the isolation fitler if we also ran the weighers and kept the full list of weighed host we coudl prioritse the host that are most likely to recive new vms and precache those first.\n\nthat said im not sure that code woudl be reuseable in this way so im jsut tryign to highlight that in addtion to throttling we might have other huristic we coudl apply to most effeictly cache the images. for v1 however i think that would be over complicated.","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"aab0b9773794b93febb93abb488846595c3e1e13","unresolved":false,"context_lines":[{"line_number":99,"context_line":"- Iterate through those hosts making an RPC request to start the"},{"line_number":100,"context_line":"  operation"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"If we were to fire off all those requests via RPC casts to be handled"},{"line_number":103,"context_line":"asynchronously, we would surely DDoS the image service. Throttling"},{"line_number":104,"context_line":"that appropriately could be done in many ways and is easily the"},{"line_number":105,"context_line":"subject of a dedicated subsequent spec. In this initial revision, we"},{"line_number":106,"context_line":"will introduce a configurable parallelism limit, which will cause"},{"line_number":107,"context_line":"conductor to contact that many computes in parallel to trigger their"},{"line_number":108,"context_line":"downloads, using the long-running RPC call functionality to wait for"},{"line_number":109,"context_line":"completion."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"Images will be cached on each compute using a new method on the virt"},{"line_number":112,"context_line":"driver which, when implemented, will re-use the image downloading"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_1a82bf50","line":109,"range":{"start_line":102,"start_character":0,"end_line":109,"end_character":11},"in_reply_to":"3fa7e38b_7468a920","updated":"2019-10-03 19:09:53.000000000","message":"I don\u0027t really want to chain this activity to the scheduler, personally. As an admin I can totally see not allowing an image to be deployed by a regular user until I have pre-cached it in the appropriate places. Tying those two together would make that quite a bit harder.","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"936b1a3091b32a5fb2456d2f1a42d62cabb0c322","unresolved":false,"context_lines":[{"line_number":125,"context_line":"proposed many times in the past, and people are currently living"},{"line_number":126,"context_line":"without it and/or working around the limitation on their own."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"Another option would be to take a similar approach, but dispense with"},{"line_number":129,"context_line":"the incremental nature. We could implement a larger API, with task and"},{"line_number":130,"context_line":"progress reporting, scheduling (image X should be cached for Y hours,"},{"line_number":131,"context_line":"etc) and other features that have been part of previous requests. The"},{"line_number":132,"context_line":"reason to not do this is to avoid the risk of never completing this"},{"line_number":133,"context_line":"because of the multitude of rabbit holes that open up with a larger"},{"line_number":134,"context_line":"scope. See the references section for a partial list of previous"},{"line_number":135,"context_line":"attempts that were never completed."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"Data model impact"},{"line_number":138,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_74518962","line":135,"range":{"start_line":128,"start_character":0,"end_line":135,"end_character":34},"updated":"2019-10-03 18:54:01.000000000","message":"ya that get into a a full orchestration mode kind of like what node pool does with images and proviers which feels out of scope of nova. not that it would not be useful.","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0634689ac6c7c232bda393e055ed87b79fff5639","unresolved":false,"context_lines":[{"line_number":151,"context_line":""},{"line_number":152,"context_line":"os-aggregates"},{"line_number":153,"context_line":"~~~~~~~~~~~~~"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"A new route under the aggregate for ``images`` will be added for cache"},{"line_number":156,"context_line":"management."},{"line_number":157,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_2313d60f","line":154,"updated":"2019-10-03 22:18:00.000000000","message":"in a new microversion...","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0634689ac6c7c232bda393e055ed87b79fff5639","unresolved":false,"context_lines":[{"line_number":155,"context_line":"A new route under the aggregate for ``images`` will be added for cache"},{"line_number":156,"context_line":"management."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"* ``POST /os-aggregates/{aggregate_id}/images`` (returns 202 on success)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"  .. code-block:: json"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_a317c6ed","line":158,"range":{"start_line":158,"start_character":64,"end_line":158,"end_character":71},"updated":"2019-10-03 22:18:00.000000000","message":"(Just thinking aloud here)\n\nPresumably the 202 means \"I did all the up-front checks I could do (L95-98)\" but not the RPC calls (L99-100) because the throttling (L102-109) is controlled by the conductor.\n\nIOW 202 means \"I did what I can, and am *eventually* going to try to fire off all the RPC calls, but by the time a given one of those actually happens, that host may be down, etc etc.\"","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"936b1a3091b32a5fb2456d2f1a42d62cabb0c322","unresolved":false,"context_lines":[{"line_number":155,"context_line":"A new route under the aggregate for ``images`` will be added for cache"},{"line_number":156,"context_line":"management."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"* ``POST /os-aggregates/{aggregate_id}/images`` (returns 202 on success)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"  .. code-block:: json"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_74d669c6","line":158,"range":{"start_line":158,"start_character":9,"end_line":158,"end_character":45},"updated":"2019-10-03 18:54:01.000000000","message":"ok so this kind of anser my previous quetion this would be at the host aggreate level not AZ or host level.\n\ni kind of feel like haveing a GET and PUT endpoint to list and update would be useful.\n\nthe reason i mention this is if i precache images how/wehn will those image get evicted form the cache.\n\nif i have a GET endpoint to list the cached iamge per aggrate and a put to update it that would allow me to uncache images but i guess that could always be added later if needed.\n\ni have not really looked too closely but how does the virt driver today clean up backing files/cached iamges today.\ndoes it remvoe them when the last instance on the host that uses it is removed? im trying to scope the lifetime of a cached image to understand if it could get cleaned up by the compute node before you boot an instance that uses it or if we could end up filling up the comptues with old cached images that never get used.","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b56881765ff02f6f02097b05d6493b1babf632fa","unresolved":false,"context_lines":[{"line_number":155,"context_line":"A new route under the aggregate for ``images`` will be added for cache"},{"line_number":156,"context_line":"management."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"* ``POST /os-aggregates/{aggregate_id}/images`` (returns 202 on success)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"  .. code-block:: json"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_752ad990","line":158,"range":{"start_line":158,"start_character":64,"end_line":158,"end_character":71},"in_reply_to":"3fa7e38b_557f9daa","updated":"2019-10-04 13:46:53.000000000","message":"\u003e It means \"you gave me a legit image and referenced an actual\n \u003e aggregate\" yeah.\n\nHmm, so we\u0027re going to block the API response until the API validates that all of the images exist and have an appropriate status? If we don\u0027t have a rate limit on the number of images you can specify that could be a problem. I mean I\u0027m all for fail fast validation in the API and it\u0027s an implementation detail I guess, I don\u0027t want to block on it here.","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"aab0b9773794b93febb93abb488846595c3e1e13","unresolved":false,"context_lines":[{"line_number":155,"context_line":"A new route under the aggregate for ``images`` will be added for cache"},{"line_number":156,"context_line":"management."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"* ``POST /os-aggregates/{aggregate_id}/images`` (returns 202 on success)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"  .. code-block:: json"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_5ad6f751","line":158,"range":{"start_line":158,"start_character":9,"end_line":158,"end_character":45},"in_reply_to":"3fa7e38b_74d669c6","updated":"2019-10-03 19:09:53.000000000","message":"\u003e i kind of feel like haveing a GET and PUT endpoint to list and\n \u003e update would be useful.\n\nSpecifically excluded from the scope here, in the second Alternative above.\n\n \u003e the reason i mention this is if i precache images how/wehn will\n \u003e those image get evicted form the cache.\n\nFrom L113:\n\n Images that are cached via this mechanism will be\n subjected to the same expiry and purge rules as \n those downloaded on demand as a result of instance boots\n\n \u003e i have not really looked too closely but how does the virt driver\n \u003e today clean up backing files/cached iamges today.\n \u003e does it remvoe them when the last instance on the host that uses it\n \u003e is removed? im trying to scope the lifetime of a cached image to\n \u003e understand if it could get cleaned up by the compute node before\n \u003e you boot an instance that uses it or if we could end up filling up\n \u003e the comptues with old cached images that never get used.\n\nIt excludes base images that are referenced, and then uses lifetime (with a configurable expiry timer) on the unreferenced ones.","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a38cf12d2d9ff3b7040c539605fc26702b1ed175","unresolved":false,"context_lines":[{"line_number":155,"context_line":"A new route under the aggregate for ``images`` will be added for cache"},{"line_number":156,"context_line":"management."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"* ``POST /os-aggregates/{aggregate_id}/images`` (returns 202 on success)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"  .. code-block:: json"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_557f9daa","line":158,"range":{"start_line":158,"start_character":64,"end_line":158,"end_character":71},"in_reply_to":"3fa7e38b_a317c6ed","updated":"2019-10-04 13:45:02.000000000","message":"\u003e (Just thinking aloud here)\n \u003e \n \u003e Presumably the 202 means \"I did all the up-front checks I could do\n \u003e (L95-98)\" \n\n95-97, but yeah. The collating need not be done synchronously.\n\n \u003e but not the RPC calls (L99-100) because the throttling\n \u003e (L102-109) is controlled by the conductor.\n\nYeah.\n\n \u003e IOW 202 means \"I did what I can, and am *eventually* going to try\n \u003e to fire off all the RPC calls, but by the time a given one of those\n \u003e actually happens, that host may be down, etc etc.\"\n\nIt means \"you gave me a legit image and referenced an actual aggregate\" yeah.","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"de798916d7e88b7b2b8f7d9178ba9d0588888736","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"     {"},{"line_number":163,"context_line":"       \"cache\": ["},{"line_number":164,"context_line":"         {\"id\": \"a26887c6-c47b-4654-abb5-dfadf7d3f803\"},"},{"line_number":165,"context_line":"         {\"id\": \"4d8c3732-a248-40ed-bebc-539a6ffd25c0\"}"},{"line_number":166,"context_line":"       ]"},{"line_number":167,"context_line":"     }"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_6258fdf9","line":165,"range":{"start_line":164,"start_character":9,"end_line":165,"end_character":55},"updated":"2019-10-02 20:51:29.000000000","message":"I\u0027m not even sure that these need to be dicts but it does allow us to update these if we need to add parameters on a per-image basis later, e.g. adding a priority field per image or whatever.","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"936b1a3091b32a5fb2456d2f1a42d62cabb0c322","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"     {"},{"line_number":163,"context_line":"       \"cache\": ["},{"line_number":164,"context_line":"         {\"id\": \"a26887c6-c47b-4654-abb5-dfadf7d3f803\"},"},{"line_number":165,"context_line":"         {\"id\": \"4d8c3732-a248-40ed-bebc-539a6ffd25c0\"}"},{"line_number":166,"context_line":"       ]"},{"line_number":167,"context_line":"     }"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_74ff4934","line":165,"range":{"start_line":164,"start_character":9,"end_line":165,"end_character":55},"in_reply_to":"3fa7e38b_42cb8171","updated":"2019-10-03 18:54:01.000000000","message":"i guess this would alow you to set a priority or paralleisium limit per image if you needed to in the future. ah which i just noticed is exactly what dan was suggesting below.","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0b459b1567a4b7688addd1ca6b6d49ffd0285d42","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"     {"},{"line_number":163,"context_line":"       \"cache\": ["},{"line_number":164,"context_line":"         {\"id\": \"a26887c6-c47b-4654-abb5-dfadf7d3f803\"},"},{"line_number":165,"context_line":"         {\"id\": \"4d8c3732-a248-40ed-bebc-539a6ffd25c0\"}"},{"line_number":166,"context_line":"       ]"},{"line_number":167,"context_line":"     }"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_42cb8171","line":165,"range":{"start_line":164,"start_character":9,"end_line":165,"end_character":55},"in_reply_to":"3fa7e38b_6258fdf9","updated":"2019-10-02 20:53:26.000000000","message":"That\u0027s the only reason they\u0027re dicts, yep. Mentioned that as the reason in the paragraph below.","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"936b1a3091b32a5fb2456d2f1a42d62cabb0c322","unresolved":false,"context_lines":[{"line_number":179,"context_line":"Obviously allowing any user to initiate a wide-scale moving of data"},{"line_number":180,"context_line":"brings some inherent risk. As this proposes to be aggregate-based, the"},{"line_number":181,"context_line":"user would likely need to already have at least the ability to list"},{"line_number":182,"context_line":"host aggregates in order to provide one to the caching API. A policy"},{"line_number":183,"context_line":"knob defining which users have that ability would default to the"},{"line_number":184,"context_line":"existing ones with ability to manage host aggregates."},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"Notifications impact"},{"line_number":187,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_74ad0930","line":184,"range":{"start_line":182,"start_character":60,"end_line":184,"end_character":53},"updated":"2019-10-03 18:54:01.000000000","message":"this is admin only by defualt right although if you are using multiple keystone domain or even just keystone roles i can see haveing aggreate admins depending on your org structure.","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"aab0b9773794b93febb93abb488846595c3e1e13","unresolved":false,"context_lines":[{"line_number":179,"context_line":"Obviously allowing any user to initiate a wide-scale moving of data"},{"line_number":180,"context_line":"brings some inherent risk. As this proposes to be aggregate-based, the"},{"line_number":181,"context_line":"user would likely need to already have at least the ability to list"},{"line_number":182,"context_line":"host aggregates in order to provide one to the caching API. A policy"},{"line_number":183,"context_line":"knob defining which users have that ability would default to the"},{"line_number":184,"context_line":"existing ones with ability to manage host aggregates."},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"Notifications impact"},{"line_number":187,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_da466722","line":184,"range":{"start_line":182,"start_character":60,"end_line":184,"end_character":53},"in_reply_to":"3fa7e38b_74ad0930","updated":"2019-10-03 19:09:53.000000000","message":"Yes, which is why I say on L181 that this would be limited to people that have aggregate-listing or management permissions (which is admin by default).","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3ca4a7141b0a654fd10d63fc894e6d54d93016a6","unresolved":false,"context_lines":[{"line_number":283,"context_line":"Documentation Impact"},{"line_number":284,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"This feature needs documentation for the operators in the admin guide,"},{"line_number":287,"context_line":"and of course api-ref changes."},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_99e560df","line":286,"updated":"2019-10-03 17:21:23.000000000","message":"Let\u0027s remember to call out the service user token configuration that is likely needed when using this feature:\n\nhttps://docs.openstack.org/nova/latest/admin/support-compute.html#user-token-times-out-during-long-running-operations","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0634689ac6c7c232bda393e055ed87b79fff5639","unresolved":false,"context_lines":[{"line_number":289,"context_line":"References"},{"line_number":290,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"- Proposal from 2011 where image caching was initially added, showing that pre-cache was an intended improvement after the initial implementation: https://wiki.openstack.org/wiki/Nova-image-cache-management"},{"line_number":293,"context_line":"- Blueprint from 2013 proposing an alternate way to boot images to initial cache-seeding download: https://blueprints.launchpad.net/nova/+spec/effective-template-base-image-preparing"},{"line_number":294,"context_line":"- Blueprint from 2013 proposing more configurable image cache implementations, offering at least the ability to pin images on computes: https://blueprints.launchpad.net/nova/+spec/multiple-image-cache-handlers"},{"line_number":295,"context_line":"- Blueprint from 2014 proposing an entire new nova service for pre-caching images: https://blueprints.launchpad.net/nova/+spec/image-precacher"},{"line_number":296,"context_line":"- Blueprint from 2014 proposing a P2P-style sharing of image cache repositories between computes (amongst other things): https://blueprints.launchpad.net/nova/+spec/thunderboost"},{"line_number":297,"context_line":"- Blueprint from 2014 proposing multiple mechanisms (including P2P) for pre-caching images on computes: https://blueprints.launchpad.net/nova/+spec/compute-image-precache"},{"line_number":298,"context_line":"- Blueprint from 2014 proposing a VMware-specific way to avoid the initial cache-seeding download from glance: https://blueprints.launchpad.net/nova/+spec/datastore-image-cache-update-improvements"},{"line_number":299,"context_line":"- Blueprint from 2014 proposing adding xenapi driver image caching as a step towards pre-caching: https://blueprints.launchpad.net/nova/+spec/xenapi-image-cache-management"},{"line_number":300,"context_line":"- Blueprint from 2015 proposing a weigher to prefer computes with a specific image already cached: https://blueprints.launchpad.net/nova/+spec/node-cached-image-weigher"},{"line_number":301,"context_line":"- Blueprint from 2015 proposing a pre-caching mechanism: https://blueprints.launchpad.net/nova/+spec/proactive-nova-image-caching"},{"line_number":302,"context_line":"- Mailing list thread from 2015 starting with a request, and containing a response about some of the discussion we have had in the past about such a thing: http://lists.openstack.org/pipermail/openstack-dev/2015-August/072457.html"},{"line_number":303,"context_line":"- Presentation from 2018 by Workday in Berlin about their local modifications (against Mitaka) to do image pre-caching: https://youtu.be/hx_MdGI7fcc?t\u003d947"},{"line_number":304,"context_line":"- Bug from 2018 where someone is trying to work around the lack of pre-caching with shared cache on NFS: https://bugs.launchpad.net/nova/+bug/1804262"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"History"},{"line_number":307,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3fa7e38b_c37c4222","line":304,"range":{"start_line":292,"start_character":0,"end_line":304,"end_character":149},"updated":"2019-10-03 22:18:00.000000000","message":"holy crap","commit_id":"fbfb289679267e72903fedb97614b586ac0d79bc"}]}
